RNN学习笔记
RNN笔记
前景知识
在机器翻译或其他类似的场景下,为了更好地处理时序数据,我们需要将文本映射成一系列ID(数字),以便保留语境和单词及句子之间的关系,这样机器就能理解任何文本中的相关模式,并能弄清句子的上下文。文本编码就是一个将有意义的文本转换为数字/矢量表示的过程。
General RNN
因为传统的神经网络模型对每个输入特征都有单独的参数,因此它需要在句子的每个位置分别学习所有的语言规则,也就是说传统的神经网络模型难以做到基于“上文”对接下来的状态进行预测。然而,对时序数据建立模型是很重要的,如语音识别、机器翻译都依赖于这种模型。
RNN也称循环神经网络或递归神经网络,用于处理连续数据。RNN的结构使得当前信息可以被传递到网络的下一状态。

为了从多层网络到循环网络,我们需要利用1980年代机器学习和统计模型中的一个早期想法:在模型的不同部分共享参数。参数共享使我们有可能将模型扩展并应用到不同形式的例子上,并在它们之间进行归纳。

如果不进行参数共享,结果会怎么样?
如果我们对时间指数的每个值都有单独的参数,我们就不能概括到训练期间没有看到的序列长度,也不能在不同的序列长度和不同的时间位置上分享统计强度。
在某时刻,我们可以应用递归公式来更新当前隐藏层的状态
其中,\(x_{t}\)是输入向量,\(h_{t-1}\)是老状态,\(f_W\)是带有权重\(W\)的函数且\(h_{t}\)是新的状态。
对于输出的计算,我们可以应用公式
其中,\(h_{t}\)是新的状态,\(f_{W_{hy}}\)是另一个带有权重\(W_{hy}\)的函数并且\(y_{t}\)是输出。
Vanilla RNN是一种特殊的RNN,更新\(h_{t}\)的公式为
这个112行的py实现了基于字符的Vanilla RNN模型,只使用了numpy,结构非常友善。
总的来说,RNN在一个包含向量\(x[t]\)的序列上进行操作,时间步长指数从1到\(\tau\)。另外,时间步长指数不一定对应现实世界中的时间流逝,它可能只是用来表示序列中的位置。RNN中的循环代表了一个变量的现值对其自身在未来时间步长的价值的影响。
Reference
https://medium.com/analytics-vidhya/nlp-text-encoding-a-beginners-guide-fa332d715854
浙公网安备 33010602011771号