DNNfoward

一、DNN 前向传播(Forward)是什么?

大白话:就像「做菜」,把原材料(输入数据)按菜谱(模型参数)一步步加工成成品(预测结果)。

核心流程:

输入数据 → 第 1 层(乘权重 + 加偏置 → 激活函数) → 第 2 层(同上) → … → 输出层 → 预测结果

二、关键步骤拆解(用「做菜」类比)

1. 准备原材料(输入数据)

  • 例子:输入一张猫的照片(像素矩阵),就像准备了一堆食材(蔬菜、肉、调料)。

2. 第 1 步加工(第 1 层隐藏层)

  • 切菜(线性变换:乘权重 + 加偏置):
    厨师按菜谱把食材切成块(比如把胡萝卜切成丁)。
    公式:Z1 = 输入 × W1 + b1
    (W1 是「切菜刀法」,b1 是「额外添加的调料」)。
  • 焯水(激活函数:ReLU):
    把切好的菜焯水,去除杂质(比如把负数信号过滤掉)。
    公式:A1 = ReLU(Z1)
    (ReLU 函数:把负数变成 0,正数保留)。

3. 第 2 步加工(第 2 层隐藏层)

  • 炒菜(线性变换 + 激活):
    把焯水后的菜和其他食材一起炒(比如把胡萝卜丁和肉一起炒)。
    公式:Z2 = A1 × W2 + b2 → A2 = ReLU(Z2)

4. 装盘(输出层)

  • 最后调味(线性变换):
    炒好的菜装盘,撒上葱花(比如把中间特征变成最终预测)。
    公式:输出 = A2 × W3 + b3
    (如果是分类问题,输出可能是「猫」「狗」「鸟」的概率)。

三、用代码直观理解(PyTorch 伪代码)

python
 
运行
 
 
 
 
def forward(x):
    # 第1层:切菜 → 焯水
    z1 = x @ W1 + b1  # @ 是矩阵乘法,W1/b1 是模型参数
    a1 = torch.relu(z1)  # ReLU激活:过滤负数
    
    # 第2层:炒菜 → 调味
    z2 = a1 @ W2 + b2
    a2 = torch.relu(z2)
    
    # 输出层:装盘
    output = a2 @ W3 + b3
    return output  # 返回预测结果(如分类概率)
 

四、为什么需要前向传播?

  1. 预测:输入新数据,得到模型的预测结果(比如输入一张图,输出「猫」或「狗」)。
  2. 为反向传播做准备:前向传播计算出的结果,用于后续计算损失函数,然后通过反向传播更新模型参数。

五、关键概念对比表

术语大白话解释类比做菜
权重(W) 菜谱中的「用量」(如盐 2 勺) 切菜的刀法、炒菜的火候
偏置(b) 额外添加的调料(如多加点糖) 调味时的「微调」
激活函数 过滤杂质的步骤(如焯水、去沫) 去除食材中的杂质
矩阵乘法 按比例混合食材(如 1 份肉配 2 份菜) 把不同食材按比例混合
多层网络 多步烹饪(切菜→焯水→炒菜→装盘) 复杂菜品需要多步加工

六、总结:前向传播的本质

数据从输入层进入,经过多层「加工」(线性变换 + 非线性激活),最终在输出层得到预测结果。整个过程就像按菜谱做菜,每一步都按特定规则转换数据,直到得到成品。

训练好的 DNN 就像一个熟练的厨师,不管你给什么食材(输入数据),都能做出对应的菜品(预测结果)~
posted @ 2025-06-16 00:37  m516606428  阅读(5)  评论(0)    收藏  举报