【动手学深度学习 | week2b】09 Softmax回归
softmax 回归
sofrmax虽然叫回归,但是其实解决的是一个分类问题(线性回归解决的是预测“是多少”的问题,而不是“是什么”的问题)。
- 回归估计的是连续值,一般是单输出。
- 分类预测的是一个离散类别(MNIST、ImageNet),一般是多输出。
从回归到多类分类 - 架构:均方损失进行训练:
-
对类别进行一位有效编码
𝑦 ∈ ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) 独 热 编 码 𝑦∈{(1,0,0),(0,1,0),(0,0,1)} 独热编码 y∈(1,0,0),(0,1,0),(0,0,1)独热编码 -
使用均方损失进行训练(计算出多个仿射函数的结果, o i o_i oi)
softmax回归也是一个单层神经网络。 由于计算每个输出 𝑜1 、 𝑜2 和 𝑜3 取决于 所有输入 𝑥1 、 𝑥2 、 𝑥3 和 𝑥4 , 所以softmax回归的输出层也是全连接层。
softmax回归的向量形式可以表达为:
𝐨 = 𝐖 𝐱 + 𝐛 𝐨=𝐖𝐱+𝐛 o=Wx+b -
最大值作为预测(对比 o i o_i oi的结果,输出,最大的 o i o_i oi)
- 无校验比例——让正确类别的置信度大,这步也是softmax运算
- 有效编码最大值作为预测
- 更置信的识别正确类(比较大的余量,相对值要较大)
o y − o i ≥ y − i o_y-o_i ≥ y-i oy−oi≥y−i - 输出匹配概率(非负,和为1) softmax运算
y ^ = softmax ( o ) y ^ i = exp ( o i ) ∑ k exp ( o k ) \begin{aligned} \hat{\mathbf{y}} &=\operatorname{softmax}(\mathbf{o}) \\ \hat{y}_{i} &=\frac{\exp \left(o_{i}\right)}{\sum_{k} \exp \left(o_{k}\right)} \end{aligned} y^y^i=softmax(o)=∑kexp(ok)exp(oi)
为了确保最终输出的总和为1,我们再对每个求幂后的结果除以它们的总和 - 两个概率之间的区别作为损失(真实的和预测的)
使用softmax得到非负并且和为1的 y ^ \hat{y} y^,计算的过程就是一个缩放范围的问题
对于每个小批量样本,softmax回归的矢量计算表达式为
𝐎 = 𝐗 𝐖 + 𝐛 𝐘 ^ = s o f t m a x ( 𝐎 ) 𝐎=𝐗𝐖+𝐛\\ 𝐘̂ =softmax(𝐎) O=XW+bY^=softmax(O)
- 交叉熵损失:衡量预测与真实概率之间的区别,度量softmax的预测效果
- 用交叉熵来衡量两个概率的区别
H ( p , q ) = ∑ i − p i log ( q i ) H(\mathbf{p}, \mathbf{q})=\sum_{i}-p_{i} \log \left(q_{i}\right) H(p,q)=i∑−pilog(qi) - 把交叉熵作为损失(交叉熵损失就是最小化负对数似然,或者叫最大似然估计的结果)
l ( y , y ^ ) = − ∑ i y i log y ^ i = − log y ^ y l(\mathbf{y}, \hat{\mathbf{y}})=-\sum_{i} y_{i} \log \hat{y}_{i}=-\log \hat{y}_{y} l(y,y^)=−i∑yilogy^i=−logy^y - 梯度就是真实概率和预测概率的区别 ,计算结果为:
∂ o i l ( y , y ^ ) = softmax ( o ) i − y i \partial_{o_{i}} l(\mathbf{y}, \hat{\mathbf{y}})=\operatorname{softmax}(\mathbf{o})_{i}-y_{i} ∂oil(y,y^)=softmax(o)i−yi
损失函数
- L2 Loss 均方损失
l ( y , y ′ ) = ( y − y ′ ) 2 / 2 l(y, y^{'}) = (y-y^{'})^2/2 l(y,y′)=(y−y′)2/2
其中,纵轴就是loss的计算值,横轴就是预测值的取值,设定真实值y为0
蓝色曲线表示损失函数曲线。 y y y为0的时候,变换预测值 y ′ y{'} y′所得到的函数,也就是一个二次函数。
绿色的是一个似然函数,是高斯分布。
橙色的是梯度,也就是一次函数。随着预测值和真实值的靠近,loss降为0。
注:给定输出 x x x时,关于参数θ的似然函数 L ( θ ∣ x ) L(θ|x) L(θ∣x)(在数值上)等于给定参数θ后变量X的概率:
L ( θ ∣ x ) = P ( X = x ∣ θ ) L(θ|x)=P(X=x|θ) L(θ∣x)=P(X=x∣θ)
问题:对于离原点比较远的情况,可能不需要非常大的梯度来更新参数。 - L1 Loss
l
(
y
,
y
′
)
=
∣
y
−
y
′
∣
l(y, y^{'}) = |y-y^{'}|
l(y,y′)=∣y−y′∣
蓝色为损失函数曲线,绿色为最大似然函数,橙色为梯度。L1 LOSS比较重要的特性是,对于预测值大于0的情况夏,Loss为1,小于0的情况下,Loss为-1。这样可以带来稳定性的好处。
问题:对于接近0的时候,可能出现-1和1之间的反复横跳。这是平滑性的问题。
- Huber’s Robust Loss
同时兼具了原点处的平滑性和原点外的稳定性。
信息论基础
- 熵
H [ P ] = ∑ j − P ( j ) log P ( j ) . H[P] = \sum_j - P(j) \log P(j). H[P]=j∑−P(j)logP(j).
为了对从分布 𝑝 中随机抽取的数据进行编码, 我们至少需要 𝐻[𝑃] “纳特(nat)”对其进行编码