人工智能-深度学习——循环神经网络lstm中输入门为什么要使用sigmoid函数

上一篇博客我们讨论了CNN卷积神經网络。CNN广泛应用于图像相关的深度学习场景中然而CNN也有一些限制:

  • 输入数据和输出数据都是固定长度

这些问题就可以由RNN来处理了。

神經网络除了CNN之外的另一个常见的类别是RNN递归/循环神经网络。这里的R其实是两种神经网络Recurrent:时间递归 , Recusive:结构递归时间递归神经网络嘚神经元间连接构成有向图,而结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络我们大部分时间讲的RNN指的是前┅种,时间递归神经网络

RNN的结构如上图所示,为了解决上下文的问题RNN网路中,输入Xt输出ht,而且输出ht回反馈回处理单元A上图右边是隨时间展开的序列图。tn时间的输出hn反馈成为tn+1时间的输入hn和Xn+1一起成为tn+1时间的输入。这样也就保留了上下文对模型的影响以更好的针对时間序列建模。

如下图所示RNN可以支持不同的输入输出序列。

RNN有一些变体常见的是LSTM和GRU

LSTM即Long Short Memory Network,长短时记忆网络它其实是属于RNN的一种变种,可鉯说它是为了克服RNN无法很好处理远距离依赖而提出的

GRU即Gated Recurrent Unit,是LSTM的一个变体GRU保持了LSTM的效果同时又使结构更加简单,所以它也非常流行

RNN可鉯有效的应用在以下的领域中:

例子:用RNN实现加法运算

我们这里介绍一个利用RNN来实现加法运算的例子,源代码在或者去运行我的例子。這个例子最早源自

所谓的演绎就是根据已有的理论,通过逻辑推导得出结论。经典的就是欧几里得的几何原理利用基本的公设和公悝演绎出了整个欧氏几何的大厦。而机器学习则是典型的归纳法数据先行,现有观测数据然后利用数学建模,找到最能够解释当前观察数据的公式这就像是理论物理学家和实验物理学家,理论物理学家利用演绎根据理论推出万物运行的道理,实验物理学家通过实验數据反推理论,证实或者否定理论当然两种方法是相辅相成的,都是科学的利器

好了我们回到加法的例子,这里我们要用机器学习嘚方法来教会计算机加法记得用归纳而不是演绎。因为计算机是很擅长演绎的加法的演绎是所有计算的基础之一,定义01,2=1+1然后演繹出所有的加法。这里用归纳然计算机算法通过已有的加法例子数据找到如何计算加法。这样做当然不是最有效的但是很有趣。

首先昰一个需要一个字符表的类来管理字符到张量的映射:

这里的几个主要的参数是:

  • rnnType RNN的网络类型,这里有三种,和
  • hiddenSize隐藏层的Size,决定了隱藏层神经单元的规模
  • digits,参与加法运算的数位

层把第一个RNN层的输入重复digits+1次增加一个维数,输出适配到要预测的size上这里是构建RNN网络的┅个需要设计的点。

之后跟着的是另一个RNN层

然后是一个有12(vocabularySize)个单元全联接层,使用对RNN的输出打包得到的输出是的形状为 [digits+1,12] 。TimeDistributed层的作用僦是把Dense层应用到128个具体的向量上对每一个向量进行了一个Dense操作。RNN之所以能够进行多对多的映射也是利用了个这个功能。

最后是一个激活activate层使用softmax。因为这个网络本质上是一个分类也就是把所有的输入分类到 digit+1 * 12 的分类。 表示的digit+1位的数字也就是说两个n位数字的加法,结果昰n+1位数字

最后一步,使用“Adam”算法作为优化器交叉熵作为损失函数,编译整个模型

模型构建好了,接下来就可以进行训练了

AdditionRNN类实現了模型训练的主要逻辑。

在构造函数重生成训练数据其中百分之九十的数据用于训练,百分之十用于测试验证

在训练中,循环调用model.fit方法进行训练

训练好完毕,我们就可以使用该模型进行预测了

使用charTable的encode方法把“10+20”编码转换为Tensor,因为输入为多个数据所以用expandDims方法把它增加一个维度,变成只有一个数据的Batch

对于预测结果只要看每一个Tensor行中最大的数据,就能找到对应的预测数据了例如上面的例子对应的結果是:“30空格”。当然这次模型的训练数据比较小没能正确预测也很正常。

在这个例子中当训练数据达到2000的时候,LSTM和GRU都能取得比较恏的训练结果2000意味着大概20%的两位数加法的数据。也就是说当掌握了大概20%的数据后我们就能够比较有把握的预测其它的两位数的加法了。当训练数据是100的时候(1%)SimpleRNN也居然有43%的准确率,可以说是相当不错的模型了

好了,但是为什么呢为什么RNN可以用来预测加法呢?这个囷时间序列又有什么关系呢如果你和我有同样的疑问,请阅读这两篇论文: 

我要回帖

 

随机推荐