深度学习中的常见初始化方法:原理、应用与比较

【 Transformer 系列,故事从 d k \sqrt{d_k} dk 说起

LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看!

它长这个样子: 深入浅出 Transformer

看完后,想起了老生常谈 d k \sqrt{d_k} dk 问题,必须一探究竟:Transformer 中缩放点积注意力机制探讨:除以根号 dk 理由及其影响

感觉不够清楚,还是再Review下考研概率论,有了:基于考研概率论知识解读 Transformer:为何自注意力机制要除以根号 dk,中间会涉及初始化、标准化、Sofrmax函数,于是继续

【初始化相关】:深度学习中的常见初始化方法:原理、应用与比较
【标准化系列】: 数据为什么要进行标准化:Z-标准化的神奇蜕变,带出了关联知识点: 深度 “炼丹” 术之 Batch Normalization 与 Z - 标准化:开启数据的神秘转换
【Softmax复习】:Softmax 层反向传播梯度计算实例解析,中间想到了经常配套使用的交叉熵,于是梳理了交叉熵的前世今生

KL 散度:多维度解读概率分布间的隐秘 “距离”
熵与交叉熵:从不确定性角度理解 KL 散度
机器学习、深度学习关于熵你所需要知道的一切

一、引言

在深度学习领域,模型的训练过程本质上是通过优化算法不断调整参数,以最小化损失函数。然而,参数的初始值对模型的训练过程和最终性能有着深远影响。不合适的初始化可能导致模型收敛缓慢,甚至无法收敛,出现梯度消失或爆炸等问题。因此,选择合适的初始化方法至关重要。

二、常见初始化方法

(一)随机初始化

随机初始化是一种简单直接的方法,即从某个分布中随机采样数值来初始化模型参数。最常见的是从均匀分布或正态分布中采样。

  • 均匀分布随机初始化:通常从一个较小的范围(如 [ − 0.01 , 0.01 ] [-0.01, 0.01] [0.01,0.01])内的均匀分布中抽取数值。例如,对于一个权重矩阵 W W W,其元素 w i j w_{ij} wij可以通过 w i j ∼ U ( − 0.01 , 0.01 ) w_{ij} \sim U(-0.01, 0.01) wijU(0.01,0.01)进行初始化。这种方法的优点是简单易行,但缺点是可能导致神经元的输出分布在训练初期过于集中或分散,不利于模型的有效训练。
  • 正态分布随机初始化:从均值为0,标准差为0.01的正态分布 N ( 0 , 0.01 ) N(0, 0.01) N(0,0.01)中采样初始化参数。例如, w i j ∼ N ( 0 , 0.01 ) w_{ij} \sim N(0, 0.01) wijN(0,0.01)。正态分布随机初始化同样简单,但也面临与均匀分布随机初始化类似的问题,即难以保证神经元输出在训练过程中的稳定性。

(二)零初始化

零初始化是将所有模型参数都设置为0。这种方法看似简单直观,但在实际应用中存在严重问题。由于所有参数相同,在反向传播过程中,所有神经元的梯度也相同,导致它们在训练过程中以相同的方式更新,无法学习到不同的特征,模型难以收敛到一个好的解。

(三)Xavier初始化(Glorot初始化)

Xavier初始化由Xavier Glorot和Yoshua Bengio在2010年提出,旨在解决深度神经网络中梯度消失和爆炸的问题。它基于这样的思想:在神经网络的前向传播和反向传播过程中,要保持信号的方差稳定。

  • 原理:对于一个线性层,设输入维度为 n i n n_{in} nin,输出维度为 n o u t n_{out} nout。Xavier初始化从均匀分布 U ( − 6 n i n + n o u t , 6 n i n + n o u t ) U(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}) U(nin+nout6 ,nin+nout6 )中采样初始化权重。其推导基于以下假设:在激活函数为线性或类似sigmoid、tanh等对称函数时,为了使前向传播和反向传播中信号的方差保持一致,权重的方差应满足 Var ( W ) = 2 n i n + n o u t \text{Var}(W) = \frac{2}{n_{in} + n_{out}} Var(W)=nin+nout2。对于均匀分布 U ( − a , a ) U(-a, a) U(a,a),其方差为 a 2 3 \frac{a^2}{3} 3a2,由此可得 a = 6 n i n + n o u t a = \sqrt{\frac{6}{n_{in} + n_{out}}} a=nin+nout6
  • 优点:Xavier初始化能够使信号在网络层之间更稳定地传播,避免梯度消失或爆炸,从而加速模型的收敛。它在许多使用sigmoid或tanh激活函数的模型中表现良好。
  • 缺点:当激活函数为ReLU及其变体时,Xavier初始化可能无法很好地适应,因为ReLU函数在负半轴的输出为0,会改变信号的分布特性。

