新闻中心

您当前的位置: 首页 > 新闻中心 > 行业新闻

网络优化(3)

发布时间:2024-08-26 05:42:11 浏览:

网络优化(1)

网络优化(2)

在上两节中,我们介绍了网络优化的一些相关内容;

在实际深层神经网络中,我们常常会陷入局部最优以及鞍点之中,为此我们可以调整批量、步长和学习率使我们优化更快更好的收敛。

同时为了防止经过网络层之后的数据的分布改变过大,我们需要对网络的参数进行标准化,同时也要对数据进行处理。

1) 更好的尺度不变性:

当信息经过多层网络之后,他的一些性质有可能发生较大的改变,非常经典的就是他的均值和方差的改变;

如果一个神经层的输入分布发生了改变,那么其参数需要重新学习,这种现象叫作内部协变量偏移(Internal Covariate Shift),逐层归一化可以解决这个问题。

逐层归一化使得每一网络层的输入信息都是标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性。

2) 更平滑的优化地形:

另一方面,逐层归一化可以使得更新目标更加‘陡峭’,从而让每一次更新的梯度变大,避免梯度消失问题;

常用的逐层归一化方法有:批量归一化、层归一化等。

批量归一化(Batch Normalization,BN)作用于每一个批次的数据。

我们定义第?l层的净输入为z^{(l) },神经元的输出为\alpha ^{(l)}

\alpha ^{(l)}=f(z ^{(l)})=f(w\alpha ^{(l-1)}+b),?其中f(\cdot )是激活函数,wb是参数。

批量归一化使得净输入z^{(l) }的分布一致,常用一般归一化到标准正态分布。

一般使用标准化将净输入z^{(l) }的每一维都归一到标准正态分布

\widetilde{z^{(l) }}=\frac{z^{(l) }-E(z^{(l) })}{\sqrt{var(z^{(l) })+\varepsilon} }

其中E(z^{(l) })var(z^{(l) })该批次数据每一维度的期望和方差。

目前主要的优化算法是基于小批量(mini-batch)的随机梯度下降法,z^{(l) }的期望和方差通常用当前小批量样本的均值和方差近似估计。

例如:我们取批大小为4,四个训练数据分别为\alpha^{(l-1)}=\left\{\begin{matrix} x_{1}=(1,2,3)\\ x_{2}=(2,2,1) \\ x_{3}=(2,1,3) \\ x_{4}=(3,1,1) \end{matrix}\right.,激活函数为relu函数,

w=(1,1,1),b=0z^{(l)}=\left\{\begin{matrix} 6\\ 5 \\ 6 \\ 5 \end{matrix}\right.\alpha ^{(l)}=f(z ^{(l)})=\left\{\begin{matrix} 6\\ 5 \\ 6 \\ 5 \end{matrix}\right.,我们对z^{(l)}进行批标准化

E(z^{(l) })=5.5,var(z^{(l) })=0.25,标准化后\widetilde{z^{(l) }}=\left\{\begin{matrix} \frac{?{6-5.5}}{0.5}\\ \frac{?{5-5.5}}{0.5} \\ \frac{?{6-5.5}}{0.5} \\ \frac{?{5-5.5}}{0.5} \end{matrix}\right.=\left\{\begin{matrix} 1\\ -1 \\ 1 \\ -1 \end{matrix}\right.

批量归一化操作可以看作一个特殊的神经层,加在每一层非线性激活函数之前。

注意,数据经标准化后处于均值为0方差为1的高斯分布,该分布处于sigmoid函数的敏感区间,如果仍想让不饱和的非线性区域起作用,则需要对归一化后的数据进行缩放和平移。

由于我们用当前批次的均值方差代替了总体的,而批次的选择具有随机性,该方法也提高了网络的鲁棒性。

层归一化(Layer Normalization)也是基于数据的均值和方差进行归一化的方法,不同于批量归一化,层归一化是对神经元进行归一化。

我们定义第?l层的净输入为z^{(l) },神经元的输出为\alpha ^{(l)},该层有M_l个神经元;

\alpha ^{(l)}=f(z ^{(l)})=f(w\alpha ^{(l-1)}+b),?其中f(\cdot )是激活函数,wb是参数。

u^{(l)}=\frac{1}{M_l}\sum_{i=1}^{M_l}z _i^{(l)}, {\sigma ^2}^{(l)}=\frac{1}{M_l}\sum_{i=1}^{M_l}(z _i^{(l)}-u^{(l)})^2

层归一化\widehat{z^{(l) }}=\frac{z^{(l) }-u^{(l)}}{\sqrt{ {\sigma^2}^{(l)}+\varepsilon }}\bigodot \gamma +\beta

相比于批量归一化对同一批次的不同样本之间做归一化,层归一化对样本内部进行归一化,即让样本不同维度之间进行归一化。

记得岭回归和lasso我们对参数进行了约束吗?

我们不希望有参数过于大(这样常常导致过拟合),从而抢占了其他参数的工作;

于是,我们使用参数范数之和作为惩罚对参数进行约束

我们在损失之后加入惩罚项\widehat{Loss}=Loss+\lambda l_p(	heta)l_p(	heta)是参数的p范数

不同范数下对参数的约束方向不同

权重衰减(Weight Decay)是一种有效的正则化方法,在每次参数更新时,引入一个衰减系数

	heta_t\leftarrow (1-\beta)	heta_{t-1}-\alpha g_t=	heta_{t-1}-\alpha g_t-\beta	heta_{t-1},其中\alpha为学习率,\beta为衰减系数

相比于传统的梯度下降,权重衰减方法多更新了一个\beta单位的参数项,相当于损失中添加了l_2正则化项

提前停止(Early Stop)对于深度神经网络来说是一种简单有效的正则化方法。

由于深度神经网络的拟合能力非常强,因此比较容易在训练集上过拟合。

训练过程中,我们可以使用一个和训练集独立的样本集合,称为验证集(Validation Set),并用验证集上的成果对训练进行评估。当验证集上 的错误率不再下降,就停止迭代。

深层神经网络中,神经元的数量非常多

我们不希望某些神经元承担着绝大多数的工作(相当于剩下的神经元不干活了),于是我们在训练的过程中人为使得一些神经元罢工,这种方法称为丢弃法(Dropout)。

?

Copyright © 2012-2018 琳琅-琳琅娱乐餐具销售公司 版权所有 非商用版本  备案号:琼ICP备123123124号

搜索

平台注册入口