文章目录

  • 引言
  • 一、梯度消失与爆炸
  • 二、Xavier方法与Kaiming方法
    • 1. Xavier方法
    • 2.Kaiming初始化
  • 三、十种初始化方法

引言

  本节讲解权值初始化的必要性,首先分析神经网络中权值的方差过大导致梯度爆炸的原因,然后从方差一致性原则出发分析Xavier初始化方法与Kaiming初始化方法的由来,最后介绍pytorch提供的十种初始化方法。

一、梯度消失与爆炸

  恰当的权值初始化可以加速收敛,不当的权值初始化会导致梯度爆炸或梯度消失,最终导致模型无法训练。下面我们了解不恰当的权值初始化是如何导致梯度消失与爆炸的?


我们可以知道要避免梯度消失与爆炸,要严格控制网络输出层的输出值的尺度范围,使得每一层的输出值不能太大也不能太小。

class MLP(nn.Module):def __init__(self, neural_num, layers):super(MLP, self).__init__()self.linears = nn.ModuleList([nn.Linear(neural_num, neural_num, bias=False) for i in range(layers)])self.neural_num = neural_numdef forward(self, x):for (i, linear) in enumerate(self.linears):x = linear(x)# x = torch.relu(x)print("layer:{}, std:{}".format(i, x.std()))if torch.isnan(x.std()):print("output is nan in {} layers".format(i))breakreturn xdef initialize(self):for m in self.modules():if isinstance(m, nn.Linear):nn.init.normal_(m.weight.data)    # normal: mean=0, std=1layer_nums = 100
neural_nums = 256
batch_size = 16net = MLP(neural_nums, layer_nums)
net.initialize()inputs = torch.randn((batch_size, neural_nums))  # normal: mean=0, std=1output = net(inputs)
print(output)
layer:0, std:16.27458381652832
layer:1, std:258.77801513671875
layer:2, std:4141.2744140625
layer:3, std:65769.9140625
layer:4, std:1037747.625
layer:5, std:16792116.0
layer:6, std:270513248.0
layer:7, std:4271523072.0
layer:8, std:69773983744.0
layer:9, std:1135388917760.0
layer:10, std:17972382924800.0
layer:11, std:290361566035968.0
layer:12, std:4646467956375552.0
layer:13, std:7.375517986167194e+16
layer:14, std:1.191924480578945e+18
layer:15, std:1.9444053896660517e+19
layer:16, std:3.0528445240940115e+20
layer:17, std:4.825792774212115e+21
layer:18, std:7.649714347139797e+22
layer:19, std:1.2594570721248546e+24
layer:20, std:2.009953775506879e+25
layer:21, std:3.221620181771679e+26
layer:22, std:5.130724860334453e+27
layer:23, std:8.456056429939108e+28
layer:24, std:1.337131496090396e+30
layer:25, std:2.1005011162403366e+31
layer:26, std:3.2537079800422226e+32
layer:27, std:5.275016630929896e+33
layer:28, std:8.364601398774255e+34
layer:29, std:1.3522442523642847e+36
layer:30, std:2.1151457613842935e+37
layer:31, std:nan
output is nan in 31 layers
tensor([[       -inf,        -inf,        -inf,  ...,        -inf,1.1685e+38,  1.4362e+38],[-2.9867e+38,  2.6396e+35,  1.1949e+38,  ...,  8.2088e+37,1.9041e+38, -5.0897e+37],[-1.4351e+38,  9.9710e+37, -1.4595e+37,  ...,  4.2070e+36,-inf, -1.2583e+38],...,[        inf,         inf,         inf,  ...,  1.6265e+38,1.3557e+38,        -inf],[-1.2538e+38, -1.9771e+38,        -inf,  ..., -1.8160e+38,1.0576e+38,         inf],[        inf,  5.5094e+37, -4.4087e+36,  ...,        -inf,-2.4495e+38,  7.9425e+37]], grad_fn=<MmBackward>)

  下面我们通过方差公式推导来观察网络层输出的标准差为什么会越来越大?最终会超出我们要表示的范围。
