花书的阅读笔记
英文版地址:http://www.deeplearningbook.org
优化问题:寻找神经网络上一组参数θ,以显著降低代价函数J(θ),其中
J(θ) = 整个训练集的性能评估+ 额外正则项
8.1 学习和纯优化的不同
概念:
学习:深度模型训练的优化算法
纯优化:传统的优化算法
经验风险:训练集上的期望误差
批量/确定性 梯度算法:使用全部训练集样本的算法
注:只有在此时指全部训练集,其余时候指一组样本
随机/在线 算法:每次只使用单个样本
小批量/小批量随机 方法:使用一个以上但不是全部样本,简单的统称为随机方法
不同点:
1. 学习降低J(θ),以得到更好的性能度量P;纯优化最小化J(θ)本身。
2. 学习目标是经验风险最小化 (往往真实的潜在分布不可知)
3. 学习可能使用代理损失函数(损失函数没有有效导数,或无法被高效优化等原因),并会产生提前终止(当收敛条件满足时)
☆ 提前终止时代理损失函数仍有较大的导数,而纯优化终止时导数较小
4. 学习可能采用小批量(minibatch)或小批量随机(minibatch stochastic)方法 (使用更多的样本需要更多的时间,而带来的回报是非线性的)
☆ 更大的批量会计算更精准的梯度估计,但是带来的回报是非线性的
☆ 基于多核架构,极小的批量未必会减少计算时间
☆ 若批量处理中的样本可并行处理(通常如此),则内存消耗和批量大小成正比(批量大小的限制因素)
☆☆☆ 某些硬件使用特定大小批量,运行时间会更少,GPU上使用2的幂数(32~256)
☆ 泛化误差在批量为1的时候最好
☆☆ 小批量需要较小的学习率以保持稳定性(故使用小批量会使总的运行时间增大)
☆☆☆ 小批量应随机抽取,避免一个批量之间的样本高度相关
☆ 只有第一遍遍历数据集满足泛化误差梯度的无偏估计,但多次遍历带来的好处可抵消训练误差和测试误差间差距的增长
8.2 神经网络优化中的挑战
概念:
模型可辨识性:一个足够大的训练集可以唯一确定一组模型函数
病态:在Ax=b 的问题解中对A和b高度敏感
补:
判断病态方法:条件数越大病态问题越严重
条件数: 最大特征值和最小特征值的比值,或最大奇异值和最小奇异值的比值
优化挑战:
1. 病态
影响:梯度下降“卡”在某些情况,很小的更新步长也增加代价函数
原因:是数字优化、凸优化、与其他形式优化普遍存在的问题
方案:
代价函数泰勒二阶展开如下:
替换x得:
☆ 当 时,梯度的病态会成为问题。故监控梯度范数 和,通常前者不会显著缩小,而后者增长超过一个数量级,结果是梯度强,但学习缓慢,因为需要收缩学习率以弥补更强的曲率。
2. 局部极小点
影响: 局部极小值可能会被当做是可行解,
☆ 若具有很大代价的局部极小值是常见的,那么将给基于梯度的优化算法带来很大的问题
原因:① 非凸函数可能存在局部极小值
② 由于模型存在不可辨识性的问题,神经网络代价函数具有非常多甚至不可数无限多的局部极小值
方案:☆ 画出梯度范数随时间的变化,若梯度范数没有缩小到一个微小的值,那么该问题既不是局部极小值,也不是其他形式的临界点
☆☆☆ 对于足够强大的神经网络而言,大部分局部极小值都具有很小的代价函数,找真正的全局最小点不重要,重要的是在参数空间找到代价函数很小的点
3. 高原、鞍点和其他平坦区域
影响:☆ 具有高代价的临界点更有可能是鞍点
原因:低纬空间中,局部极小值普遍,但在更高纬的空间中,局部极小值罕见,而鞍点常见。
方案:☆☆ SGD训练轨迹能轻易逃离鞍点,不做修改的牛顿法会跳进一个鞍点中。(梯度下降旨在朝“下坡”移动,而非寻求临界点,牛顿法目标为寻求临界点),故高纬空间中鞍点激增问题或许使得二阶方法无法成功取代梯度下降
4. 悬崖和梯度爆炸
影响:梯度下降更新使得参数弹射非常远,可能会使大量已经完成的优化工作成为无用功
原因:几个较大的权重相乘导致存在悬崖一样的斜率较大区域(常见于循环神经网络,长期时间序列产生大量相乘)
方案: 启发式梯度截断 (干涉传统梯度下降以减小步长)
5. 长期依赖
影响:由于变深的结构使得模型丧失了学习到先前星系的能力,使得优化变得困难
原因:如计算图种包含反复与矩阵相乘的路径,有:
☆ 特征值量级上大于1则会爆炸,小于则会消失。梯度爆炸使得学习不稳定,梯度消失使得难以知道参数朝哪个方向移动能够改进代价函数
方案:循环网络上存在使用相同的矩阵,而前馈网络不存在。故即使使用非常深层的前馈网络,也能很大程度上有效避免梯度爆炸与消失问题
6. 非精确梯度
原因:在更高级的模型中会出现目标函数不可解,梯度也难以处理情况
方案:①使用近似梯度
②选择比真实损失函数更容易估计的代理损失函数以避免该问题
7. 局部与全局结构弱对应
影响:局部改进大,但没有指向代价低的多的遥远区域
方案: ☆ 选择更佳的初始点,而不是开发非局部范围更新的算法
☆ Goodfellow认为大部分运行时间取决于到达解决方案的轨迹弧度
☆ 学习率过小,训练时间过长,学习率过大,可能与可行解南辕北辙或舍近求远寻找可行解
8. 优化的理论限制
☆☆☆ 在训练中,我们通常不关注某个函数的精确极小点,而只关注将其值下降到足够小以获得一个良好的泛化误差
8.3 基本算法
随机梯度下降(SGD):
关键参数:学习率(lr)
☆☆☆ 有必要随着时间的推移逐渐降低学习率 ,一般使用线性衰减学习率直到第次迭代:
第k步迭代的学习率为,, 在步迭代后将设置为常数
☆ 通常为的1%
☆ 最好检测最早几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不至于太大导致震荡
动量:
旨在加速学习,特别是处理高曲率、小但一致的梯度,或带噪声的梯度
☆ 步长取决于梯度序列的大小和排列,当许多梯度指向相同方向时,步长最大。步长大小为
☆ 意味着最大速度10倍于梯度下降算法
☆ 一般取0.5,0.9,0.99,并随时间不断调整
☆☆ 随着时间推移调整没有收缩重要
Nesterov动量:
改进凸批量梯度收敛率
8.3 参数初始化策略
☆☆☆ 初始参数需要在不同单位件“破坏对称性”(如果具有相同激活函数的两个隐藏单元连接到相同的输入,那么这些单元必须具有不同的初始参数)
☆ 几乎总是初始化模型权重为高斯或均匀分布中随机抽取的值
☆☆ 更大的初始权重具有更强的“破坏对称性”,有助于避免冗余单元,有助于避免线性成分信号丢失;但过大的权重会引入混沌或者产生爆炸值
☆☆☆ 设置偏置的方法必须和设置权重方法协调
☆ 设置偏置为0在大多数情况可行,但是存在应设置偏置非0情况(偏置为输出单元、为避免初始化饱和、门偏置)