神经网络的权重初始化

这是一个神经单元初始化地例子,然后再演变到整个深度网络。

来看看只有一个神经元的情况,然后才是深度网络。

单个神经元可能有4个输入特征,从\(x_{1}\)到\(x_{4}\),经过\(a=g(z)\)处理,最终得到\(\hat{y}\),稍后讲深度网络时,这些输入表示为\(a^{[l]}\),暂时用\(x\)表示。

\(z = w_{1}x_{1} + w_{2}x_{2} + \ldots +w_{n}x_{n}\),\(b=0\),暂时忽略\(b\),为了预防\(z\)值过大或过小,可以看到\(n\)越大,希望\(w_{i}\)越小,因为\(z\)是\(w_{i}x_{i}\)的和,如果把很多此类项相加,希望每项值更小,最合理的方法就是设置\(w_{i}=\frac{1}{n}\),\(n\)表示神经元的输入特征数量,实际上,要做的就是设置某层权重矩阵\(w^{[l]} = np.random.randn( \text{shape})*\text{np.}\text{sqrt}(\frac{1}{n^{[l-1]}})\),\(n^{[l - 1]}\)就是喂给第\(l\)层神经单元的数量(即第\(l-1\)层神经元数量)。

结果,如果是用的是Relu激活函数,而不是\(\frac{1}{n}\),方差设置为\(\frac{2}{n}\),效果会更好。常常发现,初始化时,尤其是使用Relu激活函数时,\(g^{[l]}(z) =Relu(z)\),它取决于对随机变量的熟悉程度,这是高斯随机变量,然后乘以它的平方根,也就是引用这个方差\(\frac{2}{n}\)。这里,用的是\(n^{[l - 1]}\),因为本例中,逻辑回归的特征是不变的。但一般情况下\(l\)层上的每个神经元都有\(n^{[l - 1]}\)个输入。如果激活函数的输入特征被零均值和标准方差化,方差是1,\(z\)也会调整到相似范围,这就没解决问题(梯度消失和爆炸问题)。但它确实降低了梯度消失和爆炸问题,因为它给权重矩阵\(w\)设置了合理值,也知道,它不能比1大很多,也不能比1小很多,所以梯度没有爆炸或消失过快。

提到了其它变体函数,刚刚提到的函数是Relu激活函数,一篇由Herd等人撰写的论文曾介绍过。对于几个其它变体函数,如tanh激活函数,有篇论文提到,常量1比常量2的效率更高,对于tanh函数来说,它是\(\sqrt{\frac{1}{n^{[l-1]}}}\),这里平方根的作用与这个公式作用相同(\(\text{np.}\text{sqrt}(\frac{1}{n^{[l-1]}})\)),它适用于tanh激活函数,被称为Xavier初始化。Yoshua Bengio和他的同事还提出另一种方法,可能在一些论文中看到过,它们使用的是公式\(\sqrt{\frac{2}{n^{[l-1]} + n^{\left[l\right]}}}\)。其它理论已对此证明,但如果想用Relu激活函数,也就是最常用的激活函数,会用这个公式\(\text{np.}\text{sqrt}(\frac{2}{n^{[l-1]}})\),如果使用tanh函数,可以用公式\(\sqrt{\frac{1}{n^{[l-1]}}}\),有些作者也会使用这个函数。

实际上,认为所有这些公式只是给一个起点,它们给出初始化权重矩阵的方差的默认值,如果想添加方差,方差参数则是另一个需要调整的超级参数,可以给公式\(\text{np.}\text{sqrt}(\frac{2}{n^{[l-1]}})\)添加一个乘数参数,调优作为超级参数激增一份子的乘子参数。有时调优该超级参数效果一般,这并不是想调优的首要超级参数,但发现调优过程中产生的问题,虽然调优该参数能起到一定作用,但考虑到相比调优,其它超级参数的重要性,通常把它的优先级放得比较低。

