200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 深度学习的实用层面 —— 1.4 正则化

深度学习的实用层面 —— 1.4 正则化

时间:2018-11-20 17:06:24

相关推荐

深度学习的实用层面 —— 1.4 正则化

如果你怀疑神经网络过度拟合了数据,即存在高方差问题,那么最先想到的方法可能就是正则化,另一个解决高方差的方法就是准备更多的数据,这也是非常可靠的办法,但你可能无法时时准备足够多的训练数据,或者获取更多数据的成本更高,但正则化通常有助于避免过度拟合,或减小网络误差,下面讲一下正则化的作用原理。

这里使用逻辑回归来实现这些设想,求成本函数J(w,b)J(w,b)J(w,b)的最小值,函数参数包含一些训练数据和不同数据中个体预测的损失,www和bbb是逻辑回归中的两个参数,www是一个多维度参数矢量,bbb是一个实数,在逻辑回归函数中加入正则化,只需添加参数λ\lambdaλ,也就是正则化参数,得到关于逻辑回归的正则化表达式如下所示:J(w,b)=1m∑i=1mL(y^(i),y(i))+λ2m∣∣w∣∣22J(w,b)=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}||w||_{2}^2J(w,b)=m1​i=1∑m​L(y^​(i),y(i))+2mλ​∣∣w∣∣22​∣∣w∣∣22=∑j=1nxwj2=wTw||w||_2^2=\sum_{j=1}^{n_x}w_j^2=w^Tw∣∣w∣∣22​=j=1∑nx​​wj2​=wTw此方法称为L2正则化,因为这里用了欧几里得法线,所以被称为向量参数W的L2范数。

为什么只正则化参数www,为什么不再加上参数bbb呢?可以这么做,只是习惯省略不写,因为www通常是一个高维参数矢量,已经可以表达高偏差问题,www可能含有很多参数,我们不可能拟合所有参数,而bbb只是单个数字,所以www几乎涵盖所有参数,而不是bbb。如果加了参数bbb,其实也没有什么太大影响,因为b只是众多参数中的一个,所以通常省略不计,但加上这个参数也是没影响的。

L2正则化是最常见的正则化表达式,可能听说过L1正则化,L1正则化加的不是L2范数,而是如下的表达式:J(w,b)=1m∑i=1mL(y^(i),y(i))+λ2m∣w∣J(w,b)=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}|w|J(w,b)=m1​i=1∑m​L(y^​(i),y(i))+2mλ​∣w∣这也称为参数www向量的L1范数,无论分母是mmm还是2m2m2m,它都是一个比例常量。如果用的是L1正则化,得到的www最终会是稀疏的,也就是说www向量中有很多0,有人说这样有利于压缩模型,因为集合中参数均为0,存储该模型所占用的内存更少。实际上,虽然L1正则化使模型变得稀疏,却没有降低太多存储内存,所以吴恩达先生认为这并不是L1正则化的目的,至少不是为了压缩模型。人们在训练模型时越来越倾向于使用L2正则化。

我们来看最后一个细节,KaTeX parse error: Undefined control sequence: \ambda at position 1: \̲a̲m̲b̲d̲a̲是正则化参数,我们通常使用验证集或交叉验证来配置这个参数,尝试各种各样的数据,寻找最好的参数。我们要考虑训练集之间的权衡,把参数正常值设置为较小值,这样可以避免过拟合。λ\lambdaλ是另外一个需要调整的超级参数,顺便说一下,为了方便编写代码,在python编程语言中,λ\lambdaλ是一个保留字段,编写代码时,我们删掉a,写成lambd,以免与python中的保留字段冲突,我们用lambd来代替lambda正则化参数。这就是在逻辑回归函数中实现L2正则化的过程。

