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

特点
- 单向传播:输入→隐藏层→输出层,无反向连接;
- 全连接:相邻层的神经元之间全部两两连接(每个神经元的输入是上一层所有神经元的输出加权和);
- 非线性:通过激活函数(如ReLU)引入非线性,解决线性模型无法拟合复杂问题的缺陷。
各层详解
| 层级 | 作用 | 示例(手写数字识别) |
|---|---|---|
| 输入层 | 接收原始数据,无计算,仅传递(神经元数量=输入特征维度) | 28×28像素展平为784个神经元 |
| 隐藏层 | 提取特征(可多层),核心是“加权和+激活函数”($a = \sigma(Wx + b)$) | 128/64个神经元,ReLU激活 |
| 输出层 | 输出预测结果,激活函数根据任务选择 | 10个神经元(对应0-9),Softmax |
计算逻辑(单隐藏层)
输入层→隐藏层:z_1 = W_1 \cdot x + b_1 → a_1 = \sigma(z_1)(ReLU激活)
隐藏层→输出层:z_2 = W_2 \cdot a_1 + b_2 → a_2 = \sigma(z_2)(Softmax/Sigmoid等)
W:权重矩阵(核心可学习参数),b:偏置向量;
\sigma:激活函数(引入非线性,否则多层等价于单层)。
用PyTorch实现前馈神经网络
import torch
import torch.nn as nn
import torch.nn.functional as F
# ===================== 1. 全连接的前馈网络(MLP) =====================
# 特点:所有层都是nn.Linear(全连接),信息单向传播(前馈)
class FullyConnectedFNN(nn.Module):
def __init__(self, input_dim=10, hidden_dim=8, output_dim=2):
super().__init__()
# 全连接层1:输入层→隐藏层(10个输入神经元 → 8个隐藏神经元,全连接)
self.fc1 = nn.Linear(input_dim, hidden_dim)
# 全连接层2:隐藏层→输出层(8个隐藏神经元 → 2个输出神经元,全连接)
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
# 前向传播(单向:输入→隐藏→输出,无循环/反馈)
x = F.relu(self.fc1(x)) # 全连接+激活
x = self.fc2(x) # 全连接输出
return x
# ===================== 测试与对比 =====================
if __name__ == "__main__":
# 超参数
batch_size = 4
input_dim = 10
# 生成测试输入(4个样本,每个样本10个特征)
x = torch.randn(batch_size, input_dim)
# 1. 初始化全连接前馈网络
fc_fnn = FullyConnectedFNN(input_dim=10, hidden_dim=8, output_dim=2)
# 前向传播(均为单向,都是前馈网络)
out_fc = fc_fnn(x)
# 打印输出形状(均为[4,2],传播结果正常)
print("全连接前馈网络输出形状:", out_fc.shape) # torch.Size([4, 2])
总结
- 前馈神经网络(FNN)是信息单向传播的全连接网络,核心是“线性层+激活函数”的堆叠;
- 结构包含输入层、隐藏层(提取特征)、输出层(输出预测),激活函数是引入非线性的关键;
- 实战中用PyTorch的
nn.Linear搭建,训练流程为“前向传播→计算损失→反向传播→更新参数”,适合结构化数据/简单分类任务。