这门课主要讲解了神经网络中常用的一些调试、优化方法
训练集、开发集、测试集
训练集用来训练网络参数
开发集用来调整网络各个超参数
测试集用来评估网络性能
各部分比例分配如下:
数据量 | 训练集 | 开发集 | 测试集 |
1,000-10,000 | 60% | 20% | 20% |
70% | 30% | ||
1,000,000 | 98% | 1% | 1% |
>1,000,000 | 99.5% | 0.25% | 0.25% |
0.4% | 0.1% |
模型偏差、方差
| 偏差 | 方差 |
解释 | 模型预测能力不足(前拟合),表现为训练误差较大 | 模型泛化能力不足(过拟合),表现为测试误差较大 |
解决方法 | 1. 更深、更宽的网络 2. 训练更长时间 3. 更好的优化方法 4. 更优的网络结构 | 1. 更多的数据 2. 正则化 3. 更优的网络结构 |
(减小偏差:5.更优的超参数)
正则化
L0正则化:L0范数指向量中非0元素的个数,可以让权重矩阵W更稀疏,但是因为难于优化,一般用L1替代
L1正则化:L1范数指向量中各元素绝对值的和。
L2正则化:L2范数指向量中各元素平方和的二次方根,让权重更加平滑。
L2正则化每次更新时,w都变得更小,所以L2正则化也叫做权重衰减
Dropout正则化:一定要在激活后除以keep-prob,确保该层的期望不变。测试阶段不可用
减小方差的其他方法:
data augmentation:对于图像有 翻转、裁剪、扭曲、旋转等操作
early stopping:在验证误差开始上升时,停止训练
梯度消失和梯度爆炸
网络过深时产生的现象
解决方法:
1.权重初始化时,让权重满足方差为(relu)或
(Xavier, tanh)或
的高斯分布,其中
表示第l层的输入数据的维度
2.用relu替代sigmoid和tanh
3.clip gradients
4.类似resnet中的shortcut connection
加速训练的方法
1.对输入数据进行归一化处理,即减去平均值,除以方差
2.mini-batch梯度下降(一般取64,128,256,512,1024)和随机梯度下降
3.Momentum梯度下降:使得系统有机会跨过局部最优点
此公式为指数加权平均,偏差修正为
4.Adagrad:由于一直累加梯度的平方,每个元素的学习率一直在降低或不变。
5.RMSprop:使用指数加权平均对Adagrad进行了改进,学习率可以根据情况而不同
6.Adadelta:没有学习率参数
7.Adam:组合了Momentum和RMSprop
一般的,超参数取值为
8.学习率下降
指数衰减
or
离散的学习率下降,如epoch大于某个值时,学习率为多少
超参数调试
优先级:
,hidden units,mini-batch
layers,learning rate decay
搜索超参数时,随机取值,不要使用网格似的取值方法。注意线性取值和对数线性取值。根据训练速度,选择是小心维护一次训练,还是开启多个训练
Batch normalization
一般在激活函数之前进行batch normalization
注意,一个batch normalization有2个参数需要学习,4个参数需要保存