适用于:小规模数据集
如何对序列数据进行建模?-----> RNN(many to one/many to many)模型
我们知道,将一段文字整体输入逻辑斯蒂回归模型时,是属于一对一(one to one)模型,一个输入对应一个输出,这种一对一模型非常适合图片类数据,但不太适合文本数据
RNN的输入和输出都不固定,非常适合文本、语音等持续序列的数据,它可以持续记忆不停输入的词,主要过程如下:
用状态向量ht来积累阅读过的信息
将输入的词通过word embedding变成一个个的词向量Xt
每输入一个词,ht就会更新状态并保存
Simple RNN的结构和原理
原理:
RNN实际上就是说,每个输出的状态都只由前一时刻的状态和当前时刻的输入来决定
比如: h0中保存的是the这个词,那么h1中保存的就是the cat ........,ht中保存了the cat sat....mat,也就是说最后一个状态向量会保存整句话的信息,我们可以把ht看成是从这整句话中抽取的特征向量,每次更新状态ht时需要用到A这个参数矩阵,且整个RNN只会有一个A(从等式左边的一个环绕箭头就能明白参数是共享的),A随机初始化,然后利用训练数据来学习A
结构图:
上一个状态记作h(t-1),新输入的x向量记作xt,将这两个向量做点积得到一个更高的向量,矩阵A是RNN的模型参数,A*(h(t-1)*xt)(矩阵与向量相乘得到一个向量),然后将向量的每一个元素代入激活函数tanh()中