注:吴恩达的Machine Learning课程在讲完线性回归和Logistic回归后,立即开讲神经网络,这和其它的机器学习课程有点不同,比如《机器学习实战》这本书就讲了很多算法而没有涉及神经网络。在神经网络中,有一个重要的概念就是激活函数(activation function),正好在网上看到这样一篇介绍激活函数的文章,于是翻译出来,原文地址:https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6
什么是激活函数?
它只是一个添加到神经网络输出端的节点,也被称为传递函数。它也可以连接两个神经网络。
为什么使用神经网络的激活函数?
它用于决定神经网络诸如是或否这样的输出,将结果值映射到0到1或-1到1之间(取决于函数)。
激活函数基本上可以分为两种类型:
- 线性激活函数
- 非线性激活函数
线性激活函数
正如你所见,该函数是一条直线或称为线性的。因此,函数的输出不会被限制在任何范围之间。
方程式:f(x) = x
范围:(负无穷到正无穷大)
它不利于满足神经网络的数据的复杂性及数据的各种参数。
非线性激活函数
非线性激活函数是最常用的激活函数。 非线性有助于使图形看起来像这样:
它使模型更加通用,适应各种数据并区分输出。
非线性函数的主要术语有:
微分:y轴相对于x轴变化的变化,它也被称为斜率。
单调函数:完全不增加或不减少的函数。[译注:在微积分中,如果只要x ≤ y,则f(x) ≤ f(y),函数f就是单调的。]
非线性激活函数根据其范围或曲线主要分为:
1. sigmoid或Logistic激活函数
Sigmoid函数曲线看起来像S形。
图: Logistic Sigmoid函数
使用sigmoid函数的主要原因在于其输出在0到1之间。因此,它特别适用于输出为概率预测的模型。由于任何事物的概率只存在于0和1的范围之间,所以sigmoid是正确的选择。
函数是可微的。这意味着,我们可以在任意两点找到S曲线的斜率。
函数是单调的,但函数的导数不是。
logistic sigmoid函数会导致神经网络在训练时卡住。
softmax函数是用于多类分类的更广义的逻辑激活函数。
2. Tanh或双曲正切激活函数
tanh也类似logistic sigmoid,但更好。 tanh函数的范围是从(-1到1)。 tanh也是S形(S形)。
图: tanh和Logistic Sigmoid对照
其优点是负输入将被映射为很大的负数,零输入将在tanh图中映射到接近零。
函数是可微分的。
函数是单调的,但其导数不是单调的。
tanh函数主要用于二分类。
tanh和logistic sigmoid激活函数都用在前馈网络中。
3. ReLU(整流线性单位)激活函数
ReLU是目前世界上使用最多的激活函数,因为它几乎用于所有的卷积神经网络或深度学习中。
图: ReLU和Logistic Sigmoid对照
正如你所看到的,ReLU被整流了一半(从底部)。当z小于零时,f(z)值为零,当z大于或等于零时,f(z)等于z。
范围:[0到无穷大)
函数及其导数都是单调的。
问题是,所有负值立即变为零,这降低了模型适应数据的能力。而且这意味着任何给予ReLU激活函数的负输入都会立即在图形中变为零,这反过来会不适当地映射负值,从而影响结果图形。
4.泄漏ReLU
它试图解决垂死的ReLU问题。[译注:Leaky ReLU函数是ReLU激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。]
图: ReLU和Leaky ReLU对照
你能看到泄漏吗?��
泄漏有助于增加ReLU功能的范围。 通常,a的值是0.01左右。
当a不是0.01时,它被称为Randomized ReLU。
因此,Leaky ReLU的范围是( 负无穷到无穷大)。
Leaky和Randomized ReLU功能本质上是单调的。而且,它们的派生函数本质上也是单调的。
为什么使微分?
更新曲线时,要根据斜率知道在哪个方向上以及更新多少曲线。这就是为什么我们在机器学习和深度学习的几乎每个部分都会使用到微分。
图: 激活函数备忘单
图: 激活函数的微分