【机器学习300问】78、都有哪些神经网络的初始化参数方法?

news2024/9/21 7:40:19

        在训练神经网络时,权重初始化是确保良好收敛的关键步骤之一。不合适的初始化方法可能会导致梯度消失或爆炸,特别是在深层网络中。那么都有哪些神经网络的初始化参数方法呢?选择它这些方法的原则是什么?

一、常用神经网络初始化参数方法

(1)随机初始化

        关于随机初始化神经网络参数的方法,我在之前的文章中详细写到过,这里就不重点赘述。只做简单回顾,如果大家想进一步了解可以点击链接单独看看。

        随机初始化参数分成两种:一种是在一个均匀分布的区间内随机抽取,这种初始化方法确保参数具有一定的随机性,避免所有神经元开始时状态过于相似。另一种则是在参数遵循均值为0、标准差为某个特定值的正态分布的区间中随机抽取,这种初始化方法保证参数初始值围绕零点呈钟形分布,有助于防止参数值过大或过小导致的学习问题。

【机器学习300问】68、随机初始化神经网络权重的好处?icon-default.png?t=N7T8http://t.csdnimg.cn/Muzbf

(2)Xavier初始化

        Xavier初始化方法的基本想法是保持每一层的输入和输出的方差相等,以避免在训练过程中信号变得太小(梯度消失)或太大(梯度爆炸)。当使用Sigmoid或tanh等激活函数时,Xavier初始化尤其有效,因为这些激活函数在输入较小时近似线性,且当激活函数在其线性区域中时,我们希望信号的方差保持不变。

        具体来说,Xavier初始化方法会从一个均匀分布或正态分布中抽取初始化权重,这个分布的尺度为:

\text{Var}(W) = \sqrt{\frac{2}{n_{\text{in}} + n_{\text{out}}}}

或均匀分布的区间为:

\left[ -\sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}, \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}} \right]

其中n_{\text{in}}是输入单元的数量,n_{\text{out}}是输出单元的数量。

(3)He初始化

        He初始化专门针对使用ReLU及其变种作为激活函数的神经网络设计。He初始化基于Xavier初始化的思想,但考虑到ReLU激活函数仅对正半轴有非线性响应(即ReLU在其负区域的输出为0)。

        因此,He初始化将权重初始化为:

\text{Var}(W) = \frac{2}{n_{\text{in}}}

        当从正态分布中抽取初始化权重时,这个分布的标准差应该设置为:\sqrt{\frac{2}{n_{\text{in}}}}

        对于均匀分布来说,它的范围是:\left[ -\sqrt{\frac{6}{n_{\text{in}}}}, \sqrt{\frac{6}{n_{\text{in}}}} \right]

        有的论文提出对于tanh函数来说常量1比常量2的效率更高,所以权重初始化公式为:

\text{Var}(W) = \sqrt{\frac{1}{n_{\text{in}}}}

其中n_{\text{in}}是输入单元的数量。

二、选择方法的原则是什么?

(1)不同的激活函数选择不同的初始化参数方法

        不同的激活函数对输入信号的敏感度不同,因此需要不同的初始化策略来保持激活函数的输入信号在一个合理的范围内。按激活函数来选取初始化参数的方法是主要的选取原则。

激活函数初始化参数方法
SigmoidXavier初始化
TanhXavier初始化或He初始化
Relu等He初始化

(2)分析神经网络的深度和网络结构

        对于非常深的网络,需要特别小心地选择初始化方法,因为信号必须通过许多层而不被衰减或增强太多。Xavier和He初始化通过考虑输入和输出节点数,确保信号在多层网络中传递时保持合理的幅度,避免梯度在反向传播过程中变得过小(消失)或过大(爆炸),从而提高深层网络的训练可行性。

        不同网络结构(如全连接网络、卷积神经网络、循环神经网络等)有不同的连接结构和参数分布特点,可能受益于不同的初始化方法。例如,具有残差连接的网络如ResNet可能对初始化方法的选择不那么敏感,因为残差连接能帮助缓解梯度消失的问题。再例如,卷积层和循环层中的权重通常以矩阵形式存在,可能更适合采用正交初始化来确保空间或时间上的独立性。而对于全连接层,均匀或正态分布的随机初始化可能更为常见。

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

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

相关文章

Kubernetes(k8s)的概念以及使用

k8s的概念: K8s是指Kubernetes,是一个开源的容器编排和管理平台。它最初由Google开发,并于2014年将其开源。Kubernetes旨在简化容器化应用程序的部署、扩展和管理。 Kubernetes提供了一种可靠且可扩展的平台,用于管理容器化应用…

怎样才能迅速了解一个产品的业务流程?

很多小伙伴经常问我,刚进入一家新的企业,想要快速了解产品的业务流程,不知从何下手。主要是因为,有的企业根本没有文档可看;还有的企业有文档,但是记录的比较凌乱,想要从中找出点头绪来&#xf…

【Python-装饰器】

