首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》13.2 为前馈神经网络选择激励函数

关灯直达底部

简单起见,目前为止我们只讨论了多层前馈神经网络中用到的sigmoid激励函数,它应用到了第12章介绍的多层感知器的隐层和输出层中。我们把此激励函数称为sigmoid函数,因为这是学术文献中的常用叫法——更为准确的定义应该是逻辑斯谛函数(logistic function),或者负对数似然函数(negative log-likehood function)。在本节的后续内容中,读者将学到更多的sigmoid系列激励函数,它们常用于实现多层神经网络。

从技术上讲,任何一个函数只要是可微的,我们就可以将其用作多层神经网络的激励函数。在Adaline中,我们甚至可以使用线性激励函数(请见第2章)。不过,实际应用中,在隐层和输出层使用线性激励函数并不能发挥多大的作用,因此我们希望将非线性函数引入到典型的神经网络中,以解决复杂问题。毕竟线性函数的组合得到的还是线性函数。

上一章中使用的逻辑斯谛激励函数(logistic activation function)可能是对人类大脑神经元概念最为近似的模拟:我们可以将其看作神经元是否被激活的概率。不过,当输入为极大的负值时,逻辑斯谛激励函数也会出问题,这种情况下它的输出会趋近于0。如果sigmoid激励函数的输出趋近于0,那么将会降低神经网络的学习速度,并且在训练过程中更容易陷入局部最小值。这也是人们喜欢在隐层使用双曲正切(hyperbolic tangent)函数作为激励函数的原因。在讨论双曲正切函数之前,我们先对逻辑斯谛函数做一个简单的概述,并且分析一下到底是什么特性使得它在多类别分类任务中起到了如此重要的作用。