【CV知识点汇总与解析】

2023-11-12

【CV知识点汇总与解析】| 参数初始化篇

【写在前面】

本系列文章适合Python已经入门、有一定的编程基础的学生或人士,以及人工智能、算法、机器学习求职的学生或人士。系列文章包含了深度学习、机器学习、计算机视觉、特征工程等。相信能够帮助初学者快速入门深度学习,帮助求职者全面了解算法知识点。

1、什么是参数初始化?

初始化参数指的是在网络模型训练之前,对各个节点的权重和偏置进行初始化赋值的过程。

在深度学习中,神经网络的权重初始化方法(weight initialization)对模型的收敛速度和性能有着至关重要的影响。模型的训练,简而言之,就是对权重参数W的不停迭代更新,以期达到更好的性能。而随着网络深度(层数)的增加,训练中极易出现梯度消失或者梯度爆炸等问题。因此,对权重W的初始化显得至关重要,一个好的权重初始化虽然不能完全解决梯度消失或梯度爆炸的问题,但是对于处理这两个问题是有很大帮助的,并且十分有利于提升模型的收敛速度和性能表现。

2、模型参数更新的过程

在总结参数初始化的原则之前,先简单看一下网络模型运行的过程,参数初始化的目的是使网络模型能够更好地进行训练。现在大部分的网络训练依然采用误差的反向传播算法,误差反向传播分为正反两个过程,这里就不再赘述了,先引入几个概念。下面这幅图是一个神经网络的某一个层:

由图可知,每一个层内部的组成主要有:

输入X/hi:来自原始样本X的输入(i=0)或上一层(第i−1层)的输出hi。

权重W:网络模型训练的主体对象,第ii层的权重参数wi。

状态值z:作为每一层激活函数f的输入,处于网络层的内部,所以称之为状态值。

激活值h:状态值zi经过了激活函数f后的输出,也就是第i层的最终输出hi;

数据在网络模型中流动的时候,则会有(这里默认没有偏置项B):

z i = w i ⋅ h i − 1 h i = f ( z i ) \begin{aligned} z^{i} &=w^{i} \cdot h^{i-1} \\ h^{i} &=f\left(z^{i}\right) \end{aligned} zihi=wihi1=f(zi)

然后在反向传播的过程中,由于是复合函数的求导,根据链式法则,会有两组导数,一个是损失函数Cost对z的导数,一个是损失函数Cost对W的导数。

3、参数初始化的几个基本条件

什么样的初始化参数才是最好的呢?

需要牢记参数初始化的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关——激活值饱和会导致该层状态梯度信息为0,然后导致下面所有层的参数梯度为0;入激活值为0会导致对应参数梯度为0。所以如果要保证参数梯度不等于0,那么参数初始化应该使得各层激活值不会出现饱和现象且激活值不为0。我们把这两个条件总结为参数初始化条件:

  • 初始化必要条件一:各层激活值不会出现饱和现象。

  • 初始化必要条件二:各层激活值不为0

4、过大或者过小的初始化的危害

如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。

如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。

而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。

5、常见初始化方法

1.全0初始化

就是将所有权重置0。当然是不能这样的,神经网络通过梯度更新参数,参数都是0,梯度也就是0,神经网络就停止学习了。

2.随机初始化

参数随机化,不过随机参数服从高斯分布均匀分布,假设网络输入神经元个数为 n i n n_{in} nin,输出神经元个数为 n o u t n_{out} nout,则服从高斯分布的参数随机初始化为:

w = 0.001 ∗ randn ⁡ ( n in  , n out  ) w=0.001 * \operatorname{randn}\left(n_{\text {in }}, n_{\text {out }}\right) w=0.001randn(nin ,nout )

其中高斯分布均值为0,方差为1。0.001为控制因子,这样使得参数期望尽量接近0。

3.Xavier

初始化方法由Bengio等人在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出。

它为了保证前向传播和反向传播时每一层的方差一致:在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。根据每层的输入个数和输出个数来决定参数随机初始化的分布范围,是一个通过该层的输入和输出参数个数得到的分布范围内的均匀分布。

