Datawhale X 李宏毅苹果书AI夏令营——Task2自适应学习率,分类与回归

自适应学习率

我们为什么需要自适应学习率?

  • 提高收敛速度:在训练初期使用较大的学习率,在收敛时使用较小的学习率,有助于加快收敛速度并提高稳定性。
  • 解决震荡问题:书中有言,就算是一个凸的误差表面,梯度下降也很难训练。使用自适应学习率,可以让我们在陡峭和平坦区域调整学习率,减少参数更新的震荡行为。
  • 处理稀疏数据:在稀疏数据很多的情况,自适应学习率方法特别是类似AdaGrad能够合理分配学习率,提高训练效果。

3.3 自适应学习率

自适应学习率方法根据梯度大小自动调整学习率,解决固定学习率的问题。

3.3.1 AdaGrad(Adaptive Gradient)

特点:能够根据梯度大小自动调整学习率梯度大时,学习率减小;梯度小时,学习率增大。
适用范围:稀疏数据(类比稀疏矩阵,矩阵中的元素与数据中的数据多数都是缺失值或者零)。

公式
参数更新:(其中 t t t是迭代次数)
θ 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

  • 其中 σ i t \sigma_{i}^{t} σit是均方根,计算公式:
    σ i t = 1 t + 1 ∑ j = 0 t ( g i j ) 2 \sigma_{i}^{t} = \sqrt{\frac{1}{t+1} \sum_{j=0}^{t} (g_{i}^{j})^2} σit=t+11j=0t(gij)2

3.3.2 RMSProp(Root Mean Squared propagation)

特点:通过人为调整每步计算中梯度的重要性 α \alpha α,解决 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
均方根:
σ i t = α σ i t − 1 + ( 1 − α ) ( g i t ) 2 \sigma_{i}^{t} = \sqrt{\alpha \sigma_{i}^{t-1} + (1-\alpha)(g_{i}^{t})^2} σit=ασit1+(1α)(git)2

3.3.3 Adam(Adaptive moment estimation)

特点
1.结合 RMSProp 和动量法。
2.自适应调整学习率,使用动量更新方向。

书中有言,目前该算法已在框架如 PyTorch 中实现,编库者给的默认参数通常表现良好。

3.4 学习率调度

自适应学习率可能有梯度病态(突然剧烈的增加减少)的问题。
于是学习率调度(learning rate scheduling) 被提出。

最常见策略如下:

  • 学习率衰减
    随着训练进程减少学习率。
    优点:有助于稳定收敛,防止震荡。
    可以使用指数衰减或分段恒定衰减,根据实验效果选择。
    公式如下:
    θ i t + 1 ← θ i t − η t σ i t g i t \theta_{i}^{t+1} \leftarrow \theta_{i}^{t} - \frac{\eta_t}{\sigma_{i}^{t}} g_{i}^{t} θit+1θitσitηtgit
    随着参数不断更新, η \eta η会越来越小。
  • 预热(Warm-up)
    初期使用较小学习率,逐渐增大,然后再减小。
    优点:帮助收集误差表面信息,提高初期稳定性。
    特别是在使用复杂模型如 Transformer 时,预热非常有用。

个人猜想(尚未实践):
在模型训练初期,使用预热来防止学习率过大导致的梯度爆炸,一定程度(不知道什么程度)后,逐渐减小学习率,确保能够稳定收敛。

3.6 分类,回归

  • 分类与回归是深度学习中常见的问题类型。
  • 分类问题的目标是将输入映射到离散的类别标签。

3.6.1 分类与回归的关系

回归:输入向量 x x x,输出标量 y ^ \hat{y} y^,目标是使 y ^ \hat{y} y^接近真实标签 y y y
分类:可以视作特殊的回归问题。用独热向量表示类别,避免类之间的距离误解。

3.6.2 带有 Softmax 的分类

Softmax 函数
函数功能:将网络输出转换为概率分布,使输出和为 1。
公式
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)
将每个输出值取指数,然后归一化。

作用
1.将任意实数转换为 (0, 1) 之间的值。
2.通过加权后归一化的办法,强调最大的那个类( max ⁡ y j \max y_j maxyj),使其概率更接近 1。

应用位置:在输出层使用Softmax,将输出变为概率向量。

个人感想
对于二元分类,考虑使用Sigmoid代替Softmax。

注:
二元分类问题:对一个事实判断,是A还是B?此时可使用sigmoid来输出一个值代表物品属于A类的概率 P A P_A PA(或是B的概率 P B P_B PB
多元分类问题:类别数大于二(至少是三)的分类,A、B、C……,多分类世界中,某个物品可能是A、可能是B,也可能是C……。此时,不能再简单地输出一个概率值来判断类别(因为类别一多,在截断误差后很可能出现概率相同的情况),而是需要通过得到每个类别的概率(这样可以体现概率的相对性,比如A相对B更多,B相对C更少),以此进行分类,

3.6.3 分类损失

损失函数的选择

  • 均方误差(MSE)
    公式
    e = ∑ i ( y i − y i ′ ) 2 e = \sum_i (y_i - y'_i)^2 e=i(yiyi)2
  • 交叉熵损失
    公式
    e = − ∑ i y i ln ⁡ y i ′ e = -\sum_i y_i \ln y'_i e=iyilnyi

对比
交叉熵在误差较大时提供明显的梯度,便于优化。
均方误差在误差大时容易陷入平坦区域,优化困难。

个人建议
1.确保使用合适的激活函数与损失函数匹配。
2.如果遇到优化困难,检查损失函数的选择是否合适。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值