一个例子说明交叉熵损失函数的重要价值——逻辑回归函数的通俗解释

1. 距离度量惩罚力度太小

用距离度量,比如最小二乘法,定义损失函数,会出现梯度“消失”的问题。例如,下面的模型
z ( x , w ) = σ ( x + w ) = 1 1 + e x + w (1) \tag1 z(x,w) = \sigma (x+w) = \frac1{1+e^{x+w}}

假设模型初始状态 w = 10 w=10 ,训练样本为:
x 1 = 1 , y 1 = 0 ; x 2 = 1 , y 2 = 1 ; (2) \tag2 \begin{matrix} x_1=-1,&&y_1=0;\\ x_2=1,&&y_2=1; \end{matrix}
计算一下,可以得到
z ( 1 , w ) 1 z ( 1 , w ) 1 (3) \tag3 \begin{matrix} z(-1,w) \simeq 1\\ z(1,w)\simeq 1 \end{matrix}
很容易看出, z ( 1 , w ) 1 z(-1,w) \simeq 1 ,这个计算结果与训练样本矛盾的,因此需要在损失函数中对其惩罚。但是,因为神经网络的输出结果在[0,1]区间,无论参数 w w 与最优解之间差距多大,最大的惩罚力度也不会超过1。这就非常悲剧了,这会严重影响训练效率。因此,我们需要采取措施,加大处罚力度。

2. 巧用对数函数,无限放大惩罚力度

对于正样本而言,模型应该输出数值1。因此,定义惩罚函数:
p ( x , w ) = l n ( z ( x , w ) ) , ( y = 1 ) (4) \tag4 p(x,w)=-ln(z(x,w)), (y=1)
这个函数很有意思,我期望你输出1,如果你听话,惩罚就是0;如果输出结果 0 这一端靠近,惩罚就趋向无穷大。参见下图,

在这里插入图片描述

对于负样本而言,模型应该输出数值0。因此,定义惩罚函数:
n ( x , w ) = l n ( 1 z ( x , w ) ) , ( y = 0 ) (5) \tag5 n(x,w)=-ln(1-z(x,w)), (y=0)

这个函数同样有意思,我期望你输出0,如果你听话,惩罚就是0;如果输出结果 向1 这一端靠近,惩罚就趋向无穷大。参见下图,
在这里插入图片描述

于是我们得到了下面的惩罚函数,其中 y = 0 y=0 y = 1 y=1 是指训练样本中 y y 的值
L ( w ) = { l n ( z ( x , w ) ) , ( y = 1 ) l n ( 1 z ( x , w ) ) , ( y = 0 ) (6) \tag6 L(w) = \begin{cases} -ln(z(x,w)),&&(y=1)\\ -ln(1-z(x,w)),&&(y=0) \end{cases}
采用个小技巧,合并在一起,
L ( w ) = y l n ( z ( x , w ) ) ( 1 y ) l n ( 1 z ( x , w ) ) (7) \tag7 L(w)=-yln(z(x,w))-(1-y)ln(1-z(x,w))
公式看上去高大上很多,但这只是雕虫小技而已,你可以分别令 y = 1 , y = 0 y=1,y=0 带入验证一下,应该和(6)效果一样。

3. 交叉熵损失函数

如果有 N 个训练样本 ( x i , y i ) , i = 1 , 2 , . . . , N (x_i, y_i), i =1,2,...,N 。损失函数可定义为
L ( w ) = i = 1 N { y i l n [ z ( x i , w ) ] ( 1 y i ) l n [ 1 z ( x i , w ) ] } (8) \tag8 L(w) = \sum_{i=1}^N\{ -y_iln[z(x_i,w)]-(1-y_i)ln[1-z(x_i,w)] \}

这个函数就是我们逻辑回归(logistics regression)的损失函数,我们叫它交叉熵损失函数。

4.小结

说一千道一万,交叉熵损失函数有什么价值?答,可以无限增加“分类失误”的惩罚力度,加快模型训练速度。

发布了174 篇原创文章 · 获赞 80 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/quicmous/article/details/104922194