Xavier 初始化

news2024/9/20 3:27:35

Xavier 初始化

为什么在 W [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) × n p . s q r t ( 1 n [ l − 1 ] ) W^{[l]}=np.random.randn(shape)\times np.sqrt(\frac{1}{n^{[l-1]}}) W[l]=np.random.randn(shape)×np.sqrt(n[l1]1) 中需要乘以 n p . s q r t ( 1 n [ l − 1 ] ) np.sqrt(\frac{1}{n^{[l-1]}}) np.sqrt(n[l1]1)


Xavier 初始化通过保持输入和输出之间的方差不变来尽可能避免梯度爆炸/消失。

它假设每个神经元的输入和输出是从一个均值 μ \mu μ 为零、方差 σ 2 \sigma^2 σ2 相同的分布中抽样得到的,而这个分布的方差可以通过输入和输出的维度来估计。

对于权重矩阵 W [ l ] W^{[l]} W[l] 采用高斯分布来初始化: N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)

W [ l ] W^{[l]} W[l] 方差很大(取值范围非常广泛 → \rightarrow l l l 层的输出值 z z z 很大

→ \rightarrow 激活函数 a a a 的斜率很大( l l l 层的输出 z z z 就是 a a a 的输入)

→ \rightarrow l l l 层权重的梯度变大( l l l 层权重的梯度与激活函数的斜率成正比)

→ \rightarrow 可能引发梯度爆炸

  • 主要零均值: 高斯分布的均值为零,这意味着在初始化权重时,期望值为零,不会引入任何偏差。

    μ   ! = 0 \mu~!=0 μ !=0,就会引入一个初始的偏差(记为 bias_orig)。假设 a = g ( z ) a=g(z) a=g(z),且只有一个输出层。
    在这里插入图片描述

    y ^ = W x + b \hat{y}=Wx+b y^=Wx+b

    当引入偏差之后, y ^ = W x + b + b i a s _ o r i g \hat{y} = Wx+b +bias\_orig y^=Wx+b+bias_orig

    也就是在基本预测函数的基础上加上了额外的偏差。


    即:本来预测函数与真实有一定的偏差,但是加上了额外的偏差,与真实偏差更大。

    • 偏差:模型预测值与真实值之间的差距
  • 其次对称性: 高斯分布是对称的,这意味着权重的正值和负值出现的概率相等,从而可以避免引入偏斜。

那么某一个神经元输出也就是 z = w 1 x 1 + w 2 x 2 + ⋯ + w n x n = Σ i = 1 n i n w i x i , b = 0 z =w_1x_1+w_2x_2+\cdots+w_nx_n=\mathop{\Sigma}\limits_{i=1}^{n_{in}}w_ix_i,b=0 z=w1x1+w2x2++wnxn=i=1Σninwixi,b=0

假设 x x x 的输入也具有均值 μ = 0 \mu =0 μ=0,方差 γ 2 \gamma^2 γ2

E ( z ) = Σ i = 1 n i n E [ w i x i ] E(z) = \mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_ix_i] E(z)=i=1ΣninE[wixi]
= Σ i = 1 n i n E [ w i ] E [ x i ] =\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i]E[x_i] =i=1ΣninE[wi]E[xi]
= 0 =0 =0

D ( z ) = E ( z 2 ) − E ( z ) 2 D(z)=E(z^2)-E(z)^2 D(z)=E(z2)E(z)2
= Σ i = 1 n i n E [ w i 2 x i 2 ] − 0 =\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i^2x_i^2]-0 =i=1ΣninE[wi2xi2]0
= Σ i = 1 n i n E [ w i 2 ] E [ x i 2 ] =\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i^2] E[x_i^2] =i=1ΣninE[wi2]E[xi2]

= n i n σ 2 γ 2 =n_{in}\sigma^2\gamma^2 =ninσ2γ2

E [ w 2 ] = D ( w ) − ( E [ w ] ) 2 = D ( w ) = σ 2 E[w^2] = D(w)-(E[w])^2=D(w)=\sigma^2 E[w2]=D(w)(E[w])2=D(w)=σ2

E [ x 2 ] = D ( x ) − ( E [ x ] ) 2 = D ( x ) = γ 2 E[x^2] = D(x)-(E[x])^2=D(x)=\gamma^2 E[x2]=D(x)(E[x])2=D(x)=γ2

由于需要保证输入与输出的方差一致: D ( z ) = γ 2 D(z)=\gamma^2 D(z)=γ2

