三层架构:全连接层、损失函数与梯度下降的协同原理

# 三层架构:全连接层、损失函数与梯度下降的协同原理


深度学习模型的表象千变万化,卷积、循环、注意力、扩散等组件层出叠现。然而剥除所有外围封装,绝大多数网络可还原至三个核心模块:**全连接层完成特征变换**,**损失函数定义优化目标**,**梯度下降执行参数调整**。这三层架构构成深度学习的稳定三角,理解其协同机制,是穿透各类模型变体的认知支点。


## 全连接层:仿射变换与信息流转


全连接层是神经网络最基础的信息处理单元。其数学本质是**仿射变换**——输入向量与权重矩阵相乘,叠加偏置,再经非线性激活函数输出:


```python

import numpy as np


class LinearLayer:

    def __init__(self, in_features, out_features):

        # 权重初始化:小随机数打破对称性

        self.W = np.random.randn(in_features, out_features) * 0.01

        self.b = np.zeros(out_features)

        

    def forward(self, x):

        self.x = x  # 缓存输入,供反向传播使用

        self.z = np.dot(x, self.W) + self.b

        self.a = self._relu(self.z)  # 激活函数

        return self.a

    

    def _relu(self, z):

        return np.maximum(0, z)

```


单一神经元的表达能力有限,但**层叠与宽度扩展赋予网络通用逼近能力**。每一层都是对输入表示的重新组织,深层网络通过逐层抽象,将原始像素空间映射至语义决策边界。全连接层在此过程中扮演“特征混合器”角色——每个输出神经元是全部输入神经元的加权和,全局感受野使其信息整合能力强大,却也带来参数稠密、易过拟合的代价。


## 损失函数:优化目标的量化标尺


模型输出与期望目标存在差异,但差异本身不可直接用于参数更新。**损失函数将此差异量化为单一标量**,使梯度下降有明确的下降方向可循。


分类任务以交叉熵为默认选择,回归任务以均方误差为典型代表:


```python

class CrossEntropyLoss:

    def forward(self, y_pred, y_true):

        self.y_pred = y_pred

        self.y_true = y_true

        # 数值稳定性处理

        eps = 1e-12

        y_pred = np.clip(y_pred, eps, 1 - eps)

        loss = -np.sum(y_true * np.log(y_pred))

        return loss

    <"f7.a8k1.org.cn"><"z9.a8k1.org.cn"><"j2.a8k1.org.cn">

    def backward(self):

        # 交叉熵 + Softmax的梯度简化形式

        return self.y_pred - self.y_true

```


损失函数的选择直接决定**优化曲面的几何形态**。均方误差在分类任务中导数饱和,训练迟缓;交叉熵在概率空间测量分布差异,梯度更为稳定。损失函数与输出层激活函数的配对(如Softmax+交叉熵、Sigmoid+二分类交叉熵)并非随意组合,而是**导数计算简化与数值稳定性**的双重考量结果。


## 梯度下降:误差反向传播与参数航行


损失标量需沿计算图反向分配至各层参数,这一过程依赖**链式法则**:


```python

class LinearLayer:

    # ... 接前文

    def backward(self, grad_a):

        # grad_a 来自上一层反向传播

        m = self.x.shape[0]  # 批量大小

        

        # ReLU导数:输入大于0处为1,否则为0

        grad_z = grad_a.copy()

        grad_z[self.z <= 0] = 0

        

        # 参数梯度

        self.grad_W = np.dot(self.x.T, grad_z) / m

        self.grad_b = np.sum(grad_z, axis=0) / m

        

        # 传递至前一层

        self.grad_x = np.dot(grad_z, self.W.T)

        return self.grad_x

    

    def update(self, lr):

        self.W -= lr * self.grad_W

        self.b -= lr * self.grad_b

```


**梯度除以批量大小**是重要细节——它使更新步长与批量解耦,学习率调参更具一致性。参数沿负梯度方向移动,损失曲面上的“航行”轨迹由此确定。


## 三要素的时序协奏


完整训练循环串联前向传播、损失计算、反向传播、参数更新四个阶段:


```python

model = [LinearLayer(784, 256), LinearLayer(256, 10)]

loss_fn = CrossEntropyLoss()

lr = 0.01


for epoch in range(20):

    total_loss = 0

    for x_batch, y_batch in dataloader:

        # 前向传播

        output = x_batch

        for layer in model:

            output = layer.forward(output)

        

        # 损失计算

        loss = loss_fn.forward(output, y_batch)

        total_loss += loss

        <"n5.a8k1.org.cn"><"w1.a8k1.org.cn"><"g8.a8k1.org.cn">

        # 反向传播

        grad = loss_fn.backward()

        for layer in reversed(model):

            grad = layer.backward(grad)

        

        # 参数更新

        for layer in model:

            layer.update(lr)

    

    print(f"Epoch {epoch}, Loss: {total_loss/len(dataloader):.4f}")

```


此循环嵌套于PyTorch、TensorFlow等现代框架的`training`函数底层。框架差异在于**自动微分引擎与硬件加速后端**,逻辑骨架与此无本质区别。


## 三要素的现代演进


全连接层、损失函数、梯度下降这一经典组合持续吸纳新成果。**批量归一化**插入全连接层之后,使每层输入保持稳定分布,允许更高学习率;**Label Smoothing**软化独热标签的硬边界,提升泛化性;**Adam**为每个参数适配独立学习率,缓解学习率全局设置的难题。


然而所有改进均未动摇三要素的根基地位。全连接层仍是信息变换的基础单元,损失函数继续扮演优化目标定义者的角色,梯度下降依旧承担参数调整的执行机构。


## 框架黑箱的透视镜


深度学习框架将三要素封装为高级API:`nn.Linear`对应全连接层,`nn.CrossEntropyLoss`合并Softmax与损失计算,`optim.SGD`或`optim.Adam`实现参数更新。封装提升了开发效率,但也可能掩盖底层逻辑。


**理解三要素的协同机制,等于获得了透视框架黑箱的能力**。当梯度消失时,知晓问题可能出在激活函数导数链;当损失震荡时,可以审视学习率与批量大小的匹配关系;当模型不收敛时,能够回溯至权重初始化与损失函数选择。黑箱逐渐透明,调试从随机试错转向系统诊断。


三层架构历经三十余年检验,始终是深度学习最为稳固的认知锚点。


请使用浏览器的分享功能分享到微信等