参数的调整目标:离目标越远,参数变化的梯度应该越大
c
=
1
2
n
[
∑
(
y
−
a
)
2
]
c = \frac {1}{2n}[\sum (y-a)^2]
c=2n1[∑(y−a)2]
∂
c
∂
w
\frac{\partial c}{\partial w}
∂w∂c 与
∂
c
∂
b
\frac{\partial c}{\partial b}
∂b∂c 都与
σ
(
z
)
\sigma (z)
σ(z)的导数正相关
c
=
−
1
n
∑
x
[
y
l
n
a
+
(
1
−
y
)
l
n
(
1
−
a
)
]
c = -\frac{1}{n}\sum_x[ y ln a + (1-y) ln (1-a)]
c=−n1x∑[ylna+(1−y)ln(1−a)]
其中,a是输出,x是样本,y是实际值
a
=
σ
(
z
)
,
z
=
∑
w
j
∗
x
j
+
b
,
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
a = \sigma(z) , z =\sum w_j*x_j +b, \sigma'(z) = \sigma(z)(1-\sigma(z))
a=σ(z),z=∑wj∗xj+b,σ′(z)=σ(z)(1−σ(z))
则:
∂
c
∂
w
j
=
−
1
n
∑
x
(
y
σ
(
z
)
−
1
−
y
1
−
σ
(
z
)
)
∂
σ
∂
w
j
=
1
n
∑
x
x
j
(
σ
(
z
)
−
y
)
\frac{\partial c}{\partial w_j}=-\frac{1}{n}\sum _x(\frac{y}{\sigma(z)}-\frac{1-y}{1-\sigma(z)})\frac{\partial \sigma}{\partial w_j}=\frac {1}{n}\sum_x x_j(\sigma(z)-y)
∂wj∂c=−n1x∑(σ(z)y−1−σ(z)1−y)∂wj∂σ=n1x∑xj(σ(z)−y)
∂
c
∂
b
=
1
n
∑
x
(
σ
(
z
)
−
y
)
\frac{\partial c}{\partial b}=\frac{1}{n}\sum_x (\sigma(z)-y)
∂b∂c=n1x∑(σ(z)−y)
也就是说:
∂
c
∂
w
j
\frac{\partial c}{\partial w_j}
∂wj∂c与
∂
c
∂
b
\frac{\partial c}{\partial b}
∂b∂c只和
σ
(
z
)
−
y
\sigma(z)-y
σ(z)−y有关,即误差越大,参数调整越快,符合预期的目标。
输出层神经元的激活函数是sigmoid函数,采用交叉熵代价函数
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=,logits=))
输出层神经元的激活函数是softmax函数,采用对数释然代价函数
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=,logits=))
结论:
若输出神经元的激活函数是线性的,使用二次代价函数;
若输出神经元的激活函数是s型的,适合用交叉熵代价函数。