交叉熵损失的来源、说明、求导与pytorch实现
1. (信息)熵
一条信息的信息量大小和它的不确定性有直接关系。给定一个离散的随机变量xxx,信息的度量依赖于概率分布p(x)p(x)p(x),此时需要求出一个函数I(x)I(x)I(x)来表示信息的内容,它应该是概率p(x)p(x)p(x)的单调函数。
假设现在有两个不相关的事件xxx和yyy,那么观察到两个事件同时发生时获得的信息量应该等于观察到各自发生时获得的信息之后即:I(x,y)=I(x)+I(y)I(x,y)=I(x)+I(y)I(x,y)=I(x)+I(y),而且由于这两个事件不相关则有p(x,y)=p(x)p(y)p(x,y)=p(x)p(y)p(x,y)=p(x)p(y),可以看出概率p(x)p(x)p(x)的函数I(x)I(x)I(x)与p(x)p(x)p(x)的对数存在一定的关系(cause: loga(mn)=logam+loganlog_a(mn)=log_am+log_anloga(mn)=logam+logan),由此得:I(x)=−logp(x)I(x)=-logp(x)I(x)=−logp(x)。
其中负号用来保证信息量非负,logloglog的基数是任意选择的(信息论中通常选择2,机器学习青睐自然常数eee),I(x)I(x)I(x)也被称为随机变量xxx的自行西,描述随机变量的某个事件发生所带来的信息量。
若将该随机变量由发送者传输给接收者,整个过程传输的平均信息量即I(x)I(x)I(x)关于概率分布p(x)p(x)p(x)的期望得到,即:
H(X)=−∑xp(x)logp(x)=−∑i=1np(xi)logp(xi)H(X)=-\sum_xp(x)logp(x)=-\sum_{i=1}^np(x_i)logp(x_i) H(X)=−x∑p(x)logp(x)=−i=1∑np(xi)logp(xi)
H(X)H(X)H(X)就称为随机变量xxx的熵,表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望,从公式中可以看到随机变量的取值个数越多,状态数也就越多,信息上就越大,混乱程度就越大,当随机分布为均匀分布时,熵最大,且0≤H(X)≤logn0\leq H(X) \leq logn0≤H(X)≤logn,
证明:
因为p(1)+p(2)+...+p(n)=1p(1)+p(2)+...+p(n)=1p(1)+p(2)+...+p(n)=1,所以有目标函数:f(p(1),p(2),...,p(n))=−(p(1)logp(1)+...+p(n)logp(n))f(p(1),p(2),...,p(n))=-(p(1)logp(1)+...+p(n)logp(n))f(p(1),p(2),...,p(n))=−(p(1)logp(1)+...+p(n)logp(n)),约束条件:g(p(1),...,p(n),λ)=p(1)+...+p(n)−1=0g(p(1),...,p(n),\lambda)=p(1)+...+p(n)-1=0g(p(1),...,p(n),λ)=p(1)+...+p(n)−1=0,定义拉格朗日函数:L(p(1),...,p(n),λ)=−(p(1)logp(1)+...+p(n)logp(n))+λ(p(1)+...+p(n)−1)L(p(1),...,p(n),\lambda)=-(p(1)logp(1)+...+p(n)logp(n))+\lambda(p(1)+...+p(n)-1)L(p(1),...,p(n),λ)=−(p(1)logp(1)+...+p(n)logp(n))+λ(p(1)+...+p(n)−1)分别对p(1),p(2),...,p(n)p(1),p(2),...,p(n)p(1),p(2),...,p(n)求偏导,令偏导数为0,则有:
λ−log(e⋅(1))=0\lambda-log(e \cdotp(1))=0λ−log(e⋅(1))=0,
λ−log(e⋅(2))=0\lambda-log(e \cdotp(2))=0λ−log(e⋅(2))=0,
…
λ−log(e⋅(n))=0\lambda-log(e \cdotp(n))=0λ−log(e⋅(n))=0,
可知p(1),...,p(n)p(1),...,p(n)p(1),...,p(n)都相等且和为1,此时得:p(1)=...p(n)=1np(1)=...p(n)=\frac{1}{n}p(1)=...p(n)=n1,带入函数求得极值f(1n,...,1n)=−(1nlog1n×n)=−log(1n)=lognf(\frac{1}{n},...,\frac{1}{n})=-(\frac{1}{n}log\frac{1}{n} \times n)=-log(\frac{1}{n})=lognf(n1,...,n1)=−(n1logn1×n)=−log(n1)=logn
举个栗子:加入该随机变量有四种可能状态且每个状态等可能发生,则传输过程需要H(X)=−4×14log214=2bitsH(X)=-4 \times \frac{1}{4}log_2\frac{1}{4}=2 bitsH(X)=−4×41log241=2bits的信息量,若四种可能的状态出现的概率不等,各自为{0.5,0.25,0.125,0.125},此时熵为:H(X)=−0.5log20.5−0.25log20.25−2×0.125log20.125=1.75bitsH(X)=-0.5log_20.5-0.25log_20.25-2 \times 0.125log_20.125=1.75bitsH(X)=−0.5log20.5−0.25log20.25−2×0.125log20.125=1.75bits,可以看出非均匀分布要比均匀分布的熵小,如果要把变量状态的类别传递给接收者,用0、10、110、111表示四个出现概率不一致的状态,传输的编码的平均长度:ACL=0.5×1+0.25×2+2×0.125×3=1.75bitsaACL=0.5 \times 1+0.25 \times 2+2 \times 0.125 \times3=1.75bitsaACL=0.5×1+0.25×2+2×0.125×3=1.75bitsa,熵和最短编码长度的相等关系在香农编码定理中具体阐述,即熵是传输一个随机变量状态值所需的比特位下界,因此信息熵也可以应用在数据压缩方面。
2. 条件熵
条件熵H(Y∣X)H(Y|X)H(Y∣X)表示已知随机变量XXX的条件下随机变量YYY的不确定性:
H(Y∣X)=∑xp(x)H(Y∣X=x)=−∑xp(x)∑yp(y∣x)logp(y∣x)=−∑x∑yp(x,y)logp(y∣x)=−∑x,yp(x,y)logp(y∣x)H(Y|X)=\sum_xp(x)H(Y|X=x)\\ =-\sum_xp(x)\sum_yp(y|x)logp(y|x)\\ =-\sum_x\sum_yp(x,y)logp(y|x)\\ =-\sum_{x,y}p(x,y)logp(y|x) H(Y∣X)=x∑p(x)H(Y∣X=x)=−x∑p(x)y∑p(y∣x)logp(y∣x)=−x∑y∑p(x,y)logp(y∣x)=−x,y∑p(x,y)logp(y∣x)
3. 相对熵(KL散度)
设p(x),q(x)p(x),q(x)p(x),q(x)是离散随机变量XXX中取值的两个概率分布,则ppp对qqq的相对熵:
DKL(p∣∣q)=∑xp(x)logp(x)q(x)=Ep(x)logp(x)q(x)D_{KL}(p||q)=\sum_xp(x)log\frac{p(x)}{q(x)}=E_{p(x)}log\frac{p(x)}{q(x)} DKL(p∣∣q)=x∑p(x)logq(x)p(x)=Ep(x)logq(x)p(x)
有如下性质:
r若p(x)p(x)p(x)和q(x)q(x)q(x)分布相同,则相对熵为0
DKL(p∣∣q)!=DKL(q∣∣p)D_{KL}(p||q) != D_{KL}(q||p)DKL(p∣∣q)!=DKL(q∣∣p),即相对熵不具有对称性
DKL(p∣∣q)≥0D_{KL}(p||q)\geq0DKL(p∣∣q)≥0,证明:
DKL(p∣∣q)=∑xp(x)logp(x)q(x)=−∑xp(x)logq(x)p(x)=−Ep(x)(logq(x)p(x))≥−logEp(x)(q(x)p(x))=−log∑xp(x)q(x)p(x)=−log∑xq(x)=0D_{KL}(p||q)=\sum_xp(x)log\frac{p(x)}{q(x)}\\ =-\sum_xp(x)log\frac{q(x)}{p(x)}\\ =-E_{p(x)}\left(log\frac{q(x)}{p(x)}\right)\\ \geq -logE_{p(x)}(\frac{q(x)}{p(x)})\\ =-log\sum_xp(x)\frac{q(x)}{p(x)}\\ =-log\sum_xq(x)=0 DKL(p∣∣q)=x∑p(x)logq(x)p(x)=−x∑p(x)logp(x)q(x)=−Ep(x)(logp(x)q(x))≥−logEp(x)(p(x)q(x))=−logx∑p(x)p(x)q(x)=−logx∑q(x)=0
综上相对熵用来很亮两个概率分布之间的差异,即求ppp和qqq之间的对数差在ppp上的期望值。
4. 交叉熵
有两个关于样本集的概率分布p(x)p(x)p(x)和q(x)q(x)q(x),其中p(x)p(x)p(x)为真实分布,q(x)q(x)q(x)为非真实分布,若用真实分布p(x)p(x)p(x)来衡量识别一个样本所需要编码长度的期望(平均编码长度)为:H(p)=∑xp(x)log1p(x)H(p)=\sum_xp(x)log\frac{1}{p(x)}H(p)=∑xp(x)logp(x)1,若使用非真实分布q(x)q(x)q(x)来表示来自真实分布p(x)p(x)p(x)的平均编码长度,则为:H(p,q)=∑xp(x)log1q(x)H(p,q)=\sum_xp(x)log\frac{1}{q(x)}H(p,q)=∑xp(x)logq(x)1,此时称H(p,q)H(p,q)H(p,q)为交叉熵。举个栗子:一个随机变量xxx,真实分布p(x)=(0.5,0.25,0.125,0.125)p(x)=(0.5,0.25,0.125,0.125)p(x)=(0.5,0.25,0.125,0.125),非真实分布q(x)=(0.25,0.25,0.25,0.25)q(x)=(0.25,0.25,0.25,0.25)q(x)=(0.25,0.25,0.25,0.25),则H(p)=1.75bits,H(p,q)=2bitsH(p)=1.75bits,H(p,q)=2bitsH(p)=1.75bits,H(p,q)=2bits。
简化一下相对熵:DKL(p∣∣q)=∑xp(x)logp(x)q(x)=∑xp(x)logp(x)−p(x)logq(x)=H(p,q)−H(p)D_{KL}(p||q)=\sum_xp(x)log\frac{p(x)}{q(x)}=\sum_xp(x)logp(x)-p(x)logq(x)=H(p,q)-H(p)DKL(p∣∣q)=∑xp(x)logq(x)p(x)=∑xp(x)logp(x)−p(x)logq(x)=H(p,q)−H(p)
已经证明DKL(p∣∣q)≥0D_{KL}(p||q) \geq 0DKL(p∣∣q)≥0,所以H(p,q)≥H(p)H(p,q)\geq H(p)H(p,q)≥H(p),当p(x)=q(x)p(x)=q(x)p(x)=q(x)时,此时交叉熵等于信息熵,当H§为常量时,最小化相对熵等价于最小化交叉熵也等价于最大似然估计。
希望模型学到的分布和训练数据的分布尽量相同,则可以通过最小化训练数据的经验误差来降低模型的泛化误差。交叉熵可以用来计算学习模型分布和训练分布的差异,由此引出交叉熵损失。
5.交叉熵损失函数
5.1 交叉熵+Sigmoid
二分类问题中,真实样本的标签[0,1],模型最后通常通过一个Sigmoid函数,输出一个概率值,概率越大属于正类的可能性越大,Sigmoid公式如下:
g(s)=11+e−sg(s)=\frac{1}{1+e^{-s}} g(s)=1+e−s1
其中s是模型上一层的输出,这里g(s)就是交叉熵公式中的模型预测输出,表征了当前样本标签为1的概率:
y^=P(y=1∣x)\hat y=P(y=1|x) y^=P(y=1∣x)
很明显当前样本标签为0的概率为:
1−y^=P(y=0∣x)1-\hat y=P(y=0|x) 1−y^=P(y=0∣x)
从极大似然的角度出发,整合在一起有:
P(y∣x)=y^y⋅(1−y^)1−yP(y|x)=\hat y^y \cdot (1-\hat y)^{1-y} P(y∣x)=y^y⋅(1−y^)1−y
当真实样本标签y=0,则P(y=0∣x)=1−y^P(y=0|x)=1-\hat yP(y=0∣x)=1−y^,当真实样本标签y=1,则P(y=1∣x)=y^P(y=1|x)=\hat yP(y=1∣x)=y^。
引入不影响单调性的对数运算有:
logP(y∣x)=ylog(y^)+(1−y)log(1−y^)logP(y|x)=ylog(\hat y)+(1-y)log(1-\hat y) logP(y∣x)=ylog(y^)+(1−y)log(1−y^)
希望P(y∣x)P(y|x)P(y∣x)越大越好,即令−logP(y∣x)-logP(y|x)−logP(y∣x)越小越好,引入损失函数Loss=−logP(y∣x)Loss=-logP(y|x)Loss=−logP(y∣x),得单个样本的损失函数:
L=−[ylog(y^)+(1−y)log(1−y^)]L=-[ylog(\hat y)+(1-y)log(1-\hat y)] L=−[ylog(y^)+(1−y)log(1−y^)] N个样本的总损失函数:
L=−∑i=1N[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]L=-\sum_{i=1}^N[y^{(i)}log(\hat y^{(i)})+(1-y^{(i)})log(1-\hat y^{(i)})] L=−i=1∑N[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
在二分类的情况下,损失函数学习过程如下,求导过程可以拆分为三个子过程:
∂Li∂wi=1N∂Li∂wi=1N∂Li∂pi⋅∂pi∂si⋅∂si∂wi\frac{\partial L_i}{\partial w_i}=\frac{1}{N}\frac{\partial L_i}{\partial w_i}=\frac{1}{N}\frac{\partial L_i}{\partial p_i}\cdot \frac{\partial p_i}{\partial s_i}\cdot \frac{\partial s_i}{\partial w_i}\\ ∂wi∂Li=N1∂wi∂Li=N1∂pi∂Li⋅∂si∂pi⋅∂wi∂si
第一项∂Li∂pi\frac{\partial L_i}{\partial p_i}∂pi∂Li,因为:
Li=−[yi⋅log(pi)+(1−yi)⋅log(1−pi)]L_i = -[y_i\cdot log(p_i) + (1-y_i)\cdot log(1-p_i)] Li=−[yi⋅log(pi)+(1−yi)⋅log(1−pi)]
所以:
∂Li∂pi=∂−[yi⋅log(pi)+(1−yi)⋅log(1−pi)]∂pi=−yipi−[(1−yi)⋅11−pi⋅(−1)]=−yipi+1−yi1−pi\begin{aligned} \frac{\partial L_i}{\partial p_i} &=\frac{\partial -[y_i\cdot log(p_i) + (1-y_i)\cdot log(1-p_i)]}{\partial p_i}\\ &= -\frac{y_i}{p_i}-[(1-y_i)\cdot \frac{1}{1-p_i}\cdot (-1)] \\ &= -\frac{y_i}{p_i}+\frac{1-y_i}{1-p_i} \\ \end{aligned} \\ ∂pi∂Li=∂pi∂−[yi⋅log(pi)+(1−yi)⋅log(1−pi)]=−piyi−[(1−yi)⋅1−pi1⋅(−1)]=−piyi+1−pi1−yi
第二项∂pi∂si\frac{\partial p_i}{\partial s_i}∂si∂pi,又因为:
p=σ(s)=es1+esp = \sigma(s) = \frac{e^{s}}{1+e^{s}} p=σ(s)=1+eses
f′(x)=g(x)h(x)=g′(x)h(x)−g(x)h′(x)h2(x)f'(x) = \frac{g(x)}{h(x)}=\frac{g'(x)h(x)-g(x){h}'(x)}{h^2(x)} \\ f′(x)=h(x)g(x)=h2(x)g′(x)h(x)−g(x)h′(x)
所以:
∂pi∂si=(esi)′⋅(1+esi)−esi⋅(1+esi)′(1+esi)2=esi⋅(1+esi)−esi⋅esi(1+esi)2=esi(1+esi)2=esi1+esi⋅11+esi=σ(si)⋅[1−σ(si)]\begin{aligned} \frac{\partial p_i}{\partial s_i} &= \frac{(e^{s_i})'\cdot (1+e^{s_i})-e^{s_i}\cdot (1+e^{s_i})'}{(1+e^{s_i})^2} \\ &= \frac{e^{s_i}\cdot (1+e^{s_i})-e^{s_i}\cdot e^{s_i}}{(1+e^{s_i})^2} \\ &= \frac{e^{s_i}}{(1+e^{s_i})^2} \\ &= \frac{e^{s_i}}{1+e^{s_i}}\cdot \frac{1}{1+e^{s_i}} \\ &= \sigma(s_i)\cdot [1-\sigma(s_i)] \\ \end{aligned} \\ ∂si∂pi=(1+esi)2(esi)′⋅(1+esi)−esi⋅(1+esi)′=(1+esi)2esi⋅(1+esi)−esi⋅esi=(1+esi)2esi=1+esiesi⋅1+esi1=σ(si)⋅[1−σ(si)]
第三项∂si∂wi\frac{\partial s_i}{\partial w_i \\}∂wi∂si,通常scores是输入的线性函数作用的结果,有:
∂si∂wi=xi\frac{\partial s_i}{\partial w_i}=x_i \\ ∂wi∂si=xi
最终结果:
∂Li∂wi=∂Li∂pi⋅∂pi∂si⋅∂si∂wi=[−yipi+1−yi1−pi]⋅σ(si)⋅[1−σ(si)]⋅xi=[−yiσ(si)+1−yi1−σ(si)]⋅σ(si)⋅[1−σ(si)]⋅xi=[−yiσ(si)⋅σ(si)⋅(1−σ(si))+1−yi1−σ(si)⋅σ(si)⋅(1−σ(si))]⋅xi=[−yi+yi⋅σ(si)+σ(si)−yi⋅σ(si)]⋅xi=[σ(si)−yi]⋅xi\begin{aligned} \frac{\partial L_i}{\partial w_i} &= \frac{\partial L_i}{\partial p_i}\cdot \frac{\partial p_i}{\partial s_i}\cdot \frac{\partial s_i}{\partial w_i} \\ &= [-\frac{y_i}{p_i}+\frac{1-y_i}{1-p_i}] \cdot \sigma(s_i)\cdot [1-\sigma(s_i)]\cdot x_i \\ &= [-\frac{y_i}{\sigma(s_i)}+\frac{1-y_i}{1-\sigma(s_i)}] \cdot \sigma(s_i)\cdot [1-\sigma(s_i)]\cdot x_i \\ &= [-\frac{y_i}{\sigma(s_i)}\cdot \sigma(s_i)\cdot (1-\sigma(s_i))+\frac{1-y_i}{1-\sigma(s_i)}\cdot \sigma(s_i)\cdot (1-\sigma(s_i))]\cdot x_i \\ &= [-y_i+y_i\cdot \sigma(s_i)+\sigma(s_i)-y_i\cdot \sigma(s_i)]\cdot x_i \\ &= [\sigma(s_i)-y_i]\cdot x_i \\ \end{aligned} \\ ∂wi∂Li=∂pi∂Li⋅∂si∂pi⋅∂wi∂si=[−piyi+1−pi1−yi]⋅σ(si)⋅[1−σ(si)]⋅xi=[−σ(si)yi+1−σ(si)1−yi]⋅σ(si)⋅[1−σ(si)]⋅xi=[−σ(si)yi⋅σ(si)⋅(1−σ(si))+1−σ(si)1−yi⋅σ(si)⋅(1−σ(si))]⋅xi=[−yi+yi⋅σ(si)+σ(si)−yi⋅σ(si)]⋅xi=[σ(si)−yi]⋅xi
5.2 交叉熵+Softmax
同Sigmoid一样,softmax可以作为分类任务的输出层,输出几个类别选择的概率,公式如下:
Si=ezi∑kezkS_i=\frac{e^{z_i}}{\sum_ke^{z_k}} Si=∑kezkezi
其中ziz_izi表示网络的第iii个输出:
zi=∑jwijxij+bz_i=\sum_jw_{ij}x_{ij}+b zi=j∑wijxij+b
其中wij是第i个神经元的第j个权重,b是偏移值w_{ij}是第i个神经元的第j个权重,b是偏移值wij是第i个神经元的第j个权重,b是偏移值,加一个softmax函数就变成了上面的SiS_iSi公式,表示softmax函数的第iii个输出。
神经网络反向传播中需要一个损失函数,表示真实值和网络估计值的误差,知道误差才能知道怎样修改网络的权重,而选择交叉熵损失的原因主要是因为求导结果简单便于计算,而且可以解决某些损失函数学习缓慢的问题,交叉熵函数表示为:
C=−∑iyilnSiC=-\sum_iy_ilnS_i C=−i∑yilnSi
yiy_iyi表示真实的分类结果,SiS_iSi是softmax的输出值,然后求loss对神经元输出ziz_izi的梯度,即:
∂C∂zi\frac{\partial C}{\partial z_i} ∂zi∂C
根据复合函数求导法则:
∂C∂zi=∂C∂Sj∂Sj∂zi\frac{\partial C}{\partial z_i}=\frac{\partial C}{\partial S_j} \frac{\partial S_j}{\partial z_i} ∂zi∂C=∂Sj∂C∂zi∂Sj
这里是SjS_jSj而不是SiS_iSi,是因为softmax公式的分母包含了所有神经元的输出,对于不等于iii的其他输出也包含着ziz_izi,所有的SSS都要纳入计算范围,其中:
∂C∂Sj=∂(−∑jyjlnSj)∂Sj=−∑jyj1Sj\frac{\partial C}{\partial S_j}=\frac{\partial(-\sum_jy_jlnS_j)}{\partial S_j}=-\sum_jy_j\frac{1}{S_j} ∂Sj∂C=∂Sj∂(−∑jyjlnSj)=−j∑yjSj1
后半部分分两种情况:
- 若i=j:∂Si∂zi=∂(ezi∑kezk)∂zi=∑kezkezi−(ezi)2∑k(ezk)2=(ezi∑kezk)(1−ezi∑kezk)=Si(1−Si)若i=j:\\ \frac{\partial S_i}{\partial z_i}=\frac{\partial (\frac{e^{z_i}}{\sum_ke^{z_k}})}{\partial z_i}=\frac{\sum_ke^{z_k}e^{z_i}-(e^{z_i})^2}{\sum_k(e^{z_k})^2}\\=(\frac{e^{z_i}}{\sum_ke^{z_k}})(1-\frac{e^{z_i}}{\sum_ke^{z_k}})=S_i(1-S_i) 若i=j:∂zi∂Si=∂zi∂(∑kezkezi)=∑k(ezk)2∑kezkezi−(ezi)2=(∑kezkezi)(1−∑kezkezi)=Si(1−Si)
若i!=j:∂Sj∂zi=∂(ezj∑kezk)∂zi=−ezj(1∑kezk)ezi=−SiSj若i !=j:\\ \frac{\partial S_j}{\partial z_i}=\frac{\partial (\frac{e^{z_j}}{\sum_ke^{z_k}})}{\partial z_i}\\=-e^{z_j}(\frac{1}{\sum_ke^{z_k}})e^{z_i}=-S_iS_j 若i!=j:∂zi∂Sj=∂zi∂(∑kezkezj)=−ezj(∑kezk1)ezi=−SiSj
上面两种情况组合起来:
∂C∂zi=(−∑jyj1Sj)∂Sj∂zi=−yiSiSi(1−Si)+∑j!=iyjSjSiSj=−yi+yiSi+∑j!=iyiSi=−yi+Si∑jyj\frac{\partial C}{\partial z_i}=(-\sum_jy_j\frac{1}{S_j})\frac{\partial S_j}{\partial z_i}\\ =-\frac{y_i}{S_i}S_i(1-S_i)+\sum_{j!=i}\frac{y_j}{S_j}S_iS_j\\ =-y_i+y_iS_i+\sum_{j!=i}y_iS_i\\ =-y_i+S_i\sum_jy_j ∂zi∂C=(−j∑yjSj1)∂zi∂Sj=−SiyiSi(1−Si)+j!=i∑SjyjSiSj=−yi+yiSi+j!=i∑yiSi=−yi+Sij∑yj
6. 交叉熵损失pytorch实现
from torch import nn
loss = nn.CrossEntropyLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
output = loss(input, target)
output.backward()其中有几个参数:
weight (Tensor, optional): 每一个类的权重,可选,是一个尺寸为CCC(类别数)的张量。
size_average (bool, optional): 布尔值,可选。若为“Default”,一个批次中所有样本的损失求和后平均;若为"False", 求和不平均。
ignore_index (int, optional): 指定值对梯度没有贡献
reduce (bool, optional): 设置为"False",忽略size_average
reduction(string,optional): 为"mean",输出求平均;为"sum",求和。
参考了以下文章:
- 详解机器学习中的熵、条件熵、相对熵和交叉熵
- 简单的交叉熵损失函数
- 简单的softmax交叉熵损失函数求导
- 损失函数 - 交叉熵损失函数
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]
交叉熵损失的来源、说明、求导与pytorch实现相关推荐
- 交叉熵损失函数公式_交叉熵损失函数对其参数求导
1.Sigmoid 二分类交叉熵 交叉熵公式: 其中y是laebl:0 或1. hθ(xi)是经过sigmoid得到的预测概率.θ为网络的参数, m为样本数. hθ()函数如下所示, J(θ) 对参数 ...
- Softmax函数下的交叉熵损失含义与求导
交叉熵损失函数(CrossEntropy Function)是分类任务中十分常用的损失函数,但若仅仅看它的形式,我们不容易直接靠直觉来感受它的正确性,因此我查阅资料写下本文,以求彻底搞懂. 1.Sof ...
- 【机器学习】 二次损失函数的不足及交叉熵损失softmax详解
二次代价函数的不足: 以sigmoid激活函数为例,由于初始化是随机的,假设目标值为0,第一次随机初始化使得输入为0.82,那么还可以,多次迭代之后可以收敛到0.09,但如果第一次随机初始化到0.98 ...
- 神经网络适用于分类问题的最后一层-Softmax和交叉熵损失介绍及梯度推导
前言 传统机器学习中两大经典任务就是回归与分类.分类在深度学习中也很常见,令我印象最深的是图像分类.当然,在NLP中,分类也无处不在.从RNN与其变体,到Transformer.Bert等预训练模型, ...
- 机器学习--- 交叉熵损失(CrossEntropy Loss)--(附代码)
文章目录 一. Softmax 介绍 1.1 Softmax 的形式 1.2 一些问题 1.2.1 为什么训练阶段需要 Softmax 层?推理阶段通常不使用 Softmax 层? 二.交叉熵损失(C ...
- 深度学习相关概念:交叉熵损失
深度学习相关概念:交叉熵损失 交叉熵损失详解 1.激活函数与损失函数 1.1激活函数: 1.2损失函数: 2.对数损失函数(常用于二分类问题): 3.交叉熵.熵.相对熵三者之间的关系 4.交叉熵损失函 ...
- 均方误差和交叉熵损失的适用场景分析
本文尝试回答一下几个问题: 为什么分类问题用交叉熵损失而不用均方误差? 回归问题为什么不适用交叉熵损失? 文章目录 1. 为什么分类问题用交叉熵损失而不用均方误差? 1.1 损失函数角度分析 1.2 ...
- 从熵到交叉熵损失的直观通俗的解释
来源:DeepHub IMBA本文约1100字,建议阅读5分钟 本文从信息论的角度解释有关熵的概念. 对于机器学习和数据科学的初学者来说,必须清楚熵和交叉熵的概念.它们是构建树.降维和图像分类的关键基 ...
- 为什么使用交叉熵代替二次代价函数_Softmax回归与交叉熵损失的理解
0.sigmoid.softmax和交叉熵损失函数的概念理解 sigmoid.softmax和交叉熵损失函数 1.使用场景 在二分类问题中,神经网络输出层只有一个神经元,表示预测输出 是正类 的概率 ...
- 机器学习中的损失函数(交叉熵损失、Hinge loss)
损失函数 文章目录 损失函数 1 交叉熵损失 1.1 从最大似然估计到交叉熵损失 概率论中的MLE 机器学习中的MLE 交叉熵损失 1.2 多分类的交叉熵损失函数 1.3 比较 2. Hinge lo ...
最新文章
- wps解析json数据_通过WordPress HTTP API 获取json内容并解析
- 两个函数式解决大数相加的方法
- XP 组件中没有IIS,如何添加IIS组件
- makefile中变量有哪些?
- 数据结构实验之串三:KMP应用
- 【最优化方法】穷举法 vs. 爬山法 vs. 模拟退火算法 vs. 遗传算法 vs. 蚁群算法
- Python语言学习:python语言代码调试—异常处理之详细攻略
- 神经信息学整理(1)-神经细胞,MP模型
- Python技术之Number数据类型介绍
- React Native 第六天
- win2003 IIS6配置PHP 5.3.3(fastCGI方式+eAccelerator)+ASP.NET 4.0(MVC3)
- 实例8:python
- 服务器修改文件句柄数,请问如何修改文件最大句柄数?
- Selenium alert 弹窗处理
- 华为6p连接计算机设置在哪里设置密码,华为路由器和华为手机如何不用密码连接...
- NOD32 AntiVirus v2.70.16杀毒软件
- 【备忘】大数据最火爆技术spark之王家林2016最新高清视频教程
- 1 一文详细阐述UI设计颜色搭配,受益匪浅~
- 致童年,那些年我们逝去的岁月
- 一个屌丝程序猿的人生(五十八)
热门文章
- 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
- hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)
- Python心得基础篇【7】面向对象进阶篇
- python之解析csv
- PHPmail 亲测可用
- layer —— 一个简单的jQuery弹出层插件
- 设置布局默认为LinearLayout,却成了RelativeLayout
- 归并排序法计算逆序对数
- flask+uswgi+nginx+python3.6的venv发布网站ubuntu14.04
- 强悍的Google Earth