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

devtools/2025/1/13 2:34:18/

【 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初始化及其变体通过合理地设计权重的分布,有效地解决了梯度消失和爆炸的问题,提高了模型的训练效率和性能。在实际应用中,应根据模型的架构和所使用的激活函数,选择合适的初始化方法,以获得最佳的训练效果。


http://www.ppmy.cn/devtools/150031.html

相关文章

windows servre 2008 加密本地windows 操作系统驱动器,bitlocker加解密过程

首先点击服务器管理器,点击功能选项,添加功能 下一步 安装 需要重启 发现安装成功 发现只有一个盘,再添加一个盘 点击虚拟机设置 点击下一步 下一步 下一步 储存为单个文件 点击完成 找到这里 如果脱机就选择联机 右键初始化磁盘 点击确定 右…

uniapp中修改input里的字体颜色

<input type"text" placeholder"从哪儿出发" v-model"start.site_name"placeholder-class"shi-co" disabled"true" value"" /> 给input加上placeholder-class属性&#xff0c;然后给此属性加上样式。 未选…

SQLite PRAGMA

SQLite的PRAGMA命令是一种特殊的命令&#xff0c;用于在SQLite环境中控制各种环境变量和状态标志。PRAGMA值可以被读取&#xff0c;也可以根据需求进行设置【0†source】。 PRAGMA命令的语法格式如下&#xff1a; 要查询当前的PRAGMA值&#xff0c;只需提供该PRAGMA的名字&am…

当Elasticsearch索引数据量过多时,可以采取以下措施进行优化和部署

调整索引分片数量&#xff1a;根据数据量和集群规模&#xff0c;重新分配索引的分片数量。较小的索引分片可以提高查询性能&#xff0c;但过多的分片也会增加管理开销。因此&#xff0c;需要根据具体情况进行权衡。调整副本数量&#xff1a;根据数据量和查询负载&#xff0c;适…

深入NLP核心技术:文本张量表示与词嵌入全面解析

系列文章目录 01-中文NLP入门必备&#xff1a;全面解析分词、命名实体识别与词性标注&#xff08;附详细实战案例&#xff09; 02-深入NLP核心技术&#xff1a;文本张量表示与词嵌入全面解析 文章目录 系列文章目录前言一、文本张量表示1.1 文本张量表示简介1.1.1 举例说明1.1…

请求方式(基于注解实现)

1.编写web.xml文件配置启动信息 <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app><display-name>Archetype Created Web Application</di…

苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)

Spring Task介绍 应用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触发的时间。 构成规则&#xff1a;分为6或7个域&…

(概率论)无偏估计

参考文章&#xff1a;(15 封私信 / 51 条消息) 什么是无偏估计&#xff1f; - 知乎 (zhihu.com) 首先&#xff0c;第一个回答中&#xff0c;马同学图解数学讲解得很形象&#xff0c; 我的概括是&#xff1a;“注意&#xff0c;有一个总体的均值u。然后&#xff0c;如果抽样n个&…