前馈神经网络

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
Word2vec(讨论 | 贡献)2025年6月14日 (六) 20:52的版本
跳到导航 跳到搜索

前馈是指神经网络的识别推理架构。人工神经网络架构基于输入乘以权重以获得输出(输入到输出):前馈。循环神经网络或带有循环的神经网络允许来自后期处理阶段的信息反馈给早期阶段进行序列处理。然而,在推理的每个阶段,前馈乘法仍然是核心,对于反向传播 或随时间反向传播至关重要。因此,神经网络不能包含负反馈或正反馈等反馈,其中输出反馈到完全相同的输入并对其进行修改,因为这会形成一个无限循环,不可能及时倒带以通过反向传播产生错误信号。这个问题和命名法似乎是一些计算机科学家和研究大脑网络的其他领域的科学家之间的一个混淆点。

数学基础

历史上常见的两种激活函数都是S 型函数,其描述如下:

[math]\displaystyle{ey(v_i) = \tanh(v_i) \quad \text{and} \quad y(v_i) = \left(1 + e^{-v_i}\right)^{-1}}[/math]

第一个是双曲正切函数,其范围从 -1 到 1,另一个是逻辑函数,其形状类似,但范围从 0 到 1。这里[math]\displaystyle{y_i}[/math]是第[math]\displaystyle{i}[/math]个节点(神经元)和。[math]\displaystyle{v_i}[/math]是输入连接的加权和。其他激活函数已被提出,包括rectifier 和 softplus函数。更专业的激活函数包括径向基函数(用于径向基网络,这是另一类有监督神经网络模型)。

在深度学习的最新发展中,修正线性单元(ReLU)被更频繁地用作克服与 S 型函数相关的 数值问题的可能方法之一。

学习

学习是通过在处理每条数据后,根据输出结果与预期结果之间的误差量,改变连接权重来实现的。这是监督学习的一个例子,通过反向传播进行。

我们可以在输出节点中表示错误程度 j 在第 n 个数据点(训练示例):

[math]\displaystyle{e_j(n) = d_j(n) - y_j(n)}[/math]

其中 [math]\displaystyle{d_j(n)}[/math] 是期望的目标值、[math]\displaystyle{y_j(n)}[/math] 是实际输出。

然后可以根据最小化整个输出误差的校正来调整节点权重,第 n 条数据点的误差为:

[math]\displaystyle{\mathcal{E}(n) = \frac{1}{2} \sum_j^{\text{output node}} e_j^2(n)}[/math]

使用 梯度下降,每个权重的变化为:

[math]\displaystyle{\Delta w_{ji}(n) = -\eta \frac{\partial \mathcal{E}(n)}{\partial v_j(n)} y_i(n)}[/math]

其中:

  • [math]\displaystyle{y_i(n)}[/math] 是第 i 个神经元的输出
  • [math]\displaystyle{\eta}[/math] 是学习率,用于控制步长,避免过度更新或收敛太慢
  • [math]\displaystyle{\frac{\partial \mathcal{E}(n)}{\partial v_j(n)}}[/math] 表示误差函数对神经元输入的导数

对于常见的激活函数为可导函数 [math]\displaystyle{\phi}[/math] 的情况,有:

[math]\displaystyle{\frac{\partial \mathcal{E}(n)}{\partial v_j(n)} = e_j(n) \phi'(v_j(n))}[/math]

要计算的导数取决于感应局部场 [math]\displaystyle{v_j}[/math],它本身也是变化的。很容易证明,对于输出节点,这个导数可以简化为:

[math]\displaystyle{-\frac{\partial \mathcal{E}(n)}{\partial v_j(n)} = e_j(n), \phi'(v_j(n))}[/math]

其中 [math]\displaystyle{\phi'}[/math] 是上述激活函数的导数,其本身不会变化。

对于隐藏节点权重的变化,分析起来比较困难,但可以证明相关的导数是:

[math]\displaystyle{-\frac{\partial \mathcal{E}(n)}{\partial v_j(n)} = \phi'(v_j(n)) \sum_k \left( -\frac{\partial \mathcal{E}(n)}{\partial v_k(n)} w_{kj}(n) \right)}[/math]

这取决于第 [math]\displaystyle{k}[/math] 个节点代表输出层。

因此,为了改变隐藏层权重,输出层权重会根据激活函数的导数而变化,因此该算法代表了激活函数的反向传播。