Batch Normalization——李宏毅机器学习笔记

本文介绍了特征缩放(Feature Scaling)的重要性及其在深度学习中的应用,特别是在批量归一化(Batch Normalization)技术方面。通过减少内部协方差平移(Internal Covariate Shift),批量归一化能加速深层网络的训练过程。

Batch Normalization

详细可见paper《Batch Normalization: Accelerating Deep Network Training by Reducing Internet Covariate Shift》,2015

Feature Scaling(特征缩放)/Feature Normalization (引言)

Make different features have the same scaling.
不管你是不是需要deep learning,你通常都会用到这个技术。

为什么要feature scaling?
现在的输入往往每一个input feature的每一个维度都会有不同的scale,但是如果他们scale差距很大时,将w1,w2和Loss拿出来作图,我们可以看出如果想要x1,x2对结果的影响一样的那么w1的scale较大、w2的scale较小。w1对结果的影响较大,w2对结果的影响较小。
如果把不同的feature做scaling,make different features have the same scaling,那么它的error surface接近于正圆。
然而椭圆形的error surface在不同的方向上gradient变化不同,在不同的方向上需要给其不同的learning rate,这会让我们的training变得不容易。如果我们做feature scaling,会让我们的error surface变得接近正圆,从而使我们的training变得容易。
所以我们进行feature scaling。
在这里插入图片描述

Feature Scaling是怎么做的?

给了R批Data,然后去计算同一纬度下的mean和standard deviation,然后对每一个数值进行计算(见下图)

在这里插入图片描述通常来说,我们做了feature scaling后,会让我们的training 变得快速。

How about Hidden Layer?

在这里插入图片描述

对每一个layer做feature scaling对Deep learning上是由很大作用的,他会让internal covariate shift(内部协方差平移)问题轻微一些。
internal covariate shift(内部协方差平移)问题
假设下图中当一个人两边的的话筒连在一起时,整个network才能得到好的processing。
下图,图一中,第二个人左手边的话筒高于右手边话筒,所以第一个人告诉第二个人要把话筒放低一些,第三个人告诉第二个人要把话筒放高一些,当两个都变时,结果会导致图二的现象。
在这里插入图片描述
在这里插入图片描述
为了解决这个问题,传统的方法是Learning rate设置的小一些,但是会导致training很慢。
然而batch normalization可以解决这个问题。

为什么batch normalization可以解决internal covariate shift?

如果我们对每一个layer都做feature scaling,那么对下一个layer来说前一个layer的statistic就会是固定的,那么他的training可能就会更容易一些。
在这里插入图片描述
但每一个layer的output,它的mean和standard divation在不断的变化中,因为在整个training的过程中network的参数都是不断变化的。所以,我们没有很简单的办法一下子知道mean和standard divation为多少。
所以我们需要一个新的技术,即batch normalization

Batch

x1,x2,x3是平行计算的
在这里插入图片描述

Batch Normalization

z——activation function input
a——activation function output
normalization 可以apply在activation function 的input/output,但现在比较多的是对activation function的input做normalization
在做batch normaliztion的时候,我们希望mean和standard divation代表了整个training set的satistic,这就要求我们的batch不能太小。
在这里插入图片描述
这里“除”是element-wise(仅对应元素操作),mean和standard divation都是vector。
在这里插入图片描述
How to do backpropogation?
此时相当于多了两层(mean和standard divation),反向传播的时候也要传这两层。
在这里插入图片描述

有时候,你并不希望你得activation function input的 mean=0, standard divation = 1,所以你可以做以下操作,同时也会跟随网络更新。
在这里插入图片描述
mean和standard divation受data影响,β和γ是network学出来的。

在Testing时怎么做?
测试集中的mean和standard divation来自哪里?
理想的方法是using the whole training dataset,但是有时数据集过大,或者没有整合整个数据集。
所以较为实用的方法是:把过去所以的参数记录下来,取平均,但往往我们回给每个值不同的weight,training接近结束的地方的weight比较大。
在这里插入图片描述

Batch normalization——Benefit

在这里插入图片描述

### 李宏毅机器学习课程中关于RNN的笔记内容概述 李宏毅机器学习课程中,RNN(循环神经网络)的相关内容涵盖了基础理论、实际应用以及解决梯度消失问题的方法。以下是相关内容的详细总结: #### 一、RNN的基本概念与结构 循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络模型[^1]。其核心特点是能够保存先前计算的状态信息,并将其作为当前输入的一部分参与计算。这种机制使得RNN可以捕捉时间序列中的依赖关系。例如,在自然语言处理任务中,RNN可以通过记住前面的词来预测下一个词。 ```python import torch import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.hidden_size = hidden_size self.rnn = nn.RNN(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): h0 = torch.zeros(1, x.size(0), self.hidden_size).to(x.device) out, _ = self.rnn(x, h0) out = self.fc(out[:, -1, :]) return out ``` #### 二、双向RNN(Bidirectional RNN) 为了同时考虑前文和后文的信息,提出了双向RNN(Bidirectional RNN)。该模型通过两个独立的隐藏层分别从前向后和从后向前处理输入序列,最终将两者的结果合并以获得更丰富的上下文信息[^3]。 #### 三、长短时记忆网络(LSTM) 尽管RNN在理论上可以捕捉长距离依赖关系,但在实践中由于梯度消失或爆炸问题,通常难以有效建模长序列。为此,提出了长短时记忆网络(Long Short-Term Memory, LSTM),它通过引入门控机制(输入门、遗忘门、输出门)解决了这一问题[^2]。 #### 四、梯度消失问题及其解决方案 RNN在训练过程中容易遇到梯度消失问题,这会导致模型无法学习到长距离依赖关系。为了解决这一问题,除了使用LSTM外,还可以通过以下方法进行改进: - 使用残差连接(Residual Connections)。 - 应用正则化技术,如Dropout。 - 初始化权重矩阵以改善梯度传播[^4]。 #### 五、RNN的应用场景 RNN广泛应用于自然语言处理领域,包括但不限于: - 机器翻译:将一种语言的句子转换为另一种语言。 - 情感分析:判断文本的情感倾向。 - 文本生成:根据给定的前缀自动生成后续内容。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小蔡呀~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值