当使用Sigmoid或者Softmax作为激活函数时,损失函数推荐使用交叉熵损失函数而不是均方差损失函数

Sigmoid

函数形式

S i g m o i d ( x ) = 1 1 + e − x Sigmoid(x)=\frac{1}{1+e^{-x}} Sigmoid(x)=1+ex1

函数图像

当使用Sigmoid或者Softmax作为激活函数时,损失函数推荐使用交叉熵损失函数而不是均方差损失函数_第1张图片

导数形式

S i g m o i d ′ ( x ) = e − x ( 1 + e − x ) 2 = S i g m o i d ( x ) ( 1 − S i g m o i d ( x ) ) Sigmoid'(x)=\frac{e^{-x}}{(1+e^{-x})^2}=Sigmoid(x)(1-Sigmoid(x)) Sigmoid(x)=(1+ex)2ex=Sigmoid(x)(1Sigmoid(x))

交叉熵损失函数

L ( y , f ( x ) ) = − ∑ i = 1 N [ y i l o g f ( x i ) + ( 1 − y i ) l o g ( 1 − f ( x i ) ) ] L(y,f(x))=-\sum_{i=1}^{N}[y_ilogf(x_i)+(1-y_i)log(1-f(x_i))] L(y,f(x))=i=1N[yilogf(xi)+(1yi)log(1f(xi))]

均方误差损失函数

L ( y , f ( x ) ) = 1 2 ∑ i = 1 N ( y i − f ( x i ) ) 2 L(y,f(x))=\frac12\sum_{i=1}^{N}(y_i-f(x_i))^2 L(y,f(x))=21i=1N(yif(xi))2

为什么使用交叉熵损失而不是均方差损失

例如在逻辑回归问题中, f ( h ) f(h) f(h)为逻辑回归函数, h = w T x + b h = w^Tx+b h=wTx+b为线性函数, f = S i g m o i d f=Sigmoid f=Sigmoid.
如果选用均方误差损失的话,当利用梯度下降法求导时
▽ w i L = − ( y i − f ( h ) ) f ( h ) ( 1 − f ( h ) ) x i \bigtriangledown_{w_i}L=-(y_i-f(h))f(h)(1-f(h))x_i wiL=(yif(h))f(h)(1f(h))xi
▽ b L = − ( y i − f ( h ) ) f ( h ) ( 1 − f ( h ) ) \bigtriangledown_{b}L=-(y_i-f(h))f(h)(1-f(h)) bL=(yif(h))f(h)(1f(h))
根据上述公式以及Sigmoid的图像可知,由于乘以了单独的 f ( h ) f(h) f(h)项,使得 w w w b b b在更新的过程中大部分时候梯度很小,更新很慢。
而当使用交叉熵损失函数时
▽ w i L = ( y i − f ( h ) ) x i \bigtriangledown_{w_i}L=(y_i-f(h))x_i wiL=(yif(h))xi
▽ b L = ( y i − f ( h ) ) \bigtriangledown_{b}L=(y_i-f(h)) bL=(yif(h))
消除了 f ( h ) f(h) f(h)的影响,权重的更新是受 y i − f ( h ) y_i-f(h) yif(h)这一项影响,即受误差的影响。所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。这是一个很好的性质。

Softmax

Softmax是Sigmoid的推广,Sigmoid针对二分类,Softmax针对多分类。Softmax多见于神经网络中。其函数形式为
S o f t m a x ( z i ) = e z i ∑ j = 1 m e z j Softmax(z_i)=\frac{e^{z_i}}{\sum_{j=1}^me^{z_j}} Softmax(zi)=j=1mezjezi
对于交叉熵损失函数形式为
L ( y , y − ) = − ∑ k = 1 m y k l o g y − k L(y,\overset{-}{y})=-\sum_{k=1}^{m}y_klog\overset{-}{y}_k L(y,y)=k=1myklogyk
在神经网络中,如果使用了Softmax作为激活函数,损失函数使用交叉熵损失函数而不是均方误差损失函数的原因同Sigmoid,不详细阐述了。

交叉熵函数的形式是 − ∑ i = 1 N [ y i l o g f ( x i ) + ( 1 − y i ) l o g ( 1 − f ( x i ) ) ] -\sum_{i=1}^{N}[y_ilogf(x_i)+(1-y_i)log(1-f(x_i))] i=1N[yilogf(xi)+(1yi)log(1f(xi))],而不是 − ∑ i = 1 N [ f ( x i ) l o g y i + ( 1 − f ( x i ) ) l o g ( 1 − y i ) ] -\sum_{i=1}^{N}[f(x_i)logy_i+(1-f(x_i))log(1-y_i)] i=1N[f(xi)logyi+(1f(xi))log(1yi)],为什么?因为当期望输出的 y = 0 y=0 y=0时, l o g y logy logy没有意义;当期望 y = 1 y=1 y=1时, l o g ( 1 − y ) log(1-y) log(1y)没有意义。而因为 f f f s i g m o i d sigmoid sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

参考:
1
2

你可能感兴趣的:(神经网络,机器学习)