深度学习的矛与盾
网络优化的难点
高维空间的非凸优化问题: 要逃离鞍点 在某些曲线上是最高点 而在另一些曲线上是最低点这样的点称为鞍点
一些可视化的模型 一般都要加上残差网络
改善方法:
优化算法的改进: 随机GD 改进 为 小批量随机GD MiniBatch
批量大小的影响: batch size 属于超参 比较经验性的
如何改进?
学习率衰减
衰减函数: 阶梯衰减 线性衰减等等
上面的都是单调衰减 也有周期律学习率调整
warmup 先增加后减小 随机初始点选的一般不好 梯度都比较大 小的学习率可以更稳定 梯度变小之后 慢慢让学习率增加 这样鲁棒性更好
上面的学习率的衰减都和时间有关 可以称为固定函数 除此之外 还有自适应学习率
Adagrad使用历史的平方和 但是容易出现提前使得梯度变为0 导致无法更新
RMSprop是改进的Adagrad 使用历史的移动平均
Adadelta 是对RMSprop的改进 防止G_t变的很小导致梯度反而增加的情况
梯度方向优化
动量法
Nesterov加速梯度
梯度方向优化+自适应学习率 : Adaam算法 近似等于 动量法 + RMSprop
梯度截断:是一种比较简单的启发式方法 把梯度的模限在一个区间 当梯度的模小于或者大于这个区间时就进行截断
优化算法改进小结:
参数初始化/数据预处理
参数初始化
随机初始化:两个方式
范式保持性:不管是前向传播还是后向传播 希望模或者方差不要变化太大 保持一致
具体方法细节:
数据预处理:
逐层归一化:
批量归一化: 点乘r加上bate 是为了让模型能力更强
层归一化: 批量需要batch size 所以可以使用层来代替 每一层进行归一化
批量归一化 VS 层归一化
更多的归一化:之后的归一化就是在batch Norm和layer Norm的基础上发展的
超参数优化:
网格搜索:
随机搜索