前馈神经网络

Word2vec(讨论 | 贡献)2025年6月14日 (六) 21:13的版本

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

介绍

简介

前馈神经网络(feedforward neural network,FNN),简称前馈网络,是人工神经网络的一种。前馈神经网络采用一种单向多层结构。其中每一层包含若干个神经元。在此种神经网络中,各神经元可以接收前一层神经元的信号,并产生输出到下一层。第0层叫输入层,最后一层叫输出层,其他中间层叫做隐含层(或隐藏层、隐层)。隐层可以是一层,也可以是多层。

整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 [2]。

 
图1多层前馈神经网络示例

一个典型的多层前馈神经网络如图1所示。

结构设计

对于前馈神经网络结构设计,通常采用的方法有3类:直接定型法、修剪法和生长法。

  • 直接定型法:一开始就根据经验或启发规则确定网络结构,简单但依赖人为判断,结构固定不变。
  • 修剪法:从一个较大的网络出发,训练后逐步删除不重要的连接或节点,优化结构但计算开销大。
  • 生长法:从小网络开始,逐步添加节点或连接,自适应构建网络结构,具有自组织特性,灵活但训练过程较复杂。

特点

前馈神经网络结构简单,应用广泛,能够以任意精度逼近任意连续函数及平方可积函数.而且可以精确实现任意有限训练样本集。从系统的观点看,前馈网络是一种静态非线性映射.通过简单非线性处理单元的复合映射,可获得复杂的非线性处理能力。从计算的观点看.缺乏丰富的动力学行为。大部分前馈网络都是学习网络,其分类能力和模式识别能力一般都强于反馈网络。

数学基础

激活函数

历史上常见的两种激活函数都是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] 个节点代表输出层。

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

历史

时间线

  • 大约在1800年,勒让德(1805)和高斯(1795)创建了最简单的前馈网络,它由一个带有线性激活函数的权重层组成。该网络采用最小二乘法进行训练,以最小化均方误差,也称为线性回归。
  • 1943年,沃伦·麦卡洛克和沃尔特·皮茨提出二进制人工神经元作为生物神经网络的逻辑模型。
  • 1958年,弗兰克·罗森布拉特(Frank Rosenblatt)提出了多层感知器模型,该模型由一个输入层、一个具有随机权重且无法学习的隐藏层和一个具有可学习连接的输出层组成。
  • 1960年,Joseph 提出了具有自适应隐藏层的多层感知器,并赞扬了 HD Block 和 BW Knight 的工作。
  • 1965年,Alexey Grigorevich Ivakhnenko 和 Valentin Lapa 发布了“数据处理群方法”(Group Method of Data Handling),这是第一个可行的深度学习算法,用于训练任意深度的神经网络。
  • 1967年,Shun'ichi Amari 报告了第一个通过随机梯度下降训练的多层神经网络。
  • 1970年,Seppo Linnainmaa 在他的硕士论文中发表了反向传播的现代形式。Paul Werbos 于1982年将反向传播推广到多层神经网络。
  • 2003年,由于 Yoshua Bengio 与合作者将深度学习成功应用于语言建模,个人对反向传播网络的兴趣再度燃起。