新闻中心
发布时间:2024-08-26 05:42:11 浏览: 次
在上两节中,我们介绍了网络优化的一些相关内容;
在实际深层神经网络中,我们常常会陷入局部最优以及鞍点之中,为此我们可以调整批量、步长和学习率使我们优化更快更好的收敛。
同时为了防止经过网络层之后的数据的分布改变过大,我们需要对网络的参数进行标准化,同时也要对数据进行处理。
1) 更好的尺度不变性:
当信息经过多层网络之后,他的一些性质有可能发生较大的改变,非常经典的就是他的均值和方差的改变;
如果一个神经层的输入分布发生了改变,那么其参数需要重新学习,这种现象叫作内部协变量偏移(Internal Covariate Shift),逐层归一化可以解决这个问题。
逐层归一化使得每一网络层的输入信息都是标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性。
2) 更平滑的优化地形:
另一方面,逐层归一化可以使得更新目标更加‘陡峭’,从而让每一次更新的梯度变大,避免梯度消失问题;
常用的逐层归一化方法有:批量归一化、层归一化等。
批量归一化(Batch Normalization,BN)作用于每一个批次的数据。
我们定义第?层的净输入为,神经元的输出为,
,?其中是激活函数,和是参数。
批量归一化使得净输入的分布一致,常用一般归一化到标准正态分布。
一般使用标准化将净输入的每一维都归一到标准正态分布
其中和该批次数据每一维度的期望和方差。
目前主要的优化算法是基于小批量(mini-batch)的随机梯度下降法,的期望和方差通常用当前小批量样本的均值和方差近似估计。
例如:我们取批大小为4,四个训练数据分别为,激活函数为函数,
,,,我们对进行批标准化
,标准化后
批量归一化操作可以看作一个特殊的神经层,加在每一层非线性激活函数之前。
注意,数据经标准化后处于均值为0方差为1的高斯分布,该分布处于函数的敏感区间,如果仍想让不饱和的非线性区域起作用,则需要对归一化后的数据进行缩放和平移。
由于我们用当前批次的均值方差代替了总体的,而批次的选择具有随机性,该方法也提高了网络的鲁棒性。
层归一化(Layer Normalization)也是基于数据的均值和方差进行归一化的方法,不同于批量归一化,层归一化是对神经元进行归一化。
我们定义第?层的净输入为,神经元的输出为,该层有个神经元;
,?其中是激活函数,和是参数。
层归一化
相比于批量归一化对同一批次的不同样本之间做归一化,层归一化对样本内部进行归一化,即让样本不同维度之间进行归一化。
记得岭回归和我们对参数进行了约束吗?
我们不希望有参数过于大(这样常常导致过拟合),从而抢占了其他参数的工作;
于是,我们使用参数范数之和作为惩罚对参数进行约束
我们在损失之后加入惩罚项,是参数的范数
不同范数下对参数的约束方向不同
权重衰减(Weight Decay)是一种有效的正则化方法,在每次参数更新时,引入一个衰减系数
,其中为学习率,为衰减系数
相比于传统的梯度下降,权重衰减方法多更新了一个单位的参数项,相当于损失中添加了正则化项
提前停止(Early Stop)对于深度神经网络来说是一种简单有效的正则化方法。
由于深度神经网络的拟合能力非常强,因此比较容易在训练集上过拟合。
训练过程中,我们可以使用一个和训练集独立的样本集合,称为验证集(Validation Set),并用验证集上的成果对训练进行评估。当验证集上 的错误率不再下降,就停止迭代。
深层神经网络中,神经元的数量非常多
我们不希望某些神经元承担着绝大多数的工作(相当于剩下的神经元不干活了),于是我们在训练的过程中人为使得一些神经元罢工,这种方法称为丢弃法(Dropout)。
?