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

相关推荐
新缸中之脑2 小时前
AI智能体评估指南
数据库·人工智能·oracle
zzh940772 小时前
大模型压缩与蒸馏技术拆解:GPT-4o与Gemini官网如何实现模型瘦身?
人工智能·深度学习·计算机视觉
zyhomepage2 小时前
科技的成就(七十二)
开发语言·人工智能·科技·算法·内容运营
Daydream.V2 小时前
OpenCV高端操作——特征检测(附案例实战)
人工智能·opencv·计算机视觉
RuiBo_Qiu2 小时前
LLM的神经网络之谜: 神经网络是简单的线性计算加非线形激活的堆叠
人工智能·深度学习·神经网络
金融小师妹2 小时前
基于多因子定价模型解析:美元强势与利率预期重构驱动的金价8连跌机制
大数据·人工智能·svn·能源
赵庆明老师2 小时前
08-AI论文创作:辅助文献阅读
人工智能
龙文浩_2 小时前
AI深度学习,神经网络处理流程
深度学习·神经网络
QYR_Jodie2 小时前
全球聚硫醇固化剂市场:2026-2032年CAGR7.0%,2032年规模2.4亿美元
大数据·人工智能