文章目录
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 回归步骤
-
对类别进行有效编码:独热编码(one-hot encoding)
-
使用均方损失训练
-
最大值作为预测值:
arg max i y i ^ = arg max i o i \arg \max_i \hat{y_i} = \arg \max_i o_i argmaxiyi^=argmaxioi -
需要更置信的识别正确类(大余量):
o y − o i > Δ ( y , i ) o_y - o_i >\Delta(y,i) oy−oi>Δ(y,i) -
输出匹配概率(非负,和为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) -
交叉熵用来衡量两个概率的区别, H ( p , q ) = ∑ i − p i l o g ( q i ) H(p,q)=\sum_i -p_ilog(q_i) H(p,q)=∑i−pilog(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^)=−i∑qyilog(yi^)=−i∑qyilog∑k=1qexp(ok)exp(oi)=logk=1∑qexp(ok)−i=1∑qyioj -
梯度是真实概率和预测概率的区别:
∂ 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(Y∣X)=i=1∏nP(yi∣xi)
根据最大似然估计,我们最大化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(Y∣X)=i=1∑nl(yi,yi^)l(yi,yi^)=−j=1∑qyjlogyj^
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(y−y′)2
3.2 L1 Loss
定义
l
(
y
,
y
′
)
=
∣
y
−
y
′
∣
l(y,y')=|y-y'|
l(y,y′)=∣y−y′∣
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′)={∣y−y′∣−21,21(y−y′)2,if ∣y−y′∣>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)=i∑−pilog(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]=j∑−P(j)logP(j)
惊异
当我们不能完全预测每一个事件时,就会感到惊异。
−
log
P
(
j
)
-\log P(j)
−logP(j)
我们观察一个事件j时,当我们赋予j发生的概率低时,我们的惊异会更大。