那么 n i n σ 2 = 1 n_{in}\sigma^2 = 1 ninσ2=1


若只考虑正向传播,那么 σ = 1 n i n \sigma = \sqrt{\frac{1}{n_{in}}} σ=nin1

也就是 n p . s q r t ( 1 n [ l − 1 ] ) np.sqrt(\frac{1}{n^{[l-1]}}) np.sqrt(n[l1]1)

那么权重矩阵 W [ l ] W^{[l]} W[l] 采用高斯分布来初始化: N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)

  • 其中 σ = 1 n [ l − 1 ] \sigma = \sqrt{\frac{1}{n^{[l-1]}}} σ=n[l1]1

即: W [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) × n p . s q r t ( 1 n [ l − 1 ] ) W^{[l]}=np.random.randn(shape)\times np.sqrt(\frac{1}{n^{[l-1]}}) W[l]=np.random.randn(shape)×np.sqrt(n[l1]1)

  • n p . r a n d o m . r a n d n ( s h a p e ) np.random.randn(shape) np.random.randn(shape) 默认服从 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1)

若即考虑正向传播,也考虑到反向传播

n i n σ 2 = 1 , n o u t σ 2 = 1 n_{in}\sigma^2 = 1,n_{out}\sigma^2 = 1 ninσ2=1,noutσ2=1

不可能同时满足二者

只需满足: n i n σ 2 + n o u t σ 2 = 2 n_{in}\sigma^2 + n_{out}\sigma^2 = 2 ninσ2+noutσ2=2

即:
σ = 2 n i n + n o u t (1) \sigma = \sqrt{\frac{2}{n_{in}+n_{out}}}\tag{1} σ=nin+nout2 (1)
通常: x x x 也采用高斯分布


x x x 的输入采用均匀分布 U ( − a , a ) U(-a,a) U(a,a)

同高斯分布的对称性

那么: σ 2 = ( a − ( − a ) ) 2 12 = a 2 3 \sigma^2 = \frac{(a-(-a))^2}{12}=\frac{a^2}{3} σ2=12(a(a))2=3a2

带入公式 ( 1 ) (1) (1) 得出初始化值域:
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 )

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宽带上网技术发展(xDSL、PON)

文章目录 xDSL(x数字用户线,x Digital Subscriber Line)IDSL(基于ISDN数字用户线路)ADSL(不对称数字用户线路)RADSL(速率自适应数字用户线路)HDSL(高速率数字用户线路)VDSL(极高速率数字用户线路)SDSL(单对线路/对称数字用户线路) PON&#x…

Linux驱动开发——(三)并发与竞争

目录 一、并发与竞争简介 二、原子操作 2.1 原子操作简介 2.2 原子整形操作API 2.3 原子位操作API 2.4 原子操作驱动代码 三、自旋锁 3.1 自旋锁简介 3.2 自旋锁API 3.3 自旋锁驱动代码 四、信号量 4.1 信号量简介 4.2 信号量API 4.3 信号量驱动代码 一、并发与…

SpringCloud系列(4)--SpringCloud微服务工程构建

前言:在上节我们新建了一个SpringCloud父工程,这一节主要是构建微服务工程,通过实现订单模块和支付模块来熟悉微服务的概念和构建过程。 1、在父工程下新建模块 2、选择模块的项目类型为Maven并选择模块要使用的JDK版本 3、填写子模块的名称&…

算法|最大堆、最小堆和堆排序的实现(JavaScript)

一些概念 堆&#xff1a;特殊的完全二叉树&#xff0c;具有特定性质的完全二叉树。大根堆&#xff1a;父节点 > 子节点小根堆&#xff1a;父节点 < 子节点 二叉堆也属于完全二叉树&#xff0c;所以可以用数组表示。 若下标从1开始&#xff0c;左节点为 2*i &#xff0…

Java的Future机制详解

Java的Future机制详解 一、为什么出现Future机制二、Future的相关类图2.1 Future 接口2.2 FutureTask 类 三、FutureTask的使用方法四、FutureTask源码分析4.1 state字段4.2 其他变量4.4 构造函数4.5 run方法及其他 一、为什么出现Future机制 常见的两种创建线程的方式。一种是…

高架学习笔记之软件架构风格

目录 零、什么是软件架构风格 一、常见的软件架构风格 二、数据流风格 2.1. 批处理风格 2.2. 管道-过滤器风格 三、调用/返回风格 3.1. 主/子程序风格 3.2. 面向对象风格 3.3. 层次型风格 3.4. 客户端/服务器风格 3.4.1. 两层C/S体系结构 3.4.2. 三层C/S体系结构 …

