Lesson-28
批量归一化
动机:当我们构造一个很深的网络的时候,我们定义的损失函数(输出导致的部分)和原始的数据输入离得就会非常 “远”(中间间隔了许多层、许多函数),这就会导致:离输出近的部分梯度大,远的部分梯度小(梯度消失)
这样的梯度差异会让上层的训的比较快,下层训的慢,而一般来说离数据更近的下层抽取的是数据底层的信息,这也会影响着上层。那么每次下层改变的时候,上层就白训了。
因此我们考虑:能否实现在训下层的时候,避免对上层的影响呢?
实现思想
我们固定每一层中输出的均值和方差,我们认为这样可以保证每一层输出的分布都是固定的、相似的。首先,我们固定小批量中的均值和方差(下面的\(B\)就是批量的样本数,\(x_i\)就是批量中的样本):
\[\mu_B = \frac{1}{|B|}\sum_{i \in B}x_i\]
\[\sigma_B^2 = \frac{1}{|B|}\sum_{i \in B}(x_i-\mu_B)^2+\epsilon\]
那么,我们每次实现 Batch Norm,实际上是在做:
\[X_{i+1}=\gamma\frac{X_i-\hat{\mu_B}}{\hat{\sigma_B}}+\beta\]
这里,下标\(i\)表示的是更新的步数,\(X\)表示这个 Batch 中所有的样本。
我们引入了两个可以学习的参数\(\gamma\)和\(\beta\),这是因为,可能方差为1,均值为0的分布并不是最好的,最好的可以通过学习来得到。
作用范围
- 对于全连接层来说,它作用在特征维;对于卷积层,它作用在通道维:我们可以这样理解,对于一个100通道的图片,它的每一个像素点都是一个样本,那么对于这个样本而言,每个通道就是它的特征
- 作用在每个全连接层和卷积层的输入上;作用在每个全连接层和卷积层的输出后,在激活函数之前
可以实现加速收敛速度,但是并没有改善模型的精度。
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用