【机器学习】基本损失函数

参考:

基本损失函数

任务:衡量人脑与神经网络在判断一张图片是不是猫这个问题上的差异。

\(x_i\) 是人工打上的一个标签,0代表不是猫,1 代表是猫。

\(y_i\) 是神经网络输出一个概率,表示这个图片是猫的概率。

\(W,b\) 是神经网络的参数,由参数得到一个 \(y_i\)

image-20240418170321653

1、最小二乘法

在上述问题中,最简单的方式就是直接比较人脑与神经网络的区别。

如果两个值相差的越小,就可以很直观的理解为这两个模型越相似。

对于一张图片人打上的标签是 \(x_1\) ,而神经网络跑出的结果是 \(y_1\),直接把他们相减,就是他们之间的相差有多大。

\[|x_1-y_1| \]

因为绝对值函数在零点可能会存在不可导的情况,因此我们对其平方,让他处处可到。

\[(x_1-y_1)^2 \]

这是对于一张图片,刻画的差异程度,所有图片的差异程度加在一起,就可以量化人脑与神经网络在该问题上的差异。

\[\sum_{i=1}^{n}(x_i-y_i)^2 \]

当这一个值最小的时候,我们就可以认定人脑与神经网络这两个模型的差异最小。

\[min\sum_{i=1}^{n}(x_i-y_i)^2 \]

从这个式子我们也可以看出为什么这个方法叫做最小二乘法

2、极大似然估计法

极大似然就是概率的反向应用。

2.1、似然值

我们知道在抛硬币问题中,硬币正面朝上,或者硬币反面朝上的概率都是0.5。理想情况下,抛 10 次硬币获得的结果应该是 5 次朝上,5 次朝下。但实际情况却是各种情况都可能出现。

image-20240418181734252

这是我们从理论去思考实践,如果我们已知抛出的硬币的情况,然后考虑概率模型是什么,这就是似然的过程。

如下图所示,抛 10 次硬币,正面朝上 7 次,反面朝上 3 次,左边三种概率模型都有可能得到。

image-20240418182326086

但是这三种模型是不平等的,哪一种模型更有可能是该事件的模型呢?当事件,以及模型都确定时,我们是可以计算的。左边的式子中 \(\theta\) 表示的是某种确定的概率分布(如抛一次硬币,正面朝上的概率是 \(0.7\) ,反面朝上的概率是 \(0.3\))。\(c_{1\to10},\)表示的是抛了 \(10\) 次硬币,每次的情况。

整个左边表示的是在 \(\theta\) 这种概率分布下,发生抛 \(10\) 次抛出 \(c_{1\to10}\) 这样的结果发生的可能性。

\[P(c_1,c_2,···,c_{10}|\theta) =\prod_{i=1}^{10}{P(c_1|\theta)} \]

真实的事件已经发生,我们假设它有很多的模型,在一个概率模型下,发生当前事件的可能性,就是这个概率模型的似然值。

下图就列举了,抛 \(10\) 枚硬币,发生的事件为 \(7\) 次为正, \(3\) 次为负,对应 3 种概率模型的似然值。

image-20240418184142944

虽然我们可能永远都不知道准确的概率模型是什么,但是我们选似然值最高的模型,它也就最可能是准确的模型。这就是极大似然估计法。

极大似然估计法,适用于已知事件发生的结果,去反推事件原本的模型是什么。

2.2、神经网络与人脑似然

现在回到判断一个图片是不是猫这个问题上。

在抛硬币的问题中 \(c\) 表示抛硬币最终得到的结果,在图像识别问题中 \(x\) 就表示人打的标签(0就不是猫, 1 就是猫)。

在抛硬币问题中 \(\theta\) 表示概率模型,在图像识别问题中 \(W,b\) 表示网络的参数,我们可以认为一组 \(W,b\) 可以确定一个描述图片是否为猫的概率模型。网络参数可以得到一个输出,表示神经网络认为图片是猫的概率。

\[P(c_1,c_2,···,c_{10}|\theta) & = & \prod_{i=1}^{10}{P(c_1|\theta)} \\ P(x_1,x_2,···,x_{n}|W,b) & = & \prod_{i=1}^{n}{P(x_i|W,b)} \\ & = & \prod_{i=1}^{n}{P(x_i|y_i)} \\ \]

其中 \(x \in \{0,1\}\),且

\[f(x) = p^x(1-p)^{1-x} = \begin{cases} p, x = 1 \\ 1-p,x = 0 \end{cases} \]

那么上式就可以化为

\[\prod_{i=1}^{n}{{y_i}^{x_i}(1-{y_i})^{1-{x_i}}} \]

计算到这里其实就可以结束了,这里我们人为的加上 log 化乘为加

\[log(\prod_{i=1}^{n}{{y_i}^{x_i}(1-{y_i})^{1-{x_i}}}) \\ &=& \sum_{i=1}^{n}{log({y_i}^{x_i}(1-{y_i})^{1-{x_i}})} \\ &=& \sum_{i=1}^{n}[x_i\log{y_i} + (1-x_i)\log{(1-y_i)}] \\ \]

