zoukankan      html  css  js  c++  java
  • [转载]clip gradient抑制梯度爆炸

    [转载]clip gradient抑制梯度爆炸

    来源:https://blog.csdn.net/u010814042/article/details/76154391

    1.梯度爆炸的影响
    在一个只有一个隐藏节点的网络中,损失函数和权值w偏置b构成error surface,其中有一堵墙,如下所示

    这里写图片描述

    损失函数每次迭代都是每次一小步,但是当遇到这堵墙时,在墙上的某点计算梯度,梯度会瞬间增大,指向某处不理想的位置。如果我们使用缩放,可以把误导控制在可接受范围内,如虚线箭头所示

    2.解决梯度爆炸问题的方法
    通常会使用一种叫”clip gradients “的方法. 它能有效地权重控制在一定范围之内.
    算法步骤如下。

    首先设置一个梯度阈值:clip_gradient
    在后向传播中求出各参数的梯度,这里我们不直接使用梯度进去参数更新,我们求这些梯度的l2范数
    然后比较梯度的l2范数||g||与clip_gradient的大小
    如果前者大,求缩放因子clip_gradient/||g||, 由缩放因子可以看出梯度越大,则缩放因子越小,这样便很好地控制了梯度的范围
    最后将梯度乘上缩放因子便得到最后所需的梯度

    这里写图片描述

    1. 有无clip_gradient在GRU模型中的结果比较
      无clip_gradient
       可以很清楚地发现在2000次迭代出发生了梯度爆炸,最终影响了训练的效果。

    这里写图片描述

    有clip_gradient
    可以发现clip_gradient在前期有效了控制了梯度爆炸的影响,使得最终的loss能下降到满意的结果

    这里写图片描述

  • 相关阅读:
    jsfl 常用自定义方法
    jsfl 常用方法
    Java 跨平台原理
    JDK、JRE 和 JVM 的区别
    win10 中安装 JDK8 以及环境配置
    JDK 14 都已经发布了,Java 8 依然是我的最爱
    DOS 命令大全用法详解
    《Java程序设计基础》 第4章手记
    堆和栈的区别
    CC#JavaPython 基本数据类型比较
  • 原文地址:https://www.cnblogs.com/jiading/p/11958525.html
Copyright © 2011-2022 走看看