循环神经网络RNN - Recurrent Neural Network
Ps 循环神经网络Recurrent Neural Network 和递归神经网络Recursive Neural Network虽然缩写都是RNN ,但实际上是不一样的。
RNN(Recurrent Neural Network)是什么?
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。
//以上概念来自百度百科,就是想有一个概念性的东西在这。
常见的循环神经网络的图(图来自b站微软人工智能公开课:循环神经网络RNN)
我们现在所使用的RNN循环神经网络在展开后是没有环的
如图所示,每一个RNN网络都有一个小小的循环核心单元,它把x作为输入传入A,A有一个内部隐藏态(Internal hidden state),这一隐藏态会在A每次读取新的输入时更新,然后这一内部隐藏态会在模型下一次读取输入时将结果反馈至模型。
通常来说,我们想让RNN在每一时步都能给出输出,因此,就有了这样的模式,它读取输入、更新隐藏态并且生成输出。
In general , a recurrent neural network has this little recurrent core cell .And it will take some input x and feed that input into the RNN. And that RNN has some internal hidden state,and that internal hidden state will be updated every time that the RNN reads a new input. And that internal state will be then fed back to the model the next time it reads an input.
And frequently , we will want our RNN’ s to also produce some output at every time step. So we’ll have this pattern where it will read an input , update its hidden state , and then produce an output.
循环神经网络主要处理什么?
主要处理离散序列数据(Sequential data)
有很多不同类型例如一对一,一对多,多对一,多对多等
例如,输入一段文字,输出这段文字的情感是积极的还是消极的;
机器翻译,将一段英文翻译为中文;
输入一张图片,要求对图片进行文字描述等等。
例如金融市场的走势、时域语音信号(这些信号看起来是连续的,但实际上是离散的)。
特点:(1)离散线性
(2)长度可变
循环神经网络能做什么?
(1)序列数据的分析,例如金融市场的预测等。
(2)序列数据的生产,例如基于图片的诗歌创作等。
(3)序列数据的转换,例如语音识别,机器翻译等。
RNN的常见用途 - 语言建模(Language Modeling)
在语言建模问题中,我们想要读取一些语句,从而让神经网络在一定程度上学会生成自然语言。
RNN其与前馈型神经网络的区别主要在于
(1)它的输入不是同一时刻输入的,而是分散在各个时刻上的。
(2)它的计算都是在A中进行的,其运算在每一时刻是完全重复的,只是输入不一样,它们的网络结构和网络参数在各个时刻是完全共享的。
梯度消失问题?梯度爆炸问题?- 通过长短时记忆LSTM网络解决
在循环网络中引入一个专门的记忆单元,并且在记忆单元之间夹着一种门控的机制
长短期记忆网络(Long Short-Term Memory networks ,LSTM)
是一种时间循环神经网络,主要用于解决一般的RNN存在的长期依赖问题,即处理和预测是时间序列中间隔和延迟非常长的重要事件。
LSTM循环单元结构如下图(图来自百度百科)
LSTM单元包括3个门控,3个门控对LSTM单元的内部状态建立了自循环(self-loop)
(1)输入门 - 决定当前时间步的输入和前一个时间步的系统状态对内部状态的更新。
以多大程度将现有信息加入到记忆上,如果是噪音,就完全不加;如果是非常重要的信息,就全加;如果是一般信息,按照概率添加。
(2)遗忘门 - 决定前一个时间步内部状态对当前时间步内部状态的更新。
(3)输出门 - 决定内部状态对系统状态的更新。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络RNN – 浅层 - Python技术站