深度学习(三):最大似然率、损失函数与交叉熵

1.最大似然率

最大似然率的目的是选出实际情况对应概率最大的模型:
左图中红色是红色的、蓝色是蓝色的概率=0.1×0.7×0.2×0.6=0.0084
右图中对应的概率=0.7×0.9×0.8×0.6=0.3024
显然选择右边模型发生这种实际情况的可能性更大,即右边的模型更好,那么新目标就是在右边模型的基础上使概率最大化。
在这里插入图片描述
结合上图可以得出这样的结论:最大化概率等价于最小化损失函数(求均值得误差函数)。

2.损失函数

考虑到计算概率来衡量模型的好坏需要大量乘积运算,会牺牲很多计算资源、容易产生误差,所以将乘积运算转换成求和运算。这里引入ln函数,因为In()的性质:In(a×b)=In(a)+In(b)

交叉熵:∑-In( p )
其中p为每个数据点的实际情况对应的概率
以上图为例,左图计算交叉熵:-In(0.1)-In(0.7)-In(0.2)-In(0.6)=4.8,右图计算交叉熵:-In(0.6)-In(0.8)-In(0.7)-In(0.9)=1.2
总结:准确的模型可以得到较低的交叉熵,误差较大的模型得到的交叉熵较高。每个数据点实际情况对应的概率的负对数就表示这个数据点的分类误差。将交叉熵作为损失函数来衡量模型的好坏,这样就将最大化概率转换成了最小化交叉熵。

3.交叉熵一般公式及代码实现

Cross-Entropy=-∑(yi×In(pi)+(1-yi)×In(1-pi))
其中yi=1或0,表示某事发生或不发生;pi表示该事发生的概率
在这里插入图片描述

import numpy as np

# Write a function that takes as input two lists Y, P,
# and returns the float corresponding to their cross-entropy.
def cross_entropy(Y, P):
    Y = np.float_(Y)
    P = np.float_(P)
    return -np.sum(Y * np.log(P) + (1 - Y) * np.log(1 - P))

Y=[1,0,0,1]
P=[0.1,0.4,0.8,0.9]
print(cross_entropy(Y,P))

4.多类别交叉熵

在这里插入图片描述
n表示的是类别数量,鸭子,海狸,海豹三类;m表示有数据点数量,门的数量;
则 Cross-Entropy = ∑ ∑ [ yij ln(Pij) ] ( i = 1, 2, 3 … n ) ( j = 1, 2, 3 …m )
= ∑ [ y1j ln(P1j) + y2j ln(P2j) + … ynj ln(Pnj) ] ,(j=1,2,3 …m)且 ( P1j + P2j + P3j + …Pnj = 1 )
特别的,当类比数量n=2时表示二分类, Cross-Entropy =∑ [ y1j ln(P1j) + y2j ln(P2j)],(j=1,2,3 …m)且 ( P1j + P2j = 1 ),与之前二分类的交叉熵公式等同。

发布了23 篇原创文章 · 获赞 25 · 访问量 860

猜你喜欢

转载自blog.csdn.net/qq_42878057/article/details/105324360