“前馈神经网络”的版本间的差异

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
跳到导航 跳到搜索
第7行: 第7行:
  
 
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 [2]。
 
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 [2]。
−
[[文件:多层前馈神经网络示意图.png|缩略图|图1多层前馈神经网络示例]]
+
[[文件:多层前馈神经网络示意图.png|缩略图|图1:多层前馈神经网络示例]]
 
一个典型的多层前馈神经网络如图1所示。
 
一个典型的多层前馈神经网络如图1所示。
  
第23行: 第23行:
 
* '''修剪法''':从一个较大的网络出发,训练后逐步删除不重要的连接或节点,优化结构但计算开销大。
 
* '''修剪法''':从一个较大的网络出发,训练后逐步删除不重要的连接或节点,优化结构但计算开销大。
  
−
* '''生长法''':从小网络开始,逐步添加节点或连接,自适应构建网络结构,具有自组织特性,灵活但训练过程较复杂。
+
* [[文件:前馈网络示意图.png|缩略图|图2:在前馈网络中,信息总是朝一个方向移动;它永远不会倒退。]]'''生长法''':从小网络开始,逐步添加节点或连接,自适应构建网络结构,具有自组织特性,灵活但训练过程较复杂。
  
 
=== 工作原理 ===
 
=== 工作原理 ===

2025年6月14日 (六) 21:27的版本

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

介绍

简介

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

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

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

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

基本结构

前馈神经网络通常由三类层组成:

  • 输入层(Input Layer):接收原始数据,每个神经元对应一个特征输入。
  • 隐藏层(Hidden Layer):通过加权和非线性激活函数对输入信息进行变换,可由一个或多个隐藏层组成。
  • 输出层(Output Layer):输出最终预测结果,输出节点的个数依据具体任务(如分类、回归)而定。

结构设计

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

  • 直接定型法:一开始就根据经验或启发规则确定网络结构,简单但依赖人为判断,结构固定不变。
  • 修剪法:从一个较大的网络出发,训练后逐步删除不重要的连接或节点,优化结构但计算开销大。
  • 图2:在前馈网络中,信息总是朝一个方向移动;它永远不会倒退。
    生长法:从小网络开始,逐步添加节点或连接,自适应构建网络结构,具有自组织特性,灵活但训练过程较复杂。

工作原理

  1. 正向传播(Forward Propagation):数据从输入层依次传至输出层,每一层的输出通过权重连接并激活传递至下一层;
  2. 损失计算(Loss Calculation):比较输出层结果与真实标签,计算误差;
  3. 反向传播(Backpropagation):计算误差对每个参数的梯度,通过梯度下降等优化算法更新权重与偏置。

特点

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

数学基础

数学模型

对于第 [math]\displaystyle{l}[/math] 层神经元,其输出可表达为:

[math]\displaystyle{a^{(l)} = f^{(l)}\left(W^{(l)} a^{(l-1)} + b^{(l)}\right)}[/math]

其中:

  • [math]\displaystyle{a^{(l)}}[/math]:第 [math]\displaystyle{l}[/math] 层的输出;
  • [math]\displaystyle{W^{(l)}}[/math]:第 [math]\displaystyle{l}[/math] 层的权重矩阵;
  • [math]\displaystyle{b^{(l)}}[/math]:第 [math]\displaystyle{l}[/math] 层的偏置向量;
  • [math]\displaystyle{f^{(l)}}[/math]:激活函数,如 ReLU、Sigmoid、Tanh;
  • [math]\displaystyle{a^{(0)}}[/math]:输入向量

激活函数

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

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

常见前馈神经网络

感知器网络

感知器(又叫感知机)是最简单的前馈网络,它主要用于模式分类,也可用在基于模式分类的学习控制和多模态控制中。感知器网络可分为单层感知器网络和多层感知器网络。

BP网络

BP网络是指连接权调整采用了反向传播(Back Propagation)学习算法的前馈网络。与感知器不同之处在于,BP网络的神经元变换函数采用了S形函数(Sigmoid函数),因此输出量是0~1之间的连续量,可实现从输入到输出的任意的非线性映射。

RBF网络

RBF网络是指隐含层神经元由RBF神经元组成的前馈网络。RBF神经元是指神经元的变换函数为RBF(Radial Basis Function,径向基函数)的神经元。典型的RBF网络由三层组成:一个输入层,一个或多个由RBF神经元组成的RBF层(隐含层),一个由线性神经元组成的输出层。

与其他神经网络的比较

网络类型 信息流动方向 是否适合时间序列 特点
前馈神经网络 FNN 单向,无反馈回路 否 结构简单,易于训练
卷积神经网络 CNN 单向 否 局部连接,参数共享,适用于图像
循环神经网络 RNN 存在反馈回路 是 可处理时序数据,但训练复杂
Transformer 并行注意力机制 是 多用于自然语言处理,结构更复杂

历史

时间线

  • 大约在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 与合作者将深度学习成功应用于语言建模,个人对反向传播网络的兴趣再度燃起。

代表性研究成果与应用

  • 反向传播算法(1986):Rumelhart 等人提出反向传播,成为训练FNN的核心方法;
  • 手写数字识别(1990年代):使用FNN对MNIST数据集进行分类,作为神经网络应用的标准实验;
  • Tabular数据建模(至今):FNN常用于结构化数据的回归与分类;
  • 早期语音识别与信号处理:在RNN/CNN普及前,FNN是主要建模工具;
  • 自动驾驶传感器融合:FNN被用于多源感知数据的早期特征组合。