2018/4/16 15:07:53当前位置推荐好文程序员浏览文章

摘要: 递归神经网络是什么?传统的神经网络有哪些局限性?本文会为你揭开递归神经网络的面纱。

在本文的第一部分中,我们将详情递归神经网络的来源,说明传统神经网络的局限性。而后,我们将深入讨论其技术架构的细节,这对于我们在下一部分消耗numpy从头进行编码很有消耗。

人类学习

B.J. Neblett曾经说过:我们是经验的总和,我们不会和昨天一样,也不会和明天一样。

他道出了一个固有的真理。我们的大脑将过去的经验汇集在一起,并以一种很复杂的方式将它们结合在一起,来处理新的未知的任务。在生活中,我们很难解决曾经存储和呼叫的信息序列。人类学习能被分解为两个基本的过程:

1.记忆:每取得一次新的信息,我们将其存储起来作为将来的参考。

2.组合:并非所有的任务都是相同的,因而,我们将分析可以力与记忆中的经验结合起来,而后进行推理。

如上图所示。即便这只猫的形状很怪异,一个孩子也可以够立刻辨认出这是一只猫。然而,孩子可可以会无意识的想到人类伸展变形和姿势,并推断出猫也发生了同样的变化。

然而,并非所有任务都需要过去的经验。有时候,处理问题就是利消耗刚才解决的信息。例如,看看这个不完整的句子:

我买了平常爱吃的焦糖爆米花和冰茶,而后前往___

假如让你填写遗漏的单词,你可可以会猜测“电影院”。但是,你怎样知道不是“图书馆”或者者“星巴克”呢?也许是由于你根据上下文或者者前面的信息来推断正确的答案。现在,考虑以下几点:假如让你倒序背诵最喜欢的歌曲的歌词,你可以做到吗?倒序数数还差不多!

那么为什么倒序背诵歌词很难呢?因为每个数字之间都有一个逻辑关系,并且知道9位数字的顺序以及减法,这就意味着,即便以前从未这样做过,也能将1845098倒序数数。另一方面,你以特定的顺序来记歌曲的歌词,从第一个单词开始,大脑就开始对下一个单词进行索引。因为之前从未做过这种倒序索引,所以倒序背诵歌词特别难。把要记忆的歌词序列想象成一个巨大的毛线球,如上图所示,只有在正向序列中正确的第一个字开始,才能继续访问下去。

主要起因就是,我们的大脑能很自然的解决序列,它依靠一种看似简单实则强大的信息持久性来实现识别。

传统神经网络的困境

我们生活在一个有固定顺序的世界中。音频、视频和语言(甚至是DNA!)只是数据的少量例子,在这些数据中,给定时间步的信息与以前时间步的信息错综复杂。那么,这与深度学习有什么关系?比方从视频中提取一系列帧送入神经网络中,我们来预测接下来会发生什么…….或者者将一句不完整的话送入神经网络中,并要求它完成这个句子。

很显著的是,过去的信息对于可以否输出一个正当的预测至关重要。但是传统的神经网络根本无法做到这一点,由于它们的基本假设是输入是相互独立的!这是一个问题,由于这意味着任何一个时间点的输出都完全并且唯一由输入确定。没有历史纪录,我们的神经网络就无法利消耗不同帧或者单词之间的复杂时间依赖性,进而无法对输出的预测进行优化。

需要注意的是,递归神经网络不仅仅局限于有序数据,由于很多问题都能分解为一系列的子问题。想法如下:我们并不要求神经网络一次性预测输出(这样会添加模型的负担),而是对迭代子输出进行预测,并且这相对来说更加容易,其中每个子输出都是前一次的改进。例如,我们消耗递归神经网络产生带有某种顺序的手写数字,模仿艺术家的字迹,来对作品进行改进和重新评估。

记忆加强神经网络

那么,我们怎么赋予神经网络以记忆呢?为了答复这个问题,我们来回顾一下基本的神经网络隐藏层:一个向量X作为输入,乘以权重矩阵W并应消耗一个非线性。当我们将三个连续的输入送入网络时,将会考虑输出y。请注意,为了简化符号,忽略偏差。我对如下的方程式做了彩色解决,以便可以够看出模型的结构。

如上述函数所示,每个输出完全由其输入决定,也就是说,在计算其输出值时,并不存在过去的输入。因而,我们在隐藏层上将当前的输入和前一个输入组合起来作为一个新的输入,看看发生了什么变化。

很棒!通过在公式中引入过去的输入,我们设法在每个隐藏层中取得了2种颜色的组合。直观地来说,我们现在的网络记忆深度为1,即相当于“看到”时间倒退一步。请记住,我们的目标是,捕获到以前所有时间步的信息,因而,这不会削弱网络的性可以。

那么,假如我们将当前的输入和前一个隐藏层组合在一起,作为网络的输入,会发生什么情况呢?

好多了!我们的网络层在每个时间步中都混合了之前所有的颜色,从而使我们的网络在计算其输出时,会将所有的历史时间步纪录在内。这是重现其辉煌的力量:创造一个信息能持续跨越历史时间步的循环。

递归神经网络原理

作为其核心部分,递归神经网络能消耗一个内部隐藏状态h来表示,该状态在每个时间步上都进行升级。此升级方式的函数表示如下:

尽管看起来很复杂,我们来解剖一下,就会变得很简单。

1.Wxhxt:我们将输入xt和一个权重矩阵Wxh作点积运算。你能将此点积运算作为隐藏层从输入中提取信息的一种方式。

2.Whhht−1:这个点积运算允许网络从过去的一律历史输入中提取信息,并和当前输入所收集到的信息组合在一起,来计算其输出。这是递归神经网络最关键的一个自己设置属性。

3.f和g是激活函数,将点积运算压缩到肯定的范围内。函数f通常是tanh或者ReLU。当我们希望输出是某个类别的概率时,函数g通常是一个softmax。

4.b1和b2表示输出和原值之间的偏差(相似于线性函数ax+b中的b)。

正如你所看到的那样,Vanilla递归神经网络模型非常简单。我们一旦定义了它的架构,即可以像正常的神经网络一样训练递归神经网络,即初始化权重矩阵和偏差,定义损失函数并消耗某种形式的梯度下降将损失函数最小化。

以上为译文。

本文由阿里云云栖社区组织翻译。

文章原标题《Understanding Recurrent Neural Networks - Part I》,译者:Mags,审校:袁虎。

介绍请阅读原文

网友评论