PyTorch深度学习参数初始化和正则化

核心结论:参数初始化 决定模型能否顺利学习,正则化能避免模型 "学太死",两者都是深度学习训练的关键操作。

一、参数初始化:给模型一个好的起点

参数(主要是全连接层的权重和偏置)就像模型的 "初始技能点",选对了能让模型快速学出规律,选错了可能直接 "学废"。

1. 为啥不能随便初始化?

  • 全设为 0 或相同值:模型所有权重更新都一样,相当于 "所有技能点都一样",没法学习不同特征,完全没用。
  • 数值太大 / 太小:会导致梯度消失(学不动)或梯度爆炸(学乱了),模型没法收敛。

2. 常用的初始化方法(对应不同激活函数)

  • 常数初始化:全设为 0、1 或某个固定值,不推荐(除了偏置偶尔设为 0)。
  • 正态 / 均匀分布初始化:随机给权重赋符合正态或均匀分布的值,是基础且通用的选择。
  • Xavier (Glorot)初始化:专门适配 Sigmoid、Tanh 激活函数,能让每层输入输出的 "信号强度" 保持稳定,避免梯度消失。
  • He (kaiming)初始化:专门适配 ReLU 及其变体(比如 Leaky ReLU),是目前隐藏层最常用的初始化方法之一。

相关代码如下:

复制代码
import torch.nn as nn
linear = nn.Linear(5, 2)
#正态分布初始化
#参数初始化为制定均值和标准差的正态分布
nn.init.normal_(linear.weight,mean=0,std=1)
print(linear.weight)

#均与分布初始化
#参数初始化为指定范围均匀分布
nn.init.uniform_(linear.weight,a=0,b=10)

#Xavier正态分布初始化
nn.init.xavier_normal_(linear.weight)
#Xavier均匀分布初始化
nn.init.xavier_uniform_(linear.weight)
#He初始化
nn.init.kaiming_normal_(linear.weight)
#He初始化
nn.init.kaiming_uniform_(linear.weight)

二、正则化:防止模型 "死记硬背"

模型训练时容易 "学太细",把训练数据里的噪音都记住(这叫过拟合),导致换个新数据就出错。正则化就是给模型 "松绑",让它学通用规律而非细节。

1. 核心方法:Dropout(随机失活)

  • 原理:训练时随机 "关掉" 一部分神经元,让模型没法依赖某个特定神经元,被迫学更通用的特征。
  • 操作:
    • 训练时:按概率(比如 50%)随机关闭神经元,没被关闭的神经元输出会稍微放大,保证信号强度不变。
    • 测试时:所有神经元都工作,不关闭也不放大。
  • 优点:简单有效,不管是全连接层还是卷积层都能用,尤其适合复杂模型。

简单代码如下:

复制代码
#正则化,随机失活
import torch

dropout = torch.nn.Dropout(p = 0.5) #p参数:表示随机失活的概率
#torch.randint(low, high, size)
x = torch.randint(1,10,(10,),dtype=torch.float) #创建一个10行1列的随机数
print("dropout前", x)
print("dropout后", dropout(x))

三、通俗总结

  • 初始化:给模型选 "初始技能点",He 配 ReLU、Xavier 配 Sigmoid/Tanh,别全设 0 或乱设值。
  • 正则化:用 Dropout 随机 "关掉" 部分神经元,让模型不 "死记硬背",换数据也能表现好。
相关推荐
cxr8287 小时前
龙虾长程任务测试 —— 撰写零人公司自动化运营实践研究报告
运维·人工智能·自动化·openclaw
key_3_feng7 小时前
PolarDB for AI RAG系统建设方案
人工智能·polardb
mit6.8247 小时前
生成式推荐GR4AD
人工智能
网络工程小王7 小时前
【提示词工程和思维链的讲解】学习笔记
人工智能·笔记·学习
我的Doraemon7 小时前
大模型是怎么被训练出来的?
人工智能·深度学习·机器学习
SomeB1oody7 小时前
【Python深度学习】1.1. 多层感知器MLP(人工神经网络)介绍
开发语言·人工智能·python·深度学习·机器学习
枕石 入梦7 小时前
【源码解析】OpenClaw 多渠道 AI 助手网关的架构设计与核心原理
人工智能·openclaw·小龙虾
财经资讯数据_灵砚智能7 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月6日
大数据·人工智能·python·信息可视化·语言模型·自然语言处理·ai编程
逻极7 小时前
Windows平台Ollama AMD GPU编译全攻略:基于ROCm 6.2的实战指南(附构建脚本)
人工智能·windows·gpu·amd·ollama
ZzT7 小时前
CC 记忆凭啥不用向量数据库
人工智能·开源·claude