目录

一 更多优化算法

回顾

1.AdaGrad算法

2.RMSProp

3.Adam

4.自定义优化算法

二.激活函数

1.Sigmoid

2.Tanh

3.ReLu

4.Leaky-ReLU

5.ELU

6.maxout

三.网络初始化

四 批归一化

五 数据增强

六 其他调参技巧



一 更多优化算法

回顾

随机梯度下降

  • 局部极值
  • 鞍点问题

动量梯度下降

问题

  • 受学习率影响很大(如果学习率设置过大,收敛很慢)
  • 每一个维度得学习率一样(a是针对全局设置得)

1.AdaGrad算法

KNN调参 all_a_s cnn调参技巧_KNN调参 all_a_s

KNN调参 all_a_s cnn调参技巧_KNN调参 all_a_s_02

KNN调参 all_a_s cnn调参技巧_cnn_03

为了解决AdaGrad分母越变越大太大导致学习率没有更新的问题,引入了RMSProp

2.RMSProp

KNN调参 all_a_s cnn调参技巧_初始化_04

结合上述两个算法引入了Adam算法

3.Adam

KNN调参 all_a_s cnn调参技巧_深度学习_05

KNN调参 all_a_s cnn调参技巧_KNN调参 all_a_s_06

或者用自定义的优化算法

4.自定义优化算法

KNN调参 all_a_s cnn调参技巧_深度学习_07

问题:如何选择优化算法?

答:

  • 对于稀疏数据,使用学习率自适应方法(AdaGrid,RMSProp,Adam)
  • SGD通常训练时间更长,最终效果更好,但需要好的初始化和learning rate(手工设置)
  • 需要训练较深较复杂的网络且需要快速收敛时,推荐使用Adam
  • AdaGrad,RMSProp,Adam是比较相近的算法,在相似情况下,表现差不多

二.激活函数

KNN调参 all_a_s cnn调参技巧_机器学习_08

下面分别说明几种激活函数的性质

1.Sigmoid

KNN调参 all_a_s cnn调参技巧_cnn_09

2.Tanh

KNN调参 all_a_s cnn调参技巧_深度学习_10

3.ReLu

KNN调参 all_a_s cnn调参技巧_机器学习_11

4.Leaky-ReLU

KNN调参 all_a_s cnn调参技巧_初始化_12

5.ELU

KNN调参 all_a_s cnn调参技巧_cnn_13

6.maxout

KNN调参 all_a_s cnn调参技巧_cnn_14

问:使用这些激活函数时的技巧

答:

  • Relu 要小心设置learning rate
  • 不要使用sigmoid
  • 使用Leaky Relu, maxout ELU
  • 可以试试tanh, 但是计算量较大,估计也难以适用

三.网络初始化

1.全不设置成固定的数,比如全部设置为0(不适用于多层网络)

KNN调参 all_a_s cnn调参技巧_初始化_15

2.如何分析初始化结果好不好?

查看初始化后各层的激活值分布(分布均匀则比较好,不均匀则不好)

3.均值为0,方差为0.02的正太分布初始化-tanh

KNN调参 all_a_s cnn调参技巧_cnn_16

KNN调参 all_a_s cnn调参技巧_机器学习_17

4.哪种初始化方法最好?

  从输入的通道数和输出通道数中随机选择一个数,然后除以输入通道数的开方。

KNN调参 all_a_s cnn调参技巧_KNN调参 all_a_s_18

四 批归一化

为了让每一层激活之后的分布比较统一,在每一层得到激活值之后做归一化处理,控制分布在均值为0 ,方差为1 的分布上

KNN调参 all_a_s cnn调参技巧_机器学习_19

批归一化存在的问题:当样本数量特别大的时候,在一批数据上做归一化之后的分布并不能反映总体上的分布。

为了解决这一问题,引入了另外参数(gamma-方差,byte均值)来逆归一化

KNN调参 all_a_s cnn调参技巧_深度学习_20

五 数据增强

KNN调参 all_a_s cnn调参技巧_初始化_21

六 其他调参技巧

(1)获取更多的数据

(2)先用一个简单的网络模型,然后逐步给神经网络添加层次,这样可以避免出错

(3)紧跟最新进展,使用新方法

(4)增大训练的迭代次数(跟其他手段并行使用)

(5)尝试增加正则化项(避免过拟合)

(6)使用更多的GPU来加速训练

(7)使用可视化工具来检查中间状态

  •       损失函数的值
  •       梯度分布
  •       准确率
  •        学习率

KNN调参 all_a_s cnn调参技巧_初始化_22

(8)可以在标准数据集上训练,用于确认自己的网络是否错误

(9)可以先在小数据集上测试一下,达到过拟合的效果,可以验证自己的网络没问题。

(10)注意数据集要平衡分布(比如分类中正负类数量要均匀)

(11)使用预调整好的稳定模型结构

(12)Fine-tuning 基于经典网络的参数初始化参数,然后再新的网络结构上微调