E(

PyTorch学习—11.权值初始化相关推荐

  1. PyTorch框架学习十一——网络层权值初始化

    PyTorch框架学习十一--网络层权值初始化 一.均匀分布初始化 二.正态分布初始化 三.常数初始化 四.Xavier 均匀分布初始化 五.Xavier正态分布初始化 六.kaiming均匀分布初始 ...

  2. Pytorch —— 权值初始化

    1.梯度消失与爆炸 这里使用一个三层的全连接网络,现在观察一下第二个隐藏层W2W_2W2​的权值的梯度是怎么求取的. 根据链式求导法则可以知道,W2W_2W2​的求导如下: H2=H1∗W2\math ...

  3. 深度学习--权值初始化

    什么是权值初始化 在神经网络的前向传播的过程中,需要设置输入到输出的权重. 为什么要权值初始化 正确的权值初始化可以促进模型的快速收敛,不正确的权值初始化可能使得模型在前向传播是发生发生信息消失,或在 ...

  4. 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授

    权值初始化 0值初始化 在逻辑回归中,我们通常会初始化所有权值为 0 ,假如在如下的神经网络也采用 0 值初始化: 则可以得到: a1(1)=a2(2)a^{(1)}_1=a^{(2)}_2a1(1) ...

  5. Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择

    目录 1.最小梯度下降(Mini-batch SGD) 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 ...

  6. Tensorflow:BP神经网络权值初始化

    一.Tensorflow入门 1.计算图: 每一个计算都是计算图上的一个结点,而节点之间的边描述了计算之间的依赖关系. 支持通过tf.Graph生成新的计算图,不同计算图上的张量和运算不会共享. Te ...

  7. caffe中权值初始化方法

    参考:https://www.cnblogs.com/tianshifu/p/6165809.html 首先说明:在caffe/include/caffe中的 filer.hpp文件中有它的源文件,如 ...

  8. 权值初始化的常用方法

    为什么要进行权值初始化 深度神经网络经常会遇到梯度消失或者梯度爆炸现象.为什么会出现这种现象呢?熟悉链式求导法则的大家都知道,梯度是一些量的连乘,这些当中最重要的就是模型的输出.如果这时,模型的输出过 ...

  9. 卷积核权值初始化_Pytorch卷积层手动初始化权值的实例

    由于研究关系需要自己手动给卷积层初始化权值,但是好像博客上提到的相关文章比较少(大部分都只提到使用nn.init里的按照一定分布初始化方法),自己参考了下Pytorch的官方文档,发现有两种方法吧. ...

  10. 权值初始化 - Xavier和MSRA方法

    设计好神经网络结构以及loss function 后,训练神经网络的步骤如下: 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计 ...

最新文章

  1. Laravel 系列入门教程(一)【最适合中国人的 Laravel 教程】
  2. ubuntu下tesseract 4.0安装及参数使用
  3. docker rocketmq4.7.0
  4. Intel亚太研发有限公司段建钢:存储市场的那些年
  5. 【算法】剑指 Offer 56 - I. 数组中数字出现的次数 【重刷】太难了
  6. Nginx学习总结(1)——Nginx入门简介
  7. 计算机网络知识梳理(1)——网络层次
  8. 《HTML 5与CSS 3 权威指南(第3版·上册)》——第1章 Web时代的变迁
  9. ELK logstash grok匹配失败存另外的es表
  10. finereport自带的模板目录
  11. 初中计算机理论教案,初中信息技术教学设计
  12. html 星星字体,星星字,做华丽的星星文字效果
  13. 迅盘技术(Robson)、Ready Boost和Ready Drive的区别
  14. jQuery常用插件
  15. 研调:2018年40%智能手机将用柔性面板
  16. VS2005宏无法运行的问题(打了补丁MS14-009之后)
  17. 服务器的系统日志路径,DirectAdmin 日志路径各种系统中查看方法Windows服务器操作系统 -电脑资料...
  18. 华为平板M5一键刷ji教程--精简ROOT工具分享
  19. win10.java默认程序_Win10把IE修改为默认浏览器的两种方法
  20. 魅族Android10内测招募答案,魅族Flyme内测招募:10款机型升级Android 10!

热门文章

  1. django安装配置及测试
  2. Js、jquery学习笔记
  3. Google日历服务快捷、简便
  4. 【linux】IP最大可传65535而以太网最大只能传1500问题解析
  5. 【接口测试】axios测试接口
  6. java day09【继承、super、this、抽象类】
  7. [改善Java代码]避免对象的浅拷贝
  8. 使用 jQuery 和 KnockoutJS 开发在线股票走势图应用
  9. open jdk 证书 问题
  10. BMap:JavaScript API