在接下来对于神经网络的学习中,我们会涉及到函数饱和性、软性门的概念,还需要用到泰勒级数,本文我们来理解这些基础知识,为后续学习神经网络的激活函数做准备。
一、函数饱和性
“函数具有饱和性”通常指的是当函数的输入达到某个较大或较小的范围时,函数的输出趋于一个极限值,不再随输入的变化而显著改变。简单来说,就是输入足够大或足够小时,函数的值“饱和”到了一个固定的状态。
1. 数学解释
以 Sigmoid 函数为例:
在这些极端条件下,无论 x 增加或减少多少,函数的输出都基本保持在1或0附近,说明函数“饱和”了。
2. 直观理解
-
饱和区间:
在 Sigmoid 函数中,当 x 超过一定正值或低于一定负值时,输出变化极其缓慢。这意味着在这些区域,输入的变化几乎不会引起输出的明显变化。 -
梯度消失:
当激活函数(如 Sigmoid 或 Tanh)处于饱和区域时,其导数(梯度)非常小。这在神经网络训练中会导致梯度消失问题,影响模型学习效果。
3. 例子说明
例子1:Sigmoid 激活函数
- 当 x=5 时,σ(5)≈0.993;
- 当 x=10 时,σ(10)≈0.99995。
可以看出,当 xx 从5增加到10时,输出几乎没有变化,说明在这个区域,Sigmoid 函数已经饱和。
例子2:Tanh 激活函数
“函数具有饱和性”意味着在输入达到某一范围后,函数输出趋于稳定,变化非常小。这一特性在神经网络中尤为重要,因为当激活函数进入饱和区域时,梯度会变得极小,可能导致梯度消失问题,从而影响模型的训练效率和性能。
二、软性门
“软性门”通常指的是一种在神经网络中用来控制信息流动的机制,其输出是连续的、介于0和1之间的值,而不是像“硬门”那样只有0或1的离散状态。这种机制常见于循环神经网络(RNN)的门控单元,如长短期记忆网络(LSTM)和门控循环单元(GRU)。
如何理解“软性门”
-
基本概念
- 门控机制:
在许多神经网络结构中,门(Gate)用于决定哪些信息应该被保留、更新或丢弃。 - 软性门与硬性门:
“硬性门”通常做出明确的二元决策(0或1),而“软性门”则通过一个连续值来表示信息通过的程度,这个值通常是由 Sigmoid 函数或类似函数生成的。
例如,Sigmoid 函数的输出范围为 (0, 1),可以被解释为“允许信息通过”的比例。
- 门控机制:
-
工作原理
软性门会根据输入数据和当前状态计算出一个“门值”,表示该部分信息应该保留多少。这个门值在训练过程中是可微的,使得整个网络能够通过梯度下降法进行端到端的训练。- 例如,在 LSTM 中:
- 输入门:决定当前输入的信息有多少需要写入到细胞状态中。
- 遗忘门:决定细胞状态中已有信息的保留比例。
- 输出门:决定细胞状态中哪些信息需要传递到输出。
这些门都使用 Sigmoid 函数产生一个0到1之间的值,从而实现“软性”控制:数值越接近1,表示信息越大程度上被允许通过;数值越接近0,则表示信息被大幅抑制或丢弃。
- 例如,在 LSTM 中:
-
举例说明
例子1:LSTM 的遗忘门
例子2:GRU 中的更新门
“软性门”是神经网络中一种利用连续值(通常通过 Sigmoid 等激活函数生成)来控制信息流动的机制,它允许网络根据当前输入和状态对信息的保留程度进行“软”决策,而不是采用硬性的0/1决策。这种机制不仅使得网络的决策过程可微,从而便于训练,而且提高了模型在处理序列数据和复杂动态系统时的灵活性和鲁棒性。
三、泰勒级数
泰勒级数和泰勒公式是数学中用来近似函数的一种强大工具,它们的基本思想是:一个足够光滑的函数可以在某一点附近展开成其各阶导数的无限和,从而用多项式表达函数在该点附近的行为。
1. 泰勒公式
定义
对于一个在某点 a 附近具有无限阶导数的函数 f(x),泰勒公式表明,可以将 f(x) 表示为以下形式:
其中
余项形式
常见的余项形式有拉格朗日余项形式:
其中 ξ 是介于 a 和 x 之间的某个点。这个余项可以帮助我们估计泰勒多项式近似的精度。
2. 泰勒级数
当余项 R_n(x) 随着 n 趋向于无穷大时,若 R_n(x) 趋近于0,那么函数 f(x) 在 a 附近就可以用泰勒多项式的无限和来表示,这个无限级数就称为 泰勒级数:
如果选取 a=0(即在原点展开),这个级数又称为 麦克劳林级数。
*** 这里需要理解上面提到的“在 a 附近”:
邻域的概念:
在数学中,“附近”通常指的是存在一个正数 r>0,使得对于所有满足 ∣x−a∣<r 的 x,某种性质成立。这里,“在某点 a 附近”就是指在开区间 (a−r,a+r)内,函数 f(x) 有无限阶导数。
没有具体的固定距离:
“附近”并没有一个普遍的具体数值,而是依赖于函数本身的性质。对于某些函数来说,这个邻域可能很大;而对于另一些函数,邻域可能非常小。关键在于:只要存在这样一个正数 r,使得在 ∣x−a∣<r 内函数无限可微,就可以说函数在 a 附近具有无限阶导数。
3. 直观理解
-
多项式逼近:
泰勒公式的思想是“用多项式来逼近函数”。在点 a 附近,多项式的每一项捕捉了函数在 a 点处第 n 阶变化的信息。把这些信息加起来,就可以很好地近似 f(x) 在 aa 附近的行为。
-
局部展开:
泰勒公式实际上是描述函数在某一点处的局部性质,利用函数的导数信息来刻画函数如何“弯曲”或“变化”。例如,当 x 离 a 很近时,只用前几项就可以得到一个较好的近似。 -
余项控制误差:
余项 R_n(x) 告诉我们,当只取有限项时近似的误差有多大。随着 n 增加,如果 R_n(x) 趋于0,就说明多项式近似越来越精确。
4. 举例说明
例子1:指数函数的泰勒级数
例子2:正弦函数的泰勒级数
泰勒级数和泰勒公式为我们提供了一种用多项式逼近复杂函数的方法。通过在某一点处利用函数的导数信息,我们可以将函数表示为无限项多项式和余项的形式,从而在局部区域内精确地描述函数的行为。通过具体例子(如 e^x 和 sin x)可以直观理解这种逼近和展开方法。这不仅在理论上具有重要意义,也在数值计算、工程应用等领域广泛应用。
四、我们初步了解一下泰勒级数在神经网络中的应用
1. 激活函数近似
神经网络中常用的激活函数(如 Sigmoid、Tanh、Softplus 等)通常是非线性的,有时在硬件实现或某些特殊场景下,我们希望用简单的多项式来近似这些函数,从而降低计算复杂度。
例子:
- Sigmoid 函数近似
在一些嵌入式设备或资源受限的系统中,使用这种多项式近似可以加速计算,同时减少功耗和延迟。
2. 优化算法中的二阶近似
在训练神经网络时,除了使用一阶梯度下降方法外,还有一些算法会利用二阶信息(如牛顿法或拟牛顿法)。这些方法通常基于对损失函数在当前点的泰勒展开,构造二次模型来近似原始函数,从而设计出更新规则。
例子:
- 牛顿法和 Hessian 矩阵
假设损失函数为 L(w)L(w)L(w),在当前参数 www 附近,可以利用泰勒展开得到:其中 H 是 Hessian 矩阵。这种二阶近似可以帮助设计更精确的参数更新步骤,从而加速收敛(尽管计算 Hessian 代价较高,但有一些方法采用近似 Hessian,如 L-BFGS 算法)。
3. 对抗攻击与模型线性化
在研究神经网络的鲁棒性和对抗样本时,泰勒级数也被用来分析模型在局部区域内的行为。通过对模型的决策函数进行一阶泰勒展开,可以得到其局部线性近似,从而分析输入扰动对输出的影响。这有助于理解为什么微小的扰动能够导致错误分类,并设计相应的防御策略。