前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习基础知识(三)--交叉熵损失函数

深度学习基础知识(三)--交叉熵损失函数

原创
作者头像
languageX
发布2022-06-01 20:12:27
1.9K0
发布2022-06-01 20:12:27
举报
文章被收录于专栏:计算机视觉CV计算机视觉CV

在监督学习进行训练的过程中,我们学习的目的是得到输入到输出的映射关系,在给定x后,预测出y',期望y'尽可能的接近y,也就是y'y的差距尽可能小。而损失函数就是衡量y'y之间差距的指标,通过损失函数指明模型优化的方向。

本文重点介绍深度学习常用的交叉熵损失函数。

在了解交叉熵之前还需要先了解一些信息轮里的基本概念。

信息量

我们通常通过概率得到一个事件的信息,所以信息量和事件发生的概率有关。越确定的事情获得的信息越少,越不确定的事情获得的信息量越大。

假设事件发生概率为 p(x) ,那信息量定义为-log(p(x)) ,p取值范围是[0,1],信息量取值范围是[∞,0]

一个事件发生后的结果是有很多可能的,每一个可能对应一个概率p(x_i),假设一个事件发生有n种可能,熵用来表示所有信息量的期望,公式如下:

H(X) = -\sum\limits_{i=1}^n{p(x_i)log(p(x_i))}

相对熵(KL散度)

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 p(x) q(x),我们可以使用 KL 散度(Kullback-Leibler divergence)来衡量这两个分布的差异:

D_{KL}(p||q)= \sum\limits_{i=1}^np(x_i)(log{ {p(x_i)} }-logq(x_i))=\sum\limits_{i=1}^np(x_i)log{ \frac{p(x_i)}{q(x_i)} }

如果p是真实分布,q是我们预测度分布,如果相对熵越小,就说明我们预测的越接近目标。

交叉熵

我们将KL散度公式进行一些变换:

\begin{equation} \begin{aligned} D_{KL}(p||q) &= \sum\limits_{i=1}^np(x_i)log(p(x_i)) - \sum\limits_{i=1}^np(x_i)log(q(x_i))\\ &=-H(p(x))+ [-\sum\limits_{i=1}^np(x_i)log(q(x_i))] \end{aligned} \end{equation}

其中 -H(p(x)) 就是P分布的熵, -\sum\limits_{i=1}^np(x_i)log(q(x_i)) 就是PQ的交叉熵。

定义P和Q的交叉熵为

H(p,q) = -\sum\limits_{i=1}^np(x_i)log(q(x_i))

由于P分布的熵是不变的,在评估PQ的差距时,使用KL散度是越小越好,所以进一步优化,也就是期望P和Q的交叉熵越小越好。所以在机器学习中,如果我们有了P(标签)和Q(预测),一般可以使用两者的交叉熵来作为loss函数。

负对数似然函数

似然函数

首先了解似然的含义,概率(probablility)是指一个事件发生的可能性,似然(lokelihood)是指影响概率的未知参数。

假如X是离散随机变量,概率函数p依赖参数 \theta :

L(\theta|x)=p_{\theta}(x)=P_{\theta}(X=x)

其中 P_{\theta}(X=x) 表示在参数\theta下,随机变量X取到x的概率。

L(\theta|x) 表示参数\theta的似然函数,表示给定样本X=x下参数\theta为真实值的可能性。

最大似然函数

假设数据的真实分布为P_{data}(x),我们定义分布模型P_G(x;\theta),\theta为该分布的参数。

我们的目标就是求\theta让我们定义大概模型P_G(x;\theta)尽可能接近真实分布P_{data}(x)

最大似然的操作步骤:

  1. 从真实分布中采集n个样本
  2. 计算样本的似然函数 L(\theta|x)=\prod\limits_{i=1}^nP_G(x^i;\theta)
  3. 求让似然函数L最大的参数: \theta^* = argmax \prod\limits_{i=1}^nP_G(x^i;\theta)

L越大说明来自P_{data}(x)的样本在P_G(x;\theta)分布模型中出现的概率越高,也就越接近真实分布。

对数似然函数

从最大似然函数公式中可以看出它是由多个项相乘得到的,所以我们可以对其取对数,将连乘变换为相加的形式,可以得到:

l(\theta) = \sum\limits_{i=i}^n log(P_G(x^i;\theta))

要求l的极大值,只需要对\theta求导,然后令其倒数为0,就可以得到参数值了。

负对数似然函数

根据上文对对数似然函数的分析,我们是对概率连乘取对数,取值区间为(-\infty, 0]。我们对其取反,将区间变为[0,+\infty)

l(\theta) = -\sum\limits_{i=i}^n log(P_G(x^i;\theta))

由于真实label的概率为1,这里省掉了p(x)=1。所以上式其实就是交叉熵的公式~

上文介绍交叉熵时,我们交叉熵常用来做为loss函数,期望其越小越好。最大似然函数我们期望其越大越好,但是这里负对数似然函数我们有取反操作,其形式和交叉熵一致,所以负对数似然函数和交叉熵一样,可以作为损失函数,期望其越小越好。

交叉熵损失函数

交叉熵损失函数(Cross Entropy Loss)是分类问题中最常用的损失函数。

对于二分类我们通常使用sigmoid函数将模型输出转换为概率(0,1)区间内。

sogmoid:

s(x) = \frac{1}{1+e^{-x}}

sigmoid_cross_entropy_with_logits的计算过程:

  1. 对输出logits进行sigmoid计算,预测值predict = sigmoid(x)
  2. 计算交叉熵 label*-log(predict) + (1-label)*-log(1-predict)

对于多分类通常使用softmax函数将模型输出转换为概率

softmax:

S(x_j)= \frac{e_j^x}{ \sum\limits_{k=1}^Ke_k^x },j=1,2,...,K

softmax_cross_entropy_with_logits的计算过程:

  1. 对输出logits进行softmax(概率和为1)
  2. 对softmax后值作为predict,和label进行交叉熵计算H(p,q) = -\sum\limits_{i=1}^nlabel(x_i)log(predict(x_i))

参考:

https://blog.csdn.net/tsyccnh/article/details/79163834

https://www.jianshu.com/p/61cf7f2ac53f#fn1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 信息量
  • 相对熵(KL散度)
  • 交叉熵
  • 负对数似然函数
    • 似然函数
      • 最大似然函数
        • 对数似然函数
          • 负对数似然函数
          • 交叉熵损失函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档