【无标题】AI深层神经网络(多层全连接)+ ReLU 激活 的完整处理流程

AI深层神经网络(多层全连接)+ ReLU 激活 的完整处理流程,从输入 → 前向 → 反向 → 更新 → 推理。

​一、整体结构

我们搭一个3层全连接深度网络:

输入层 → 隐藏层1(Linear+ReLU)→ 隐藏层2(Linear+ReLU)→ 输出层(Linear)

回归任务:输出是连续值,最后一层不加激活。

流程和简单网络完全一样,只是多了几层 + 每层加 ReLU。

二、核心知识点先说明

  1. 每层计算

z = xW + b,\quad a = \text{ReLU}(z) = \max(0,z)

  1. ReLU作用:引入非线性,让网络能拟合复杂函数

  1. 参数初始化:ReLU 必须用 He初始化

  1. 训练流程不变:

前向 → 损失 → 反向 → 更新 → 循环

三、完整流程 + PyTorch

  1. 准备:数据、模型、初始化、损失、优化器

1)造模拟数据(回归)

​import torch

import torch.nn as nn

import torch.optim as optim

数据:随便构造一个回归任务

x = torch.randn(1000, 5) # 输入:1000个样本,每个5维特征

y = 3 * x:,0:1 + 2 * x:,1:2 + 5 + 0.1 * torch.randn(1000, 1)

2)定义深度神经网络(多层 + ReLU)

​class DeepNet(nn.Module):

def init (self, in_dim=5, hidden_dim=16, out_dim=1):

super().init ()

隐藏层1

self.fc1 = nn.Linear(in_dim, hidden_dim)

隐藏层2

self.fc2 = nn.Linear(hidden_dim, hidden_dim)

输出层

self.fc3 = nn.Linear(hidden_dim, out_dim)

ReLU激活

self.relu = nn.ReLU()

def forward(self, x):

第1层:线性 + ReLU

out = self.fc1(x)

out = self.relu(out)

第2层:线性 + ReLU

out = self.fc2(out)

out = self.relu(out)

输出层:只线性,不加激活(回归)

out = self.fc3(out)

return out

model = DeepNet()

​3)参数初始化(ReLU 用 He)

​# 对每个 Linear 层做 He 初始化

def init_weights(m):

复制代码
if isinstance(m, nn.Linear):

    # ReLU 专用:He/Kaiming 初始化
    nn.init.kaiming_normal_(m.weight, nonlinearity='relu')

    nn.init.constant_(m.bias, 0.0)

model.apply(init_weights)

​4)损失 + 优化器

​criterion = nn.MSELoss() # 回归损失

optimizer = optim.Adam(model.parameters(), lr=1e-3)

​1. 前向传播(核心:深层+ReLU到底在算什么)

数学公式(每层)

  • 第1层
    z_1 = x W_1 + b_1,\quad a_1 = \text{ReLU}(z_1)
  • 第2层:
    z_2 = a_1 W_2 + b_2,\quad a_2 = \text{ReLU}(z_2)
  • 输出层:
    \hat{y} = a_2 W_3 + b_3
    PyTorch 代码
    y_pred = model(x)
    内部发生了什么:
  • 数据经过多层线性变换提取特征
  • ReLU 把负数压成0,保留有用信号
  • 越深,特征越抽象、拟合能力越强
  1. 计算损失
    loss = criterion(y_pred, y)
    • 衡量预测值与真实值差距
  • 损失是所有参数的总误差
  1. 反向传播(深层网络的关键)
    原理
    从损失出发,从最后一层往第一层,用链式法则算梯度:

\frac{\partial Loss}{\partial W_3},\ \frac{\partial Loss}{\partial b_3},\quad

\frac{\partial Loss}{\partial W_2},\ \frac{\partial Loss}{\partial b_2},\quad

\frac{\partial Loss}{\partial W_1},\ \frac{\partial Loss}{\partial b_1}

ReLU 的梯度:

  • z>0,梯度=1
  • z<0,梯度=0

ReLU 会让一部分神经元梯度为0,不更新 → 所以必须用 He初始化 避免大量神经元死掉。

​optimizer.zero_grad() # 清空上一轮梯度

loss.backward() # 反向传播,计算所有参数梯度

​4. 参数更新

所有层的 W,b 一起更新:

W = W - \eta \cdot \nabla W

b = b - \eta \cdot \nabla b

​optimizer.step()

​每更新一次:

  • 浅层、深层参数一起优化

  • 网络整体变得更准

    ​5. 完整训练循环

    ​epochs = 2000

    for epoch in range(epochs):

    1. 前向传播

    y_pred = model(x)

    2. 计算损失

    loss = criterion(y_pred, y)

    3. 反向传播

    optimizer.zero_grad()

    loss.backward()

    4. 更新参数

    optimizer.step()

    if epoch % 200 == 0:

    print(f"Epoch {epoch}/{epochs}, Loss: {loss.item():.4f}")

    ​- Loss 持续下降

  • 深层网络能很好拟合数据

​6. 推理阶段(用训练好的深度网络)

只前向,不计算梯度,不更新参数

​x_test = torch.randn(1, 5) # 新样本

model.eval() # 推理模式

with torch.no_grad(): # 关闭梯度计算(省显存、提速)

pred = model(x_test)

总结:

深层神经网络通过多层Linear+ReLU提取非线性特征,用He初始化保证梯度稳定传播,通过前向计算预测、损失衡量误差、反向传播求梯度、优化器更新参数,最终学习到输入到输出的复杂映射关系。​

相关推荐
圣殿骑士-Khtangc12 分钟前
单智能体落地实战:从 ReAct 到 Production-Ready AI Agent 全链路解析
人工智能·react.js
云烟成雨TD34 分钟前
Spring AI 1.x 系列【56】用大模型评判大模型:递归顾问实现自动化评估方案
人工智能·spring·自动化
AI客栈1 小时前
K8s 自定义控制器中 WorkQueue 队列优化实践:基于 IPVS 转发原理的状态变化处理
人工智能
0xR3lativ1ty1 小时前
每周AI工具新动态
人工智能
jerryinwuhan1 小时前
面向产业带与中小企业数字化转型的电商运营人才培养模式
大数据·人工智能
xsc6996751 小时前
从零搭建大模型与智能体平台 - 完整技术详解
python
Drgfd1 小时前
智造赋能品控:汪进进以精益生产,夯实质量制造底座
人工智能·制造
米小虾1 小时前
"Chat is dead":OpenAI 正在杀死的不是聊天,是整个 AI 交互范式
人工智能·openai
冬奇Lab1 小时前
Agent 系列(18):成本与性能优化——省钱且更快
人工智能·llm·agent
Hefei GlobefishAI2 小时前
合肥合豚AI硬件方案:专为智能售货柜厂商定制的无人零售接口套件
人工智能·零售·自动售货机·无人零售硬件·ai硬件方案·智能售货柜·接口套件