丢弃法理论
可能比权重衰减的效果更好
输入数据加入随机扰动可以防止过拟合,泛化性更好,等价于一种正则方式。
现在对噪音的添加方式从输入位置放到了层间位置。
相当于数据增强了,样本变得更多了,减少过拟合,增强泛化
上一层给下一层的输出是一个向量X,将向量中的每个元素大小进行改变,对每个元素而言,有p的概率将其变为0,否则就是将它除以1-p
也就是说,我现在加入了层间噪声,但是呢,我还想无偏差的加,那我应该怎样加呢?
那么,
每个样本变为0的概率,我设置为 p
每个样本不变的概率,我设置为 Xi / 1-p
这样设置,我可以去求期望,得到的期望和上面是一样的没有变化 E(x) = x
dropout是把数值设为零,如果某个minibatch全部dropout的话,就不会更新任何参数
别的模型都是想办法增加复杂度,MLP一出场就是各种想办法让它不要太复杂
dropout是一个正则项,正则项只在训练中使用
dropout() 可以设置dropout 多少百分比的
输入的每一个样本点都经历的是不同的神经网络结构
正则项,只在训练中使用,这样可以改变权重。如果是测试,这不需要使用正则项。
在推理的时候,我的dropout 就不会再做变0处理了
代码实现
assert(断言)
判断assert后的表达式是否为true,若为true就继续执行下面的代码,若为false,则触发异常
rand 和 randn
rand是随机生成值在0-1之间的函数;
randn是随机生成均值为0,方差为1的正态分布上的数值。
通过继承nn.Module类来实现自定义模型,需要在__init__构造函数中申明各个层的定义
为什么linear里的参数是num_hiddens1,但在使用的时候却是直接用了H1