前言:RNN的出现,解决了CNN在处理时空序列上的糟糕表现。所谓时空序列可以简单理解上前后的输入是有联系的,比如自然语言处理,我们说的前一句话和后一句话之间是有联系的;智能视频处理,每一帧的前后是有联系的;雷达信号,每个信号之间是有联系的……传统的图像处理,图像中的每个像素点,这些像素值之间是没有联系的。我们利用RNN做一个自动歌词生成器,本文先介绍一下RNN的理论基础。
目录
语言模型
语言模型(language model)是计算一个句子的概率的模型。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为TT的文本中的词依次为w1,w2,…,wTw1,w2,…,wT,那么在离散的时间序列中,wt(1≤t≤T)可看作在时间步(time step)t的输出或标签。给定一个长度为TT的词的序列w1,w2,…,wTw1,w2,…,wT,语言模型将计算该序列的概率:
P(w1,w2,…,wT)
如果句子中的每一个词都是独立出现的,那么我们就可以把概率写成:
但是我们前言中说了,自然语言中,每个词肯定相互之间有联系的,如果这个词出现依赖前一个词,这就是二元语法:
同理,一个词出现依赖前两个词,这就是三元语法:
因此,一个词出现依赖于前N-1个次,就是N元语法:
RNN原理和网络结构
- x是一个向量,它表示输入层的值。
- s是一个向量,它表示隐藏层的值。
- U是输入层到隐藏层的权重矩阵。
- o也是一个向量,它表示输出层的值。
- V是隐藏层到输出层的权重矩阵。
- W是权重矩阵。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
将刚才那个抽象图画成具体图:
按照时间线展开就是:
最后我们用公式表示:
好了,RNN理论能理解这些就够了,后面开始写代码。
参考