突然更新的机器学习系列……
循环神经网络
不管是RNN还是CNN,他们都是一种特征提取的手段,只不过CNN做的是提取空域的近邻信息,然而RNN是提取的时域上的上下文关系,我们经常在视频,文本这样具有明显的时间关系的数据来源上利用这种结构,根据任务的不同,我们可以把他垫在softmax后面做分类,或者是利用隐向量做翻译。
上面是一个简单的RNN,对于任何一个,它的表达式为
我们发现RNN的每一个时刻对应hidden vector都和上一个时刻的hidden vector通过参数矩阵联系在一起,这些参数是同层共享的。同样的,我们在反向传播的时候,就需要重新考虑这个时刻之前的信息,公式比较复杂,这也引出了后面提到的问题:梯度消散
RNN的一些任务:
机器翻译:encoder&decoder
假设现在有一位中英翻译,一位英日翻译,现在你要去翻译一篇中文文章,翻译成日语,怎么做呢?当然是先翻译成英语,之后翻译成日语。
在无法实现n*(n-1)/2的点对翻译机制下,中间语言就比较重要了。
我们在使用RNN做翻译的时候,我们利用两个RNN做encoder,decoder。encoder的作用是把源语言翻译成隐向量,decoder就是把隐向量翻译成目标语言,这里的隐向量实际上就是中间语言
梯度消散和LSTM
由于RNN自身的参数更新方式,信息之间仅靠相邻关系,明显是不够的,再有,如果RNN的迭代次数越大,梯度就会变得越来越小,围殴了解决这样的问题,我们有了LSTM
LSTM的结构更加复杂,一个LSTMcell有三个输出,一个我们称为cell state,这个就是保存长远信息的机制,通过门机制,我们可以有选择地将输出推送到这个cell state相后传播
门机制实际上就是有选择的让一些数据经过这个门,对应上图的
结构,对于一个Sigmod function,他输出的值,就是让多大的数据走到下一步。有关遗忘门机制,可以参照http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 的解释,非常清楚
GRU LSTM的变体
对于LSTM实际上变体有很多,不如说LSTM和他的变体,都是对门机制的进一步应用,先对LSTM,GRU的结构比较简单,但是效果是接近的,在一定程度上可以代替LSTM
总结
循环神经网络的核心思想实际上就是保存信息,以及利用保存的信息,在其基础上的应用也有很多。考虑到其运算效率,实际应用还需要大量的算力和优化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简介循环神经网络家族 - Python技术站