李宏毅机器学习笔记:新版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网络设计的技巧_第1张图片

损失函数在 θ \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θj2L(θ)
由于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网络设计的技巧_第2张图片
三种情况:
H是正定矩阵== 所有的特征值为正——》局部最小值
H是负定矩阵 == 所有的特征值为为负——》局部最大值
一些特征值为正,一些特征值为负——》鞍点

不可以只用三维的视野去看local minimum,不同的维度中,可以走的路更多,所以有很多维度。所以鞍点是常见的,但local minimum是不常见的。‘;

批次batch和动量momentum

batch

不会拿所有的资料算出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网络设计的技巧_第3张图片
m n = λ m n − 1 − η g n − 1 {m^n} = \lambda {m^{n - 1}} - \eta {g^{n - 1}} mn=λmn1ηgn1
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=θn1+mn

自动调整学习率

当训练卡住(loss function卡住)的原因不只是只有small grdient 可能还有下图情况:
李宏毅机器学习笔记:新版p5-p9网络设计的技巧_第4张图片
具体自调整学习率可以看之前的笔记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ηtmti

warm up

李宏毅机器学习笔记:新版p5-p9网络设计的技巧_第5张图片

分类

若使得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网络设计的技巧_第6张图片
y ’ i = exp ⁡ ( y i ) ∑ j exp ⁡ ( y j ) {y^’}_i = \frac{{\exp ({y_i})}}{{\sum\limits_j {\exp ({y_j})} }} yi=jexp(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=21k(yktk)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=ktklogyk
其中, E {E} E针对单个数据的损失函数, y k {y_k} yk表示神经网络的输出, t k {t_k} tk表示正确解标签,只有正确解标签处的值才为1,其他都为0.
在pytorch中 softmax和cross-entropy总是会被绑在一起
李宏毅机器学习笔记:新版p5-p9网络设计的技巧_第7张图片
根据图中看出,用MSE large loss的值下降比较困难。

批次标准化feature Normalization

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

testing

在testing中没有batch怎么办?
用moving average来取代上文的batch中的参量

总结

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

你可能感兴趣的:(机器学习,笔记,机器学习,网络,人工智能)