4.He初始化

与Xavier方法一样,He初始化方法也希望初始化使得正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。

其初始化方法为:

W ∼ N ( 0 , 2 n 1 ) \mathrm{W} \sim \mathrm{N}\left(0, \sqrt{\frac{2}{\mathrm{n}_{1}}}\right) WN(0,n12 )

其中, n 1 \mathrm{n}_{1} n1为第 l 层神经元个数。

6、梯度消失的根本原因

我们神经网络中的初始权值也一般是小于 1 的数,所以相当于公式中是多个小于 1 的数在不断的相乘,导致乘积和还很小。这只是有两层的时候,如果层数不断增多,乘积和会越来越趋近于 0,以至于当层数过多的时候,最底层的梯度会趋近于 0,无法进行更新,并且 Sigmoid 函数也会因为初始权值过小而趋近于 0,导致斜率趋近于 0,也导致了无法更新。

7、怎么缓解梯度消失?

  1. 预训练加微调

  2. 梯度剪切

  3. 使用合理的参数初始化方案,如He初始化

  4. 使用 ReLU、LReLU、ELU、maxout 等激活函数

    sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。

  5. 使用批规范化BN

  6. 残差结构

【项目推荐】

面向小白的顶会论文核心代码库:https://github.com/xmu-xiaoma666/External-Attention-pytorch

面向小白的YOLO目标检测库:https://github.com/iscyy/yoloair

面向小白的顶刊顶会的论文解析:https://github.com/xmu-xiaoma666/FightingCV-Paper-Reading

https://zhuanlan.zhihu.com/p/336005430

https://blog.csdn.net/yyl424525/article/details/100823398

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【CV知识点汇总与解析】 的相关文章

