• RNN理论详解



    活动地址:CSDN21天学习挑战赛

    *学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

    很多实时情况都能通过时间序列模型来描述。例如,如果你想写一个文档,单词的顺序很重要,当前的单词肯定取决于以前的单词。如果把注意力放在文字写作上,很明显,一个单词中的下一个字符取决于之前的字符(例如,The quick brown f……,下一个字母是o的概率很高),如下图所示。关键思想是在给定上下文的情况下产生下一个字符的分布,然后从分布中取样产生下一个候选字符。

    基于序列的模型可以用在很多领域中。在音乐中,一首曲子的下一个音符肯定取决于前面的音符,而在视频领域,电影中的下一帧肯定与先前的帧有关。此外,在某些情况下,视频的当前帧、单词、字符或音符不仅仅取决于过去的信号,而且还取决于未来的信号。
    基于时间序列的模型可以用RNN来描述,其中,时刻i输入为Xi,输出为Yi,时刻[0,i-1]区间的状态信息被反馈至网络。这种反馈过去状态的思想被循环描述出来

    由于存在两个稳定性问题,训练RNN是很困难的。由于反馈环路的缘故,梯度可以很快地发散到无穷大,或者迅速变为0。如下图所示,在这两种情况下,网络将停止学习任何有用的东西。梯度爆炸的问题可以通过一个简单的策略来解决,就是梯度裁剪。梯度消失的问题则难以解决,它涉及更复杂的RNN基本单元(例如长短时记忆(LSTM)网络或门控循环单元(GRU))的定义。梯度裁剪包括对梯度限定最大值,以使其不能无界增长。

    解决梯度消失需要一个更复杂的记忆模型,它可以有选择地忘记以前的状态,只记住真正重要的状态。如下图所示,将输入以概率p∈[0,1]写入记忆块M,并乘以输入的权重。
    以类似的方式,以概率p∈[0,1]读取输出,并乘以输出的权重。再用一个概率来决定要记住或忘记什么:

    长短时记忆网络(LSTM)可以控制何时让输入进入神经元,何时记住之前时序中学到的东西,以及何时让输出传递到下一个时间戳。所有这些决策仅仅基于输入就能自我调整。乍一看,LSTM看起来很难理解,但事实并非如此。

    首先,需要一个逻辑函数σ计算出介于0和1之间的值,并且控制哪个信息片段流经LSTM门。请记住,logisitic函数是可微的,所以它允许反向传播。然后需要一个运算符对两个相同维数的矩阵进行点乘产生一个新矩阵,其中新矩阵的第ij个元素是两个原始矩阵第ij个元素的乘积。同样,需要一个运算符⊕将两个相同维数的矩阵相加,其中新矩阵的第ij个元素是两个原始矩阵第ij个元素的和。在这些基本模块中,将i时刻的输入xi与前一步的输出yi放在一起。

    出了许多LSTM的变种模型,其中有两个很受欢迎:窥孔(peephole)LSTM允许门层查看单元状态,如下图中虚线所示;而门控循环单元(GRU)将隐藏状态和单元状态合并为一个信息通道。
    同样,GRU和窥孔LSTM都可以用作标准RNN单元的黑盒插件,而不需要知道底层数学理论。这两种单元都可以用来解决梯度消失的问题,并用来构建深度神经网络。

    真正使RNN强大的是它能够处理向量序列,其中RNN的输入和输出可以是序列,下图很好地说明了这一点,最左边的例子是一个传统(非递归)网络,后面跟着一个序列输出的RNN,接着跟着一个序列输入的RNN,其次跟着序列输入和序列输出不同步的RNN,最后是序列输入和序列输出同步的RNN。

    机器翻译是输入序列和输出序列中不同步的一个例子:网络将输入文本作为一个序列读取,读完全文后输出目标语言。
    视频分类是输入序列和输出序列同步的一个例子:视频输入是一系列帧,对于每一帧,在输出中提供分类标签。

  • 相关阅读:
    微信公众号之验证JS-SDK
    抖音矩阵系统源码,抖音矩阵系统源码,抖音矩阵系统源码,抖音矩阵系统源码,抖音矩阵系统源码,抖音矩阵系统源码。
    docker load and build过程的一些步骤理解
    阻性负载和感性负载的区别
    GitHub上狂揽62Kstars的程序员做饭指南
    分布式文件存储——分块上传和断点续传
    HackTheBox MetaTwo 网站框架CVE获取用户shell和破解私钥提权
    企业网上订货系统的定义与组成|手机APP订单管理软件
    vue中使用脚手架创建一个新项目
    Linux安装 spark 教程详解
  • 原文地址:https://blog.csdn.net/leva345/article/details/126283312