前馈神经网络(Feedforward Neural Network, FNN)是人工神经网络中最基础、最经典的结构,其核心特点是信息单向流动(从输入层到输出层,无循环或反馈)。它通过多层非线性变换将输入数据映射到输出结果,是深度学习的基础模型。
一、前馈神经网络的定义与结构
给定一组神经元,我们可以将神经元作为节点来构建一个网络。
不同的神经网络模型有着不同网络连接的拓扑结构,一种比较直接的拓扑结构是前馈网络。前馈神经网络(Feedforward Neural Network,FNN)是最早发明的简单 人工神经网络。
前馈神经网络也经常称为多层感知器(Multi-Layer Perceptron, MLP),但多层感知器的叫法并不是十分合理,因为前馈神经网络其实是由多层 的 Logistic 回归模型(连续的非线性函数)组成,而不是由多层的感知器(不连 续的非线性函数)组成 。
在前馈神经网络中,各神经元分别属于不同的层。每一层的神经元可以接收前一层神经元的信号,并产生信号输出到下一层。第 0 层称为输入层,最后一层称为输出层,其他中间层称为隐藏层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
一个前馈神经网络的示例:
为了理解前馈神经网络的迭代公式,我们先来认识一下和前馈神经网络相关的属性:
令 𝒂(0) = 𝒙,前馈神经网络通过不断迭代下面公式进行信息传播:
首先根据第𝑙−1层神经元的活性值(Activation)𝒂(𝑙−1) 计算出第𝑙层神经元的净活性值(Net Activation)𝒛(𝑙),然后经过一个激活函数得到第 𝑙 层神经元的活性值。因此,我们也可以把每个神经层看作一个仿射变换(Affine Transformation) 和一个非线性变换。
这样,前馈神经网络可以通过逐层的信息传递,得到网络最后的输出 𝒂(𝐿)。整个网络可以看作一个复合函数 𝜙(𝒙; 𝑾 , 𝒃),将向量 𝒙 作为第 1 层的输入 𝒂(0) ,将第 𝐿 层的输出 𝒂(𝐿) 作为整个函数的输出:
其中 𝑾 , 𝒃 表示网络中所有层的连接权重和偏置。
二、理解前馈神经网络的公式
前馈神经网络(Feedforward Neural Network)通常由输入层、一个或多个隐藏层以及输出层构成,每一层都通过线性变换和非线性激活函数处理数据。
例子1:用于二分类的多层感知器(MLP)
任务描述:假设有一个简单的二分类问题,输入数据为二维向量,目标是判断样本属于类别1还是类别0。
网络结构:
- 输入层:2个神经元,接受输入 x = [x_1, x_2]。
- 隐藏层:1层,假设有3个神经元,使用ReLU激活函数。
- 输出层:1个神经元,使用Sigmoid激活函数输出概率。
数学表达:
直观理解:
- 输入二维数据经过隐藏层后被映射到3维特征空间,再通过输出层得到一个0~1之间的概率,表示样本属于类别1的概率。
- 这种多层感知器利用非线性激活函数对输入数据进行逐层抽象,能有效区分二分类问题中的不同样本。
例子2:用于回归的前馈神经网络
任务描述:假设我们需要预测房价,输入特征包括面积、房间数等多个指标,输出为预测的房价。
网络结构:
- 输入层:假设有 d 个神经元,对应 d 个特征。
- 隐藏层:2层,每层含有若干个神经元,激活函数可以选用ReLU或Tanh。
- 输出层:1个神经元,使用线性激活函数(或无激活函数),输出一个实数,表示预测的房价。
数学表达:
直观理解:
- 输入层接收各个房价预测的特征,经过两层隐藏层后,网络能够抽象出高层次的特征,如房屋位置、整体市场趋势等。
- 输出层将这些高层特征线性组合,生成最终的房价预测值。
- 这种网络结构能够捕捉复杂的非线性关系,适合处理回归问题。
总结
- 例子1展示了一个用于二分类的多层感知器,通过Sigmoid输出概率;
- 例子2展示了一个用于回归任务的前馈神经网络,通过多层抽象特征输出连续的预测值。
这两种例子帮助初学者理解前馈神经网络如何通过逐层信息传递和非线性变换实现不同任务的建模。
三、前馈神经网络的工作原理
1. 前向传播(Forward Propagation)
-
输入层:接收原始数据(如图像像素、文本向量)。
-
隐藏层:通过权重矩阵和激活函数逐层提取抽象特征。
-
例如:第一层可能识别边缘,第二层组合边缘为形状,第三层识别物体部件。
-
-
输出层:生成最终结果(如分类概率、回归值)。
2. 激活函数的作用
-
引入非线性,使网络能够拟合复杂函数(如Sigmoid将输出压缩到[0,1],ReLU解决梯度消失)。
-
若无激活函数,多层网络等效于单层线性变换(失去深层意义)。
四、进一步理解前馈神经网络
-
单向信息流
- 定义:
网络中的数据从输入层开始,依次经过隐藏层到输出层,每一层只接收来自前一层的信息,然后将处理结果传递给下一层。 - 直观理解:
可以将前馈网络想象成一个流水线,每一层都对数据进行特定的处理,信息一路“向前流动”,不会返回到前面的层。
- 定义:
-
层次结构
- 组成:
通常包含输入层、一个或多个隐藏层和输出层。每个隐藏层中的神经元将前一层的输出加权求和,再通过激活函数进行非线性变换。 - 意义:
这种层次化结构有助于网络逐层提取和抽象数据的特征,从简单到复杂,使得网络能够处理复杂的任务,如图像分类、语音识别和自然语言处理。
- 组成:
-
无反馈设计的优势
- 易于训练:
由于信息仅向前传递,前馈网络的训练主要依赖于前向传播计算输出,再利用反向传播算法计算梯度,从而更新权重。这种结构避免了复杂的反馈回路,使得梯度计算和参数更新更为直接和高效。 - 确定性计算:
每一次前向传播的计算路径是固定的,便于理解和调试。
- 易于训练:
-
举例说明
例子1:简单的多层感知器(MLP)
假设我们构建一个用于手写数字识别的前馈网络:- 输入层:接收28×28像素的图像数据(展平成784维向量)。
- 隐藏层:例如设有两层,每层使用ReLU激活函数,将输入数据转换为更抽象的特征。
- 输出层:包含10个神经元,通过Softmax激活函数将网络输出转化为0~1之间的概率分布,分别对应数字0到9。
整个过程为:输入图像 → 隐藏层提取特征 → 输出层分类 → 最终预测数字。这就是典型的前馈网络结构。
例子2:房价预测问题
在回归任务中,前馈神经网络也被广泛使用:- 输入层:接收多个特征,例如面积、房间数、地理位置等。
- 隐藏层:多层神经元通过加权求和和激活函数(如ReLU或Tanh)进行非线性变换,提取复杂特征。
- 输出层:通常只有一个神经元,输出一个连续值,表示预测的房价。
这种结构帮助模型捕捉输入特征与房价之间的复杂非线性关系。
五、一个具体的示例:房价预测(回归任务)
网络结构
-
输入层:节点数 = 13
-
输入特征:房屋的13个属性(如房间数、犯罪率、地理位置等,参考波士顿房价数据集)。
-
激活函数:无(直接传递原始数据)。
-
-
隐藏层:节点数 = 8
-
激活函数:ReLU(引入非线性,加速收敛)。
-
功能:提取输入特征的非线性组合,学习房价与特征间复杂关系。
-
-
输出层:节点数 = 1
-
激活函数:线性(回归任务需输出连续值)。
-
输出结果:预测的房价(单位:千美元)。
-
前向传播流程
训练细节
-
损失函数:均方误差(MSE)
-
优化器:Adam(自适应学习率,加速收敛)。
-
数据预处理:输入特征标准化(均值=0,方差=1)。
-
评估指标:平均绝对误差(MAE)、均方根误差(RMSE)。
代码实现(Python + PyTorch)
import torch
import torch.nn as nn
class HousePriceModel(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(13, 8) # 输入层 → 隐藏层
self.relu = nn.ReLU()
self.fc2 = nn.Linear(8, 1) # 隐藏层 → 输出层
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 训练流程
model = HousePriceModel()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for epoch in range(1000):
outputs = model(X_train_tensor)
loss = criterion(outputs, y_train_tensor)
optimizer.zero_grad()
loss.backward()
optimizer.step()
关键特点
-
前馈性:数据单向流动(输入 → 隐藏 → 输出),无循环或反馈。
-
非线性建模:ReLU激活函数使网络能拟合房价与特征的非线性关系。
-
回归任务适配:输出层直接预测连续值,适合房价这类数值预测问题。
这个例子展示了如何用简单的前馈网络解决回归任务,适用于结构化数据(如房价、销售额预测等)。
经过以上的学习和分析,其实神经网络并没有那么难理解,坚持学习、循序渐进,逐步达到掌握的程度!加油!