随机推荐

  • odoo 打开form 视图 默认为编辑状态

    为了编辑方便 客户会经常要求 odoo 打开form 视图 默认为编辑状态 或者根据某些条件 为编辑状态 下面介绍两种方式进行 1 在form 初始化加载时进行拦截 设置属性打开编辑状态 FormView include 满足条件 form
  • springboot的yaml写法之map、list和map<String,List>

    分两步 设置yaml 注入参数 1 设置yaml 文件名 application yml runcommand firstMapList key11 k1 k2 k3 key22 k1 k2 k3 list lk1 lk2 lk3 maps
  • java 编译时注解框架 lombok-ex

    lombok ex lombok ex 是一款类似于 lombok 的编译时注解框架 编译时注 拥有运行时注解的便利性 和无任何损失的性能 主要补充一些 lombok 没有实现 且自己会用到的常见工具 创作目的 补充 lombok 缺失的注
  • nginx输出php错误日志,Nginx错误日志(error_log)配置及信息详解

    Nginx状态信息 status 配置及信息详解 nginx与php fpm一样内建了一个状态页 对于想了解nginx的状态以及监控nginx非常有帮助 为了后续的zabbix监控 我们需要先了解一下nginx的状态页 Nginx状态信息
  • 【Matplotlib】【Python】如何使用matplotlib颜色映射

    颜色映射 colormap 是一系列颜色 它们从起始颜色渐变到结束颜色 在可视化中 颜色映射用于突出数据的规律 例如 你可能用较浅的颜色来显示较小的值 并使用较深的颜色来显示较大的值 模块pyplot内置了一组颜色映射 要使用这些颜色映射
  • 学习UpdatePanel控件-

    原文可以显示图片 转载 http blog csdn net ILOVEMSDN archive 2007 11 11 1879343 aspx UpdatePanel控件的使用 2008 10 07 05 46 P M ScriptMan
  • JVM 二. 类加载相关

    目录 一 类的加载 二 类的加载器 类加载器的双亲委派机制 一 类的加载 什么是类的加载 我们编写java代码存储为 java结尾的文件 经过编译器编译 将java代码转换为虚拟机指令生成 class结尾的文件 当需要某个类时 虚拟机加载指
  • ZCMU--5155: 小蒜数(C语言)

    题目描述 在所有不大于 n 的正整数中 蒜头君将不是 9 的倍数的所有奇数剔除掉 将是 7 的倍数的所有偶数剔除掉 剩下的数从小到大首尾相接拼起来 组成了一个 小蒜数 请问这个数一共有多少位 输入 输入为整数 n 1 n 1000 测试点编
  • swiper中使用iframe导致无法滑动的3个解决方案

    看到这个标题 很多同学都会疑惑 为什么swiper中要放iframe呢 事实上 当我遇到这个需求前 我也没想到会有这样的骚操作 swiper中嵌入网站 每次滑动切换一个网站 想想听炫酷的 可做起来就不酷了 当你开开心心的把iframe放到每
  • 音频格式RAW和PCM区别和联系

    定义 RAW 在一些外国品牌的播放机中名为 BitSream 我们通常称为 源码 意义是把光盘上的音频格式不加处理地 原汁原味 地从同轴和光纤输出 这就要求用户的功放具备这种音频格式的解码功能 PCM 名为 脉冲调制编码 它的作用是当前的将
  • 多益校招面经--软件开发岗

    多益网络2021校招面经 软件开发岗 笔试通过 专业面试凉凉 第一次面试 太紧张了 很多东西提起来脑子一片空白 现在结束后想了一下都能想明白 以下是面经 1 个人介绍 2 项目介绍 3 开发语言的了解程度 个人是C 4 C 和JAVA的区别
  • 通过接口传递经纬度,并计算距离

    微信小程序调用接口 存储经纬度 PostMapping update location public R updateLocation RequestBody UserQuery userQuery if userService getLo
  • MDK5__配色方案的修改

    一 必要的知识 与MDK主题相关的文件有两个 在X Keil v5 UV4路径下 global propglobal prop def其中global prop def是系统默认的主题配置 如果修改过字体等 系统会生成一个global pr
  • Qt元对象系统及应用(一)

    目录 1 元对象系统 2 元对象与属性系统 2 1 动态属性 3 元对象与信号槽 3 1 信号槽应用场景 3 2 信号槽的连接 3 3 信号槽要点总结 1 元对象系统 元对象系统 Meta Object System 是Qt框架中一个非常重
  • python学习目录,从入门到上手

    这是我学习python的一套流程 根据书本学习 从入门到上手 整理不易 一 Python入门 环境搭建 变量 数据类型 二 Python运算符 条件结构 循环结构 三 Python函数 四 做一次综合练习 做一个控制台的员工管理 需求 员工
  • WMS仓库管理系统与ERP仓储系统的区别与联系

    现代企业越来越重视物流及仓储管理 然而提到WMS仓库管理系统与ERP仓储系统 许多企业管理者依旧是一脸茫然的表情 无法清晰的区别分辨 其实这两款软件在功能上有相似的地方 下面就由沈阳达策带您一看究竟 实际上 ERP仓储系统和WMS仓库管理系
  • STM32_HAL库编程_串口+DMA接收数据异常问题记录

    1 开发环境概述 Keil 5 27 STM32CUBEMX STM32F103RCT6 2 问题现象 在利用RCT6做主机通信 C8T6做从机通信时 拔插从机电路板 有概率出现主机通信故障无法接收到从机数据 或者从机通信故障无法接收到主机
  • 安装邮件服务器之四

    20 配置cyrus sasl 为了支持maildrop 先加入vmail用户 pw adduser vmail u 1003 s sbin nologin d dev null 你需要创建 usr local lib sasl2 smtp
  • Kubernetes之deployment

    1用Deployment运行应用 Kubernetes通过各种Controller来管理Pod的生命周期 为了满足不同业务场景 Kubernetes开发了Deployment ReplicaSet StatefuleSet Job等多种Co
  • 【CV知识点汇总与解析】

    CV知识点汇总与解析 参数初始化篇 写在前面 本系列文章适合Python已经入门 有一定的编程基础的学生或人士 以及人工智能 算法 机器学习求职的学生或人士 系列文章包含了深度学习 机器学习 计算机视觉 特征工程等 相信能够帮助初学者快速入