希望现在对梯度消失或爆炸问题以及如何为权重初始化合理值已经有了一个直观认识,希望设置的权重矩阵既不会增长过快,也不会太快下降到0,从而训练出一个权重或梯度不会增长或消失过快的深度网络。在训练深度网络时,这也是一个加快训练速度的技巧。

神经网络优化篇:详解神经网络的权重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)的更多相关文章

  1. [深度学习] 权重初始化--Weight Initialization

    深度学习中的weight initialization对模型收敛速度和模型质量有重要影响! 在ReLU activation function中推荐使用Xavier Initialization的变种 ...

  2. Andrej Karpathy | 详解神经网络和反向传播(基于 micrograd)

    只要你懂 Python,大概记得高中学过的求导知识,看完这个视频你还不理解反向传播和神经网络核心要点的话,那我就吃鞋:D Andrej Karpathy,前特斯拉 AI 高级总监.曾设计并担任斯坦福深 ...

  3. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  4. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  5. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  6. 详解神经网络基础部件BN层

    摘要:在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称为内部协变量偏移(Internal Covariate Shift),而 BN 可以解决这个问题. 本 ...

  7. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  8. CentOS 7 下编译安装lnmp之MySQL篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...

  9. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  10. Android开发之线性布局详解(布局权重)

    布局权重 线性布局支持给个别的子视图设定权重,通过android:layout_weight属性.就一个视图在屏幕上占多大的空间而言,这个属性给其设 定了一个重要的值.一个大的权重值,允许它扩大到填充 ...

随机推荐

  1. SpringBoot打成jar运行后无法读取resources里的文件

    开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下 在开发环境中通过下面方法能读取word_r ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

    三.用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本. 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示.这个版本使用 Go 语言编写,利用 ...

  3. 一文搞懂 OTP 双因素认证

    GitHub 在 2023 年 3 月推出了双因素认证(two-factor authentication)简称 2FA,并且承诺所有在 GitHub 上贡献的开发者在 2023 年底前启用双因素认证 ...

  4. MySQL实战实战系列 04 深入浅出索引(下)

    在上一篇文章中,我和你介绍了 InnoDB 索引的数据结构模型,今天我们再继续聊聊跟 MySQL 索引有关的概念. 在开始这篇文章之前,我们先来看一下这个问题: 在下面这个表 T 中,如果我执行 se ...

  5. Mybatiplus通用3.5.1版本及其以上的代码生成器工具类

    Mybatiplus通用3.5.1版本及其以上的代码生成器工具类 package com.gton.util; import com.baomidou.mybatisplus.annotation.F ...

  6. Oracle中的substr()函数和INSTR()函数和mysql中substring_index函数字符截取函数用法:计算BOM系数用量拼接字符串*计算值方法

    最近一直在研究计算产品BOM的成本系数,将拼接的元件用量拼接后拆分计算是个问题,后来受到大佬在mysql中截取字符串的启发在oracle中以substr和instr实现了  1.以下是我在mysql中 ...

  7. Docker 日志自动轮转和清理配置

    设置 Docker 日志大小和自动删除旧日志:通过配置 Docker 使用 json-file 日志驱动,同时使用 logrotate 工具,可以设置日志的最大大小(例如100MB),并在达到该大小时 ...

  8. 两台实体机器4个虚拟机节点的Hadoop集群搭建(Ubuntu版)

    安装Ubuntu Linux元信息 两台机器,每台机器两台Ubuntu Ubuntu版本:ubuntu-22.04.3-desktop-amd64.iso 处理器数量2,每个处理器的核心数量2,总处理 ...

  9. redis主从同步及redis哨兵机制

    1.主从和哨兵的作用: 角色 作用 主从 1.(提供)数据副本:多一份数据副本,保证redis高可用 2.  扩展(读)性能:如容量.QPS等 哨兵 1.监控: 监控redis主库及从库运行状态: 2 ...

  10. Go语言基准测试(benchmark)三部曲之一:基础篇

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于基准测试(benchmark) Go的标准库内置的 ...