这篇文章继续写一下Regularization,写一下L1 regularization
公式如下:
跟L2 regularization相似,但不太一样,是对权重w的绝对值求和
求偏导:
sgn()跟w的符号有关,w大于0取1,w小于零取-1
权重更新法则:
比之前的L2更新法则:
都是减小权重,方法不同:
L1减少一个常量,L2减少权重的一个固定比例
会带来以下影响:
如果权重本身很大,L1减少的比L2少很多
如果权重本身很小,L1减少的更多
L1倾向于集中在少部分重要的连接上
当w=0,偏导数
无意义,因为|w|的形状在w=0时是一个V字形尖锐的拐点
所以,当w=0时,我们就使用un-regularization表达式,agn(0)=0,本来regularization的目的就是减小权重,当权重=0时,无需减少
下面再来介绍一个新的概念Dropout
和L1,L2 regularization非常不同,不是针对cost函数增加一项,而是对神经网络本身的结构做改变。
假设我们有一个神经网络
通常,我们根据输入的x,正向更新神经网络,算出输出值,然后反向根据backpropagation来更新权重和偏向
但是,dropout不同,开始的时候,删除掉隐藏层随机选取的一半神经元:
然后,在这个更改过的神经网络上正向和反向更新,利用一个mini-batch
然后,恢复之前删除过的神经元,再重新随机选择一半神经元删除,正向,反向,更新w,b,重复以上过程,最后,学习出来的神经网络中的每个神经元都是在只有一半神经元的基础上学习的,当所有神经元被恢复后,为了补偿,我们把隐藏层的所有权重减半
那么,为什么dropout可以减少overfitting?
假设我们对于同一组训练数据,利用不同的神经网络来训练,训练完成之后,求输出的平均值,这样可以减少overfitting。
Dropout和这个是同样的道理,每次扔到一半隐藏层的神经元,相当于我们在不同的神经网络上训练了,减少了神经元的依赖性,也就是每个神经元不能依赖于某个或某几个其他神经元,迫使神经网络学习和其他神经元联合起来更加健硕的特征
介绍dropout的文章,对于以前MNIST,最高的accuracy是98.4%,利用dropout,提高到98.7%
再来介绍另外一种方法,人工扩大训练集:
之前看到了只有1000张图和50000张图片训练的区别,比较了一下随着训练集的增大,accuracy的变化
参数:隐藏层:30个神经元,mini-batch size:10,学习率:0.5
λ=5.0(对于整个训练集,当训练集减少时要减少),当损失函数为cross-entropy cost 时训练30个epochs
我们可以看到,当训练集扩大的时候,对应的accuray也变大了不少,同时对减小overfitting也有很好的效果,可以想象,如果大规模增加训练集,可以达到更高的准确率
有label的训练集通常不好获得,一种方法,人工产生更多的训练数据:
以上两种图片旋转了15°,旋转不同角度,可以增加很多训练数据
比如:MNIST,一个隐藏层有800个神经元的网络,accuracy为98.4%,当人工增加数据后,accuracy可以达到98.9%,发明人工改变图像的模拟方法进一步增大训练集,准确率达到了99.3%
增大时,要模拟现实世界中这种数据可能出现的变化,来概括更广
对比神经网络和SVM:
比较两个算法的时候,是否使用同样的训练集很重要,因为训练集的增大可以提高accuracy