Dropout抑制过拟合原理
简单来说:即随机丢弃一些隐藏神经元,然后就会加强未丢弃神经元的训练。(类似随机森林,用一部分的特征来建立一个决策树,又用另一部分特征来建立另一个决策树)
详细原理
为什么Dropout可以解决过拟合?
(1)取平均的作用:在运用Dropout我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以才用‘5个结果取均值’ 或者’多数取胜的投票策略’去决定最终结果。
(2)减少神经元之间复杂的共适应关系:因为Dropout程序导致两个神经元不一定每次都在一个Dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅再其他特定特征下才有效果的情况。
(3)Dropout类似于性别再生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的组织过拟合,即避免环境改变时物种可能面临的灭绝。
正则化
基本思想:在训练过程中要抑制参数增长规模,不能让参数的变化范围无限增大。即loss也会惩罚权重的规模,使在训练中权重和参数不会无限制的增大。
L1正则: loss = s* abs(w1+w2+…+wn) + mes %loss= 权值(人为设置)权重和的绝对值+真正的loss
L2正则: loss= s(w1w1 +W2W2+…))+mes %权重的平方
一般情况下选择L2正则
如何在程序中实现L2正则
kernel_initializer=‘glorot_uniform’, #Dense层初始化权重
bias_initializer=‘zeros’, #Dense层初始化偏置
kernel_regularizer=None, #默认Dense层设置正则
直接引入keras 的正则库
from keras import regularizers
kernel_regularizer=regularizers.l2(0.005) #括号里参数为惩罚力度