最终,最大化似然值,相当于最小化负对数似然:

\[min-(\sum_{i=1}^{n}[x_i\log{y_i} + (1-x_i)\log{(1-y_i)}]) \]

3、交叉熵

3.1、信息量

一种情况下能减少不确定性的任何事物都可称为信息。

信息量可以用来用来衡量一个事件发生的惊奇程度。

对于事件,我们用一个离散型随机变量来描述 \(X\) ,其概率密度函数为 \(p(X=x)\)。如果一个事件发生的可能性越小,但它却发生了,是不是就可以理解为这个事件带给我们的惊奇程度非常大。

所以当 \(p(x)\) 很小时,信息量应该会很大,再来理解信息量定义的公式:

\[ -\log_2{p(X)} \]

由于\(0\le p(x)\le1\) ,所以需要有一个符号,使得\(信息量 \ge0\)

3.2、熵

熵是随机变量不确定度的度量。如果熵比较大,表示整个状态越难以预测,愈加的混乱。

注意:

  • 信息量描述的是一个事件(\(X\) 的某一个取值),比如抛一次硬币结果为正面
  • 而熵描述的是一个系统,一个随机变量(\(X\) 的所有取值),比如抛硬币这件事情。

在信息量的基础上,如何理解熵的定义呢?

如果简单的将随机变量的所有事件对应的信息量相加,定义得到的结果为熵,有没有问题呢?

比如一个二元事件

x=1 x=0
p(x=1) = 0.99 p(x=0)=0.01

计算得到熵的结果为

\[H(X) = -\log_2{0.99} -\log_2{0.01} \approx 6.6584 \]

再考虑另一个二元事件

x=1 x=0
p(x=1) = 0.5 p(x=0)=0.5

计算得到熵的结果为

\[H(X) = -\log_2{0.5} -\log_2{0.5} \approx 2 \]


从直观的感受来说,上面事件整体带给我们的不确定性是非常小的,但是计算出来的熵的值却比下面要大。

这个时候我们再来看熵的定义式子:

\[H(X) = -\sum_{x\in X}{p(x)\log{p(x)}} \]

在之前的基础上多乘了一个概率本身,可以理解为单个事件的信息量,对于整个事件熵贡献的权重。

规定 \(0\log0 =0\) ,因为加上 \(0\) 概率的项,不改变其熵的值。

\(H(X)\) 可以理解为信息量 \(-\log(p(x))\) 的期望值

3.3、相对熵

相对熵是两个随机分布之间的距离的度量。在统计学中,它对应的是似然比的对数期望。

相对熵 \(D(p||q)\) 度量当真实分布为 \(p\) 而假定分布为 \(q\) 时的无效性。

KL散度是用来度量使用基于Q的分布来编码服从P的分布的样本所需的额外的平均比特数

两个概率密度函数为 \(p(x)\)\(q(x)\) 之间的相对熵或 \(KL\)距离 定义为:

\[D(p||q) &= &\sum_{x \in X} p(x)\log{\frac{p(x)}{q(x)}} \\ &=&\sum_{x \in X}p(x)[\log{p(x)}-\log{q(x)}]\\ &=&\sum_{x \in X}-p(x)\log{q(x)}-\sum_{x \in X}-p(x)\log{p(x)} \]

可以证明,相对熵总是非负的,且当 \(p==q\) 时为零。

可以发现,由于 \(p(x)\) 表示的是真实的分布,那么他的熵是不变的,也就是推导最后的 \(-\sum -p(x)\log{p(x)}\) 是不变的。我们如果想要使得两个随机分布之间的距离最小化,也就是使得 \(\sum{-p(x)\log{q(x)} }\) 最小化。这个式子称为交叉熵。

3.4、交叉熵

给定两个概率分布 \(p,q\)\(p\) 相当于 \(q\) 的交叉熵定义为:

\[H(p,q) = -\sum_{x}{p(x)\log{q(x)}}=D(p||q)+H(p) \]

image-20240418170321653

再回到我们最开始的问题中:

\(x_i\) 对应 \(p(x)\) 表示真实的概率分布,而 \(y_i\) 就表示估计的概率分布,我们用交叉熵来度量,真实的情况与估计的情况的偏差是多少。对于一张图片来说其交叉熵为

\[H(x_i,y_i) =-[x_i\log{y_i}+(1-x_i)\log(1-y_i)] \]

因为 \(x\) 只有 \(\{0,1\}\) 两种情况,对于整个数据集的 \(n\) 张图片,总的交叉熵就为:

\[H(x,y) =-\sum_{i=1}^{n}[x_i\log{y_i}+(1-x_i)\log(1-y_i)] \]

posted @ 2024-04-19 11:19  Hoppz  阅读(32)  评论(0编辑  收藏  举报