(四)Kaiming初始化(He初始化)

Kaiming初始化由何恺明等人在2015年提出,专门针对ReLU激活函数进行设计。

  • 原理:Kaiming初始化从正态分布 N ( 0 , 2 n i n ) N(0, \sqrt{\frac{2}{n_{in}}}) N(0,nin2 )中采样初始化权重,其中 n i n n_{in} nin是输入维度。其推导基于ReLU函数的特性,由于ReLU函数在正向传播时,只有一半的神经元会被激活,为了保持信号的方差在正向传播中不变,权重的方差应设置为 2 n i n \frac{2}{n_{in}} nin2
  • 优点:在使用ReLU及其变体激活函数的网络中,Kaiming初始化能够有效地保持信号的方差稳定,避免梯度问题,使模型收敛更快且更稳定。它在许多深度卷积神经网络(如ResNet)中取得了显著的效果。
  • 缺点:对于非ReLU类型的激活函数,Kaiming初始化可能不是最优选择。

(五)初始化方法的变体

  • LeCun正态初始化:这是Kaiming初始化的一种变体,适用于ReLU激活函数。它从正态分布 N ( 0 , 1 n i n ) N(0, \frac{1}{n_{in}}) N(0,nin1)中采样初始化权重,与Kaiming初始化相比,其方差的缩放因子略有不同。
  • LeCun均匀初始化:从均匀分布 U ( − 3 n i n , 3 n i n ) U(-\sqrt{\frac{3}{n_{in}}}, \sqrt{\frac{3}{n_{in}}}) U(nin3 ,nin3 )中采样初始化权重,同样是针对ReLU激活函数设计的一种初始化方法。

三、应用场景与效果比较

不同的初始化方法适用于不同的模型架构和激活函数。在使用sigmoid或tanh激活函数的传统神经网络中,Xavier初始化通常能取得较好的效果。而在以ReLU及其变体(如LeakyReLU、PReLU等)为激活函数的深度神经网络,特别是卷积神经网络和循环神经网络中,Kaiming初始化及其变体表现更为出色。

为了直观地比较不同初始化方法的效果,以一个多层感知机(MLP)模型为例,在MNIST手写数字识别任务中,分别使用随机初始化、Xavier初始化和Kaiming初始化进行训练。实验结果表明,随机初始化的模型收敛速度较慢,且容易陷入局部最优解,导致最终的准确率较低。Xavier初始化的模型收敛速度明显加快,准确率也有所提高。而Kaiming初始化的模型在训练过程中收敛速度最快,且最终达到了最高的准确率,具体如下:

初始化方法适用激活函数适用模型架构优点缺点实际效果(以MNIST手写数字识别MLP模型为例)
随机初始化理论上适用于各种激活函数,但实际效果不佳各类神经网络模型简单易行1. 神经元输出分布在训练初期易过于集中或分散
2. 收敛速度慢,易陷入局部最优解
收敛速度慢,最终准确率较低
零初始化不依赖激活函数类型不适用任何实际模型(因严重缺陷)简单直观所有神经元梯度相同,无法学习不同特征,模型难以收敛模型无法有效收敛,准确率极低
Xavier初始化(Glorot初始化)sigmoid、tanh等对称激活函数传统神经网络,如全连接神经网络(FCN)1. 使信号在网络层间稳定传播
2. 避免梯度消失或爆炸
3. 加速模型收敛
当激活函数为ReLU及其变体时,无法很好适应收敛速度较随机初始化快,准确率有所提高
Kaiming初始化(He初始化)ReLU及其变体(LeakyReLU、PReLU等)深度卷积神经网络(CNN)、循环神经网络(RNN)及其变体(LSTM、GRU)1. 针对ReLU特性设计,有效保持信号方差稳定
2. 避免梯度问题,使模型收敛更快更稳定
对于非ReLU类型激活函数可能不是最优收敛速度最快,最终达到最高准确率
LeCun正态初始化ReLU及其变体深度卷积神经网络(CNN)、多层感知机(MLP)等使用ReLU的模型基于Kaiming初始化,针对ReLU设计,有助于保持信号稳定传播对于非ReLU激活函数适用性差在使用ReLU的模型中,收敛效果较好,与Kaiming初始化效果相近
LeCun均匀初始化ReLU及其变体深度卷积神经网络(CNN)、多层感知机(MLP)等使用ReLU的模型针对ReLU函数设计,通过均匀分布初始化权重,利于信号在网络中传播对非ReLU激活函数效果不佳在使用ReLU的模型中,能有效帮助模型收敛,效果与Kaiming初始化相当

