EUAdvancer

机器学习-交叉熵与均方误差代价函数

bg
在前面实现的BP神经网络,逻辑回归,稀疏自编码网络我们用到了不同的代价函数,那么这些代价函数到底有什么关系和区别呢,我们该如何选择呢?

均方误差代价函数

这是自编码网络中用到的均方误差代价函数,那么在神经网络的前向传播到达输出层是我们需要计算代价函数和W, B的偏导值,如果使用均方误差,我们会得到以下权重偏导值的公式(当然相关内容在自编码网络里已经给出了)

也就是说权重的更新和激活函数的梯度是成正比的,我们看一看我们常用的sigmoid激活函数

我们可以很清晰的看到sigmoid函数在值接近于0或1时的梯度是非常小的,这意味着权重的更新会很慢,所以这时候我们引入一个新的代价函数

交叉熵代价函数

这个公式我们应该在逻辑回归和前面实现的BP神经网络中看到过,通过该代价函数我们同样得到权重偏导项的公式

这个时候我们发现激活函数的梯度消失了,这样我们就不会有前面的梯度小而导致权重更新慢的问题了

代价函数的选择

在上述3个实例中(逻辑回归,BP神经网络,自编码网络),我采用了不同的代价函数,那么我们应该选哪个呢,其实从上面的分析来看,对于sigmoid激活函数来说,使用交叉熵代价函数应该是个更好的选择,所以前面实现的逻辑回归和BP神经网络应该是比较好的,自编码网络可以参考BP修改。

在神经网络中相比sigmoid更常用的输出层函数是softmax函数,在前面的文章里我们也讨论过它的代价函数,我们使用的log-likelihood代价函数,其实它就是交叉熵代价函数的推广,如果我们变成二元分类,那么其实它和交叉熵代价函数是一样的

结语

写这一篇文章主要是对代价函数的选择上存在一些疑惑,现在也大概知道了原理,主要是权重的更新和代价函数的梯度具有相关性。写到这里,两个月的暑假期间的学习大概也已经到头了,这段时间基本上每天都在充实自己,确实对机器学习有了些体会,感悟颇多,中间也经历了迷茫和气馁的时期,因为机器学习相对来说确实已经是一个比较难的学科了,整天和公式和线性代数打交道是很枯燥和无聊的事情,不过坚持到现在我也不觉得它有多困难了(虽然对于很多模型我都没有仔细研究),相信下学期我能学到并且享受更多相关知识。学习就是这样的嘛,耐得住寂寞,守得住繁华。不然,你凭什么比别人优秀?