如何在神经网络中实现L2正则化呢?神经网络含有一个成本函数,该函数包含从w[1],b[1]w^{[1],b^{[1]}}w[1],b[1]到w[L],b[L]w^{[L],b^{[L]}}w[L],b[L]的所有参数,字母L是神经网络所含的层数,在神经网络中加上正则化后的表达式为:J(w[1],b[1],...,w[l],b[l])=1m∑i=1mL(y^[i],y[i])+λ2m∑l=1L∣∣w[l]∣∣2J(w^{[1]},b^{[1]},...,w^{[l]},b^{[l]})=\frac{1}{m}\sum_{i=1}^mL(\hat{y}^{[i]},y^{[i]})+\frac{\lambda}{2m}\sum_{l=1}^L||w^{[l]}||^2J(w[1],b[1],...,w[l],b[l])=m1​i=1∑m​L(y^​[i],y[i])+2mλ​l=1∑L​∣∣w[l]∣∣2我们把∣∣w[l]∣∣2||w^{[l]}||^2∣∣w[l]∣∣2称为平方范数,这个范数矩阵被定义为矩阵中所有元素的平方求和,看下求和公式的具体参数。∣∣w[l]∣∣F2=∑i=1n[l−1]∑j=1n[l](wij[l])2||w^{[l]}||_F^2=\sum_{i=1}^{n^{[l-1]}}\sum_{j=1}^{n^{[l]}}(w_{ij}^{[l]})^2∣∣w[l]∣∣F2​=i=1∑n[l−1]​j=1∑n[l]​(wij[l]​)2第一个求和符号其iii值从1到n[l−1]n^{[l-1]}n[l−1],第二个求和符号其jjj值从1到n[l]n^{[l]}n[l],因为www是一个维度为(n[l−1],n[l])(n^{[l-1]},n^{[l]})(n[l−1],n[l])的多维矩阵,n[l−1]n^{[l-1]}n[l−1]表示隐藏单元的数量,n[l]n^{[l]}n[l]表示l层单元的数量,该矩阵范数被称为“佛罗贝尼乌斯范数”,用下标F标注,鉴于线性代数中一些神秘晦涩的原因,我们不称之为“矩阵L2范数∣∣⋅∣∣22||\cdot||_2^2∣∣⋅∣∣22​”,而称它为”佛罗贝尼乌斯范数”。矩阵L2范数听起来更自然,但鉴于一些大家无须知道的特殊原因,按照惯例,我们称之为“佛罗贝尼乌斯范数”,它表示一个矩阵中所有元素的平方和。

如何使用该范数实现梯度下降呢?用bp计算出dwdwdw的值,bp会给出损失函数JJJ对www的偏导数,实际上是dw[l]=∂J∂w[l]=∂J∂w[l]+λmw[l]dw^{[l]}=\frac{\partial J}{\partial w^{[l]}}=\frac{\partial J}{\partial w^{[l]}}+\frac{\lambda}{m}w^{[l]}dw[l]=∂w[l]∂J​=∂w[l]∂J​+mλ​w[l]参数的更新公式表示为w[l]=w[l]−αdw[l]w^{[l]}=w^{[l]}-\alpha dw^{[l]}w[l]=w[l]−αdw[l]使用新定义的dw[l]dw^{[l]}dw[l],该定义含有代价函数导数和相关参数,以及最后添加的额外正则项。

这也是L2正则化有时被称为“权重衰减”的原因,我们把加入正则项的损失函数的求导结果放进参数www的更新方程中,w[l]w^{[l]}w[l]的更新公式表示为:w[l]=w[l]−αλmw[l]−α∂J∂w[l]w^{[l]}=w^{[l]}-\frac{\alpha \lambda}{m}w^{[l]}-\alpha \frac{\partial J}{\partial w^{[l]}}w[l]=w[l]−mαλ​w[l]−α∂w[l]∂J​。该正则项说明,不管w[l]w^{[l]}w[l]是什么我们都试图让它变得更小,实际上相当于我们给矩阵www乘以了(1−αλm)(1-\frac{\alpha \lambda}{m})(1−mαλ​)倍的权重。矩阵www减去αλm\frac{\alpha \lambda}{m}mαλ​倍的它,也就是用这个系数乘于矩阵www,该系数小于1,。因此L2范数正则化也被称为“权重衰减”,因为它就像一般的梯度下降。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。