zoukankan      html  css  js  c++  java
  • 梯度爆炸/消失与初始化参数

    一、 梯度爆炸/消失

    首先我们需要知道梯度爆炸或消失的原因,我们观察Tanh这个激活函数可知,当Z接近于0时,输出A与Z的关系接近线性。

    因此当神经网络的深度较大时,我们假设b的初始化参数为0,则有

    $widehat{mathrm{y}}=mathrm{w}^{[mathrm{ll}} mathrm{w}^{[1-1]} mathrm{w}^{[mathrm{l}-2] ldots} cdots cdot mathrm{w}^{[1]} mathrm{X}$

    如果我们初始化的w,全部大于1(举例),则输出y将非常大,且映射到最后一层激活函数时,每一次迭代的梯度将非常小,几乎消失。

    而当我们初始化的w,全部小于1时,输出的y将变得非常接近0,梯度将非常大。

    二、 解决方案

    事实上,如果我们可以把下面这个表达式看成一层神经网络,我们的参数将变成w的累乘而不是w。

    $widehat{mathrm{y}}=mathrm{w}^{[mathrm{ll}} mathrm{w}^{[1-1]} mathrm{w}^{[mathrm{l}-2] ldots} cdots cdot mathrm{w}^{[1]} mathrm{X}$

    对于w的累乘,其方差为

    $operatorname{Var}left(mathrm{w}^{[l]} mathrm{w}^{[l+1] ldots} mathrm{w}^{[1]} ight)=mathrm{n} operatorname{Var}left(mathrm{w}^{[mathrm{i}]} ight)=n$

    所以为了让这个结果仍然遵从正态分布,我们在初始化的过程中,除以其标准差。

    这样我们的结果将不会出现非常严重的梯度消失问题。

    而对于relu这个激活函数,其在推导的过程中,则与上面列举的式子不同,个人觉得可以理解为其只有一半具有线性特征,导致w累乘的方差变为n/2

    以上便是初始化参数的问题。

  • 相关阅读:
    【BZOJ1000】A+B Problem ★BZOJ1000题达成★
    【BZOJ4548】小奇的糖果 set(链表)+树状数组
    【BZOJ3661】Hungry Rabbit 贪心
    Python面试题之回调函数
    Django学习笔记之CBV和FBV
    RESTful源码笔记之RESTful Framework的基本组件
    SQL学习笔记之B+树
    SQL学习笔记之MySQL索引知识点
    SQL学习笔记之B+树的几点总结
    Python面试题之Python中type和object的关系
  • 原文地址:https://www.cnblogs.com/siyuan-Jin/p/12386806.html
Copyright © 2011-2022 走看看