文章目录
- 前言
- 局部最小值和鞍点
-
- 鉴别方法
- 批次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?
鉴别方法 用数学方式鉴别:
文章图片
损失函数在 θ \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(θ?θ’)
根据后面这一项,我们就可以判断是鞍点,还是最小点,还是最高点
判断方法:
文章图片
三种情况:
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
文章图片
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 可能还有下图情况:
文章图片
具体自调整学习率可以看之前的笔记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
文章图片
分类 若使得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()
文章图片
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总是会被绑在一起
文章图片
根据图中看出,用MSE large loss的值下降比较困难。
批次标准化feature Normalization 比较难做的loss(如不同坐标之间的比例差别特别大):解决方法:1.adagrad 2.批次标准化(直接先对数据进行处理),铲平error surface。
批次标准化的input和李宏毅机器学习笔记p5-p8的特征缩放所学内容相同.
但对feature也要做Normalization
文章图片
testing 在testing中没有batch怎么办?
用moving average来取代上文的batch中的参量
总结 了解到了鞍点的概念和深度学习我一直以来的误区。我之前没用听说过鞍点,一般认为loss 无法下降都是由于local minimum的存在,现在才知道,由于更高维的存在,local minimum事实上是很少的,绝大部分还是鞍点,对于鞍点,我们loss function还是可以继续下降的。还有由于动量的存在,使得有冲出local minimum的可能,使得了梯度下降的公式能够进一步完善。
推荐阅读
- 机器学习|李宏毅机器学习笔记p5-p8(误差和梯度下降)
- 机器学习|【进阶版】 机器学习之半监督学习、半监督聚类、规则学习相关原理知识(20)
- 机器学习|【进阶版】 机器学习之隐马尔可夫模型、条件随机场、LDA话题模型(21)
- crm|嵌入式系统安全的10个致命错误
- 计算机视觉教程|计算机视觉教程6-1(图解双目视觉系统与立体校正原理)
- python|手把手教你使用Python获取B站视频并在本地实现弹幕播放功能
- 微软|突发!马斯克 440 亿拿下Twitter!
- 陈大好(持续创造小而美的产品丨独立开发者 x 开放麦)
- 编程语言|想接私活时薪再翻一倍,建议根据这几个开源的SpringBoot项目(含小程序)改改~...