我一直在阅读关于神经网络的一些内容,我理解单层神经网络的一般原理。我明白需要额外的层,但为什么使用非线性激活函数呢?
这个问题接着是这个问题:在反向传播中,激活函数的导数有什么用途?
回答:
激活函数的目的是在网络中引入非线性。
这样做可以让你对一个响应变量(也称为目标变量、类别标签或得分)进行建模,该变量与其解释变量之间呈非线性变化。
非线性意味着输出不能由输入的线性组合重现(这与呈现为直线的输出不同——这种情况的术语是仿射)。
另一种思考方式是:如果网络中没有非线性激活函数,无论神经网络有多少层,它的行为都将像单层感知器一样,因为这些层的总和只会给你另一个线性函数(见上面的定义)。
>>> in_vec = NP.random.rand(10)>>> in_vec array([ 0.94, 0.61, 0.65, 0. , 0.77, 0.99, 0.35, 0.81, 0.46, 0.59])>>> # 常见的激活函数,双曲正切>>> out_vec = NP.tanh(in_vec)>>> out_vec array([ 0.74, 0.54, 0.57, 0. , 0.65, 0.76, 0.34, 0.67, 0.43, 0.53])
在反向传播中常用的激活函数(双曲正切)从-2到2的评估结果: