持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
在线性可分的情况下,逻辑回归和线性回归,无论是闭解形式还是凸优化都能高度拟合,但是线性不可分的情况下 (XOR异或函数),需要非线性对数据的分布进行重新映射。
在神经网络中,我们在每一层线性变换后叠加一个非线性激活函数,以避免多层网络等效于单层线性函数,从而获得更大的学习与拟合能力,以此来解决复杂的非线性问题。
什么是BP神经网络
BP 神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,它是20 世纪
末期神经网络算法的核心,也是如今深度学习算法的基础。
BP算法的基本思想是,学习过程由信号的正向传播和误差的反向传播两个过程组成。
正向传播时,把样本的特征从输入层进行输入,信号经过各个隐藏层逐层处理后,最后从输出层传出。对于网络的实际输出与期望输出之间的误差,把误差信号从最后一层逐层反传,
从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。这种信号正向传播与误差反向传播,然后各个层调整权值的过程是周而复始地进行的。权值不断调整的过程,也就是网络学习训练的过程。进行此过程直到网络输出误差减小到预先设置的阈值以下,或者是超过预先设置的最大训练次数。
我们先忽略BP神经网络中的代价函数、梯度下降法的相关知识,直接来谈论为什么BP神经网络中用的最多的激活函数是 ReLU函数。
那我先简单介绍一下BP神经网络中的四种非线性激活函数:sigmoid 函数,tanh 函数,softsign 函数和ReLU 函数
非线性激活函数
(1)sigmoid函数
sigmoid函数也被称之为 逻辑函数(logical function),函数公式为
sigmoid函数图像如下:
从函数图像中我们可以看出 函数的取值范围是 0 – 1 之间
- 当 x 趋向于 -∞ 的时候函数值趋向于 0;
- 当 x 趋向于 +∞ 的时候函数值趋向于 1。
(2)tanh 函数
tanh函数也被称之为 双曲正切函数,函数公式为
tanh函数图像如下:
从函数图像中我们可以看出 函数的取值范围是 -1 – 1 之间
- 当 x 趋向于 -∞ 的时候函数值趋向于 -1;
- 当 x 趋向于+∞ 的时候函数值趋向于 1。
(3)softsign 函数
函数公式为:
softsign函数图像如下:
从函数图像中我们可以看出 函数的取值范围是 -1 – 1 之间
- 当 x 趋向于 -∞ 的时候函数值趋向于 -1;
- 当 x 趋向于 +∞ 的时候函数值趋向于 1。
(4)ReLU 函数
ReLU(The Rectified Linear Unit) 函数的公式为:
f(x)=max(0,x)f(x) = max(0 , x)
ReLU函数图像如下:
从函数图像中我们看出,当 x < 0 时,y = 0; 当 x > 0 时,y = x。
为什么常用ReLU激活函数?
从上面的四种函数图像中,我们可以很明显的看出 sigmoid、tanh、softsign激活函数都是S型函数,形状相似,只不过sigmoid 函数取值范围是 0-1 之间,tanh函数 和 softsign函数 取值范围是 -1 – 1 之间。
而ReLU激活函数,首先它整体是非线性的,但是内部对于所有的正值(x > 0),ReLU是线性的(identity),对于所有负值(x < 0),ReLU是零。
那么这就意味着:使用ReLU激活函数,不会涉及到特别复杂的数学运算,因此计算开销相比于另外三种激活函数较小,所以使用ReLU激活函数可以花费更少的时间进行训练或预测,收敛的更快。
ReLU函数的 阶段性线性特征 意味着当 x 变大时,斜率不会平稳或“饱和” ,那么这就不会出现另外三种激活函数具有的梯度消失或梯度爆炸问题(对于梯度消失或梯度爆炸,我后续会在专门的文章进行讲解)
总结
以上,就是BP神经网络经常使用ReLU作为激活函数的原因,计算简单、收敛快、无梯度消失问题,后续大家在使用BP神经网络进行训练时,可以直接使用ReLU函数进行训练。