这次的文章对RNN做一个详细的总结,文章里的插图来源于视频:
https://www.bilibili.com/video/av9770302?from=search&seid=11028515671612362426

首先看下面两句话,里面都有Taipei这个地名,可是从语用的角度来说,意思大不相同,一个是目的地,一个是出发地。所以这就是为什么我们希望模型对Taipei前面的词有一个记忆。
对于RNN(循环神经网络)的课堂笔记总结

RNN的网络图具体用图像来表示如下:
每一个词输入后得到的隐藏层a都会被当作下一次的输入;每一次循环的参数是一样的(用相同的颜色表示)。
对于RNN(循环神经网络)的课堂笔记总结

上面所说的是把隐藏层a都会被当作下一次的输入,另外也可以把上一次的输出层当作下一次的输出:
对于RNN(循环神经网络)的课堂笔记总结

除此之外,还有bi-RNN,也就是说对词周围的两个词都有记忆:
也就是训练两个RNN,结合两个输出作为最后的输出。
对于RNN(循环神经网络)的课堂笔记总结

下面来看一看LSTM:
这是一个比RNN更加复杂的结构,设置了三个门,输出门,输入门以及遗忘门,每个门都有signal control。所以LSTM网络有4个输入,1个输出。
对于RNN(循环神经网络)的课堂笔记总结

对于RNN(循环神经网络)的课堂笔记总结

下面用实际的数据对以上流程作一简单的计算:
假设这里的g, h都是linear function,f 为sigmoid function。
对于RNN(循环神经网络)的课堂笔记总结

但事实上每个输入都是不一样的,由c,h,x共同变化而得:
对于RNN(循环神经网络)的课堂笔记总结
对于RNN(循环神经网络)的课堂笔记总结

在实验中,人们发现RNN训练时loss上下浮动很大:
因为gradient descent有时会突然很大,所以会导致参数的变化突然很大。原作者用了一个小技巧:clipping, 即假如gradient descent大于某个值,就权当作等行这个值。
对于RNN(循环神经网络)的课堂笔记总结

那为什么会出现这种情况呢?
原因很简单,在于参数的复用。假设我的输入是10000….,我们设置不同的w,虽然w变动很小,可是在经过累乘之后,最后一次输出的结果却变化很大。
对于RNN(循环神经网络)的课堂笔记总结

而LSTM可以改善这种情况:
对于RNN(循环神经网络)的课堂笔记总结

下面展示几种常见的应用:
比如一个多分类问题,取最后一次循环的输出,再经过处理,便可得到分类结果。
对于RNN(循环神经网络)的课堂笔记总结
再比如一个抽取关键词的问题,将最后一次循环的输出作为attention,再和embedding层一起作一些后续处理,即得到最后的结果。
对于RNN(循环神经网络)的课堂笔记总结
语言生成的例子。
对于RNN(循环神经网络)的课堂笔记总结

这次的笔记主要讲了RNN的大概流程,比较抽像,下次再结合代码的形式具体地总结一遍。