李宏毅机器学习笔记:RNN循环神经网络

RNN

  • 一、RNN
    • 1、场景引入
    • 2、如何将一个单词表示成一个向量
    • 3种典型的RNN网络结构
  • 二、LSTM
    • LSTM和普通NN、RNN区别
  • 三、 LSTM的训练

一、RNN

1、场景引入

李宏毅机器学习笔记:RNN循环神经网络_第1张图片
例如情景补充的情况,根据词汇预测该词汇所属的类别。这个时候的Taipi则属于目的地。但是,在订票系统中,Taipi也可能会属于出发地。到底属于目的地,还是出发地,如果不结合上下文,则很难做出判断。因此,使用传统的深度神经网络解决不了问题,必须引入RNN。

2、如何将一个单词表示成一个向量

李宏毅机器学习笔记:RNN循环神经网络_第2张图片
如上图所示,将词汇Taipi表示成[x1,x2]组成的向量。
李宏毅机器学习笔记:RNN循环神经网络_第3张图片
一个最简单的方法是1-N encoding。思路是将所有的可能用到的词汇组成一个词典,然后假如我们一共只可能用到5个单词,则如上图所示,每个单词可以用1个五维向量来表示。
李宏毅机器学习笔记:RNN循环神经网络_第4张图片
除了1-N econding之外,还有一些其他的方法。
第一种思路是设置1个other选项,将所有没有预先在词典中所设定的单词表示成other
第二种思路是利用26个字母进行hash映射。这种情况下则不需要额外考虑other的情况。
李宏毅机器学习笔记:RNN循环神经网络_第5张图片
这样,将词汇向量化之后,我们指导,网络的输入为一个个的词汇向量,网络的输出则为:y1表示词汇属于dest目的地的概率,y2则表示词汇属于出发地的概率。最后其实应该还有一层,做出预测,属于哪个概率最大,则输出哪个。
李宏毅机器学习笔记:RNN循环神经网络_第6张图片
这个时候,我们所构建的NN则是需要有记忆的,否则无法解决该问题。
李宏毅机器学习笔记:RNN循环神经网络_第7张图片
因此,我们引入了RNN来解决该问题。将每次hidden layer的输出先储存到memory cell中,作为下个词汇向量的输入。不断循环该过程。
李宏毅机器学习笔记:RNN循环神经网络_第8张图片
举例来说,我们输入的第一个向量为[1,1],则hidden layer的输出为[2,2],先被储存起来,输出为[4,4]。
李宏毅机器学习笔记:RNN循环神经网络_第9张图片
第2个输入仍然为[1,1]。这个时候结合前一个memory的输出[2,2],hdden layer的输出为[6,6],output为[12,12]。
李宏毅机器学习笔记:RNN循环神经网络_第10张图片
第3个输入为[2,2],结合前一个memory的输入为[6,6],这个时候hidden layer的输出为[16,16],output为[32,32]。
李宏毅机器学习笔记:RNN循环神经网络_第11张图片
RNN的网络结构如上图所示,重复利用了同一种相同的网络结构。
李宏毅机器学习笔记:RNN循环神经网络_第12张图片
每次储存在memory中的值并不相同。
李宏毅机器学习笔记:RNN循环神经网络_第13张图片
当然,也可以把hidden layer的层数加深。

3种典型的RNN网络结构

李宏毅机器学习笔记:RNN循环神经网络_第14张图片
Jordan Network和Elamn Network的区别在于是将每个output的值作为下一个的输入。右侧的网络结构可解释性更强。
李宏毅机器学习笔记:RNN循环神经网络_第15张图片
双向RNN则更为全面,同时兼顾到了前后的上下文信息,而不仅仅是前面的信息。

二、LSTM

我们在实际过程中使用更多的则是LSTM。
李宏毅机器学习笔记:RNN循环神经网络_第16张图片
LSTM实际上,是将RNN中hidden layer的输出存入memory cell的过程稍微复杂化了一些,使用了3个gate进行代替。input gate的作用是控制输入通过,forget gate的作用是控制对memory cell中的值是否进行清空。output gate的作用是控制是否将该memory cell的值输出。
李宏毅机器学习笔记:RNN循环神经网络_第17张图片
每个门的激活函数都是sigmoid函数,因为这样恰好可以将输入值映射到(0,1)之间。0表示不允许通过,1表示可以通过。
这里额外说下,forget gate和直觉似乎有点相反。当 f ( z f ) = 1 f(z_{f})=1 f(zf)=1时,表示forget gate打开,但是 c f ( z f ) = 1 cf(z_{f})=1 cf(zf)=1,c表示前一个memory cell的值, c ′ c' c表示本次计算出来的值。这个时候,前一次计算出来的c的信息完全没有被forget。因此,forget gate打开时,不是表示forget,而是表示unforget。

李宏毅机器学习笔记:RNN循环神经网络_第18张图片
举例来说,假如想设计一个LSTM网络,实现上面的功能。
当x2=1时,将x2的值写入到memory中。memory时最上面蓝色框的值。
当x2=-1时,将memory中的值进行reset。
当x3=1时,将memory中的值进行输出。
李宏毅机器学习笔记:RNN循环神经网络_第19张图片
我们设计的NN结构如上图所示。输入乘的4个weight为[1,0,0,0]。input gate控制信号为输入与[0,100,0,-10]相乘,依次类推。
李宏毅机器学习笔记:RNN循环神经网络_第20张图片
当输入为[3,1,0]时,input的值为3,input gate的值为1,multiply之后得到3.forget gate 的值为1,与前一个memory cell的值0相乘后再加3得到3,outputgate 的值为0,因此输出为0,memory cell的值更新为3,为本次运算的结果。
李宏毅机器学习笔记:RNN循环神经网络_第21张图片
当输入为[4,1,0]时,input 的值为4,input gate=1,multiply之后得到4,forgat gate =1,与 C t − 1 = 3 C_{t-1}=3 Ct1=3相乘后+4=7,forget gate的值为0,因此output=0,memory cell更新为7.
李宏毅机器学习笔记:RNN循环神经网络_第22张图片
李宏毅机器学习笔记:RNN循环神经网络_第23张图片
李宏毅机器学习笔记:RNN循环神经网络_第24张图片

LSTM和普通NN、RNN区别

李宏毅机器学习笔记:RNN循环神经网络_第25张图片
前面已经讲述过,LSTM可以看作是将普通的hidden layer替代成由4个输入控制的cell。
李宏毅机器学习笔记:RNN循环神经网络_第26张图片
将输入[x1,x2]分别乘上不同的matrix后输入,用于控制input ,input gate,forget gate,output gate。因此,LSTM网络结构的参数量是普通NN的4倍。
李宏毅机器学习笔记:RNN循环神经网络_第27张图片
李宏毅机器学习笔记:RNN循环神经网络_第28张图片
李宏毅机器学习笔记:RNN循环神经网络_第29张图片
这里,peephole,指的是,在实际LSTM网络结构设计中,会将前一时刻的memory cell的值ct,输出ht的值一并加入到下一时刻作为输入。
李宏毅机器学习笔记:RNN循环神经网络_第30张图片
这里LSTM虽然看起来很复杂,但是在实际中往往这是最标准化的设计。我们可以借助工具来实现它。

三、 LSTM的训练

你可能感兴趣的:(深度学习,机器学习,机器学习,笔记,rnn)