Python-装饰器 ■ 简介■ 装饰器的一般写法(闭包写法)■ 装饰器的语法 (outer写法) ■ 简介 装饰器其实是一种闭包, 功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 ■ 装饰器的一般写法(闭包写法&am…

2024年前端技术发展趋势

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

程客有话说05 | 吕时有:在GIS行业深耕13年,做梦做出来了数学竞赛题,这是让我最开心的事

《程客有话说》是我们最新推出的一个访谈栏目,邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事,我们尝试建立一个程序员交流与学习的平台,也欢迎大家推荐朋友或自己来参加我们的节目,一起加油。 本期我们邀请的程…

使用Docker搭建本地Nexus私有仓库

0-1开始Java语言编程之路 一、Ubuntu下Java语言环境搭建 二、Ubuntu下Docker环境安装 三、使用Docker搭建本地Nexus Maven私有仓库 四、Ubuntu下使用VisualStudioCode进行Java开发 你需要Nexus Java应用编译构建的一种主流方式就是通过Maven, Maven可以很方便的管理Java应用的…

网盘兼职真的能月入过万吗?你适合做哪种网盘分享牛?

1. 分享大容量文件: 提供常见软件安装包、系统镜像、游戏资源等常用的大容量文件,以满足用户的需求。 创建分类目录,便于用户浏览和查找所需文件。 编写详细的文件描述,包括文件版本、适用系统、安装方法等信息,帮助用…

Promise.all 的方法还没执行完就执行了.then

碰见一个问题,接盘了一个有问题的页面修改。 改变日期后 查询很多数据再去重新加载页面上的数据显示相关的组件。 问题就来了。 加载异常捏…… 最后我一通查: 重点来了 是因为这个Promise.all(数组),里边这个数组的问题。现在是在数据中…

XYCTF 部分wp及学习记录

1.ezmd5 根据题目提示 我们知道应该是要上传两张md5值相同的图片 根据原文链接:cryptanalysis - Are there two known strings which have the same MD5 hash value? - Cryptography Stack Exchange 把保存下来的图片上传一下 得到flag 2.ezhttp 根据原文链接&…

STM32H7的LCD控制学习和应用

STM32H7的LCD控制 LTDC基础硬件框图LTDC时钟源选择LTDC的时序配置LTDC背景层、图层1、图层2和Alpha混合LTDC的水平消隐和垂直消隐LCD的DE同步模式和HV同步模式的区别区分FPS帧率和刷新率避免LTDC刷新撕裂感的解决方法 驱动示例分配栈的大小MPU和Cache配置初始化SDRAM初始化LCD应…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程并发 Worker

Worker Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处理耗时操作但不可以直接操作UI。 Worker主要作用是为应用程序提供一个多线程的运行环境…

办公设备租赁行业内卷瞎扯

办公设备租赁行业内卷瞎扯 最近听到很多同行抱怨,现在市场太卷了,真的有点到了卷不死就往死里卷的节奏,让大家都开始想换地方,或者转行。但是今天,我想从另外一个角度聊一下这个问题,分析一下,…

苍穹外卖day9 (1)用户端历史订单

文章目录 前言用户端历史订单1. 查询历史订单1.1 业务规则1.2 接口设计1.3 代码实现 2. 查询历史订单详情2.1 接口设计2.2 代码实现 3. 取消订单3.1 业务规则3.2 接口设计3.3 代码设计 4. 再来一单4.1 业务规则4.2 接口设计4.3 代码实现 前言 用户端对历史订单的操作&#xff…

机器人系统开发ros2-基础学习16-使用 rosdep 管理依赖关系

1. what is rosdep? rosdep是一个依赖管理实用程序,可以与包和外部库一起使用。它是一个命令行实用程序,用于识别和安装依赖项以构建或安装包。 其本身rosdep并不是一个包管理器;它是一个元包管理器,它使用自己的系统知识和依赖…

Day10案例分页查询,条件查询

对要求进行逻辑分析,传递固定参数{page,pagesize}任意参数{name,gender,begin,end},返回总记录数以及当前页码的记录 不使用pagehelper插件,首先完成SQL语句 SQL语句 //固定头 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLI…

SQL-DML数据操纵语言(Oracle)

文章目录 DML数据操纵语言常见的字段属性字符型字段属性char(n)varchar2(n)/varchar(n) 数值型字段属性number([p],[s]int 日期型字段属性DATEtimestamp 如何查看字段属性增加数据INSERT快捷插入 删除数据DELETE修改数据UPDATE DML数据操纵语言 定义 是针对数据做处理&#xf…

JavaScript中的map()方法详解

1. map() 的返回值是一个新的数组&#xff0c;新数组中的元素为 “原数组调用函数处理过后的值” 2. 简单使用&#xff1a;遍历整个数组&#xff0c;将大于4的元素乘以2 const array [2, 3, 4, 4, 5, 6]console.log("array",array) const map array.map(x > {…

【THM】Linux Privilege Escalation(权限提升)-初级渗透测试

介绍 权限升级是一个旅程。没有灵丹妙药,很大程度上取决于目标系统的具体配置。内核版本、安装的应用程序、支持的编程语言、其他用户的密码是影响您通往 root shell 之路的几个关键要素。 该房间旨在涵盖主要的权限升级向量,并让您更好地了解该过程。无论您是参加 CTF、参加…

什么?双核A7双网口核心板只要49?

“性价比之王” 触觉智能IDO-SOM2D0X系列基于SigmaStar SSD201/202 SoC的超小SOM模组&#xff0c;双核A7 1.2GHz主频&#xff0c;1080P视频解码&#xff0c;支持MIPI/RGB显示接口&#xff0c;支持双以太网&#xff0c;支持SDIO/USB/SPI/I2C/UART/DMIC/I2S&#xff0c;集成音频C…

跨平台手机号:微信手机号授权登录、微信授权登录双登录实现账户生态融合,新时代的身份密钥

小程序厂商的多样性体现在开发工具、服务领域、商业模式等多方面&#xff0c;各厂商凭借独特的技术优势、行业解决方案和市场策略&#xff0c;满足不同企业和用户需求。与此同时&#xff0c;随着移动互联网发展&#xff0c;手机号统一登录成为提升用户体验、简化登录流程的关键…