【无标题】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初始化保证梯度稳定传播,通过前向计算预测、损失衡量误差、反向传播求梯度、优化器更新参数,最终学习到输入到输出的复杂映射关系。​

相关推荐
艾为电子5 小时前
【应用方案】会议&面试记录终结者-艾为AI智能录音卡方案,清晰拾音,解放双手
人工智能·ai
AI攻城狮5 小时前
Adaptive Thinking 的代价:当 AI 自己决定"想多少"
人工智能·云原生·aigc
Z.风止5 小时前
Large Model-learning(3)
人工智能·笔记·后端·深度学习
LX567775 小时前
传统销售如何系统学习成为AI智能销售顾问?认证指南
人工智能·学习
zfan5205 小时前
python对Excel数据处理(1)
python·excel·pandas
程序员雷欧5 小时前
大模型应用开发学习第六天
人工智能
小饕5 小时前
我从零搭建 RAG 学到的 10 件事
python
Bacon5 小时前
前端转型 Agent 开发工程师
人工智能
春末的南方城市5 小时前
比肩顶尖闭源模型!京东开源240亿参数多模态模型JoyAI-Image:统一理解/生成/编辑,重塑AI图像编辑。
人工智能·深度学习·机器学习·计算机视觉·aigc
老歌老听老掉牙6 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt