正则化的作用
正则化是为了防止过拟合采取的策略,主要的正则化方法有L1、L2、dropout、dropconnect
L2正则化
具体的公式如下:
也就是在原来的代价函数上加上参数的平方和的均值,而λ是超参数。对于L2正则化,我们可以理解为在准确率和参数约束中取了一个折中的方案,而L2正则化防止过拟合可以从求导中看出来,C对于w和b的导数如下所示:
那么对于w和b的更新方式就如下所示:
正则化是对于b没有影响的,而对于w我们在使用梯度更新之前先对于w进行了衰减,之后根据梯度的方向来对于参数进行更新因为在每一次更新的衰减,所以限制了w的无止尽扩张。更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。
对于mini-batch更新,正则化有所不同:
m是一个mini-batch中样本的个数。
L1正则化
主要方法是:
这种正则化方式的导数为:
那么权重w的更新规则为:
比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
dropout
讲起来很简单,就是随机失活,让某些神经元的输出为0,这样BP后也是0,相当于只使用完整网络的一部分来训练。在每一次迭代中选择不同的神经元来失活,也就是吗,每一次迭代都得到网络的一部分,最后将这数个更加泛化的网络整合进行预测,可以有效防止过拟合。
dropconnect
dropout是使神经元失活,输出为0,而dropconnect是使参数w失活,置为0,比dropout更加彻底,但是效果并没有显著提高,同时计算量更大。所以没有广泛使用