浅析交叉熵损失函数

浅析交叉熵损失函数

首先抛出交叉熵损失函数分别用于二分类和多分类的损失函数表达式子:

二分类交叉熵损失函数

L = − [ y l o g p + ( 1 − y ) l o g ( 1 − p ) ] L = -[ylogp +(1-y)log(1-p)] L=[ylogp+(1y)log(1p)]

其中 y y y表示样本标签, p p p表示对应样本标签预测为正的概率
如: 当 y = 0 时 y=0时 y=0 L = − l o g p L=-logp L=logp,当 y = 1 y=1 y=1时, L = − l o g ( 1 − p ) L=-log(1-p) L=log(1p).
多分类交叉熵损失函数

L = − ∑ c = 1 M y c l o g p c L = -\sum_{c=1}^{M}y_clogp_c L=c=1Myclogpc

p c p_c pc表示标签预测为 c c c的概率

最大似然估计

通过最大似然估计探测一下交叉熵损失函数的本质:

最大似然估计的计算表达式为:

p ( y ∣ x ) = ∏ i = 1 N p i y i ( 1 − p i ) ( 1 − y i ) p(y|x) = \prod_{i=1}^{N}p_i^{y_i}(1-p_i)^{(1-y_i)} p(yx)=i=1Npiyi(1pi)(1yi)

一般通过对数似然的方法对上述式子求解:
l o g p ( y ∣ x ) = ∑ i = 1 N ( y i l o g p i + ( 1 − y i ) l o g ( 1 − p i ) ) = y l o g p + ( 1 − y ) l o g ( 1 − p ) \begin{aligned} logp(y|x) & = \sum _{i=1}^N(y_ilogp_i + (1-y_i)log(1-p_i)) \\ & = ylogp + (1-y)log(1-p) \end{aligned} logp(yx)=i=1N(yilogpi+(1yi)log(1pi))=ylogp+(1y)log(1p)

我们的目的是使得似然函数最大,即对于负的对数似然函数最小,仔细瞅一瞅,不就是我们的交叉熵损失函数了吗?

tensorflow中关于交叉熵损失函数的计算函数:

  1. tf.nn.softmax_cross_entropy_with_logits(labels=input_labels, logits=pred_logits)

    要求输入的标签input_labels与计算出的pred_logits的维度一致;

  2. tf.nn.sparse_softmax_cross_entropy_with_logits(labels=input_labels, logits=pred_logits)

    输入的标签是具体哪个标签的值,就是不需要进行one_hot等等编码的标签。

  3. tf.nn.softmax_cross_entropy_with_logits_v2(labels=input_labels, logits=pred_logits)

    这个函数是tensorflow最新版本的计算交叉熵损失函数的函数接口,主要变化在于其对于输入标签不一定要求是保持不变的,如在对抗生成网络的训练过程中,标签可能是动态变化的,如果我们还是基于不变的标签,可以把这个函数当作跟第一个函数一样来使用。

sigmoid交叉熵损失函数

Sigmoid的概率计算公式为: h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+eθTx1

L ( θ ) = − [ y l o g p + ( 1 − y ) l o g ( 1 − p ) ] = − ∑ i [ y i l o g p i + ( 1 − y i ) l o g ( 1 − p i ) ] = − ∑ i [ y i l o g 1 1 + e − θ T x i + ( 1 − y i ) l o g e − θ T x i 1 + e − θ T x i ] = − ∑ i [ y i θ T x i − y i l o g ( 1 + e θ T x i ) − ( 1 − y i ) l o g ( 1 + e θ T x i ) ] = − ∑ i [ y i θ T x i − l o g ( 1 + e θ T x i ) ] \begin{aligned} L(\theta) & = -[ylogp + (1-y)log(1-p)] \\ & = -\sum_i[y_ilogp_i + (1-y_i)log(1-p_i)] \\ & = -\sum_i[y_ilog\frac{1}{1+e^{-\theta^Tx_i}} + (1-y_i)log\frac{e^{-\theta^Tx_i}}{1+e^{-\theta^Tx_i}}] \\ & = -\sum_i[y_i\theta^Tx_i - y_ilog(1+e^{\theta^Tx_i}) - (1-y_i)log(1+e^{\theta^Tx_i})] \\ & = -\sum_i[y_i\theta^Tx_i - log(1+e^{\theta^Tx_i})] \end{aligned} L(θ)=[ylogp+(1y)log(1p)]=i[yilogpi+(1yi)log(1pi)]=i[yilog1+eθTxi1+(1yi)log1+eθTxieθTxi]=i[yiθTxiyilog(1+eθTxi)(1yi)log(1+eθTxi)]=i[yiθTxilog(1+eθTxi)]

利用上式子,对 θ j \theta_j θj求导:

∂ L ∂ θ j = ∂ ( − ∑ i [ y i θ T x − l o g ( 1 + e θ T x i ) ] ) ∂ θ j = − ∑ i [ y i x j ( i ) + x j ( i ) e θ T x i 1 + e θ T x i ] = − ∑ i [ y i − h θ ( x i ) ] x j ( i ) = ∑ i [ h θ ( x i ) − y i ] x j ( i ) \begin{aligned} \frac{\partial L}{\partial \theta_j} & = \frac{\partial (-\sum_i[y_i\theta^Tx - log(1+e^{\theta^Tx_i})])}{\partial \theta_j} \\ &= -\sum_i[y_ix_j^{(i)} + \frac{x_j^{(i)}e^{\theta^Tx_i}}{1+e^{\theta^Tx_i}}] \\ & = -\sum_i[y_i - h_{\theta}(x_i)]x_j^{(i)} \\ & = \sum_i[h_{\theta}(x_i) - y_i]x_j^{(i)} \end{aligned} θjL=θj(i[yiθTxlog(1+eθTxi)])=i[yixj(i)+1+eθTxixj(i)eθTxi]=i[yihθ(xi)]xj(i)=i[hθ(xi)yi]xj(i)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值