1 Matching Annotations
- Sep 2018
-
192.168.199.102:5000 192.168.199.102:5000
-
简单记忆训练 DNN 的技巧:
对于坏习惯, 早弃则自活
前三个针对训练误差小测试误差大的情况;
后两个针对训练误差就很大的情况;
tips for good training but bad testing
- (早)Early Stopping
- (弃)Dropout
- (则)Regularization
tips for bad training
- (自)Adaptive learning rate(optimizer)
- (活)New activation function
dropout
- 训练的时候
每一次更新参数之前(我们一般一个 mini-batch 更新一次参数,也就是每个 mini-batch 都对神经元做一次随机丢弃),对每一个神经元(包括input layer,这点要注意)做丢弃:
1 mini-batch -> 1 dorpout -> 1 thin-network
每一个神经元都有 p% 几率被丢弃,所有与被丢弃的神经元相连的权重 w 也都会被丢弃,这样整个网络的结构就变了,深度不变宽度变窄。
dropout 毫无疑问会让训练结果变差,因为整体模型复杂度降低了。
- 测试的时候
需要注意两点:
- 测试的时候不对神经元做丢弃
- 测试的时候每个权重都乘以 (1-p%): w * (1-p%)
为什么 dropout 测试机权重需要乘以 (1-p%)
假设 dropout rate 设为 50%, 在训练的时候我们得到的某个神经元的输出 \(z\) ,是丢弃了输入层一半的神经元及权重得到的:
\(z=f([x1,x2,x3,x4])\) --> \(z=f([x1,x4])\)
在测试的时候这个由于不做任何丢弃:
\(z=f([x1,x2,x3,x4])\))
该神经元的输出大约会是原来的两倍:
\(f(\vec{x}) = w * x + b\)
\(f([x1,x2,x3,x4]) \approx 2 * f([x1,x4])\)
\(w_{new} = 0.5 * w_{old}\) ,这样:
\(f([x1,x2,x3,x4]) \approx f([x1,x4])\)
Tags
Annotators
URL
-