为什么sigmoid激活函数,使用交叉熵损失函数更好。详细推导过程:

sigmoid+交叉熵为什么更好,这是困扰了我大半天的问题,网上所有的教程都直接给出了最后一步的结果,我手推了好久,终于醒悟,下面附上详细的推导过程:

我们定义并简化一下公式:
1、网络的最后一层输出为: z = ( W x + b ) z=(Wx^{}+b) z=(Wx+b)其中W为权重,b为偏置,严格来说里面的参数都是矩阵,不过我们计算就当作单独的参数,过程是一样的。
2、我们需要在输出后面加上sigmoid损失函数:
a = g ( z ) = S i g m o i d ( z ) = 1 1 + e − z a = g(z)=Sigmoid(z)=\frac{1}{1+e^{-z}} a=g(z)=Sigmoid(z)=1+ez1
3、上式的a就是我们最终的输出值,与期望的输出值y,也就是真实值,共同计算损失函数。这里我们使用交叉熵损失函数:
L = C E ( a , y ) = − [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ] L=CE(a,y)=-[y\ln a+(1-y)\ln(1-a)] L=CE(a,y)=[ylna+(1y)ln(1a)]

好了,这就是正向传播的一个输出,我们目的是反向传播得到W和b的梯度 ∂ L ∂ W \frac{\partial L}{\partial W} WL, ∂ L ∂ b \frac{\partial L}{\partial b} bL由于 ∂ L ∂ W = ∂ L ∂ z ∗ x \frac{\partial L}{\partial W}=\frac{\partial L}{\partial z}*x WL=zLx , ∂ L ∂ b = ∂ L ∂ z \frac{\partial L}{\partial b}=\frac{\partial L}{\partial z} bL=zL,所以我们就直接求 ∂ L ∂ z \frac{\partial L}{\partial z} zL

首先,把z代入最后的损失函数里面,式中g(z)就是sigmoid激活函数: L = C E ( g ( z ) , y ) = − [ y ln ⁡ g ( z ) + ( 1 − y ) ln ⁡ ( 1 − g ( z ) ) ] L=CE(g(z),y)=-[y\ln g(z)+(1-y)\ln(1-g(z))] L=CE(g(z),y)=[ylng(z)+(1y)ln(1g(z))]
对z求偏导:
∂ L ∂ z = − [ y ∗ g ′ ( z ) g ( z ) + − ( 1 − y ) ∗ g ′ ( z ) ( 1 − g ( z ) ) ] \frac{\partial L}{\partial z}=-[\frac{y*g'(z)}{g(z)}+\frac{-(1-y)*g'(z)}{(1-g(z))}] zL=[g(z)yg(z)+(1g(z))(1y)g(z)]
里面两项合并:
∂ L ∂ z = − [ y ∗ g ′ ( z ) ∗ ( 1 − g ( z ) ) − ( 1 − y ) ∗ g ′ ( z ) ∗ g ( z ) ) g ( z ) ∗ ( 1 − g ( z ) ) ] \frac{\partial L}{\partial z}=-[\frac{y*g'(z)*(1-g(z))-(1-y)*g'(z)*g(z))}{g(z)*(1-g(z))}] zL=[g(z)(1g(z))yg(z)(1g(z))(1y)g(z)g(z))]
展开,合并之后,得到:
∂ L ∂ z = ( g ( z ) − y ) ∗ g ′ ( z ) g ( z ) ∗ ( 1 − g ( z ) ) \frac{\partial L}{\partial z}=\frac{(g(z)-y)*g'(z)}{g(z)*(1-g(z))} zL=g(z)(1g(z))(g(z)y)g(z)
之前推到这一步,就进展不下去了。但是sigmoid还有一个重要的性质,那就是sigmoid函数的导数, S i g m o i d ′ ( x ) = S i g m o i d ( x ) ∗ ( 1 − S i g m o i d ( x ) ) Sigmoid'(x)=Sigmoid(x)*(1-Sigmoid(x)) Sigmoid(x)=Sigmoid(x)(1Sigmoid(x)),我们这里的g(z)函数就是Sigmoid,仔细看一下,这个式子的分母, g ( z ) ∗ ( 1 − g ( z ) ) = g ′ ( z ) g(z)*(1-g(z))=g'(z) g(z)(1g(z))=g(z)
所以最后得到的公式为: ∂ L ∂ z = g ( z ) − y \frac{\partial L}{\partial z}=g(z)-y zL=g(z)y
使用sigmoid+交叉熵的计算过程,就可以完全省去计算Sigmoid梯度这一步,从而避免了Sigmoid本身弥散的致命缺点。

你可能感兴趣的:(sigmoid,交叉熵,损失函数,推导)