之前一直都是看别人的公式,不理解正则化为什么会work,看了吴恩达老师的课后,感觉明白了许多,在这里整理一下笔记
我感觉“正则化”这个词,在中文的语义看来有点奇怪,第一次看它感觉挺晦涩的
但是当看到它的英文是Regularization时,我感觉就好理解许多了
高方差(high variance)与过拟合(overfitting)
高方差就是指在训练集上表现良好(low train set error),但是在验证集上表现差很多(high dev set error)
就像下面的第三幅图,是特别复杂,歪歪扭扭的曲线,然而第一幅图十分简单,就一条直线,这会是高偏差的欠拟合状态
所以要贯彻好中庸之道,二者调和后的中间状态表现很好
也就是说,我们要做的调整,就是把第三幅图的状态往第一幅图靠拢
正则化:
这是一个有3个隐含层的神经网络,它可以拟合出十分复杂的曲线,就好比上一张图中那幅过拟合的曲线
刚刚说了,正则化要做的就是把这种“错误”的复杂状态简化,把曲线往直线靠拢
因此考虑“简单”情况的极端,就是把大部分神经元都去除,最终神经网络变成了单纯的线性组合,曲线变成了直线
现在我们需要的就是两个极端的中间状态,因此过拟合的工作就类似于让一些神经元失去作用
例子:
以L2 norm和logistic regression举例子
原来的成本函数:
反向传播的公式:
加了正则化之后的成本函数:
反向传播的公式:
整理后得到:
而在前向转播中,公式为
可以看出:随着 的增大, 会减小,因此 也会减小
其中g为激活函数,现在假设激活函数为tanh函数,如图可以看出,接近x轴的部分几乎可以看成线性
我们知道,神经网络之所以可以拟合各种复杂的函数,是要靠非线性的激活函数
若没有非线性的激活函数,不论神经网络的层数再多,也只是输入层的简单线性组合而已
此时,可以得出由于 很小,故大部分落在激活函数接近线性的区域
故在过拟合的情况下,通过正则化的调整,让激活函数更多地体现一些线性,可以把过拟合的情况改善
这就是正则化在做的事情
可能理解有不全面或错误的地方,日后发现便来订正