MBD_入门篇_20_Simulink子系统

20.Simulink子系统 20.1 概述 Simulink的子系统&#xff0c;相当于代码的function函数&#xff0c;但是模型的子系统又不完全等效于代码的函数。虚拟子系统并不会生成函数&#xff0c;而是以代码块的形式放在相应的调用位置上。模型层面我们使用子系统去做模块化的设计&#xf…

Mini-Gemini: 探索多模态视觉语言模型的新境界

一、背景 在数字化时代&#xff0c;人工智能的发展正以前所未有的速度推进。特别是在多模态学习领域&#xff0c;结合视觉和语言的能力已成为研究的热点。最近&#xff0c;一篇名为“Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models”的文章在arX…

[已解决]react打包部署

react打包部署 问题 npm install 命令无反应 思路 换成 yarn install 安装完hadoop的环境后&#xff0c;使用node的yarn会报错&#xff1a; 我们在cmd使用where yarn&#xff0c;如下&#xff1a; 看你想保留哪一个&#xff0c;我平时node用的多&#xff0c;就把hadoop的y…

飞书API(5):查看多维表 28 种数据类型的数据结构

一、引入 前面我们用于测试的数据集其实都是比较常用的数据&#xff0c;比如说文本、数字、单选等&#xff0c;但飞书多维表并不仅仅只有这些数据&#xff0c;截止发文&#xff0c;飞书多维表应用上支持28种数据类型&#xff0c;在数据层面飞书官方只提供了23种数据类型&#…

Cadence软件安装

Cadence软件 iscape 用于安装cadence家的安装软件 解压缩安装包tar -xvf IScape04.23.tar.gz运行bash IScape/iscape/bin/iscape.sh 设置默认安装路径(可选)IC618 这里使用的是IC618.320版本作为示例,其他版本安装过程差不多 安装 首先安装终端模拟器,不然安装之后会失败…

【前端】校园二手书交易系统javascript+css+html (源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Vnode是如何产生的?

源码 流程图 源码解读 Vue.js2.0中有两种生成方式&#xff1a;第一种是直接在Vue对象的option中添加render字段&#xff1b;第二种是像Vue.js 1.x版本那样写一个模板或者指定一个el根元素&#xff0c;它会首先转换成模板&#xff0c;经过HTMI语法解析器生成一个 ast 抽象语法树…

JAVAEE——IP协议

文章目录 IP协议IP协议报头格式IP协议报头的各个区段四位版本四位首部长度八位服务类型16位总长度16位标识&#xff0c;3位标志&#xff0c;13位片偏移八位生存时间八位协议 地址管理IP地址解决提议1&#xff1a;动态分配Ip地址解决提议2&#xff1a;NAT机制 IP协议 IP协议报头…

【新手入门必看】从零开始学指针

我使用VS CODEMSYS2的编译环境进行学习&#xff0c;想使用VS CODE进行C/C代码编写的小伙伴参考这篇文章进行环境配置VS Code 配置 C/C 编程运行环境&#xff08;保姆级教程&#xff09; 一、指针的引入 指针地址 #include <stdio.h>int main() {int a 10;printf(&quo…

编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 编写…

Java:二叉树(1)

从现在开始&#xff0c;我们进入二叉树的学习&#xff0c;二叉树是数据结构的重点部分&#xff0c;在了解这个结构之前&#xff0c;我们先来了解一下什么是树型结构吧&#xff01; 一、树型结构 1、树型结构简介 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>…

深度学习系列64:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入&#xff0c;主要流程包括&#xff1a; 1&#xff09; 使用cv2获取视频中所有帧的列表&#xff0c;如下&#xff1a; 2&#xff09;定义Croper。核心代码为69行&#xff1a;full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

openobserve-filebeat配置

优势 rustgolang开发的日志工具组合&#xff0c;自带日志数据存储&#xff0c;简化部署和管理。日志数据可配置保留x天。从日志文件中采集&#xff0c;做到非侵入式日志集中管理。 可从日志内容中提取信息进行报警等二次开发。 下载 openobserve-v0.10.1-windows-amd64 fil…

VL02N交货单清除字段:VLSTK(分配状态)

VL02N交货单清除字段&#xff1a;VLSTK(分配状态) 通过查找增强对应的BADI&#xff1a;LE_SHP_DELIVERY_PROC 修改方法&#xff1a;IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER&#xff0c;代码如下&#xff1a;