神经网络中的激活函数:Sigmoid 与 Tanh
引言
由于可能会引入神经元输出的非线性,激活函数对于神经网络的功能至关重要。Sigmoid 和 Tanh 是神经网络中最常用的两种激活函数。Sigmoid 函数通常用于二元分类问题的输出层,将输入值映射到 0 到 1 之间的范围。Tanh 函数通常用于神经网络的深层,将输入值映射到 -1 到 1 之间的范围。两种函数的使用取决于所解决问题的具体需求,因为两者都有优点和缺点。本文将探讨神经网络中 Sigmoid 和 Tanh 激活函数之间的区别,并提供一些关于哪种函数最适合特定类型问题的建议。
什么是激活函数?
在神经网络中,激活函数是一个数学函数,应用于网络某一层中每个神经元的输出。激活函数将非线性引入神经元的输出,使网络能够模拟输入和输出变量之间更复杂的相互作用。
在神经网络中,每个神经元接收来自前一层的输入,然后其输出通过激活函数传递。激活函数修改神经元的输出,修改后的输出随后作为输入传递到网络的下一层。
神经网络中使用了许多类型的激活函数,例如 Sigmoid、Tanh、ReLU(线性整流单元)和 Softmax。每个激活函数都有其独特的数学形式和特性,使其适用于特定类别的问题和架构设计。
激活函数是神经网络理解输入和输出变量之间非线性关系的关键组成部分。如果没有激活函数,神经网络只能描述线性关系,这对于许多现实世界的应用来说是不够的。
Sigmoid 激活函数
Sigmoid 激活函数经常用于神经网络中。它是一个数学函数,将神经元的输入转换为 0 到 1 之间的数值。
Sigmoid 函数的数学形式如下:
其中 x 是神经元的输入,σ(x) = 1 / (1 + exp(-x))。
当输入很大时,Sigmoid 函数的输出接近于 1。相反,当输入很小时,Sigmoid 函数的输出接近于 0。Sigmoid 函数的平滑 S 形曲线使其可微分,并适用于神经网络训练中使用的反向传播方法。
Sigmoid 函数通常用于二元分类问题的输出层,其中网络的输出需要是一个 0 到 1 之间的概率值。它也可以用于浅层神经网络的隐藏层,但它存在梯度消失问题,即当输入非常大或非常小时,函数的梯度变得非常小。
虽然 Sigmoid 函数过去被广泛使用,但近年来由于 ReLU 及其变体在深度神经网络上的优越性能,其使用有所减少。
Tanh 激活函数
Tanh(双曲正切)激活函数也经常用于神经网络中。它是一个数学函数,将神经元的输入转换为 -1 到 1 之间的数值。
Tanh 函数的公式如下:tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))。
其中 x 是神经元的输入。
与 Sigmoid 函数类似,Tanh 函数具有平滑的 S 形曲线,使其可微分,并适用于神经网络训练中使用的反向传播方法。
Tanh 函数相对于 Sigmoid 函数的一个优点是它以零为中心,这意味着它的输出关于零对称。此属性使其在神经网络的隐藏层中非常有用,因为它允许网络对输入和输出变量之间的正相关和负相关进行建模。
Tanh 函数通常用于神经网络的隐藏层,因为它将非线性引入网络,并可以捕捉输入的微小变化。但是,它也存在梯度消失问题,即当输入非常大或非常小时,函数的梯度变得非常小,这可能会减慢深度神经网络的训练速度。
总的来说,Tanh 函数是神经网络中一个有用的激活函数,尤其是在隐藏层中,它可以捕捉输入和输出变量之间复杂的关系。
Sigmoid vs Tanh
Sigmoid 函数
使用 Sigmoid 函数将输入值映射到 0 到 1 之间的范围。
具有平滑的 S 曲线。
用于二元分类问题的输出层。
存在梯度消失问题,即当输入值很大或很小时,函数的梯度会迅速减小。
可以向网络引入非线性,并捕捉输入的微小变化。
Tanh 函数
将输入值映射到 -1 到 1 之间的范围。
具有平滑的 S 曲线。
用于神经网络的隐藏层。
以零为中心,可以捕捉输入和输出变量之间的正相关和负相关。
存在梯度消失问题。
可以向网络引入非线性,并捕捉输入和输出变量之间的复杂关系。
标准 |
Sigmoid 函数 |
Tanh 函数 |
---|---|---|
数学形式 |
σ(x) = 1 / (1 + exp(-x)) |
tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)) |
输出范围 |
0 到 1 |
-1 到 1 |
以零为中心 |
否 |
是 |
用例 |
二元分类问题的输出层,浅层神经网络的隐藏层 |
神经网络的隐藏层 |
优点 |
可微分,引入非线性,用于二元分类问题 |
在零附近具有较陡的梯度,可以捕捉输入的微小变化 |
缺点 |
存在梯度消失问题,输出未以零为中心 |
存在梯度消失问题,当输入过大时可能导致梯度爆炸问题 |
结论
总而言之,Sigmoid 和 Tanh 函数经常用作神经网络中的激活函数。Sigmoid 函数通常用于浅层神经网络的隐藏层和二元分类任务的输出层。Tanh 函数通常用于神经网络的隐藏层,因为它在 0 附近具有比 Sigmoid 函数更陡峭的梯度。两种函数都存在梯度消失问题,但 Tanh 函数也可能导致梯度爆炸。选择激活函数时,务必考虑数据集和任务的具体特性,以及每个函数的优点和缺点。