x x x表示输出序列, y y y表示目标序列, rms \operatorname{rms} rms表示均方根, L = { l 1 ⋯ l n } L=\{l_1\cdots l_n\} L={ l1⋯ln}。
将mini-batch译为小批。
1 L1Loss
L 1 = ∣ x − y ∣ L_1=|x-y| L1=∣x−y∣
2 MSELoss
L = rms ( L 1 ) L=\operatorname{rms}(L_1) L=rms(L1)
3 CrossEntropyLoss
L = ∑ j y j ∑ i y i ( − log e x j ∑ i e x i ) L =\sum_j \frac{y_j}{\sum_i y_i}(-\log\frac{e^{x_j}}{\sum_i e^{x_i}}) L=j∑∑iyiyj(−log∑iexiexj)
注解:
熵是基于信息量这个概念,信息量被定义为概率分布的对数。例如现有事件空间X,其中 x ∈ X x\in X x∈X发生的概率为 P ( X = x ) = p ( x ) P(X=x)=p(x) P(X=x)=p(x),则对于 X = x X=x X=x的信息量为 I ( x ) = − log p ( x ) I(x)=-\log p(x) I(x)=−logp(x)。
可见概率越大的事件发生,则信息量越小,当 p ( x ) = 1 p(x)=1 p(x)=1时, x x x为必然事件,此时信息量为0。例如 1 + 1 = 2 1+1=2 1+1=2是必然的,那么当我们看到 1 + 1 = 2 1+1=2 1+1=2的时候,内心毫无波澜;但万一发现 1 + 1 = 3 1+1=3 1+1=3成立,那信息量太大将导致心态爆炸。
熵则表示系统中信息量总和,信息量越大代表越混乱。简单起见,考虑两点分布,对于事件 x x x,其发生的概率为 p p p,则不发生的概率为 1 − p 1-p 1−p,则其熵为这两种可能信息的期望:
H ( x ) = P ( x ) I ( x ) + P ( x ˉ ) I ( x ˉ ) = − p log p − ( 1 − p ) log ( 1 − p ) \begin{aligned} H(x) &= P(x)I(x)+P(\bar x)I(\bar x)\\ &= -p\log p-(1-p)\log(1-p) \end{aligned} H(x)=P(x)I(x)+P(xˉ)I(xˉ)=−plogp−(1−p)log(1−p)
若取对数的底为 a a a,则
H ′ ( p ) = − ln p − p 1 p ln a + ln ( 1 − p ) − ( 1 − p ) − 1 ( 1 − p ) ln a = − ln p − 1 ln a + ln ( 1 − p ) − ( − 1 ln a ) = ln 1 − p p \begin{aligned} H'(p)&=-\ln p-p\frac{1}{p\ln a}+\ln(1-p)-(1-p)\frac{-1}{(1-p)\ln a}\\ &=-\ln p-\frac{1}{\ln a}+\ln(1-p)-(-\frac{1}{\ln a})\\ &=\ln\frac{1-p}{p} \end{aligned} H′(p)=−lnp−pplna1+ln(1−p)−(1−p)(1−p)lna−1=−lnp−lna1+ln(1−p)−(−lna1)=lnp1−p
则当 p = 0.5 p=0.5 p=0.5时, H ′ ( p ) = 0 , H ′ ′ ( 0.5 ) = − 4 < 0 H'(p)=0,H''(0.5)=-4<0 H′(p)=0,H′′(0.5)=−4<0,代表此时有极大值。也就时说,发生与不发生的概率越是接近,则代表熵越大,即不确定性越大。
假设 x i ∈ X x_i\in X xi∈X为一组随机变量,其发生的概率为 p i p_i pi,则其熵为
H ( X ) = ∑ − p i log p i , ∑ p i = 1 H(X)=\sum -p_i\log p_i,\quad \sum p_i=1 H(X)=∑−pilogpi,∑pi=1
如果现有一组样本,概率分布为 q i q_i qi,则其对应的信息量为 − log q i -\log q_i −logqi。而我们希望这组样本的概率分布为 p i p_i pi。
对于事件 x i x_i xi而言,样本与目标信息量之差可以衡量样本与目标概率的相似程度;那么对于全体事件 X X X来说,这个信息差的期望则可以起到相似性度量的作用,即
D K L = ∑ p i ( log p i − log q i ) D_{KL}=\sum p_i(\log p_i- \log q_i) DKL=∑pi(logpi−logqi)
此即K-L散度,又叫相对熵,其绝对值越小,则代表样本和目标分布越相似。
目标概率分布 p i p_i pi往往是已知的,所以
D K L = ∑ p i log p i − ∑ p i log q i D_{KL}=\sum p_i\log p_i- \sum p_i\log q_i DKL=∑pilogpi−∑pilogqi
其取值将取决于第二项,此即交叉熵的来源
H ( p , q ) = − ∑ p i log q i H(p,q)=- \sum p_i\log q_i H(p,q)=−∑pilogqi
交叉熵恒大于0,故交叉熵越小,则样本分布越接近于目标分布。
在Pytorch中, y i ∑ i y i \frac{y_i}{\sum_i y_i} ∑iyiyi代表第 i i i种类别的目标概率; e x i ∑ i e x i \frac{e^{x_i}}{\sum_i e^{x_i}} ∑iexiexi则代表第 i i i种类别的输出概率。整理一下正是交叉熵公式。
4 KLDivLoss
即KL散度,详解见3.
5 BCELoss
即二进制交叉熵(Binary cross entropy)。
交叉熵即
H ( p , q ) = − ∑ p i log q i H(p,q)=- \sum p_i\log q_i H(p,q)=−∑pilogqi
其中, p i , q i p_i, q_i pi,qi分别表示目标和样本的概率分布。
对于二项分布而言,其交叉熵中的 q i q_i qi可以分为两种:即事件发生与事件不发生,分别表示为 y , 1 − y y, 1-y y,1−y,相应地,目标样本的概率可以写为 y ^ , 1 − y ^ \hat y, 1-\hat y y^,1−y^:
− y ln y ^ − ( 1 − y ) ln ( 1 − y ^ ) -y\ln\hat y-(1-y)\ln(1-\hat y) −ylny^−(1−y)ln(1−y^)
对于批量样本 { x i , y i } \{x_i, y_i\} { xi,yi},其样本概率也将不再唯一,可写为 y ^ i \hat y_i y^i,从而交叉熵的均值可以表示为
L B S E = ∑ i − y i ln x i − ( 1 − y i ) ln ( 1 − x i ) L_{BSE}=\sum_i-y_i\ln x_i-(1-y_i)\ln(1-x_i) LBSE=i∑−yilnxi−(1−yi)ln(1−xi)
例如下表的4组样本
i i i | y i y_i yi | x i x_i xi |
---|---|---|
0 | 1 | 0.8 |
1 | 0 | 0.1 |
2 | 0 | 0.1 |
3 | 1 | 0.9 |
则计算可得 L B S E = 0.53 L_{BSE}=0.53 LBSE=0.53。
6 BCEWithLogits
即在同一个类中封装了BCELoss外加一个Sigmoid层。
L = ∑ i − y i ln σ ( x i ) − ( 1 − y i ) ln ( 1 − σ ( x i ) ) L=\sum_i-y_i\ln\sigma(x_i)-(1-y_i)\ln(1-\sigma(x_i)) L=i∑−yilnσ(xi)−(1−yi)ln(1−σ(xi))
7 MarginRanking
可译为边距排序,其表达式为
L ( x 1 , x 2 , y ) = max ( 0 , − y ⋅ ( x 1 − x 2 ) + m ) L(x_1,x_2,y)=\max(0,-y\cdot(x_1-x_2)+\operatorname{m}) L(x1,x2,y)=max(0,−y⋅(x1−x2)+m)
y y y可取值1或者-1,从而上式变为
L 1 ( x 1 , x 2 ) = max ( 0 , x 2 − x 1 + m ) L − 1 ( x 1 , x 2 ) = max ( 0 , x 1 − x 2 + m ) L_1(x_1,x_2)=\max(0,x_2-x_1+\operatorname{m})\\ L_{-1}(x_1,x_2)=\max(0,x_1-x_2+\operatorname{m}) L1(x1,x2)=max(0,x2−x1+m)L−1(x1,x2)=max(0,x1−x2+m)
由于这两种情况呈现出完全相反的两种次序关系,所以只分析 L 1 L_1 L1,则此时损失函数不为0的条件为 x 2 > x 1 − m x_2>x_1-\operatorname{m} x2>x1−m。
8 HingeEmbedding
Hinge损失也针对二分类的情况,对于标签 y n y_n yn,可以取值为1或者-1,则损失为
l n = { x n , y n = 1 max 0 , Δ − x ) n , y n = − 1 l_n=\left\{\begin{aligned} &x_n,&y_n&=1\\ &\max{0,\Delta-x)n},&y_n&=-1 \end{aligned} \right. ln={ xn,max0,Δ−x)n,ynyn=1=−1
而总损失可以是 l n l_n ln的均值或和。
9 MultiLabelMargin
即多标签分类损失,是Hinge的多标签扩展,可以表示为
L ( x , y ) = ∑ i , j max ( 0 , 1 − ( x [ y j ] − x [ i ] ) ) x . s i z e [ 0 ] L(x,y)=\sum_{i,j}\frac{\max(0,1-(x[y_j]-x[i]))}{x.size[0]} L(x,y)=i,j∑x.size[0]max(0,1−(x[yj]−x[i]))
10 HuberLoss
Huber损失结合了L1和MSE损失的优点,
l n = { 0.5 ( x n − y n ) 2 , if ∣ x n − y n ∣ < δ δ ( ∣ x n − y n ∣ − 0.5 δ ) l_n=\left\{\begin{aligned} &0.5(x_n-y_n)^2,\quad \text{if} \vert x_n-y_n \vert < \delta\\ &\delta(\vert x_n-y_n \vert-0.5\delta) \end{aligned}\right. ln={ 0.5(xn−yn)2,if∣xn−yn∣<δδ(∣xn−yn∣−0.5δ)
当 δ → ∞ \delta\to\infty δ→∞时,即退化为MSELoss。
11 SmoothL1
即平滑版的L1损失,和MSE相比对异常值不敏感。
l n = { 0.5 ( x n − y n ) 2 / β , if ∣ x n − y n ∣ < β ∣ x n − y n ∣ − 0.5 β l_n=\left\{\begin{aligned} &0.5(x_n-y_n)^2/\beta,\quad \text{if}\quad\vert x_n-y_n \vert < \beta\\ &\vert x_n-y_n \vert-0.5\beta \end{aligned}\right. ln={ 0.5(xn−yn)2/β,if∣xn−yn∣<β∣xn−yn∣−0.5β
12 SoftMargin
为2分类的logistic损失,通过输入张量 x x x和输出张量 y y y来构建损失函数
L ( x , y ) = 1 N ∑ i log [ 1 + exp ( − x i y i ) ] L(x,y)=\frac{1}{N}\sum_i\log[1+\exp(-x_iy_i)] L(x,y)=N1i∑log[1+exp(−xiyi)]
13 MultiLabelSoftMargin
输入 x x x的尺寸为 N × C N\times C N×C,令 y i = ± 1 y_i=\pm1 yi=±1,则其损失函数如下
L ( x , y ) = − 1 C ∑ i y i log 1 1 + exp ( − x i ) + ( 1 − y i ) log exp ( − x i ) 1 + exp ( − x i ) L(x,y)=-\frac{1}{C}\sum_i y_i\log\frac{1}{1+\exp(-x_i)}+(1-y_i)\log\frac{\exp(-x_i)}{1+\exp(-x_i)} L(x,y)=−C1i∑yilog1+exp(−xi)1+(1−yi)log1+exp(−xi)exp(−xi)
14 CosinieEmbedding
即余弦损失。
L ( x , y ) = { 1 − cos ( x 1 , x 2 ) , if y = 1 max ( 0 , cos ( x 1 , x 2 ) − M ) if y = − 1 L(x,y)=\left\{\begin{aligned} &1-\cos(x_1,x_2),&\text{if}&\quad y=1\\ &\max(0,\cos(x_1,x_2)-M)&\text{if}&\quad y=-1 \end{aligned}\right. L(x,y)={ 1−cos(x1,x2),max(0,cos(x1,x2)−M)ifify=1y=−1
其中, M ∈ ( − 1 , 1 ) M\in(-1,1) M∈(−1,1),推荐区间为 ( 0 , 0.5 ) (0,0.5) (0,0.5)。
cos ( x , y ) \cos(x,y) cos(x,y)为余弦距离,表达式为
cos ( x , y ) = ∑ i x i y i ∑ i x i 2 ∑ i y i 2 \cos(x,y)=\frac{\sum_i{x_iy_i}}{\sqrt{\sum_ix_i^2}\sqrt{\sum_iy_i^2}} cos(x,y)=∑ixi2∑iyi2∑ixiyi
15 MultiMargin
L ( x , y ) = ∑ i ≠ y max ( 0 , M − x y + x i ) p N L(x,y)=\frac{\sum_{i\not=y}\max(0,M-x_y+x_i)^p}{N} L(x,y)=N∑i=ymax(0,M−xy+xi)p
其中,输入 x x x是二维的小批张量(mini-batch tensor), y ∈ ( 0 , N ) y\in(0,N) y∈(0,N)。
16 TripletMargin
L ( α , β , γ ) = max ( ∥ α i − β i ∥ p − ∥ α i − γ i ∥ p + m , 0 ) L(\alpha,\beta,\gamma)=\max\big(\Vert \alpha_i-\beta_i\Vert_p-\Vert\alpha_i-\gamma_i\Vert_p+m,0\big) L(α,β,γ)=max(∥αi−βi∥p−∥αi−γi∥p+m,0)
即三元组损失,其中 α , β , γ \alpha,\beta,\gamma α,β,γ为输入的三个同维度张量。
17 CTC
L ( s ) = − ln Π ( x , z ) ∈ S P ( z ∣ x ) = − ∑ ( x , z ) ∈ S ln P ( z ∣ x ) L(s)=-\ln\Pi_{(x,z)\in S}P(z|x)=-\sum_{(x,z)\in S}\ln P(z|x) L(s)=−lnΠ(x,z)∈SP(z∣x)=−(x,z)∈S∑lnP(z∣x)
设 x x x为输入,记 y k t y_k^t ykt为 t t t输出 k k k的概率, π t \pi_t πt表示路径 π \pi π在 t t t时刻的值。若 y y y在不同时刻是互相独立的,则输入 x x x输出 π \pi π路径的概率为
p ( π ∣ x ) = ∏ t = 1 T y π t t , ∀ π ∈ L ′ T p(\pi|x)=\prod^T_{t=1}y^t_{\pi_t},\forall\pi\in L'^T p(π∣x)=t=1∏Tyπtt,∀π∈L′T
其中, L L L是标签集合, L ′ = L ∪ { b l a n k } L'=L\cup\{blank\} L′=L∪{ blank}。
z z z表示最终的标签,则
p ( z ∣ x ) = ∑ π ∈ B − 1 ( z ) p ( π ∣ x ) , B ( π ) = z p(z|x)=\sum_{\pi\in B^{-1}(z)}p(\pi|x),\quad B(\pi)=z p(z∣x)=π∈B−1(z)∑p(π∣x),B(π)=z
则根据损失函数的定义,可计算其递推关系。
18 NLL
负对数似然损失的表达式可以写为
L = ∑ − log x [ y ] L=\sum-\log x[y] L=∑−logx[y]
但在pytorch中并未取对数,所以需要在适用NLLLoss之前,进行softmax和对数的运算。
softmax是一种概率归一化方法,定义为
S ( x i ) = exp x i ∑ j exp x j S(x_i)=\frac{\exp x_i}{\sum_j\exp x_j} S(xi)=∑jexpxjexpxi
而pytorch中的LogSoftmax
则为
L S ( x i ) = log exp x i ∑ j exp x j LS(x_i)=\log\frac{\exp x_i}{\sum_j\exp x_j} LS(xi)=log∑jexpxjexpxi