sigmoid函数和tanh函数都是激活函数,接收一个输入,产生一个输出。这里的求导是对激活函数求导。而softmax函数是一个多输入多输出的激活函数,这里提到的求导是对经过softmax函数后进行交叉熵计算得到的损失函数求导。
sigmoid函数及求导
sigmoid激活函数形式为:
σ
(
x
)
=
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
\sigma (x)=sigmoid(x)=\frac{1}{1+e^{-x}}
σ(x)=sigmoid(x)=1+e−x1
其导数为:
d
σ
(
x
)
d
x
=
σ
(
x
)
(
1
−
σ
(
x
)
)
\frac{\text d \sigma(x)}{\text dx}=\sigma(x)(1-\sigma(x))
dxdσ(x)=σ(x)(1−σ(x))
tanh函数及求导
tanh激活函数形式为:
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
tanh(x)=ex+e−xex−e−x
其导数为:
d
t
a
n
h
(
x
)
d
x
=
1
−
(
t
a
n
h
(
x
)
)
2
\frac{\text d tanh(x)}{\text dx}=1-(tanh(x))^2
dxdtanh(x)=1−(tanh(x))2
softmax函数及求导
sigmoid函数以及tanh函数的求导都是比较简单的,而softmax函数的求导则稍显复杂。详细求导过程详见我的另一篇博客softmax函数及交叉熵函数求导,这里只是总结三种函数的求导。
这里以神经网络多分类问题为例,假设输出层有
n
n
n个神经元,输出为
z
1
,
z
2
,
.
.
.
,
z
n
z_1,z_2,…,z_n
z1,z2,...,zn,经过softmax函数后的输出为
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,…,a_n
a1,a2,...,an,
a
i
a_i
ai的计算公式为:
a
i
=
e
z
i
∑
j
=
1
n
e
z
j
a_i=\frac{e^{z_i}}{\sum_{j=1}^{n}{e^{z_j}}}
ai=∑j=1nezjezi
假设真实标签为
y
1
,
y
2
,
.
.
.
,
y
n
y_1,y_2,…,y_n
y1,y2,...,yn,由于是分类问题,因此
y
i
y_i
yi的取值为0或1,并且
∑
i
=
1
n
y
i
=
1
\sum_{i=1}^{n}y_i=1
∑i=1nyi=1。则交叉熵损失函数为:
L
(
a
,
y
)
=
−
∑
i
n
y
i
ln
a
i
L(\bold{a},\bold{y})=-\sum_{i}^ny_i\ln a_i
L(a,y)=−i∑nyilnai
则其导数为:
∂
L
∂
z
i
=
a
i
−
y
i
\frac{\partial L}{\partial z_i}=a_i-y_i
∂zi∂L=ai−yi