• 《机器学习》李宏毅(21P5-9)


    神经网络训练

    局部最小值

    在这里插入图片描述

    local minima:局部最优
    saddle point:鞍点
    gradient=0(loss 不再更新):有多种情况——local minima/saddle point,统称为critical point
    在local point处无法找到其他最小值点
    在saddle point处有可能从某个方向找到escape方法

    如何判断critical point的具体类型

    要知道loss function的形状

    泰勒展开式
    在这里插入图片描述

    θ \theta θ近似于 θ ′ \theta' θ时, L ( θ ) L(\theta) L(θ)可近似为以上式子
    g(Gradient)会弥补 θ ′ 与 θ \theta'与\theta θθ之间的差距
    H(Hessian海森矩阵)继续补足 θ ′ 与 θ \theta'与\theta θθ之间的差距

    在这里插入图片描述

    当我们遇到critical point时,此时gradient=0,即上式2项=0
    此时可以根据上式3项的Hession Matrix,判断 θ \theta θ附近error surface大致样子,以判断该点属于何种类型

    v = θ − θ ′ v=\theta-\theta' v=θθ,故3项为 1 2 v T H v \frac{1}{2}v^{T}Hv 21vTHv
    不管 θ \theta θ为何值,且 v T H v > 0 v^{T}Hv>0 vTHv>0,则在 θ \theta θ附近都有 L ( θ ) > L ( θ ′ ) L(\theta)>L(\theta') L(θ)>L(θ),即local minima
    同理,若 v T H v < 0 v^{T}Hv<0 vTHv<0,则在 θ \theta θ附近都有 L ( θ ) < L ( θ ′ ) L(\theta)L(θ)<L(θ),即local maxima
    否则,为saddle point
    又由 v T H v > 0 v^{T}Hv>0 vTHv>0可知,H是positive definite,即Hessian矩阵所有特征值都大于0,因此直接判断Hessian即可

    在这里插入图片描述

    Example

    某个network:y=w1w2x
    穷举w1,w2,并计算其所带来的loss,画图如下
    在这里插入图片描述计算H(Loss的二次微分矩阵)【原点(0,0)处】
    在这里插入图片描述

    saddle point处的处理

    saddle point处是可以找到继续梯度下降的方向的,通过Hessian矩阵
    找到H的特征向量u及对应的特征值 λ \lambda λ
    将3项改写为 1 2 λ ∣ ∣ u ∣ ∣ 2 \frac{1}{2}\lambda||u||^2 21λ∣∣u2
    沿着u,即特征值的方向更新 θ \theta θ即可降低loss
    在这里插入图片描述

    Example

    在这里插入图片描述

    实际应用中一般不会计算Hessian矩阵,因为计算量较大,还要计算特征值和特征向量,还有其他escape saddle point的方法

    saddle point和local minima谁更常见

    在不同维度空间中,会不会local minima变成saddle point?
    即如果有更多参数,或许local minima就更少了?
    在这里插入图片描述在经验中也支持这个假说:
    在这里插入图片描述

    实际上基本找不到所有特征值全正情况,由图可以看出在极端条件下也有一般是负特征值,也即实际上local minima的并不常见,总会找到可以使loss下降的方向

    在这里插入图片描述

    batch与momentum

    每次计算loss时,是分别取batch进行计算L1,l2…ln
    所有数据(n个batch)计算完成即为一个epoch
    在每一个epoch开始之前会分一次batch,每一次的batch划分都不一样——shuffle

    why batch?

    观察两种极端情况:
    batch size=N:要把所有数据处理一遍才能updata一次参数
    batch size=1:每一次update是不稳定noisy的
    在这里插入图片描述

    较大batch size的计算时间不一定比较小batch size多(有平行运算的能力)有实验证明
    在这里插入图片描述因此当batch size小的时候,一个epoch花费时间会更多,在考虑平行运算时,big batch size更有优势
    在这里插入图片描述

    noisy gradient 可能会帮助训练准确度,大的batch size可能会带来不好的结果
    在这里插入图片描述多个batch可能

    小的batch在testing时得到较好效果
    在峡谷里的local minima是bad minima
    大的batch size倾向于走到峡谷里
    在这里插入图片描述

    总结
    在这里插入图片描述

    batch size:炼丹超参

    momentum(动量)

    在这里插入图片描述

    物理引入,通过动量让gradient decent越过critical point

    (一般的)gradient过程
    在这里插入图片描述加上动量的gradient decent过程
    会考虑前一步方向再decent
    在这里插入图片描述

    一种改变梯度方向的策略,防止陷入local minima
    在这里插入图片描述考虑过去所有gradient总和
    在这里插入图片描述由于惯性可能会越过山坡找到更低处——momentum的好处

    总结
    在这里插入图片描述

    Adaptive learning rate

    当loss不再下降时,gradient不一定变得很小

    在这里插入图片描述

    find learning rate

    在这里插入图片描述

    root mean square(Adagrad算法)

    在这里插入图片描述在这里插入图片描述

    RMSProp

    自行调整当前gradient的权重(重要性)

    在这里插入图片描述在这里插入图片描述目前最常用的optimization:Adam算法——RMSProp+Momentum
    Adam original paper
    在这里插入图片描述

    learning rate scheduling

    learning rate decay : 接近终点时可以让learning rate减小,让更新慢下来
    warm up: learning rate 先变大再变小
    在这里插入图片描述

    bert 中需要warm up
    transformer 中也有在这里插入图片描述
    详情可参考论文RAdam

    optimization总结

    在这里插入图片描述

    loss函数的影响

    以分类问题为例

    在这里插入图片描述

    使用回归方式求解分类问题:以模型输出数值贴近分类表示值来表示,属于某一类别;但是按照这样表示class1有更大可能相似于class2,而与class3有更大不同,但不是所有分类方式都是数值接近而相似的。

    将每个class用独热向量表示
    (class两两之间距离相同)
    在这里插入图片描述在这里插入图片描述

    softmax
    在这里插入图片描述两个class用sigmoid函数

    损失距离的度量

    再去计算 y ^ \hat{y} y^ y y y之间距离,作为损失函数并使其最小
    有多种方式计算距离
    在这里插入图片描述

    cross-entropy是最适合分类问题的
    cross-entropy和softmax是一个set,总是绑在一起使用

    why cross-entropy

    在这里插入图片描述

    固定y3=-1000,不考虑其影响,y1,y2在【-10,10】之间变化
    对loss的影响
    左上角处:MSE会卡住,cross entropy有斜率可以往右下角(优化方向步进)
    因此使用MSE可能训练困难,即使使用较好的optimization(Adam)在开始处也可能loss下降较慢,相反使用cross entropy就没有这种担心

    因此可以看出,loss函数的选择也会影响训练效率

    batch normalization

    在这里插入图片描述

    由于不同的dimension有不同的范围其对loss的影响大小不同,导致error surface不同地方梯度不同,导致训练效率下降
    如何使得不同dimension有相同range:feature normalization

    one of feature normalization

    在这里插入图片描述可以使gradient decent loss收敛更快一点,训练更顺利一些

    考虑到深度学习的多层网络训练
    在这里插入图片描述

    经过每层网络后的结果可能仍然是different dims
    因此在下一层之前还要做feature normalization

    实际应用中在激活函数之前还是之后使用feature normalization都是可以的,影响不大

    若激活函数是sigmoid,建议在z处做feature normalization,因为sigmoid函数在0附近斜率较大,对z做feature normalization可以将所有的值移到0附近,会得到更大的gradient
    在这里插入图片描述
    在这里,z1,z2,z3是相互影响的

    实践时,由于数据量巨大我们分batch训练,因此考虑到一个batch训练过程中的normalization,我们称之为batch normalization(batch size比较大)

    平均不是0
    新增学习参数,如果不希望normalization结果平均是0(可能会对结果产生影响),网络会自动学习与调整 β , γ \beta,\gamma β,γ
    在这里插入图片描述

    batch normalization —— testing

    若testing时没有batch
    pytorch的处理: 在训练时计算moving average
    在这里插入图片描述
    batch normalization original paper
    How does batch normalization help optimization
    在这里插入图片描述

    more normalization

    在这里插入图片描述

  • 相关阅读:
    360°全景等功能关闭只是开始?汽车数据安全战争即将爆发
    如何与 TENNECO 建立 EDI 连接?
    猿创征文|搭建第一个Spring Boot项目
    跨境商城源码部署(多商户入驻,一键铺货,快速部署)
    Ruby langchainrb gem and custom configuration for the model setup
    超过50%的测试员不懂“测试”,凭什么月薪20k?
    《Effective C++》笔记
    UData查询引擎优化-如何让一条SQL性能提升数倍
    【全开源】Java聚合跑腿系统对接云洋聚合跑腿系统源码低价快递小程序APP公众号源码
    微信小程序简介
  • 原文地址:https://blog.csdn.net/qq_39848541/article/details/126472080