深度学习中的参数初始化
深度学习中的参数初始化主要是指初始化神经网络中的权重和偏置。权重和偏置通常分开初始化,偏置通常初始化为零或较小的常数值。
没有一种万能的初始化技术,因为最佳初始化可能因具体架构和要解决的问题而异。因此,尝试不同的初始化技术以了解哪种技术最适合给定任务通常是一个好主意。
如果没有一个有用的权值初始化,训练网络可能会导致收敛速度非常慢或无法收敛。
梯度消失和梯度爆炸(vanishing and exploding gradients):适当的权重初始化对于防止梯度消失和梯度爆炸至关重要。
1.梯度消失:梯度变得越来越小,权重更新很小,权重几乎保持不变,导致收敛速度变慢,在最坏的情况下,可能会导致网络完全停止收敛,学习过程停滞。
2.梯度爆炸:梯度可能会呈指数增长,导致不成比例的大量更新并导致学习过程发散(divergence)。
参数初始化方法:
1.零初始化:将所有权重和偏置(weights and biases)初始化为0。这在深度学习中通常不使用,因为它会导致梯度对称(symmetry),从而导致所有神经元在训练期间学习相同的特征。所有神经元中的所有激活都是相同的,因此所有计算都是相同的,这使得相关模型成为线性模型(linear model)。当用0初始化时,偏置不会产生任何影响。
2.常数初始化:用常数值初始化权重和偏置。任何常数初始化方案的性能都会很差,与零初始化类似。如果神经网络中的神经元的权重被初始化为相同的值,它们将在训练期间学习相同的特征。
3.随机初始化:从均匀或正态分布(uniform or normal distribution)中随机初始化权重和偏置。这是深度学习中最常用的技术。改进了对称性破坏(symmetry-breaking)过程,即如果两个隐藏神经元具有相同的输入和相同的激活函数,则它们必须具有不同的初始参数,并提供了更高的精度。这种方法可以防止对输入参数学习相同的特征。选择适当的初始化值对于高效训练是必要的。初始化过大会导致梯度爆炸(梯度太大)。初始化太小会导致梯度消失(梯度太小)。随机为权重分配值可能会出现过拟合、梯度消失、梯度爆炸等问题。
4.Xavier/Glorot初始化:使用均值为0、方差为sqrt(1/n)的正态分布或均匀分布初始化权重,其中n是前一层的神经元数量。权重(例如激活的方差)在每一层上都是相同的,缓解梯度爆炸和消失问题。用于Sigmoid、Tanh激活函数。
5.He/Kaiming初始化:使用均值为0、方差为sqrt(2/n)的正态分布或均匀分布初始化权重,其中n是前一层的神经元数量。保留了激活函数(例如ReLU激活)的非线性。防止出现值过小或过大等问题,缓解梯度爆炸和消失问题。用于ReLU激活函数。
6.正交初始化:使用正交矩阵(orthogonal matrix)初始化权重,这在反向传播期间保留梯度范数(gradient norm)。
7.均匀初始化:使用均匀分布(uniform distribution)初始化权重。
总结:
1.权重初始化的原则:权重不应相对过小或过大、权重不应相同、权重应具有良好的方差。
2.对复杂数据集使用权重初始化技术非常重要。权重初始化在复杂数据的训练中起着重要作用,尤其是在使用基于启发式(heuristic)的方法时,如Xavier、He,这些方法是通过激活函数的某些属性设计的。在权重初始化较小的情况下,神经元的输入将很小,从而导致激活函数的非线性损失。否则,在权重初始化较大的情况下,神经元的输入将很大,从而导致激活函数饱和。选择合适的权重初始化方法将有助于获得更好的深度学习模型性能。此外,良好的权重初始化有助于基于梯度的方法快速收敛。
3.选择合适的权重初始化方法是一个悬而未决的问题。Xavier初始化方法在可微激活函数(如Sigmoid)的情况下提供了良好的结果。He初始化方法在ReLU等不可微激活函数的情况下提供了良好的效果。大多数情况下,DNN模型都是基于ReLU激活函数的。因此,在DNN的情况下,最好使用He方法进行权重初始化。
4.通过迁移学习(transfer learning),你不是从随机初始化的权重开始,而是使用从以前的网络保存的权重作为新实验的初始权重(即微调预先训练的网络)。
注:以上整理的内容主要来自:
1. https://medium.com
2. https://www.geeksforgeeks.org
3. https://arxiv.org/pdf/2102.07004
PyTorch中参数初始化函数的实现在:torch/nn/init.py ,支持的参数初始化函数有:uniform_(uniform distribution)、normal_(normal distribution)、trunc_normal_(truncated normal distribution)、constant_、ones_(scalar value 1)、zeros_(scalar value 0)、eye_(identity matrix)、dirac_(Dirac delta function)、xavier_uniform_(Xavier uniform distribution)、xavier_normal_(Xavier normal distribution)、kaiming_uniform_(Kaiming uniform distribution)、kaiming_normal_(Kaiming normal distribution)、orthogonal_((semi) orthogonal matrix)、sparse_(sparse matrix)。
PyTorch根据层的类型使用不同的默认权重和偏置初始化方法。
GitHub:https://github.com/fengbingchun/NN_Test
相关文章:
深度学习中的参数初始化
深度学习中的参数初始化主要是指初始化神经网络中的权重和偏置。权重和偏置通常分开初始化,偏置通常初始化为零或较小的常数值。 没有一种万能的初始化技术,因为最佳初始化可能因具体架构和要解决的问题而异。因此,尝试不同的初始化技术以了解…...
wpf 基于Behavior库 的行为模块
Microsoft.Xaml.Behaviors 是一个用于WPF(Windows Presentation Foundation)的行为库,它的主要作用是允许开发者在不修改控件源代码的情况下,为控件添加自定义的行为和交互逻辑。行为库的核心思想是通过定义可重用的行为组件&…...
【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置
1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…...
【SpringMVC】REST 风格
REST(Representational State Transfer,表现形式状态转换)是一种访问网络资源的格式。传统的资源描述方式通常如下: http://localhost/user/getById?id1http://localhost/user/saveUser 而 REST 风格的描述则更简洁:…...
IDEA修改编译版本
目录 一、序言 二、修改maven配置 1.修改 2.代码 三、pom文件配置 1.修改 2.代码 3.问题 一、序言 有两种方法可以帮助大家解决IDEA每次刷新maven的pom配置时,会发生发行源版本不正常的报错。个人推荐第二种,原因:第二种你刷新maven后…...
SkyWalking Agent 配置 Spring Cloud Gateway 插件解决日志错误
SkyWalking Agent 配置 Spring Cloud Gateway 插件解决日志错误 IDEA中启动网管时,需要配置VM启动参数,格式如下: # 配置 SkyWalking Agent 启动参数,以便将网关服务的性能数据上报到 SkyWalking 服务器。 -javaagent:/path/to/sk…...
canvas+fabric实现时间刻度尺(一)
前言 需求:显示一个时间刻度尺,鼠标移动会显示当前时间 技术:我们采用canvasfabric进行实现 效果 实现 1.创建canvas(设置宽高)设为全局变量 2.引入fabric包 3.画时间刻度尺(长方形横线) …...
傲雷亮相2024中国时尚体育季(珠海站),展现户外移动照明风采
2024年12月28-29日,2024中国时尚体育季(珠海站)国家级轮滑比赛在珠海金山体育公园成功举办。作为户外创新型移动照明领域的领导品牌,傲雷受邀参加了本次珠海金湾运动生活嘉年华的展览单元,与众多户外运动品牌同台展示。…...
YOLOv10-1.1部分代码阅读笔记-block.py
block.py ultralytics\nn\modules\block.py 目录 block.py 1.所需的库和模块 2.class DFL(nn.Module): 3.class Proto(nn.Module): 4.class HGStem(nn.Module): 5.class HGBlock(nn.Module): 6.class SPP(nn.Module): 7.class SPPF(nn.Module): 8.class C1(nn…...
@RestControllerAdvice注解
RestControllerAdvice 是 Spring 4 引入的一个组合注解,它结合了 ControllerAdvice 和 ResponseBody,专门用于处理 RestController 类型的控制器中的全局异常、全局数据绑定和全局模型属性等问题。在 Spring Boot 中,RestControllerAdvice 通…...
Enum枚举类与静态变量和静态数组的区别
Enum枚举类与静态变量和静态数组的区别 组成结构Enum枚举类静态变量静态数组 组成结构的区别相同之处不同之处 用法使用相同之处不同之处 组成结构 先来看下Enum枚举类,静态变量,静态数组的初始化过程,以下面为例子: public enu…...
uniapp——微信小程序读取bin文件,解析文件的数据内容(三)
微信小程序读取bin文件内容 读取用户选择bin文件,并解析数据内容,分包发送给蓝牙设备; 文章目录 微信小程序读取bin文件内容读取文件读取内容返回格式 API文档: getFileSystemManager 关于App端读取bin文件,请查看&…...
SpringBoot集成ECDH密钥交换
简介 对称加解密算法都需要一把秘钥,但是很多情况下,互联网环境不适合传输这把对称密码,有密钥泄露的风险,为了解决这个问题ECDH密钥交换应运而生 EC:Elliptic Curve——椭圆曲线,生成密钥的方法 DH&…...
python文件操作相关(excel)
python文件操作相关(excel) 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…...
探索React与Microi吾码的完美结合:快速搭建项目,低代码便捷开发教程
一、摘要 在当今的数字化时代,软件开发就像是一场探险,每个开发者都是探险家,探索着代码的奥秘。React作为前端开发的领军框架,其组件化和高效的渲染机制为开发者提供了强大的工具。而Microi吾码低代码平台的出现,则为…...
【面试系列】深入浅出 Spring Boot
熟悉SpringBoot,对常用注解、自动装配原理、Jar启动流程、自定义Starter有一定的理解; 面试题 Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?Spring Boot的自动配置原理是什么?你如何理解 Spring Boot 配置…...
@colyseus/social 模块详解
@colyseus/social 模块介绍 @colyseus/social 是一个适用于 Colyseus 游戏框架的扩展模块,提供了社交功能的支持,帮助开发者在多人游戏中快速实现玩家之间的社交互动。它主要提供了玩家账户管理、好友系统、好友请求、组队和聊天功能等,旨在简化游戏中社交功能的实现。 核心…...
石岩路边理发好去处
周末带娃去罗租公园玩,罗租公园旁边就是百佳华和如意豪庭小区,发现如意豪庭小区对面挺多路边理发摊点 理发摊点聚焦在这里的原因是刚好前面城管来了暂时避避,例如还有一个阿姨剪到一半就跟着过来。这里的城管只是拍了一处没有摊位的地方&…...
ROS 2中的DDS中间件
文章目录 一、简介二、默认支持的 DDS (Data Distribution Service) 实现三、切换DDS实现小结 一、简介 中间件是一个软件层,通常用于连接不同的应用程序、服务或系统,以便它们能够相互通信和交换数据。中间件并不直接向用户暴露,而是在系统…...
「下载」智慧文旅运营综合平台解决方案:整体架构,核心功能设计
智慧文旅运营综合平台,旨在通过集成大数据、云计算、物联网、人工智能等先进技术,为景区、旅游企业及相关管理机构提供一站式的智慧化运营服务。 智慧文旅运营综合平台不仅能够提升游客的游览体验,还能帮助景区管理者实现资源的优化配置和业务…...
Makefile核心概念与高效构建实践指南
1. Makefile基础概念与核心结构Makefile本质上是一种声明式构建脚本,它通过定义目标、依赖和命令三者之间的关系,让构建工具(make)能够智能地决定哪些文件需要重新编译。这种机制在C/C项目中尤为重要,因为源文件之间的…...
Redis 实战篇1.4 (Redis优化秒杀)
Redis优化秒杀原流程思路Redis优化秒杀在Redis中库存用String数据类型存储,为了确保一人一单,则订单id存储用Set数据类型保证数据的唯一性lua脚本保证原子性异步秒杀方案案例:需求创建订单(还没完成明天继续)// 解锁的…...
【从零开始学Java | 第二十五篇】TreeSet
目录 前言 一、TreeSet的特点 二、TreeSet集合默认的规则 1.默认排序/自然排序 2.比较器排序 总结 前言 在 Java 的集合框架中,Set 接口代表了一个不允许存在重复元素的集合。我们最常用的通常是 HashSet,因为它提供了极高的查找和插入效率。但是&…...
Claude Code 开挂指南:这个开源项目让你的 AI 编程助手直接进化
这个项目是什么?everything-claude-code 是一个在 GitHub 上拿到 50,000 star 的开源项目,出自 Anthropic Hackathon 的获奖团队之手,经历了 10 个月的实际生产环境打磨。一句话说清楚它是什么:给 AI 编程助手装「外挂」的全套配置…...
【Java】从源码深入理解 Stack
从源码深入理解 StackStack的整体架构Stack的成员变量Stack的构造函数Stack的常用方法:源码解读压栈:push()出栈:pop()获取栈顶元素:peek()判断是否为空:empty()查找元素:search()存储的元素个数࿱…...
终极解析器构建指南:Ohm从CSV解析到自定义语法实战
终极解析器构建指南:Ohm从CSV解析到自定义语法实战 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个强大的解析器构建库和领域特定语言&#…...
ViGEmBus虚拟游戏控制器驱动:Windows游戏手柄模拟终极指南
ViGEmBus虚拟游戏控制器驱动:Windows游戏手柄模拟终极指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是Windows系统内核级别的虚拟…...
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾经为PCB设计文件的查看而烦恼&#…...
Anthropic一夜震撼升级:Claude获得「永久在线」,全球打工人变天
文章目录一、凌晨三点,你的电脑自己在加班二、从"睡美人"到"永动机":AI的觉醒之路1. 独立生存空间:专属侧边栏UI2. Webhook唤醒:AI开始自主感知世界3. 浏览器直连:深度集成Chrome三、CoworkConway…...
ImageToSTL:让图片秒变3D模型的开源工具
ImageToSTL:让图片秒变3D模型的开源工具 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项目地址: h…...
