批量归一化(BatchNormalization)
- 归一化位于卷积层和激活函数之间。
-
为什么要使用批量归一化?
使用浅层模型时,随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。对深层神经网络来说,随着网络训练的进行,前一层参数的调整使得后一层输入数据的分布发生变化,各层在训练的过程中就需要不断的改变以适应学习这种新的数据分布。所以即使输入数据已做标准化,训练中模型参数的更新依然很容易导致后面层输入数据分布的变化,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。最终造成靠近输出层输出的剧烈变化。这种计算数值的不稳定性通常令我们难以训练出有效的深度模型。如果训练过程中,训练数据的分布一直在发生变化,那么将不仅会增大训练的复杂度,影响网络的训练速度而且增加了过拟合的风险。
在模型训练时,在应用激活函数之前,先对一个层的输出进行归一化,将所有批数据强制在统一的数据分布下,然后再将其输入到下一层,使整个神经网络在各层的中间输出的数值更稳定。从而使深层神经网络更容易收敛而且降低模型过拟合的风险。
为什么归一化后还要放缩和平移
如果激活函数在方差为1的数据上,没有表现最好的效果,比如Sigmoid激活函数。这个函数在-1~1之间的梯度变化不大。假如某一层学习到特征数据本身就分布在S型激活函数的两侧,把它归一化处理、标准差也限制在了1,把数据变换成分布于s函数的中间部分,就没有达到非线性变换的目的,换言之,减均值除方差操作后可能会削弱网络的性能。
因此,必须进行一些转换才能将分布从0移开。使用缩放因子γ和移位因子β来执行此操作。
随着训练的进行,这些γ和β也通过反向传播学习以提高准确性。这就要求为每一层学习2个额外的参数来提高训练速度。
这个最终转换因此完成了批归一算法的定义。缩放和移位是算法比较关键,因为它提供了更多的灵活性。假设如果我们决定不使用BatchNorm,我们可以设置γ=σ和β= mean,从而返回原始值。
PS:γ和β也是待学习的参数,在网络学习的过程中会被更新
凸优化
- 优化方法目标:训练集损失函数值
- 深度学习目标:测试集损失函数值(泛化性)
优化在深度学习中的挑战
- 局部最小值
- 鞍点
- 梯度消失
两个凸函数的交集是凸函数但是并集不一定是凸函数
凸函数性质
- 无局部极小值
- 与凸集的关系
3.二阶条件
- 有限制条件的优化问题可以用什么方法解决:_______。
拉格朗日乘子法
添加惩罚项
投影法
梯度下降
梯度下降法简单来说就是一种寻找目标函数最小化的方法。
梯度下降的作用是找到函数的最小值所对应的自变量的值,即为最低点对应的x的值。
证明:沿梯度反方向移动自变量可以减小函数值
随机梯度下降:时间复杂度O(1)。