机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)


文章目录

  • 前言
  • 局部最小值和鞍点
    • 鉴别方法
    • 批次batch和动量momentum
      • batch
        • small batch 和large batch
      • momentum
  • 自动调整学习率
    • warm up
  • 分类
    • softmax()
    • 分类下所用的loss
  • 批次标准化feature Normalization
    • testing
  • 总结

前言 在学习完之后,我发现整个前面的学习过程相当于给我们搭建了一整个框架。而这五章的学习,相当于查漏补缺提升,让我们更加熟悉里面的一些环节和情况。
局部最小值和鞍点 training loss基本保持不变——gradient为0:
1.local minimum——no way
2.saddle point 鞍点——还能下降
如何鉴别是1还是2?
鉴别方法 用数学方式鉴别:
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

损失函数在 θ \theta θ初泰勒展开:
L ( θ ) ≈ L ( θ ’ ) + ( θ ? θ ’ ) T g + 1 2 ( θ ? θ ’ ) T H ( θ ? θ ’ ) L(\theta ) \approx L({\theta ^’}) + {(\theta - {\theta ^’})^T}g + \frac{1}{2}{(\theta - {\theta ^’})^T}H(\theta - {\theta ^’}) L(θ)≈L(θ’)+(θ?θ’)Tg+21?(θ?θ’)TH(θ?θ’)
g(vector)用来弥补 θ ’ \theta ^’ θ’之间的差距
g = ? L ( θ ’ ) g = \nabla L({\theta ^’}) g=?L(θ’)
H(matrix)继续补足差距(海塞矩阵)
H i j = ? 2 ? θ i ? θ j L ( θ ’ ) {H_{ij}} = \frac{{{\partial ^2}}}{{\partial {\theta _i}\partial {\theta _j}}}L({\theta ^’}) Hij?=?θi??θj??2?L(θ’)
由于granient为0,所以表达式最后变成
L ( θ ) ≈ L ( θ ’ ) + 1 2 ( θ ? θ ’ ) T H ( θ ? θ ’ ) L(\theta ) \approx L({\theta ^’}) + \frac{1}{2}{(\theta - {\theta ^’})^T}H(\theta - {\theta ^’}) L(θ)≈L(θ’)+21?(θ?θ’)TH(θ?θ’)
根据后面这一项,我们就可以判断是鞍点,还是最小点,还是最高点
判断方法:
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

三种情况:
H是正定矩阵== 所有的特征值为正——》局部最小值
H是负定矩阵 == 所有的特征值为为负——》局部最大值
一些特征值为正,一些特征值为负——》鞍点
不可以只用三维的视野去看local minimum,不同的维度中,可以走的路更多,所以有很多维度。所以鞍点是常见的,但local minimum是不常见的。‘;
批次batch和动量momentum batch
【机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)】不会拿所有的资料算出Loss,而是拿出一个batch算出loss,然后再更新。
epoch:通过上述的方法,把所有的batch都遍历一遍算一次epoch
shuffle:一次epoch完之后再重新分配batch
原因:训练速度更快,但因为只有一个batch所以可能没有那么准确。
small batch 和large batch 1.由于并行计算的存在,所以不一定大的batch就很慢;
2.小的batch size结果更优越,因为full batch的损失函数基本不变,如果有一个很小的局部最优点,它就卡住了。但如果有batch 每个batch的loss function都不一样,一个卡住了,另一个可能没关系,就可以继续迭代。
3.small batch 在testing data上更好。局部最优点在峡谷算较差,在盆地算较好,由于small batch每次迭代方向都是有不太相同的,所以比较容易跳出峡谷,到盆地(也就是较好的局部最优点)
momentum
想象小球的滚动有一个惯性,当每次gradient更新让它走一个新的方向的时候,它需要与之前的方向结合,然后产生新的方向。同时,也可以利用惯性来冲出local minimum。
Gradient Descent+Momentum
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

m n = λ m n ? 1 ? η g n ? 1 {m^n} = \lambda {m^{n - 1}} - \eta {g^{n - 1}} mn=λmn?1?ηgn?1
M o v e / t o θ n = θ n ? 1 + m n \begin{matrix} {Move/to}&{{\theta _n} = {\theta _{n - 1}} + {m^n}} \end{matrix} Move/to?θn?=θn?1?+mn?
自动调整学习率 当训练卡住(loss function卡住)的原因不只是只有small grdient 可能还有下图情况:
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

具体自调整学习率可以看之前的笔记adgrad
最后演变成
θ t + ! i ← θ t i ? η t σ t i m t i {\theta ^{t + !}}_i \leftarrow {\theta ^t}_i - \frac{{{\eta ^t}}}{{{\sigma ^t}_i}}{m^t}_i θt+!i?←θti??σti?ηt?mti?
warm up 机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

分类 若使得1=class 1;2=class 2;3=class3.把目标就变成目标编号1,2,3;但这样数学表示使得仿佛1和2是更加相近的,1和3是比较不相近的,所以这样比较不对。
所以我们改进方法,把class1变成向量 y ^ = [ 1 0 0 ] \hat y = \left[ {\begin{matrix}{} 1\\ 0\\ 0 \end{matrix}} \right] y^?=???100????,class 2类似
softmax() 机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

y ’ i = exp ? ( y i ) ∑ j exp ? ( y j ) {y^’}_i = \frac{{\exp ({y_i})}}{{\sum\limits_j {\exp ({y_j})} }} y’i?=j∑?exp(yj?)exp(yi?)?
把任意的y值都把它转变到0~1之间;让差距大的值差距更大。
分类下所用的loss 均方误差
E = 1 2 ∑ k ( y k ? t k ) 2 E = \frac{1}{2}\sum\limits_k {{{({y_k} - {t_k})}^2}} E=21?k∑?(yk??tk?)2
其中, E {E} E针对单个数据的损失函数, y k {y_k} yk?表示神经网络的输出, t k {t_k} tk?表示监督数据,k表示数据的维数。
交叉熵误差(更常用)
E = ? ∑ k t k log ? y k E = - \sum\limits_k {{t_k}\log {y_k}} E=?k∑?tk?logyk?
其中, E {E} E针对单个数据的损失函数, y k {y_k} yk?表示神经网络的输出, t k {t_k} tk?表示正确解标签,只有正确解标签处的值才为1,其他都为0.
在pytorch中 softmax和cross-entropy总是会被绑在一起
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

根据图中看出,用MSE large loss的值下降比较困难。
批次标准化feature Normalization 比较难做的loss(如不同坐标之间的比例差别特别大):解决方法:1.adagrad 2.批次标准化(直接先对数据进行处理),铲平error surface。
批次标准化的input和李宏毅机器学习笔记p5-p8的特征缩放所学内容相同.
但对feature也要做Normalization
机器学习|李宏毅机器学习笔记(新版p5-p9网络设计的技巧)
文章图片

testing 在testing中没有batch怎么办?
用moving average来取代上文的batch中的参量
总结 了解到了鞍点的概念和深度学习我一直以来的误区。我之前没用听说过鞍点,一般认为loss 无法下降都是由于local minimum的存在,现在才知道,由于更高维的存在,local minimum事实上是很少的,绝大部分还是鞍点,对于鞍点,我们loss function还是可以继续下降的。还有由于动量的存在,使得有冲出local minimum的可能,使得了梯度下降的公式能够进一步完善。

    推荐阅读