• 数值稳定性和模型初始化——2020.3.2


    一、衰减和爆炸

         当神经⽹络的层数较多时,模型的数值稳定性容易变差。例如假设权重分别为0.2和5,(0.2^{30} approx 1 imes 10^{-21})(此时得到一个很小的数,会导致神经元学习非常慢,从而导致衰减。),(5^{30} approx 9 imes 10^{20})(此时得到一个非常大的数,因此造成梯度爆炸。)

    二、 随机初始化模型参数

         如果一个网络里面包含若干神经元,这些参数在基于梯度的优化算法迭代后值依然相等,之后的迭代也是如此。那么着若干个神经元就好比等同于一个神经元,为了使其余的神经元发挥作用,因此需要进行随机初始化。

    ( 一 )PyTorch默认随机初始化

         可以使用torch.nn.init.normal_()使模型net的权重参数采用正态分布的随机初始化方式。其中nn.model对每一个layer采取的初始化策略都有考量,可参考源代码.

    ( 二 )Xavier随机初始化

         还有⼀种⽐较常⽤的随机初始化⽅法叫作Xavier随机初始化[1]。 假设某全连接层的输⼊个数为 (a),输出个数为 (b) ,Xavier随机初始化将使该层中权᯿参数的每个元素都随机采样于均匀分布:

    [Uleft(- sqrt{frac{6}{a + b}},sqrt{frac{6}{a + b}} ight) ]

    它的设计主要考虑到,模型参数初始化后,每层输出的⽅差不该受该层输⼊个数影响,且每层梯度的⽅
    差也不该受该层输出个数影响。

    三、小结

    • 深度模型有关数值稳定性的典型问题是衰减和爆炸。当神经⽹络的层数较多时,模型的数值稳定性容易变差。
    • 我们通常需要随机初始化神经⽹络的模型参数,如权重参数。
  • 相关阅读:
    nodejs内存控制
    nodejs的Buffer解析
    基于Yeoman实现自定义脚手架
    基于node实现一个简单的脚手架工具(node控制台交互项目)
    nodeJs入门的第一节课
    手动封装一个node命令集工具
    [转载] 如何掌握所有的程序语言 —— 王垠
    Kubernetes:服务与负载均衡
    Zabbix 6.0:原生高可用(HA)方案部署
    Kubernetes:健康检查
  • 原文地址:https://www.cnblogs.com/somedayLi/p/12398657.html
Copyright © 2020-2023  润新知