参数的调整目标:离目标越远,参数变化的梯度应该越大
c=12n[∑(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=−1n∑x[ylna+(1−y)ln(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=∑wj∗xj+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∂wj=−1n∑x(yσ(z)−1−y1−σ(z))∂σ∂wj=1n∑xxj(σ(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=1n∑x(σ(z)−y) \frac{\partial c}{\partial b}=\frac{1}{n}\sum_x (\sigma(z)-y)∂b∂c=n1x∑(σ(z)−y)
也就是说:∂c∂wj\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型的,适合用交叉熵代价函数。