二次代价函数、交叉熵代价函数、对数似然代价函数的应用场景

二次代价函数的局限性

首先来说一下二次代价函数的局限性,看下面这张图:
二次代价函数、交叉熵代价函数、对数似然代价函数的应用场景_第1张图片
假设现在使用的激活函数是sigmoid,并且代价函数是二次代价函数,我们收敛得目标是1,那么A点的梯度比较大,B点由于离目标比较近梯度小,所以是合理的;但是如果我们的收敛目标是0,那么A点离目标比较近,所以梯度应该要小于B点,但是图中明明是A点的梯度大于B点,这是不合理的。

交叉熵

正式由于二次大家函数的这个局限性,我们需要引入交叉熵。看下面这张图:
二次代价函数、交叉熵代价函数、对数似然代价函数的应用场景_第2张图片

上面这张图中, C = − 1 2 ∑ [ y l n a + ( 1 − y ) l n ( 1 − a ) ] C=-\frac{1}{2}\sum[ylna+(1-y)ln(1-a)] C=21[ylna+(1y)ln(1a)]代表的是交叉熵代价函数,对w和b进行求导后得到下面的式子:
二次代价函数、交叉熵代价函数、对数似然代价函数的应用场景_第3张图片
现在我们发现w和b的调整已经跟 激活函数的导数(注意是导数哦) 无关了,而是跟输出值和真实值的误差有关,他们的误差越大,梯度也就越大,w和b的收敛速度越快。

总结

虽然二次代价函数有自身的局限性,但是我们也不能因此而丢弃它不用,因为在线性回归问题中它依然用后很大的价值,因此要根据实际需要选择代价函数。底下是一个小结,大家可以在实际中根据需要进行选择:

  • 二次代价函数:输出神经元是线性的就选用该代价函数
  • 交叉熵代价函数:输出神经元是S型的就选用该代价函数,例如sigmoid激活函数中(tf.nn.sigmoid_cross_entropy_with_logits())
  • 对数似然代价函数:输出神经元是softmax的时候选用(tf.nn.softmax_cross_entropy_with_logits())

////////////////////////////////////////////////////结束线/////////////////////////////////////////////////////////

欢迎大家加入Q群讨论:463255841

////////////////////////////////////////////////////结束线/////////////////////////////////////////////////////////

你可能感兴趣的:(机器学习)