四、结论

深度学习中的初始化方法是模型训练的关键环节。随机初始化虽然简单,但效果往往不尽人意。零初始化由于其局限性在实际中很少使用。Xavier初始化和Kaiming初始化及其变体通过合理地设计权重的分布,有效地解决了梯度消失和爆炸的问题,提高了模型的训练效率和性能。在实际应用中,应根据模型的架构和所使用的激活函数,选择合适的初始化方法,以获得最佳的训练效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953651.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…

【2024年华为OD机试】 (CD卷,100分)- 最大N个数与最小N个数的和(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明: 数组中数字范围 [0, 1000]最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回 -1输入非法返回 -1 …

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换,后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件: ToolboxCreator.exe/ini:toolboxcreator…

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor (默认安装在C盘) 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor,选择设置 选择Model,添加deepseek-chat 注意这里去掉其他的勾选项&…

《零基础Go语言算法实战》【题目 2-7】defer 关键字特性

《零基础Go语言算法实战》 【题目 2-7】defer 关键字特性 下面代码的输出是什么?请说明原因。 package main import ( "fmt" ) func main() { deferFunc() func deferFunc() { defer func() { fmt.Println("value1") }() defer func() {…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上,Mobileye展示了端到端自动驾驶系统Mobileye Drive™,通过高度集成的传感器、算法和计算平台,可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间,Mobileye创始人兼首席执行官Amnon …

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

超大规模分类(三):KNN softmax

传统的分类损失计算输入数据和每个类别中心的距离,来优化模型的训练。KNN softmax通过选择和输入数据最相关的top-K个类别,仅计算输入数据和top-K个类别中心的距离,以减小计算量。 KNN softmax首次诞生于达摩院机器智能技术实验室发表的SIGKD…

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务,并且提前备份数据! 1.有sql文件时候。 打开navicat,运行sql文件 然后点击后面三个点,选中要运行的sql文件,开始。 鼠标右键刷新一下,就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统,可以通过以下几种方法尝试分析: 查看页面源代码: 打开网站,右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志,例如: WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘

今天在学习fastapi的时候,发现一款数据库迁移工具,通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候, 彼其娘之。。 报了一些错误: Traceback (most recent ca…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI:支持xlsx,.xls,版本>2.5.3 XLS:HSSFWorkbook,主要前缀HSS, XLSX:XSSFWorkbook,主要前缀XSS,using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

浅谈云计算07 | 云安全机制

浅谈云计算安全机制:全方位守护云端世界 一、引言二、加密技术:数据的隐形护盾三、散列机制:数据完整性的忠诚卫士四、数字签名:数据来源与真伪的鉴定专家五、公钥基础设施(PKI):信任的基石六、…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例,打造不需要图片内边距,描边平滑,高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边,来突出强调2d对象 当你去网上查找2d描边shader,移植到项目里面,大概率会…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出(非Websocket) 前言:流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口,用于接收服务器发送的事件流(Server - Sent Events,SSE&#xff…

黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作

B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等 增强自控力 冥想慢呼吸绿色锻炼充分休息减少决策次数优先做重要的事情(早晨)融入强自控群控…

当你不小心使用了MySQL的保留字作为字段名而导致你的SQL语法解析错误该怎么办!

问题举例: 你在尝试更新一个名为 desc 的字段时遇到了 SQL 语法错误。原因是 desc 是 MySQL 的保留字,通常用于表示 ORDER BY 子句中的降序(DESC),因此直接使用 desc 作为字段名会导致 SQL 解析错误。如下图&#xff…

excel设置好的可选择列数据后,如何快速输入到单元格中?

当设置好列的【数据】-【数据有效性】-【序列】后,在单元格中输入可选择数据的开头,就会提示出对应的可选择数据,然后,按一下键盘上的【↓】键,再按回车,即可快速输入到单元格中。