datawhale x 李宏毅苹果书ai夏令营 task2学习笔记-爱代码爱编程
自适应学习率
在模型训练的过程中,随着参数更新,loss变得越来越小,最终不再下降。是走到了驻点吗?
可能发生的情况:梯度在来回震荡
原因:Learning Rate太大,没法缓慢滑到“山谷”深处。
解决方案:
直接降低Learning Rate?具体降低多少难以界定。
需要有自适应的Learning Rate
还存在什么问题?得到的Learning Rate是固定值,希望可以做动态调整。
RMSProp
通过参数动态调整Learning Rating
Adam: RMSProp + Momentum
使用动量作为参数更新方向,并且能够自适应调整学习率。
学习率调度
σi^t 是把过去所有的梯度拿来作平均。在 AB段梯度很大,但在 BC 段,纵轴的方向梯度很小,因此纵轴方向累积了很小的 σit,累积到一定程度以后,步伐就变很大,但有办法修正回来。因为步伐很大,其会走到梯度比较大的地方。走到梯度比较大的地方后,σit 会慢慢变大,更新的步伐大小会慢慢变小,从而回到原来的路线。为了应对此种情况,需要学习率调度。
学习率调度中最常见的策略是学习率衰减。随着参数的不断更新,让 η 越来越小
分类
输出与期望的类别越接近越好。输出是数值时,用数值直接划分类别可行吗?
假设三个类本身没有特定的关系,类 1 是 1,类 2 是 2 类 3 是 3
实际上,在做分类的问题的时候,比较常见的做法是用独热向量表示类。
把a1、a2和a3乘上三个不同的权重,加上偏置,得到yˆ1;再把a1、a2和a3乘上另外三个权重,再加上另外一个偏置得到yˆ2;把a1、a2和a3再乘上另外一组权重,再加上另外一个偏置得到yˆ3。输入一个特征向量,产生yˆ1、yˆ2、yˆ3,希望yˆ1、yˆ2、yˆ3跟目标越接近越好。
带有 softmax 的分类
按照上述的设定,分类实际过程是:输入x,乘上W,加上b,通过激活函数σ,乘上W′,再加上b′得到向量yˆ。但实际做分类的时候,往往会把yˆ通过softmax函数得到y′,才去计算y′跟yˆ之间的距离。y是独热向量,所以其里面的值只有0跟1,但是yˆ里面有任何值。既然目标只有0跟1,但yˆ有任何值,可以先把它归一化到0到1之间,这样才能跟标签的计算相似度。
先把所有的 y 取一个指数(负数取指数后也会变成正的),再对其做归一化(除掉所有 y 的指数值的和)得到 y′。
分类损失
计算y′跟y之间的距离,可以是均方误差,即把y里面每一个元素拿出来,计算它们的平方和当作误差。
交叉熵更常用,当yˆ跟y′相同时,可以最小化交叉熵的值,此时均方误差也是最小的。最小化交叉熵其实就是最大化似然。
做分类时,选均方误差的时候,如果没有好的优化器,有非常大的可能性会训练不起来。改变损失函数可以改变优化的难度。
实践操作部分
训练中
模型网络架构
可视化分布