[读书笔记] 自然语言处理 LSTM(Long Short-Term Memory)神经网络测试

序言

LSTM(long short-term memory)是递归神经网络(Recurrent Neural Network, RNN)其中的一种。

Google牛逼的翻译系统GNMT也是基于LSTM。

可以看看下面的教程,简单理解LSTM和RNN的关系,http://colah.github.io/posts/2015-08-Understanding-LSTMs/

循环网络RNN

首先介绍一下什么循环神经网络 RNN(Recurrent Neural Network):

screenshot-from-2017-10-13-15-11-54

简单来说,输入和输入之间,有一个循环连接,输出会作为输入的一部分,反馈给神经网络。

展开了之后是一个无限循环网络:

screenshot-from-2017-10-13-15-24-37

循环网络问题

循环网络可以根据近距离的过往信息预测现在的信息

举个例子,我们训练一个识别器预测下一个词,这个句子“the clouds are in the sky”,预测最后一个词,很明显云(cloud)是在天空(sky)里面的,所以最后一个词是sky,这里cloud和sky在同一个句子里面,RNN网络很容可以训练(或者说学习)出来。

screenshot-from-2017-10-15-13-27-07

但是,假如我们需要预测的词跟之前的信息由非常远的距离,例子:“I grew up in France… I speak fluent French.” (“我在法国长大…然后我说法语”),RNN是无法解决这种长距离学习(long-term dependency)预测问题。

screenshot-from-2017-10-15-13-36-25

LSTM (long short-term memory)就是为了解决这个问题而设计的,下面就是LSTM的结构介绍

screenshot-from-2017-10-11-14-05-58

代码测试

这里用Ocropy里面的clstm测试lstm网络, 本文主要测试以下的教程:

https://docs.google.com/file/d/0B2VUW2Zx_hNoXzJQemFhOXlLN0U/edit

需要先安装 ocropyclstm,然后才能测试下面脚本:

然后定义一个网络,网络数据入口是2维,出口是1维,然后中间有2个记忆体节点。第二行代码是设计网络的学习速度。

下面代码是产生测试数据的函数。

其实产生的数据就是经典的xs,ys。

可以看看数据分布图:

screenshot-from-2017-10-11-13-34-45

xs 是随机分布,然后 ys 是0,1均匀分布。然后就是训练,很简单,就是调用train。

screenshot-from-2017-10-11-13-43-47

因为xs是随机分布,所以最后预测值也“几乎”是直线。其实放大后不是直线预测:

screenshot-from-2017-10-11-13-51-07

上图是放大后的结果,还是有震动的,由于训练次数不够,现在我们增加训练次数:

screenshot-from-2017-10-11-14-03-13

上图可以看出,经过大量的训练,ys的分布只是跟xs的时间信息有关,确实对语音识别,自然语言处理很有用,因为都是时间序列信息。

screenshot-from-2017-10-15-13-36-25

发表评论

电子邮件地址不会被公开。 必填项已用*标注