李宏毅《机器学习》Task05 - 网络设计的技巧(优化调整)

参考 Datawhale - 李宏毅《机器学习/深度学习》2021课程

如果神经网络训练不起来(优化失败)怎么办。。。

一、判断局部最小值与鞍点

为什么会优化失败?

优化失败即损失没有办法再下降,有两种可能的情况:

  • 训练时loss达不到足够小
  • loss一直就无法下降

原因如下:

  • 参数对loss的微分趋于0,训练卡在了 驻点 => 无法更新参数:
    • 局部最小值
    • 鞍点(saddle point)

因此需要鉴别到底是局部最小值还是鞍点,以便分别处理问题。

参考Taylor展开式(展开到二阶),将其变为矩阵的形式 ⇒ 黑塞矩阵(Hessian Matrix)1
Taylor
走到驻点,意味着一阶导数(绿色的这一项)为0,只剩下红色的二阶:
L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\theta)≈L(\theta')+\frac{1}{2}(\theta-\theta')^TH(\theta-\theta') L(θ)L(θ)+21(θθ)TH(θθ)
其中, ( θ − θ ′ ) T H ( θ − θ ′ ) (\theta-\theta')^TH(\theta-\theta') (θθ)TH(θθ) 可写作向量形式 v T H v v^THv vTHv. 现有如下情况:
分类
结论:算出黑塞矩阵,判断其特征值大小

特征值大小结果
局部最小值
局部最大值
有正有负鞍点

局部最小值和鞍点谁更常见?

实验结果

  • 从最小比率的分布看出,只有一半的特征值是正的,一半是负的,代表着在所有纬度上,还有一半的程度可以让损失下降。
  • 从经验上看起来, 局部最小值并不常见

二、批次与动量

1. 批次(batch)

  • 实际上在计算微分的时候,并不是对所有数据算出来的损失函数 L L L 做微分,而是把所有的数据分成一个一个的 batch 来计算,这里把其中一个 batch 记作 B i B_i Bi
  • 每次在更新参数的时候,是先计算 B 1 B_1 B1 L o s s Loss Loss、梯度,然后更新参数;再计算 B 2 B_2 B2 L o s s Loss Loss、梯度,然后更新参数,…,以此类推。
  • 1 epoch:把所有的 batch 都计算一轮次。每次epoch之后,需要重新 打乱(shuffle) 数据,再进行计算。

为什么训练的时候要使用 batch ?

大小批次比较:

大小批次比较
比较

  • batch 是一个超参数2,需要我们自行调参
  • 用大的batch size做训练,使用并行运算增加效率,同时能得到好的结果是有可能的

2. 动量(Momentum)

  • 在物理世界,现象一个球从高坡滚下,Loss的大小看作山坡的海拔。
  • 由于重力的作用,球会从高出滚下;由于惯性,当球滚到坑中(如局部最小值)时,若它的动量够大,会摆脱坑的束缚,继续下滑:
    图解
  • 因此球不会被驻点卡住

梯度下降 + 动量

移动方向 = 梯度的反方向 + 上一步移动的方向

梯度下降 + 动量

三、自动调整学习率

背景

随着训练次数的增加,loss越来越小,最后“卡住”了(loss不再下降),没法更新参数。此时,真的是因为梯度很小导致的吗?并不是,而是走到了一个临界点(critical point)处:
背景

学习率可调整步伐的大小,它要为每一个参数“定制”(不同参数需不同学习率)

学习率的自动调整

《李宏毅机器学习》Task 3 中,一种自动调整学习率的算法为 Adagrad 算法,其参数调整方法为:
θ i t + 1 ← θ i t − η σ i t g i t \theta_i^{t+1} \leftarrow \theta_i^t-\frac{\eta}{\sigma_i^t}g_i^t θit+1θitσitηgit

  • g i t g_i^t git 为第 t 次迭代的梯度: ∂ L ∂ θ i ∣ θ = θ t \frac{\partial L}{\partial \theta_i}|_{\theta=\theta_t} θiLθ=θt
  • η σ i t \frac{\eta}{\sigma_i^t} σitη 取决于参数 θ i \theta_i θi

计算过程

斜率学习率

对于同一个参数,同一个方向,我们也期望学习率能动态调整,这就引出 RMSProp 算法

RMSProp 算法

步骤:
RMSProp 算法

Adam算法3:RMSProp + Momentum

Learning Rate Scheduling

  • 将上面的学习率 η \eta η 变为与时间 t t t 有关 η t \eta^t ηt
  • 最常见的策略是 学习率衰减(Learning Rate Decay)
    • 随着参数的更新,我们距离终点越来越近,于是减小参数更新的步伐
      *学习率衰减
  • 另一个策略是 学习率预热(Warm up)
    • 学习率先变大,后变小
    • 先搜集有关 σ \sigma σ的统计数据,等统计得比较精准以后,再让学习率慢慢变大
    • 例如:残差网络(Residual Network) 4
      学习率预热

本优化总结:
在这里插入图片描述

四、损失函数的影响

回归与分类

回归与分类

  • softmax函数的作用就是将 y y y 的值转换为0到1之间
    Softmax

示例:分类的损失函数 Cross-entropy

分类的损失

  • Softmax内嵌于 cross-entropy 。当使用了cross-entropy这个损失函数的时候,其自动将Softmax加到网络的最后一层。

为什么 cross-entropy 比较好?

  • 现在我们做三个分类,Network先输出y1, y2, y3,再通过softmax产生y1’, y2’, y3’。假设正确答案是 ( 1 , 0 , 0 ) T (1, 0, 0)^T (1,0,0)T,用 e e e 表示该向量与预测值 y i ′ y_i' yi的距离。
  • 假设y1和y2的范围为[-10, 10],y3固定为-1000

在这里插入图片描述
如上图所示,y1>y2时,损失较小。

  • 假设开始为左上方
    • 若选择Cross-entropy,这里是有斜率的,因此能通过梯度下降往右下方走
    • 若选择Mean Square Error,则一开始就卡住了——梯度趋于0,且距离目标远

上述例子说明,就算是损失函数的定义都可能影响训练是否容易。

五、批标准化

《李宏毅机器学习》Task 3 的特征缩放中学过,若输入的两个特征的范围相差很大,那么在平面直角坐标系中展现的等高线是一个椭圆,即产生了一个不同方向、斜率坡度非常不同的 误差曲面(error surface)

如果我们有方法让特征中不同的纬度有相同的数值范围,那么我们可能制造一个比较好的误差曲面,让训练变得更容易一些。对于此有很多不同的方法,其统称为 批标准化(Batch Normalization)5

课程中所讲的方法只是批标准化的一种可能性。

1. 训练部分

批标准化

  • 三个独立的变量相互关联变成了一个大的网络
  • 实际在做的时候,不会让网络考虑整个训练集的所有例子,只会让其考虑一个batch里面的例子——批标准化(Batch Normalization)

在这里插入图片描述
现在加上一个步骤对 z ~ \widetilde z z 进行处理, β \beta β γ \gamma γ作为参数,是另外被学习出来的。当该层输出为0时,若我们不想让其输出平均为0,则可加上这两个参数来调整输出的分布。

2. 测试部分

测试
在标准化的时候, μ \mu μ σ \sigma σ是根据batch算出来的。如果根本就没有batch,如何计算 μ \mu μ σ \sigma σ

解法:在训练的时候,每一个计算出来 μ \mu μ σ \sigma σ都用于计算 滑动平均(moving average)6,如上图所示。那么计算 z ~ \widetilde z z 只需要 μ \mu μ σ \sigma σ的滑动平均值。


  1. 黑塞矩阵 - 百度百科 ↩︎

  2. 超参数(Hyperparameter) - HuZihu ↩︎

  3. ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION ↩︎

  4. Deep Residual Learning for Image Recognition ↩︎

  5. Batch Normalization详解 ↩︎

  6. 移动平均(Moving Average) ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习人工智能的核心,是使计算机具有智能的根本途径。 随着统计学的发展,统计学习在机器学习中占据了重要地位,支持向量机(SVM)、决策树和随机森林等算法的提出和发展,使得机器学习能够更好地处理分类、回归和聚类等任务。进入21世纪,深度学习成为机器学习领域的重要突破,采用多层神经网络模型,通过大量数据和强大的计算能力来训练模型,在计算机视觉、自然语言处理和语音识别等领域取得了显著的成果。 机器学习算法在各个领域都有广泛的应用,包括医疗保健、金融、零售和电子商务、智能交通、生产制造等。例如,在医疗领域,机器学习技术可以帮助医生识别医疗影像,辅助诊断疾病,预测病情发展趋势,并为患者提供个性化的治疗方案。在金融领域,机器学习模型可以分析金融数据,识别潜在风险,预测股票市场的走势等。 未来,随着传感器技术和计算能力的提升,机器学习将在自动驾驶、智能家居等领域发挥更大的作用。同时,随着物联网技术的普及,机器学习将助力智能家居设备实现更加智能化和个性化的功能。在工业制造领域,机器学习也将实现广泛应用,如智能制造、工艺优化和质量控制等。 总之,机器学习是一门具有广阔应用前景和深远影响的学科,它将持续推动人工智能技术的发展,为人类社会的进步做出重要贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beta Lemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值