在神经网络的训练中,当使用的激活函数为sigmoid函数时,选择的代价函数一般为交叉熵,而不是二次代价函数。 原因如下: 二次代价函数公式: 其中c代表代价函数,x代表样本,y代表实际值,a代表输出值,n为样本总数。 对w和b求偏导数: 根据偏导数的结果,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。 sigmoid函数的图像如下: 假设目标是收敛到1,A为0.82,距离目标较远,梯度较大,权值调整较大,权值调整比较大;B为0.98,距离目标较近,梯度小,权值调整比较小。方案合理。 假设目标是收敛到0,A为0.82,距离目标较近,梯度较大,权值调整较大,权值调整比较大;B为0.98,距离目标较远,梯度小,权值调整比较小。方案不合理。 所以使用二次代价函数结合sigmoid函数进行梯度下降训练,方案不合理。 如果把损失函数换成交叉熵: 交叉熵代价函数公式: 可见,权值和偏置的偏导数与代价函数的导数无关,只与输出值和实际值的差值有关。当误差越大时,梯度越大,w和b的调整越快,训练的速度也就越快。 因此,如果输出神经元是线性的,那么二次代价函数合适。如果输出神经元是s型函数,则损失函数适合交叉熵。