我是靠谱客的博主 俭朴往事,最近开发中收集的这篇文章主要介绍RNN 梯度消失梯度爆炸 变体,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Linux系统上pytorch环境的配置

  1. 需要GPU的时候,在具备GPU硬件的前提下,首先需要下载GPU相应版本的驱动程序(diver)以及CUDA。CUDA可以理解为GPU相关的API,pytorch能够自动调用这些接口来应用GPU。cat /usr/local/cuda/version.txt可以查看已安装CUDA的版本。
  2. 安装torch、torchvision、torchaudio库。这一步在pytorch的官网会提供不同版本相应的命令,主页默认为最新的版本,如果需要旧版本,可以再旧版本的链接里边找到相关的命令。
  • attention:
    在实际配置环境的过程中,我遇到一个问题,服务器在重启后显卡并没有被自动的驱动起来。
    NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
    nvidia命令不存在,说明显卡并没有被正常的驱动起来,故需要手动的去驱动显卡。
    step1: sudo apt-get install dkms
    step2:sudo dkms install -m nvidia -v 410.79(这里-v后边跟的是diver程序的版本,必须是已经下载在服务器上的,驱动程序的源码下载在路径/usr/src/nvidia-***.**下,可以查看版本号)

RNN的梯度消失以及梯度爆炸

  1. 首先要明确一个问题,梯度消失以及梯度爆炸不仅仅在RNN框架中出现,在很多的网络框架下都会出现。
  2. 对于出现梯度消失以及梯度爆炸的原因,根据链式求导法则,在求相应参数的偏导数时,中间会出现很多偏导的连乘,而这些由于L2范数有关,牵扯到一个不等式,它会呈指数增长也会呈指数缩减。
  3. 梯度消失会导致,参数更新时更新值非常的小,越远的输入梯度越小,对输出的影响力也就越小。这就是长依赖问题,我们可能会丢失对结果影响力较大的输入,应有可能学习的梯度不准确。
  4. 梯度爆炸会导致,在参数更新的时候,每一步都迈的非常大,很有可能直接更新到了损失最大的位置,也很可能离最优解非常的远。可以通过梯度切片来解决梯度爆炸的问题,就是在梯度超过某一阈值的时候,适当的将其缩小。
  5. 为了解决梯度消失的问题,两种新型的RNN出现了:LSTM & GRU。相比之下,LSTM参数规模更大,比较适合训练数据量较大的任务;GRU相对简单,训练速度相对更快。

多种多样的RNN

  1. LSTM & GRU
  2. Bi-RNN,双向的循环神经网络,既可以考虑到前向传播的信息,又可以考虑到后向传播的信息。
  3. 多层循环神经网络,这是一个非常powerful的神经网路框架,参数规模很大。

Neural Machine Translation

  1. seq2seq模型
  2. Encoder - Decoder模型,其中Encoder负责将输入的源语言编码,是一个Bi-LSTM。Encoder最后时刻的输出是Decoder的输入,两个方向最后时刻的隐状态的结合,以及同样细胞状态的结合。
  3. Decoder引入Attention机制。
  4. 损失函数为交叉熵 Cross Entropy。

遗留问题

  1. 学习seq2seq + attention的NMT模型并实现。
  2. 图神经网络源码的熟悉。

最后

以上就是俭朴往事为你收集整理的RNN 梯度消失梯度爆炸 变体的全部内容,希望文章能够帮你解决RNN 梯度消失梯度爆炸 变体所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部