正则化(Regularization)分析 [Andrew Ng 深度学习笔记]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Originum/article/details/90142946

之前一直都是看别人的公式,不理解正则化为什么会work,看了吴恩达老师的课后,感觉明白了许多,在这里整理一下笔记

我感觉“正则化”这个词,在中文的语义看来有点奇怪,第一次看它感觉挺晦涩的

但是当看到它的英文是Regularization时,我感觉就好理解许多了

高方差(high variance)与过拟合(overfitting)

高方差就是指在训练集上表现良好(low train set error),但是在验证集上表现差很多(high dev set error)

就像下面的第三幅图,是特别复杂,歪歪扭扭的曲线,然而第一幅图十分简单,就一条直线,这会是高偏差的欠拟合状态

所以要贯彻好中庸之道,二者调和后的中间状态表现很好

也就是说,我们要做的调整,就是把第三幅图的状态往第一幅图靠拢

正则化:

这是一个有3个隐含层的神经网络,它可以拟合出十分复杂的曲线,就好比上一张图中那幅过拟合的曲线

刚刚说了,正则化要做的就是把这种“错误”的复杂状态简化,把曲线往直线靠拢

因此考虑“简单”情况的极端,就是把大部分神经元都去除,最终神经网络变成了单纯的线性组合,曲线变成了直线

现在我们需要的就是两个极端的中间状态,因此过拟合的工作就类似于让一些神经元失去作用

例子:

以L2 norm和logistic regression举例子

原来的成本函数:

J(w, b) = \frac{1}{m}\sum_{i = 1}^{m}L(\hat{y}^{(i)}, y^{(i)})

反向传播的公式:

dw^{[\, l\, ]} = (from\, \, \, backpropagation)

w^{[\, l\, ]}=w^{[\, l\, ]} - \alpha dw^{[\, l\, ]}

加了正则化之后的成本函数:

J(w, b) = \frac{1}{m}\sum_{i = 1}^{m}L(\hat{y}^{(i)}, y^{(i)})+\frac{\lambda }{2m}\left \| w \right \|_{2}^{2}

反向传播的公式:

dw^{[\, l\, ]} = (from\, \, \, backpropagation)+\frac{\lambda }{m}w^{[\, l\, ]}

w^{[\, l\, ]}=w^{[\, l\, ]} - \alpha (dw^{[\, l\, ]}+\frac{\lambda }{m}w^{[\, l\, ]})

整理后得到:

w^{[\, l\, ]}=(1-\frac{\alpha \lambda }{m})w^{[\, l\, ]}-\alpha (from\, \, \, backpropagation)

而在前向转播中,公式为

z^{[\, l\, ]} = w^{[\, l\, ]} a^{[\, l-1\, ]} + b^{[\, l\, ]}

a^{[\, l\, ]} = g(z^{[\, l\, ]} )

可以看出:随着 \lambda 的增大, w^{[\, l\, ]} 会减小,因此 z^{[\, l\, ]} 也会减小

其中g为激活函数,现在假设激活函数为tanh函数,如图可以看出,接近x轴的部分几乎可以看成线性

我们知道,神经网络之所以可以拟合各种复杂的函数,是要靠非线性的激活函数

若没有非线性的激活函数,不论神经网络的层数再多,也只是输入层的简单线性组合而已

此时,可以得出由于 z^{[\, l\, ]} 很小,故大部分落在激活函数接近线性的区域

故在过拟合的情况下,通过正则化的调整,让激活函数更多地体现一些线性,可以把过拟合的情况改善

这就是正则化在做的事情

可能理解有不全面或错误的地方,日后发现便来订正

展开阅读全文

没有更多推荐了,返回首页