文章目录
- 偏置项.
- Batch-Normalize.
- Nomalize Input.
- BN.
- Why it works.
- 测试数据.
- 指数加权平均.
偏置项.
- 神经网络中,进行运算后,通常要对结果加上一个偏置项
,记输入数据为
,参数为
,运算为
,偏置项为
,则上述过程表述为:
- 后续经过激活函数
,通常为
等非线性函数,得到本层输出数据
,该过程表述如下:
- 关于偏置项
偏置实际上是对神经元激活状态的控制,当偏置存在时,
较小时
做模式识别,本质是要提取某种全局信息,所以提取的过程就是要抛弃局部信息保留整体信息,增加偏置这个参数,就是调整丢弃的局部信息的比例或者能量,没有这个参数,对信息的抛弃率的调整的灵活性就欠缺。
Batch-Normalize.
- 在介绍
之前,需要简单提及归一化输入,即将训练数据
变换为均值为
,方差为
的数据。具体做法是对训练集分别计算均值向量与方差:
Nomalize Input.
- 关于归一化输入操作所带来的益处,
的阐述是较为清晰直观的。以二维情况为例,易于作图和理解。当输入数据的不同特征取值范围区别较大,如
,会导致它们对应参数
的取值范围区别较大,从而优化算法在寻找损失函数最小值时,类似于在下图中一个狭长的山谷中搜索:
- 绘制其等高线图如下所示:
在这样一个参数空间内搜索时,优化算法需要使用较小的学习率,否则极易在接近最小值点时越过它。但整个参数搜索过程依旧是振荡的,可以看到在 - 经过归一化操作后,数据不同特征的取值范围大致接近,从而代价函数的参数空间类似与下图中这样各方向大致相同的空间:
观测上图所示的等高线图,无论优化算法起始点如何,相较于狭长等高线,都能够更快、更有效地找到最优值点。高维空间中的情况可以从上述二维平面中类推,代价函数的参数空间倾向于在各个维度上尺度大致相等,更容易运行优化算法。 - 最后需要提醒的一点是,对训练集计算出均值、方差并进行归一化操作后,在测试集上运行算法时,应使用训练集计算出的均值、方差数值,而非在测试集上重新计算。这样确保训练集、测试集经历了相同的归一化过程。
BN.
- 下面的内容关于本篇主题
,该算法由
和
提出,其操作与归一化输入大体相同,但归一化的对象是神经网络中间层的输出。
使得参数搜索更加容易,并且网络对于超参数的选择更加稳定。
- 在实践中,我们通常对未激活输出
进行
,假设
是神经网络某一隐层的未激活输出集合,
的具体操作如下:
中
是很小的常数,用于避免
时方差无定义,此时
是具有零均值、单位方差的隐层输出数据。但对于下一隐层而言,接收到的输入数据来自于不同的分布会更有意义,因此在上述归一化过程后,我们计算:
- 这里
具有均值
,方差
,并且注意
均是模型中的参数,是可以为优化算法所学习的,其遵循的更新规则和一般神经网络中的
完全一致。接下来使用
替代原本的未激活输入,进入激活函数并向前传播。
- 如果加入了
操作,那么
中的偏置项就不发挥作用了,因为无论
取何值,在标准归一化操作时都会被减去,而偏置功能转由参数
- 对于
存在的意义,可以通过下图中
函数值来获得一个直观理解:
如果所有的未激活输出都服从零均值、单位方差,那么意味着激活函数接收到的数据总是聚集在
Why it works.
能够加速网络训练,是由于它针对隐层输出进行了类似归一化输入的操作,使得优化算法得到一定程度的提速;另外,
还增强了网络的稳定性,具体地说,网络中深层参数会更加
,当浅层参数发生变化时,深层参数不会表现出过大的波动。
- 我们考虑网络的第
层,其未激活输出记为
,参数记为
第
层的未激活输出为
,它由下式计算得到:
如果应用
算法,那么会对
进行处理得到
,
拥有固定的均值
和方差
- 这意味着即使在网络参数更新后,即使影响
值的前层参数
发生变化,导致
的分布发生变化,但经过
后的未激活输出
限制了这种数据分布变化的剧烈程度,因为
必须具有均值
和 方差
- 限制数据分布变化程度的意义在于:如果我们根据数据
学习到了某个映射规则
,而此时输入数据
的分布发生变化,那么映射规则
则需要重新学习,该问题称为
而
- 一种直观的理解是,
- 另外,
带来的意外之喜是,由于通常和
算法配合使用,因此每轮训练的均值和方差都是只在一个
- 减去均值,除以标准差带来的噪音意味着
和
测试数据.
- 前面提到
中
在训练时是针对每个
- 常见的解决方案是,对训练阶段计算得到的均值、方差进行指数加权平均得到
作为测试阶段使用的
- 指数加权平均
针对一组数据
,输出一组数据
,其计算规则如下所示:
- 其中
是权重参数,上述计算规则得出的
近似等于
之前
个数据的均值(包括
),常用
,此时均值窗口大小为
指数加权平均.
- 观察
不难发现,指数加权平均实际等价于对过去的数据乘以一个按照指数
衰减的权重后再求平均。
中
可以展开如下:
数学上通常以
为临界值,
中所有小于
的权重忽略不记,得到:
- 当
时
与
极为接近,二者极限均为
,作图如下所示:
- 所以近似认为
表示过去
个数值的指数加权均值,这一点从
中乘积第一项
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1e-5,1,1e3)
y1 = 1-x
y2 = np.log(1/x)
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x,y1,'ro',label = 'y=1-x')
plt.plot(x,y2,'bo',label = 'y=ln(1/x)')