神经网络 - 激活函数(Sigmoid 型函数)
激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质:
(1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数.
(2) 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
(3) 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太 小,否则会影响训练的效率和稳定性。
本文介绍在神经网络中常用的激活函数之一:Sigmoid 型函数
一、Sigmoid 型函数
Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数(关于饱和函数的概念。上一博文有介绍)。常用的 Sigmoid 型函数有 Logistic 函数和 Tanh 函数。
对于函数 𝑓(𝑥),若 𝑥 → −∞ 时,其导数 𝑓′(𝑥) → 0,则称其为左饱和。
若 𝑥 → +∞ 时,其导数 𝑓′(𝑥) → 0,则称其为右饱和.当同时满足左、右饱和时,就称为两端饱和。
二、Logistic 函数
1、定义
2、特性说明
(1)Logistic 函数可以看成是一个“挤压”函数,把一个实数域的输入“挤压”到 (0, 1)
(2)当输入值在 0 附近时,Sigmoid 型函数近似为线性函数
(3)当输入值靠近两端 时,对输入进行抑制
(4)输入越小,越接近于 0; 输入越大,越接近于 1
和感知器使用的阶跃激活函数相比,Logistic 函数是连续可导的, 其数学性质更好。
因此装备了 Logistic 激活函数的神经元,具有以下 两点性质:
(1)其输出直接可以看作概率分布,使得神经网络可以更好地和统计 学习模型进行结合
(2)其可以看作一个软性门(Soft Gate),用来控制其他神经 元输出信息的数量
3、梯度与训练
Logistic函数的导数具有一个简单的形式:
σ′(z)=σ(z)(1−σ(z)).
这种形式在梯度下降算法中非常有用,因为它使得反向传播中梯度计算简单且高效。同时,当 zzz 处于极端值(很大或很小)时,导数趋近于0,这也会引起梯度消失问题,这一点在设计神经网络时需要注意。
Logistic函数,除了用于神经网络激活函数,还可以用于逻辑回归(这个在Logistic回归的博文中有介绍)
三、Tanh 函数
Tanh 函数,即双曲正切函数,其数学表达式为
它将任意实数 x 映射到区间 (−1,1)。下面详细说明其性质和理解方式:
1. 基本性质
-
输出范围:
tanh(x) 的输出在 −1 到 1 之间。当 x 越大时,tanh(x) 趋近于 1;当 xx 越小(即负数绝对值越大)时,tanh(x) 趋近于 −1。 -
对称性:
tanh(x) 是一个奇函数(关于远点对称),即 tanh(−x)=−tanh(x),这意味着它关于原点对称。 -
平滑性:
tanh(x) 是连续且可微的,导数为这使得它在神经网络中作为激活函数时,能够提供平滑的梯度,有助于梯度传播。
2. 与其他激活函数的比较
-
与 Logistic 函数:
tanh(𝑥) = 2𝜎(2𝑥) − 1.(从这里可以看出两者之间的转化)
tanh 函数可以看作放大并平移的 Logistic 函数,其值域是 (−1, 1).
Tanh 函数的输出是零中心化的(Zero-Centered),而 Logistic 函数的输出恒大于 0。非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。Logistic 函数和 Tanh 函数的形状如下图:
-
非线性特性:
两者都具有 S 型(sigmoidal)曲线,但由于输出范围不同,tanh(x) 在处理数据时往往能更好地平衡正负信息。
3. 如何理解“附近”及应用
-
直观理解:
当 x 较小(接近 0)时,tanh(0)=0 且近似于线性函数,因为其导数 1 - tanh^2(0)=1;当 x 较大或较小时,函数逐渐饱和,输出接近 1 或 −1,说明输入的极端值不会导致输出剧烈变化。这种“饱和性”特性在神经网络中既有利于稳定输出,也可能引发梯度消失问题。 -
实际应用:
在神经网络中,tanh(x) 常作为隐藏层的激活函数,帮助模型引入非线性。由于它的输出是零中心化的,能在一定程度上帮助缓解梯度下降过程中梯度偏移的问题。
4. 举例说明
例子:在神经网络中的应用
这种激活机制帮助神经网络引入非线性特征,使得多个神经元层的组合能够逼近复杂函数。
四、Hard-Logistic 函数
1、Hard-Logistic 函数定义
以 Logistic 函数 𝜎(𝑥) 为例,其导数为 𝜎′(𝑥) = 𝜎(𝑥)(1 − 𝜎(𝑥)).
Logistic 函数在 0 附近的一阶泰勒展开(Taylor expansion)为:
这样 Logistic 函数可以用分段函数 hard-logistic(𝑥) 来近似:
亦即:
2、Hard-Logistic 函数的形状:
3、如何理解:
五、Hard-Tanh 函数
1、Hard-Tanh 函数定义
tanh 函数在 0 附近的一阶泰勒展开为:
这样 Tanh 函数也可以用分段函数 hard-tanh(𝑥) 来近似:
亦即:
2、Hard-Tanh 函数的形状:
3、如何理解:
六、“hard”激活函数的应用场景和优势
- 计算效率:
“Hard”激活函数由于只涉及简单的加减和比较运算,相比于传统的 Sigmoid 或 Tanh,可以大幅减少计算量,适合于对计算资源要求较高的场景(如移动设备、嵌入式系统)。 - 简单性:
它们的数学表达和梯度形式非常简单,这在理论分析和工程实现中都具有优势。 - 应用实例:
在一些深度学习网络或强化学习模型中,为了加速训练和推理,可以选择使用 Hard-Tanh 或 Hard-Logistic 作为激活函数,从而在保持性能的同时提升效率。
总体来说,Hard-Logistic 和 Hard-Tanh 都是为了在某些场景下(如资源受限的环境或需要快速推理的应用中)替代传统平滑激活函数而设计的简化版本,虽然它们牺牲了一定的精细度,但换来了计算上的加速和实现上的简单。
七、附加:tanh(𝑥) = 2𝜎(2𝑥) − 1的推导过程
我们来学习一下双曲正切函数(tanh)和Logistic函数(σ)的推导关系,以加深大家对两个函数的理解和认识。
1. 推导过程
步骤 1:调整Logistic函数的输入和输出范围
Logistic函数的输出范围为 (0,1),而tanh的输出范围为 (−1,1)。需对Logistic函数进行线性变换:
目标形式:tanh(x)=A⋅σ(Bx)+C,
其中 A、B、C 为待定系数。
步骤 2:确定参数 B(缩放输入)
将Logistic函数的输入缩放为 2x,即:
这样做的目的是使Logistic函数的斜率更陡峭,与tanh的形状更接近。
步骤 3:确定参数 A 和 C(调整输出范围)
将 σ(2x) 的输入调整后,进一步通过线性变换将其输出从 (0,1) 映射到 (−1,1):
步骤 4:代数化简
将等式右侧通分:
步骤 5:与tanh的表达式对比
2.关键推导总结
-
输入缩放:通过将输入 x 放大为 2x,使得Logistic函数 σ(2x) 的斜率与tanh匹配。
-
输出调整:通过线性变换 2σ(2x)−1,将输出范围从 (0,1)映射到 (−1,1)。
-
代数恒等式:化简后与tanh的定义式完全一致。
3.直观理解
-
几何意义:
tanh是中心对称的S型曲线(关于原点对称),而Logistic函数是右移的S型曲线。通过缩放输入(2x)和调整输出(2σ−1),Logistic函数被“拉伸”并“平移”为tanh。 -
参数作用:
-
B=2:使Logistic函数的斜率加倍,与tanh的陡峭度一致。
-
A=2 和 C=−1:将输出范围从 (0,1)(0,1) 线性映射到 (−1,1)(−1,1)。
-
通过缩放Logistic函数的输入(2x)和调整输出(2σ−1),可以精确得到双曲正切函数 tanh(x)。这一关系在神经网络中常用于激活函数的转换,尤其在需要中心化输出时(如循环神经网络)。