一、定义
在现实世界中,绝大部分问题都是无法线性分割的, 线性网络并不能表示复杂数据集中存在的非线性.
因此在设计神经网络时,激活函数必须是非线性函数,即每个神经元的输出在加权和以及偏置的基础上还做了一个非线形变换(通过激活函数),只有这样整个网络才变为非线性.
课外小知识:(线性函数是一条笔直的直线,而非线形函数不是;线性函数之和是线性函数,线性函数的线性函数也是线性函数)
二、分类
目前Tensorflow 提供7种不同的非线性激活函数, tf.nn.relu、tf.sigmoid和tf.tanh是其中比较常用的几个
Tensorflow也支持使用自己定义的激活函数
2.1 阈值激活函数
这是最简单的激活函数。
如果神经元的激活值大于零,那么神经元就会被激活;否则,它还是处于抑制状态。
这是不可微的, 在x = 0 时, 是不连续的.因此使用这个激活函数来进行基于梯度下降或其变体的训练是不可能的
2.2 Sigmoid 激活函数
怎么读? [sɪgˌmɔɪd]
神经元的输出由函数 **g(x)=1/(1+exp(-x))**确定
tf.sigmoid(),它提供了 Sigmoid 激活函数。这个函数的范围在 0 到 1之间:
它很受欢迎, 从曲线来看,它像一个连续版的阈值激活函数。
但是受到梯度消失问题的困扰,即函数的梯度在两个边缘附近变为零。这使得训练和优化变得困难
2.3 双曲正切激活函数tanh
(1-exp(-2x)/(1+exp(-2x)))
在形状上,它类似于 Sigmoid 函数,但是它的中心位置是 0,其范围是从 -1 到 1。
tf.tanh
中心处附近比sigmoid函数相比具有更陡峭的导数
与 Sigmoid 函数一样,它也受到梯度消失问题的影响
2.4 整流线性单元(ReLU)激活函数
对于负的输入值,神经元不会激活(输出为零),对于正的输入值,神经元的输出与输入值相同
使用 ReLU 的主要优点之一是导致稀疏激活。在任何时刻,所有神经元的负的输入值都不会激活神经元。就计算量来说,这使得网络在计算方面更轻便。
ReLU 神经元存在死亡 ReLU 的问题,也就是说,那些没有激活的神经元的梯度为零,因此将无法进行任何训练,并停留在死亡状态。尽管存在这个问题,但 ReLU 仍是隐藏层最常用的激活函数之一。
2.5 Softmax 激活函数
是一个归一化的指数函数
一个神经元的输出不仅取决于其自身的输入值,还取决于该层中存在的所有其他神经元的输入的总和。这样做的一个优点是使得神经元的输出小,因此梯度不会过大。
tf.nn.softmax()
yi =exp(xi)/Σjexp(xj)
Softmax 激活函数被广泛用作输出层的激活函数,该函数的范围是 [0,1]。在多类分类问题中,它被用来表示一个类的概率。所有单位输出和总是 1。
三、总结
神经网络已被用于各种任务。这些任务可以大致分为两类:函数逼近(回归)和分类。根据手头的任务,一个激活函数可能比另一个更好。一般来说,隐藏层最好使用 ReLU 神经元。对于分类任务,Softmax 通常是更好的选择;对于回归问题,最好使用 Sigmoid 函数或双曲正切函数。