动手学深度学习Pytorch(二)——softmax回归

文章目录

  • 1. 参考资料
  • 2. softmax回归
    • 2.1 特点
    • 2.2 回归步骤
  • 3. 损失函数
    • 3.1 L2 Loss
    • 3.2 L1 Loss
    • 3.3 Huber's Robust Loss
    • 3.4 交叉熵损失

1. 参考资料

[1] 动手学深度学习 v2 - 从零开始介绍深度学习算法和代码实现
课程主页:https://courses.d2l.ai/zh-v2/
教材:https://zh-v2.d2l.ai/
[2] 李沐老师B站视频:https://www.bilibili.com/video/BV1K64y1Q7wu?spm_id_from=333.999.0.0

2. softmax回归

2.1 特点

  • 通常多个输出,是一个多分类模型
  • 输出i是预测i类的概率
  • 使用交叉熵衡量预测和标号的区别
  • 尽管softmax是一个非线性函数,但softmax回归仍然为线性回归

2.2 回归步骤

  1. 对类别进行有效编码:独热编码(one-hot encoding)

  2. 使用均方损失训练

  3. 最大值作为预测值:
    arg ⁡ max ⁡ i y i ^ = arg ⁡ max ⁡ i o i \arg \max_i \hat{y_i} = \arg \max_i o_i argmaxiyi^=argmaxioi

  4. 需要更置信的识别正确类(大余量):
    o y − o i > Δ ( y , i ) o_y - o_i >\Delta(y,i) oyoi>Δ(y,i)

  5. 输出匹配概率(非负,和为1)
    y ^ = s o f t m a x ( o ) y i ^ = exp ⁡ ( o i ) ∑ k exp ⁡ ( o k ) \hat{y} = softmax(o) \\ \hat{y_i} = \frac{\exp(o_i)}{\sum_k \exp(o_k)} y^=softmax(o)yi^=kexp(ok)exp(oi)

  6. 交叉熵用来衡量两个概率的区别, H ( p , q ) = ∑ i − p i l o g ( q i ) H(p,q)=\sum_i -p_ilog(q_i) H(p,q)=ipilog(qi)
    把交叉熵作为损失可得:
    l ( y , y ^ ) = − ∑ i q y i l o g ( y i ^ ) = − ∑ i q y i log ⁡ exp ⁡ ( o i ) ∑ k = 1 q exp ⁡ ( o k ) = log ⁡ ∑ k = 1 q exp ⁡ ( o k ) − ∑ i = 1 q y i o j l(y,\hat{y})=-\sum_i^q y_ilog(\hat{y_i})=-\sum_i^q y_i \log \frac{\exp(o_i)}{\sum_{k=1}^q \exp(o_k)} \\ =\log \sum_{k=1}^q \exp(o_k) - \sum_{i=1}^q y_i o_j l(y,y^)=iqyilog(yi^)=iqyilogk=1qexp(ok)exp(oi)=logk=1qexp(ok)i=1qyioj

  7. 梯度是真实概率和预测概率的区别:
    ∂ l ( y , y ^ ) = exp ⁡ ( o j ) ∑ k = 1 q exp ⁡ ( o k ) − y j = s o f t m a x ( o j ) − y j \partial l(y,\hat{y}) = \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)}-y_j\\ = softmax(o_j)-y_j l(y,y^)=k=1qexp(ok)exp(oj)yj=softmax(oj)yj

理解:
(1)我们希望输出的 y j ^ \hat{y_j} yj^可以作为类j的概率 ,然后选择具有最大输出值的类别。
(2)要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。 所以未规范化的预测 o i o_i oi不能作为输出概率。
(3)softmax函数将未规范化的预测变换为非负并且总和为1,同时要求模型保持可导。
y ^ = s o f t m a x ( o ) ,   y j ^ = exp ⁡ ( o j ) ∑ k exp ⁡ ( o k ) \hat{y} = softmax(o),\ \hat{y_j}=\frac{\exp(o_j)}{\sum_k \exp(o_k)} y^=softmax(o), yj^=kexp(ok)exp(oj)

由于softmax运算不会改变预测o之间的顺序,因此在预测过程中我们仍然可以用下式选择最有可能的类别:
arg ⁡ max ⁡ i y i ^ = arg ⁡ max ⁡ i o i \arg \max_i \hat{y_i} = \arg \max_i o_i argimaxyi^=argimaxoi

(4)现在,我们将使用最大似然估计来度量预测的效果。
P ( Y ∣ X ) = ∏ i = 1 n P ( y i ∣ x i ) P(Y|X) = \prod_{i=1}^n P(y^i|x^i) P(YX)=i=1nP(yixi)

根据最大似然估计,我们最大化P(Y|X)相当于最小化负对数似然:
− log ⁡ P ( Y ∣ X ) = ∑ i = 1 n l ( y i , y i ^ ) l ( y i , y i ^ ) = − ∑ j = 1 q y j log ⁡ y j ^ -\log P(Y|X) = \sum_{i=1}^n l(y^i,\hat{y^i}) \\ l(y^i,\hat{y^i}) = -\sum_{j=1}^q y_j \log \hat{y_j} logP(YX)=i=1nl(yi,yi^)l(yi,yi^)=j=1qyjlogyj^

3. 损失函数

3.1 L2 Loss

定义
l ( y , y ′ ) = 1 2 ( y − y ′ ) 2 l(y,y')=\frac{1}{2}(y-y')^2 l(y,y)=21(yy)2

3.2 L1 Loss

定义
l ( y , y ′ ) = ∣ y − y ′ ∣ l(y,y')=|y-y'| l(y,y)=yy

3.3 Huber’s Robust Loss

定义
l ( y , y ′ ) = { ∣ y − y ′ ∣ − 1 2 , i f   ∣ y − y ′ ∣ > 1 1 2 ( y − y ′ ) 2 , o t h e r w i s e l(y,y')=\begin{cases} |y-y'|-\frac{1}{2}, & if \ |y-y'| >1 \\ \frac{1}{2}(y-y')^2, & otherwise \end{cases} l(y,y)={yy21,21(yy)2,if yy>1otherwise

3.4 交叉熵损失

定义
H ( p , q ) = ∑ i − p i log ⁡ ( q i ) H(p,q)=\sum_i -p_i \log(q_i) H(p,q)=ipilog(qi)

可以理解为“主观概率为Q的观察者看到由概率P生成的数据时的预期惊异”。当 P = Q P=Q P=Q时,交叉熵达到最低。

  • 最大化观测数据的似然
  • 最小化传达标签所需的惊异


数据中的信息内容被称为分布P的熵
H [ P ] = ∑ j − P ( j ) log ⁡ P ( j ) H[P] = \sum_j -P(j) \log P(j) H[P]=jP(j)logP(j)

惊异
当我们不能完全预测每一个事件时,就会感到惊异。
− log ⁡ P ( j ) -\log P(j) logP(j)

我们观察一个事件j时,当我们赋予j发生的概率低时,我们的惊异会更大。

你可能感兴趣的:(深度学习,深度学习,pytorch,回归)