Skip to content

前馈神经网络 ​

前馈神经网络(Feedforward Neural Network, FNN)也称多层感知机(MLP)。信息从输入层逐层流向输出层,不存在循环连接。

概念详解 ​

对第 l 层,计算过程为:

z(l)=W(l)a(l−1)+b(l)a(l)=σ(z(l))

其中 a(0)=x。激活函数 σ 引入非线性,否则多层线性变换仍然等价于一层线性变换。

常见激活函数包括:

ReLU(x)=max(0,x)Sigmoid(x)=11+e−x

反向传播推导 ​

以均方误差为例:

L=12||y^−y||2

输出层误差项为:

δ(L)=∂L∂z(L)=(y^−y)⊙σ′(z(L))

隐藏层误差项由链式法则得到:

δ(l)=((W(l+1))Tδ(l+1))⊙σ′(z(l))

参数梯度为:

∂L∂W(l)=δ(l)(a(l−1))T∂L∂b(l)=δ(l)

应用代码 ​

python
import torch
from torch import nn

class MLP(nn.Module):
    def __init__(self, in_dim=4, hidden=16, out_dim=3):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(in_dim, hidden),
            nn.ReLU(),
            nn.Linear(hidden, out_dim)
        )

    def forward(self, x):
        return self.net(x)

X = torch.randn(32, 4)
y = torch.randint(0, 3, (32,))

model = MLP()
loss_fn = nn.CrossEntropyLoss()
optim = torch.optim.Adam(model.parameters(), lr=1e-3)

for step in range(100):
    logits = model(X)
    loss = loss_fn(logits, y)
    optim.zero_grad()
    loss.backward()
    optim.step()

print("loss:", loss.item())

小结 ​

前馈网络是深度学习最基础的模块。后续 CNN、RNN、Transformer 中的大量子结构,本质上仍然依赖线性层、激活函数和反向传播。