前馈神经网络(feedforward neural network,FNN)

介绍

前馈神经网络(feedforward neural network,FNN),简称前馈网络,是人工神经网络的一种。

前馈神经网络采用一种单向多层结构。其中每一层包含若干个神经元。在此种神经网络中,各神经元可以接收前一层神经元的信号,并产生输出到下一层。

下图是典型的多层前馈神经网络:

  • 第0层叫输入层
  • 最后一层叫输出层
  • 其他中间层叫做隐含层(或隐藏层、隐层)。隐层可以是一层。也可以是多层。

特点

  • 单向传播:输入→隐藏层→输出层,无反向连接;
  • 全连接:相邻层的神经元之间全部两两连接(每个神经元的输入是上一层所有神经元的输出加权和);
  • 非线性:通过激活函数(如ReLU)引入非线性,解决线性模型无法拟合复杂问题的缺陷。

各层详解

层级 作用 示例(手写数字识别)
输入层 接收原始数据,无计算,仅传递(神经元数量=输入特征维度) 28×28像素展平为784个神经元
隐藏层 提取特征(可多层),核心是“加权和+激活函数”($a = \sigma(Wx + b)$) 128/64个神经元,ReLU激活
输出层 输出预测结果,激活函数根据任务选择 10个神经元(对应0-9),Softmax

计算逻辑(单隐藏层)

  1. 输入层→隐藏层:z_1 = W_1 \cdot x + b_1 → a_1 = \sigma(z_1)(ReLU激活)

  2. 隐藏层→输出层: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])

总结

  1. 前馈神经网络(FNN)是信息单向传播的全连接网络,核心是“线性层+激活函数”的堆叠;
  2. 结构包含输入层、隐藏层(提取特征)、输出层(输出预测),激活函数是引入非线性的关键;
  3. 实战中用PyTorch的nn.Linear搭建,训练流程为“前向传播→计算损失→反向传播→更新参数”,适合结构化数据/简单分类任务。

原文出处:/show_1GW2eUXAGQ6e.html