目录
一 更多优化算法
回顾
1.AdaGrad算法
2.RMSProp
3.Adam
4.自定义优化算法
二.激活函数
1.Sigmoid
2.Tanh
3.ReLu
4.Leaky-ReLU
5.ELU
6.maxout
三.网络初始化
四 批归一化
五 数据增强
六 其他调参技巧
一 更多优化算法
回顾
随机梯度下降
- 局部极值
- 鞍点问题
动量梯度下降
问题
- 受学习率影响很大(如果学习率设置过大,收敛很慢)
- 每一个维度得学习率一样(a是针对全局设置得)
1.AdaGrad算法
为了解决AdaGrad分母越变越大太大导致学习率没有更新的问题,引入了RMSProp
2.RMSProp
结合上述两个算法引入了Adam算法
3.Adam
或者用自定义的优化算法
4.自定义优化算法
问题:如何选择优化算法?
答:
- 对于稀疏数据,使用学习率自适应方法(AdaGrid,RMSProp,Adam)
- SGD通常训练时间更长,最终效果更好,但需要好的初始化和learning rate(手工设置)
- 需要训练较深较复杂的网络且需要快速收敛时,推荐使用Adam
- AdaGrad,RMSProp,Adam是比较相近的算法,在相似情况下,表现差不多
二.激活函数
下面分别说明几种激活函数的性质
1.Sigmoid
2.Tanh
3.ReLu
4.Leaky-ReLU
5.ELU
6.maxout
问:使用这些激活函数时的技巧
答:
- Relu 要小心设置learning rate
- 不要使用sigmoid
- 使用Leaky Relu, maxout ELU
- 可以试试tanh, 但是计算量较大,估计也难以适用
三.网络初始化
1.全不设置成固定的数,比如全部设置为0(不适用于多层网络)
2.如何分析初始化结果好不好?
查看初始化后各层的激活值分布(分布均匀则比较好,不均匀则不好)
3.均值为0,方差为0.02的正太分布初始化-tanh
4.哪种初始化方法最好?
从输入的通道数和输出通道数中随机选择一个数,然后除以输入通道数的开方。
四 批归一化
为了让每一层激活之后的分布比较统一,在每一层得到激活值之后做归一化处理,控制分布在均值为0 ,方差为1 的分布上
批归一化存在的问题:当样本数量特别大的时候,在一批数据上做归一化之后的分布并不能反映总体上的分布。
为了解决这一问题,引入了另外参数(gamma-方差,byte均值)来逆归一化
五 数据增强
六 其他调参技巧
(1)获取更多的数据
(2)先用一个简单的网络模型,然后逐步给神经网络添加层次,这样可以避免出错
(3)紧跟最新进展,使用新方法
(4)增大训练的迭代次数(跟其他手段并行使用)
(5)尝试增加正则化项(避免过拟合)
(6)使用更多的GPU来加速训练
(7)使用可视化工具来检查中间状态
- 损失函数的值
- 梯度分布
- 准确率
- 学习率
(8)可以在标准数据集上训练,用于确认自己的网络是否错误
(9)可以先在小数据集上测试一下,达到过拟合的效果,可以验证自己的网络没问题。
(10)注意数据集要平衡分布(比如分类中正负类数量要均匀)
(11)使用预调整好的稳定模型结构
(12)Fine-tuning 基于经典网络的参数初始化参数,然后再新的网络结构上微调