神经网络优化篇:详解神经网络的权重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)
神经网络的权重初始化
这是一个神经单元初始化地例子,然后再演变到整个深度网络。

来看看只有一个神经元的情况,然后才是深度网络。
单个神经元可能有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)的更多相关文章
- [深度学习] 权重初始化--Weight Initialization
深度学习中的weight initialization对模型收敛速度和模型质量有重要影响! 在ReLU activation function中推荐使用Xavier Initialization的变种 ...
- Andrej Karpathy | 详解神经网络和反向传播(基于 micrograd)
只要你懂 Python,大概记得高中学过的求导知识,看完这个视频你还不理解反向传播和神经网络核心要点的话,那我就吃鞋:D Andrej Karpathy,前特斯拉 AI 高级总监.曾设计并担任斯坦福深 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 详解神经网络基础部件BN层
摘要:在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称为内部协变量偏移(Internal Covariate Shift),而 BN 可以解决这个问题. 本 ...
- CentOS 7 下编译安装lnmp之PHP篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...
- CentOS 7 下编译安装lnmp之MySQL篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...
- CentOS 7 下编译安装lnmp之nginx篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168 ...
- Android开发之线性布局详解(布局权重)
布局权重 线性布局支持给个别的子视图设定权重,通过android:layout_weight属性.就一个视图在屏幕上占多大的空间而言,这个属性给其设 定了一个重要的值.一个大的权重值,允许它扩大到填充 ...
随机推荐
- 关于使用uniapp时Android 离线打包的注意事项
Android 离线打包 文档地址: https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android 注意事项: 添加权限,需要将 uniapp ...
- Python爬虫IP代理池的建立和使用
写在前面建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题. 下面是建立Python爬虫IP代理池的详细步骤和代码实现: 1. 获取代理IP我们可以从一些 ...
- VS Code代码提示( AcWing算法模板,C++实现)
算法模板提取于AcWing上的代码提示 作者:yxc 链接:https://www.acwing.com/file_system/file/content/whole/index/content/21 ...
- 【Azure Function App】Python Function调用Powershell脚本在Azure上执行失败的案例
问题描述 编写Python Function,并且在Function中通过 subprocess 调用powershell.exe 执行 powershell脚本. import azure.fun ...
- A piece of cake
1. A piece of cake(易事情)2. Break a leg(祝好运)3. Don't count your chickens before they hatch(不要过早乐观)4. D ...
- DPDK-22.11.2 [四] Virtio_user as Exception Path
因为dpdk是把网卡操作全部拿到用户层,与原生系统驱动不再兼容,所以被dpdk接管的网卡从系统层面(ip a/ifconfig)无法看到,同样数据也不再经过系统内核. 如果想把数据再发送到系统,就要用 ...
- gson如何序列化子类
需求 目前有一个需求,不同对象有一些公共属性,分别也有一些不同的属性.对方传过来的json字符串中,把这些对象组成了一个数组返回过来的.这样该如何反序列化呢? 举例 定义Person类.Student ...
- 《流畅的Python》 读书笔记 第5章 一等函数 20231025
第5章 一等函数 第四章相对偏僻,但时间上一样要花我很久,就先跳过了,回头再补.而这个第5章节是非常重要的.只是最近工作有点忙,我读的越来越慢了~继续坚持吧. 在 Python 中,所有函数都是一等对 ...
- 一键安装LNMP
#!/bin/bash #2020年3月1日 #auto_install_lnmp. #by fly ################################ NGX_VER="$1 ...
- openwrt使用tailscale实现内网穿透
问题 之前一直有电信公网ip,最近发现电信公网ip被撤下来了,打电话再去要发现给的是10开头的ip,电信客服还跟我说10开头就是公网ip,= =,根本就不是,无奈使用zerotier进行打洞,把zer ...