本文摘抄于https://zhuanlan.zhihu.com/p/32085405
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
简单介绍下RNN
RNN:循环神经网络(Recurrent Neural Network,RNN)
是一种用于处理序列数据的神经网络。相比于一般的神经网络来说。他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好的解决此类问题。
普通的RNN
这里:
x为当前节点的输入,h表示前一节点的输入。
y为当前节点的输出,h’表示传递到下一节点的输出。
通过上图的公式可以看到,输出的h’和x和h都有关系
而y则常常使用h’投入到一个线性层(主要是为了进行维度映射)然后使用softmax进行分类得到需要的输出。
对这里的y如何得到h’往往看具体模型的使用方法。
通过序列形式的输入,我们得到了以下形式的RNN
LSTM
LSTM:长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中出现的梯度消失和梯度爆炸的问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
LSTM和普通的RNN的区别
相比于RNN只有一个传递状态h’,LSTM有两个输出状态,一个c’和一个 h’(hidden state)。(Tips:RNN中的 h’对于LSTM中的 c’)
其中c的传递会很慢,往往是上一个传递过来的c加上一些数值。
而h’则在不同节点下往往会有很大的区别。
深入LSTM
下面具体对LSTM的内部结构来进行剖析
首先使用LSTM的当前输入x和上一个状态传递下来的h‘拼接训练得到四个状态
其中除了z以外,都是由拼接向量乘以权重矩阵后,再通过sigmod激活函数转换到0-1的值,来作为一种门控 状态。而z则是将结果通过一个tanh激活函数转换成-1到1的值(这里使用tanh是因为这里将其作为输入数据,而不是门控信号)
详细介绍LSTM
LSTM内部主要有三个阶段:
1.忘记阶段。这个阶段主要是对上一个节点传递下来的输入进行选择性忘记。简单来说就是会“忘记不重要的,记住重要的”
具体来说通过计算得到的zf来作为忘记门控,来控制上一个状态ct-1哪些需要留哪些需要忘。
2.选择记忆阶段。这个阶段将这个的输入有选择性的进行“记忆”。主要是会对输入xt进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的z表示。而选择的门控信号则是由zi来进行控制的。
3.输出阶段。这个阶段将决定哪些将会被当成的当前状态的输出。主要通过z0来进行控制的。并且还对上一阶段得到的c0进行放缩(通过一个tahn激活函数进行变化)
与普通的RNN类似,输出yt往往最终也是通过ht变化得来的。