读书笔记:Deep Learning [Ada-Computation&ML series]--chapter8.Optimization

来源:互联网 发布:电力弹力系数数据 编辑:程序博客网 时间:2024/06/07 12:08
part1.optimization
1.为什么需要代理损失函数?因为我们真正关心的损失函数通常不容易优化,比如0-1期望loss。因此我们使用代理损失函数来近似,优势是可导,比如用负对数似然NLL。
2.即使expected 0-1 loss 为0,但NLL还是会持续减小,即令类间的距离再被分的更大一些,从而更鲁棒。
3.为了防止过拟合,通常会在梯度还比较大的时候停止early stopping,但是单纯的优化来讲,一般会在梯度接近0的时候才停止。
4.Batch:
     1)不要用大batch size.比如对于n个样本的估计标准差,将样本从100增加到10000,计算增加了100倍,而标准差只降低了10倍(delta / sqrt (n) ),非线性回报,不划算。
     2)估算近似梯度比计算准确梯度要快收敛,因为训练集数据会有redundancy,大量样本对于梯度的贡献类似。
     3)online:一次用一个样本来更行,batch:一次用所有样本,minibatch:介于前两者之间
5.mini batch
     1)多核结构下,太小的batch不能充分发挥性能
     2)如果是并行运算,需要大内存,从而限制batch size
     3)通常选32-256
     4)通常batch size = 1时泛华误差最小(由于学习过程中引入噪声,可以看做是一种正则化),但由于梯度方差太大,需要减小learning rate使得学习稳定,但是会消耗更多时间,需要更多步去看完所有的样本。
     5)二阶的牛顿法,需要使用较大的batch size(10000),以最小化H-1g的波动;由于g的小波动会被放大,并且H-1是估计值,进一步放大误差。
     6)保证minibatch是随机选取的,样本不会重复出现。但是一般先打乱再存储为固定的顺序就可以了。这样只有在第一遍看的时候对于泛化误差的估计是无偏的。后面的epoch都是有偏的,因为第一遍都看过了这些数据,而不是从数据分布中采样的新的样本。
     7)训练集足够大的时候过拟合不是问题,主要考虑欠你和与计算效率。
5.momentum解决两个问题:
     1)poor conditioning of hessian matrix
     2)variance in the stochastic gradient

part2.优化的挑战
1.ill condition的判断:监视梯度二范式g’g和g’Hg,通常g'g不会显著减小,但是g’Hg会迅速增长,所以lr要变小
2.局部最优:即使设计关于x的凸函数作为cost fun,该函数关于参数w1,w2仍是非凸函数。
3.模型唯一性:有足够大的训练集,使得模型排除掉所有参数,只保留一组参数。但是一般情况下没有那么多数据,因此模型非唯一性是普遍存在的问题。会带来多个局部最优。如果cost fun不包含weight decay这种直接依赖于权重而不是输出的项的话,那么假如对输入weight&bias放大a倍,输出放大1/a,这种是除了权重对称之外,也能带来模型唯一性的原因。

part3.初始化策略
 1.初始化需要打破权重对称
 2.较大初始值
     优点:
     1)有较强的破坏对称能力,避免冗余单元
     2)避免信号在前向、反向过程中丢失
     缺点:
     1)梯度爆炸 + chaos(对小扰动敏感)
     2)激励函数变平坦(sigmoid,位于梯度接近0的区域)
3.策略:
优化角度:权重要足够大可以成功传递信息
正则化角度:权重要小
一些方法比如SGD,会在初始值附近停止,表达的先验是最终的参数应该位于初始值附近。
4.初始化FC,折中办法:初始化使得所有层有相同的激励方差,以及相同的梯度方差。
5.但是上述办法一般不work:在整个网络中保持信号未必是有益的,开始学习后不应该保持初始值,也许能加速优化,但是会提高泛化误差。
6.稀疏初始化:有更多的多样性
先验:缩小错误大梯度需要下降很多次
7.计算资源允许的话:
     1)将初始比例作为每层的超参数
     2)将是否稀疏作为超参数
8.一般将 bias设置为0,除非以下情况:
bias是输出单元的值,需要匹配边缘分布;避免saturation(RELU),作为门控制其他单元的时候(b=1 for LSTM)

part4.Batch Normalization
0.公式
假设H是一个要做BN的层的minibatch的响应
H’ = (H - u)/ delta     //逐行归一化
训练时:
u = 1/m * sum(Hi)
delta = sqrt( 10^-8 + 1/m * sum(Hi - ui)^2 )
在训练的时候用移动平均(类似于momentum)的方式更新batch mean和variance,训练完毕,得到一个相对比较稳定的mean和variance,存在模型中。
测试的时候,就直接用模型中的均值和方差进行计算
1.假设x是单位高斯分布,那么对于y = x*w1*w2*…*wl, h(l-1)也是高斯的,但是已经不是单位高斯分布了。有BN之后,h(l-1)不会受到每次更新的影响,使得学习变得更容易。因为BN归一化了一阶和二阶的统计量,这是一个线性网络所能影响的全部。但是对于非线性网络,底层还是对结果有影响。
2.为什么先将mean设为0,在引入beta将其还原到任意值?
因为新参数可以表达旧参数所表示的相同的函数。在旧参数中,mean(H)由在H之前的层之间的参数的复杂关系所决定。而在新参数中,mean(rH’ + beta)只由beta决定,它更容易通过梯度下降学到。
3.归一化 X or WX + b?why not X?
     X经过前一层的非线性映射,更不高斯,更难通过线性操作做标准化。

part5.pre-training
本质是一种贪心算法,将原问题分成两个阶段, 再分别求最优解。计算复杂度低,结果不是最优但是可以接受。
为什么起作用?
因为它是对深层结构中间层提供引导。可以参考Fitnet 
0 0
原创粉丝点击