损失函数

极大似然估计法

什么是似然值?似然值是现实情况已经发生,接着我们假设现实情况对应着有许多理论模型的概率分布,在某一个理论上的概率模型下,求得的现实情况发生概率。

既然有了似然值,最大似然估计法就应运而生了。既然在现实情况的已经发生的情况下,如何用现实情况推导理论总结?如何使用现实主义估测理论主义的结果?虽然我们没法永远准确地确定理论世界的事情发生的概率分布,但是根据求得的不同似然值中,选择似然值最大的模型,是一种理智的做法。

总结一下,当我们已知现实事情发生的结果,进而去反推产生此结果的概率模型的时候,往往用到极大似然估计法。

分类问题的损失函数

在这里以二分类的例子为切入点进行理解,例如设计一个神经网络尝试去分辨图片中的生物是不是猫。

假设我们的训练样本是 (xi,yi)(x_i,y_i),神经网络的输出经过 sigmoid 归一化后的输出是 yi^\hat{y_i},我们可以这样认为:yi^\hat{y_i} 的值是神经网络认为输入的 xix_i 是一只猫(yiy_i=1)的概率,这样的话,1yi^1-\hat{y_i}就是神经网络认为不是一只猫(yiy_i=0)的概率。这里介绍了一下前提条件,下面开始从现实到理论的猜测。

神经网络中参数,我们可以认为是在理论上已经假设出的理论模型分布,但是这个分布能否很好地拟合我们人脑中判断一张图片是不是猫的真实分布呢?

在我们大脑中判断“图像中是否是一只猫”这个模型的分布,真的不好说,但是我们可以通过理论中的模型去逼近真实的分布。我们知道对于每一个样本而言,标签值 yiy_i 无非就是0或1,那么对于一个批量 n 个样本,似然值是多少呢?

我们可以使用 p(yiyi^;w,b)p(y_i|\hat {y_i};w,b) 来表示这个似然值,这样的表示方法明确了我们的假设的模型参数就是 w 和 b控制的,后续可以对这“两个”参数进行梯度下降更新得到拟合程度更好的新模型。接着,我们省略最后的两个参数简单点,似然函数 p(yiyi^)p(y_i|\hat {y_i}) 就变得更加明朗了。不过要注意的是,这里的 yi^=wxi+b\hat {y_i} = w*x_i + b

我们把似然函数进行展开表达:

p(yiyi^)=i=1np(yiyi^)p(y_i|\hat {y_i}) = \prod_{i=1}^{n}p(y_i|\hat {y_i})

我们又知道 yiy_i 是一个两点分布,所以可以进一步表达为:

p(yiyi^)=i=1nyi^yi(1yi^)1yip(y_i|\hat {y_i}) = \prod_{i=1}^{n}\hat {y_i}^{y_i}(1-\hat {y_i})^{1-y_i}

对等式两侧的等式取对数 log 得到:

logp(yiyi^)=i=1nlogyi^yi(1yi^)1yi\log p(y_i|\hat {y_i}) = \sum_{i=1}^{n} \log \hat {y_i}^{y_i}(1-\hat {y_i})^{1-y_i}

稍作整理:

logp(yiyi^)=i=1nyilogyi^+(1yi)log(1yi^)\log p(y_i|\hat {y_i}) = \sum_{i=1}^{n} y_i \log {\hat {y_i}}+(1-y_i)\log {(1-\hat {y_i})}

我们想最大化这个似然函数,可以最小化似然函数的相反数,即可。

交叉熵损失函数

一个奇妙的巧合。

一个系统的熵是对一个系统的信息量的期望,也就是在系统中不同信息量 f(pi)=log2pif(p_i) = -\log_{2} {p_i} 都有其相应的概率 pip_i,我们将其相乘作和就是熵:

H(P):=E(Pf)H(P) := E(P_f)

关于信息量的定义,这里的负号是因为我们需要让整个函数单调递减,很经典的例子就是up主王木头学科学的示例:f(18)=f(14)+f(12)f(\frac {1}{8}) = f(\frac {1}{4}) + f(\frac {1}{2}),很明显要单减的log函数,这里以2为底就是为了让信息量计算结果的单位为比特。

KL散度(相对熵)就是为了衡量两个两个概率系统的差别程度,P 是基准概率系统。整个公式可以理解为 Q 如果想达到和 P 一样的分布的话,相差的信息量。

DKL(PQ):=i=1mpi(fQ(qi)fp(pi))=i=1mpi((log2qi)(log2pi))=i=1mpi(log2qi)i=1mpi(log2pi)\begin{array}{l} \boldsymbol{D}_{\boldsymbol{K} \boldsymbol{L}}(\boldsymbol{P} \| \boldsymbol{Q}) \\ :=\sum_{i=1}^{m} p_{i} \cdot\left(f_{Q}\left(q_{i}\right)-f_{p}\left(p_{i}\right)\right) \\ =\sum_{i=1}^{m} p_{i} \cdot\left(\left(-\log _{2} q_{i}\right)-\left(-\log _{2} p_{i}\right)\right) \\ =\sum_{i=1}^{m} p_{i} \cdot\left(-\log _{2} q_{i}\right)-\sum_{i=1}^{m} p_{i} \cdot\left(-\log _{2} p_{i}\right) \end{array}

在最后的等式中 i=1mpi(log2pi)\sum_{i=1}^{m} p_{i} \cdot\left(-\log _{2} p_{i}\right) 就是 P 系统的熵,又因为 P 是基准系统,所以这个熵是不会变的。

i=1mpi(log2qi)\sum_{i=1}^{m} p_{i} \cdot\left(-\log _{2} q_{i}\right)

这个就是交叉熵,而且它是大于等于 P 系统的熵,所以我们可以直接想办法让交叉熵的值最小即可。

在我们的二分类模型中的交叉熵可以定义为 H(P,Q)H(P,Q),P 为基准(标签),具体可以表达为:

H(P,Q)=i=12pi(log2qi)=yi(log2y^i)+(1yi)(log2(1yi))H(P,Q) = \sum_{i=1}^{2}p_i (- \log_2 q_i)= y_i(- \log_2 \hat y_i) + (1-y_i)(-\log_2 (1-y_i))

提出一个负号

H(P,Q)=(yilog2y^i+(1yi)log2(1yi))H(P,Q) = -(y_i \log_2 \hat y_i + (1-y_i)\log_2 (1-y_i))