[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
对类别进行有效编码:独热编码(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^
定义
l ( y , y ′ ) = 1 2 ( y − y ′ ) 2 l(y,y')=\frac{1}{2}(y-y')^2 l(y,y′)=21(y−y′)2
定义
l ( y , y ′ ) = ∣ y − y ′ ∣ l(y,y')=|y-y'| l(y,y′)=∣y−y′∣
定义
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
定义
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发生的概率低时,我们的惊异会更大。