0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

新手的你还在苦苦学习神经网络,看完本文相信你必会恍然大悟

人工智能实训营 2018-07-24 10:40 次阅读


本文简要介绍了什么是循环神经网络及其运行原理,并给出了一个 RNN 实现示例。


什么是循环神经网络(RNN)?它们如何运行?可以用在哪里呢?本文试图回答上述这些问题,还展示了一个 RNN 实现 demo,你可以根据自己的需要进行扩展。


640?wx_fmt=png

循环神经网络架构


基础知识。Python、CNN 知识是必备的。了解 CNN 的相关知识,是为了与 RNN 进行对比:RNN 为什么以及在哪些地方比 CNN 更好。


我们首先从「循环」(Recurrent)这个词说起。为什么将其称为循环?循环的意思是:


经常或重复出现


将这类神经网络称为循环神经网络是因为它对一组序列输入重复进行同样的操作。本文后续部分将讨论这种操作的意义。


我们为什么需要 RNN?


也许你现在想的是,已经有像卷积网络这样表现非常出色的网络了,为什么还需要其他类型的网络呢?有一个需要用到 RNN 的特殊例子。为了解释 RNN,你首先需要了解序列的相关知识,我们先来讲一下序列。


序列是相互依赖的(有限或无限)数据流,比如时间序列数据、信息性的字符串、对话等。在对话中,一个句子可能有一个意思,但是整体的对话可能又是完全不同的意思。股市数据这样的时间序列数据也是,单个数据表示当前价格,但是全天的数据会有不一样的变化,促使我们作出买进或卖出的决定。



当输入数据具有依赖性且是序列模式时,CNN 的结果一般都不太好。CNN 的前一个输入和下一个输入之间没有任何关联。所以所有的输出都是独立的。CNN 接受输入,然后基于训练好的模型输出。如果你运行了 100 个不同的输入,它们中的任何一个输出都不会受之前输出的影响。但想一下如果是文本生成或文本翻译呢?所有生成的单词与之前生成的单词都是独立的(有些情况下与之后的单词也是独立的,这里暂不讨论)。所以你需要有一些基于之前输出的偏向。这就是需要 RNN 的地方。RNN 对之前发生在数据序列中的事是有一定记忆的。这有助于系统获取上下文。理论上讲,RNN 有无限的记忆,这意味着它们有无限回顾的能力。通过回顾可以了解所有之前的输入。但从实际操作中看,它只能回顾最后几步。



本文仅为了与人类大体相关联,而不会做任何决定。本文只是基于之前关于该项目的知识做出了自己的判断(我甚至尚未理解人类大脑的 0.1%)。


何时使用 RNN?


RNN 可用于许多不同的地方。下面是 RNN 应用最多的领域。


1. 语言建模和文本生成


给出一个词语序列,试着预测下一个词语的可能性。这在翻译任务中是很有用的,因为最有可能的句子将是可能性最高的单词组成的句子。


2. 机器翻译


将文本内容从一种语言翻译成其他语言使用了一种或几种形式的 RNN。所有日常使用的实用系统都用了某种高级版本的 RNN。


3. 语音识别


基于输入的声波预测语音片段,从而确定词语。


4. 生成图像描述


RNN 一个非常广泛的应用是理解图像中发生了什么,从而做出合理的描述。这是 CNN 和 RNN 相结合的作用。CNN 做图像分割,RNN 用分割后的数据重建描述。这种应用虽然基本,但可能性是无穷的。


5. 视频标记


可以通过一帧一帧地标记视频进行视频搜索。


深入挖掘


本文按照以下主题进行。每一部分都是基于之前的部分进行的,所以不要跳着读。


  • 前馈网络

  • 循环网络

  • 循环神经元

  • 基于时间的反向传播(BPTT)

  • RNN 实现


前馈网络入门


前馈网络通过在网络的每个节点上做出的一系列操作传递信息。前馈网络每次通过每个层直接向后传递信息。这与其他循环神经网络不同。一般而言,前馈网络接受一个输入并据此产生输出,这也是大多数监督学习的步骤,输出结果可能是一个分类结果。它的行为与 CNN 类似。输出可以是以猫狗等作为标签的类别。


前馈网络是基于一系列预先标注过的数据训练的。训练阶段的目的是减少前馈网络猜类别时的误差。一旦训练完成,我们就可以用训练后的权重对新批次的数据进行分类。


640?wx_fmt=png

一个典型的前馈网络架构


还有一件事要注意。在前馈网络中,无论在测试阶段展示给分类器的图像是什么,都不会改变权重,所以也不会影响第二个决策。这是前馈网络和循环网络之间一个非常大的不同。


与循环网络不同,前馈网络在测试时不会记得之前的输入数据。它们始终是取决于时间点的。它们只会在训练阶段记得历史输入数据。


循环网络


也就是说,循环网络不仅将当前的输入样例作为网络输入,还将它们之前感知到的一并作为输入。


我们试着建立了一个多层感知器。从简单的角度讲,它有一个输入层、一个具备特定激活函数的隐藏层,最终可以得到输出。


640?wx_fmt=png

多层感知器架构示例


如果在上述示例中的层数增加了,输入层也接收输入。那么第一个隐藏层将激活传递到下一个隐藏层上,依此类推。最后到达输出层。每一个隐藏层都有自己的权重和偏置项。现在问题变成了我们可以输入到隐藏层吗?


640?wx_fmt=png


每一层都有自己的权重(W)、偏置项(B)和激活函数(F)。这些层的行为不同,合并它们从技术层面上讲也极具挑战性。为了合并它们,我们将所有层的权重和偏置项替换成相同的值。如下图所示:


640?wx_fmt=png


现在我们就可以将所有层合并在一起了。所有的隐藏层都可以结合在一个循环层中。所以看起来就像下图:


640?wx_fmt=png


我们在每一步都会向隐藏层提供输入。现在一个循环神经元存储了所有之前步的输入,并将这些信息和当前步的输入合并。因此,它还捕获到一些当前数据步和之前步的相关性信息。t-1 步的决策影响到第 t 步做的决策。这很像人类在生活中做决策的方式。我们将当前数据和近期数据结合起来,帮助解决手头的特定问题。这个例子很简单,但从原则上讲这与人类的决策能力是一致的。这让我非常想知道我们作为人类是否真的很智能,或者说我们是否有非常高级的神经网络模型。我们做出的决策只是对生活中收集到的数据进行训练。那么一旦有了能够在合理时间段内存储和计算数据的先进模型和系统时,是否可以数字化大脑呢?所以当我们有了比大脑更好更快的模型(基于数百万人的数据训练出的)时,会发生什么?


另一篇文章(https://deeplearning4j.org/lstm.html)的有趣观点:人总是被自己的行为所困扰。


我们用一个例子来阐述上面的解释,这个例子是预测一系列字母后的下一个字母。想象一个有 8 个字母的单词 namaskar。


namaskar(合十礼):印度表示尊重的传统问候或姿势,将手掌合起置于面前或胸前鞠躬。


如果我们在向网络输入 7 个字母后试着找出第 8 个字母,会发生什么呢?隐藏层会经历 8 次迭代。如果展开网络的话就是一个 8 层的网络,每一层对应一个字母。所以你可以想象一个普通的神经网络被重复了多次。展开的次数与它记得多久之前的数据是直接相关的。


640?wx_fmt=gif


循环神经网络的运作原理


循环神经元


这里我们将更深入地了解负责决策的实际神经元。以之前提到的 namaskar 为例,在给出前 7 个字母后,试着找出第 8 个字母。输入数据的完整词汇表是 {n,a,m,s,k,r}。在真实世界中单词或句子都会更复杂。为了简化问题,我们用的是下面这个简单的词汇表。


640?wx_fmt=png


在上图中,隐藏层或 RNN 块在当前输入和之前的状态中应用了公式。在本例中,namaste 的字母 n 前面什么都没有。所以我们直接使用当前信息推断,并移动到下一个字母 a。在推断字母 a 的过程中,隐藏层应用了上述公式结合当前推断 a 的信息与前面推断 n 的信息。输入在网络中传递的每一个状态都是一个时间步或一步,所以时间步 t 的输入是 a,时间步 t-1 的输入就是 n。将公式同时应用于 n 和 a 后,就得到了一个新状态。


用于当前状态的公式如下所示:


640?wx_fmt=png


h_t 是新状态,h_t-1 是前一个状态。x_t 是时间 t 时的输入。在对之前的时间步应用了相同的公式后,我们已经能感知到之前的输入了。我们将检查 7 个这样的输入,它们在每一步的权重和函数都是相同的。


现在试着以简单的方式定义 f()。我们使用 tanh 激活函数。通过矩阵 W_hh 定义权重,通过矩阵 W_xh 定义输入。公式如下所示:


640?wx_fmt=png


上例只将最后一步作为记忆,因此只与最后一步的数据合并。为了提升网络的记忆能力,并在记忆中保留较长的序列,我们必须在方程中添加更多的状态,如 h_t-2、h_t-3 等。最后输出可以按测试阶段的计算方式进行计算:


640?wx_fmt=png


其中,y_t 是输出。对输出与实际输出进行对比,然后计算出误差值。网络通过反向传播误差来更新权重,进行学习。本文后续部分会对反向传播进行讨论。


基于时间的反向传播算法(BPTT)


本节默认你已经了解了反向传播概念。如果需要对反向传播进行深入了解,请参阅链接:http://cs231n.github.io/optimization-2/。


现在我们了解了 RNN 是如何实际运作的,但是在实际工作中如何训练 RNN 呢?该如何决定每个连接的权重呢?如何初始化这些隐藏单元的权重呢?循环网络的目的是要准确地对序列输入进行分类。这要靠误差值的反向传播和梯度下降来实现。但是前馈网络中使用的标准反向传播无法在此应用。


与有向无环的前馈网络不同,RNN 是循环图,这也是问题所在。在前馈网络中可以计算出之前层的误差导数。但 RNN 的层级排列与前馈网络并不相同。


答案就在之前讨论过的内容中。我们需要展开网络。展开网络使其看起来像前馈网络就可以了。


640?wx_fmt=png

展开 RNN


在每个时间步取出 RNN 的隐藏单元并复制。时间步中的每一次复制就像前馈网络中的一层。在时间步 t+1 中每个时间步 t 层与所有可能的层连接。因此我们对权重进行随机初始化,展开网络,然后在隐藏层中通过反向传播优化权重。通过向最低层传递参数完成初始化。这些参数作为反向传播的一部分也得到了优化。


展开网络的结果是,现在每一层的权重都不同,因此最终会得到不同程度的优化。无法保证基于权重计算出的误差是相等的。所以每一次运行结束时每一层的权重都不同。这是我们绝对不希望看到的。最简单的解决办法是以某种方式将所有层的误差合并到一起。可以对误差值取平均或者求和。通过这种方式,我们可以在所有时间步中使用一层来保持相同的权重。


RNN 实现


本文试着用 Keras 模型实现 RNN。我们试着根据给定的文本预测下一个序列。


该模型是 Yash Katariya 建的。我对该模型做了一些细微的改动以适合本文的要求。



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器视觉
    +关注

    关注

    161

    文章

    4342

    浏览量

    120105
  • 人工智能
    +关注

    关注

    1791

    文章

    46845

    浏览量

    237535
  • 机器学习
    +关注

    关注

    66

    文章

    8377

    浏览量

    132406
  • 机器识别
    +关注

    关注

    1

    文章

    13

    浏览量

    2529
收藏 人收藏

    评论

    相关推荐

    关于卷积神经网络,这些概念厘清了么~

    随着人工智能(AI)技术的快速发展,AI可以越来越多地支持以前无法实现或者难以实现的应用。本文基于此解释了 卷积神经网络 (CNN)及其对人工智能和机器学习的意义。CNN是一种能够从复杂数据中提
    发表于 10-24 13:56

    BP神经网络学习机制

    (Backpropagation Algorithm,简称BP算法)来不断调整网络的权重和阈值,以最小化网络输出与目标值之间的误差。本文将从BP神经网络的基本原理、
    的头像 发表于 07-10 15:49 455次阅读

    BP神经网络和卷积神经网络的关系

    BP神经网络(Backpropagation Neural Network)和卷积神经网络(Convolutional Neural Network,简称CNN)是两种在人工智能和机器学习领域
    的头像 发表于 07-10 15:24 1216次阅读

    BP神经网络和人工神经网络的区别

    BP神经网络和人工神经网络(Artificial Neural Networks,简称ANNs)之间的关系与区别,是神经网络领域中一个基础且重要的话题。本文将从定义、结构、算法、应用及
    的头像 发表于 07-10 15:20 821次阅读

    循环神经网络和卷积神经网络的区别

    循环神经网络(Recurrent Neural Network,RNN)和卷积神经网络(Convolutional Neural Network,CNN)是深度学习领域中两种非常重要的神经网络
    的头像 发表于 07-04 14:24 1115次阅读

    深度神经网络与基本神经网络的区别

    在探讨深度神经网络(Deep Neural Networks, DNNs)与基本神经网络(通常指传统神经网络或前向神经网络)的区别时,我们需要从多个维度进行深入分析。这些维度包括
    的头像 发表于 07-04 13:20 670次阅读

    卷积神经网络与循环神经网络的区别

    在深度学习领域,卷积神经网络(Convolutional Neural Networks, CNN)和循环神经网络(Recurrent Neural Networks, RNN)是两种极其重要
    的头像 发表于 07-03 16:12 2669次阅读

    卷积神经网络训练的是什么

    卷积神经网络(Convolutional Neural Networks,简称CNN)是一种深度学习模型,广泛应用于图像识别、视频分析、自然语言处理等领域。本文将详细介绍卷积神经网络
    的头像 发表于 07-03 09:15 349次阅读

    深度学习与卷积神经网络的应用

    到自然语言处理,深度学习和CNN正逐步改变着我们的生活方式。本文将深入探讨深度学习与卷积神经网络的基本概念、工作原理及其在多个领域的应用,并展望其未来的发展趋势。
    的头像 发表于 07-02 18:19 802次阅读

    卷积神经网络的基本结构及其功能

    卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、视频分析、自然语言处理等领域。本文将详细介绍卷积神经网络的基
    的头像 发表于 07-02 14:45 1172次阅读

    卷积神经网络的原理是什么

    卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、语音识别、自然语言处理等领域。本文将详细介绍卷积神经网络的原
    的头像 发表于 07-02 14:44 560次阅读

    卷积神经网络和bp神经网络的区别

    不同的神经网络模型,它们在结构、原理、应用等方面都存在一定的差异。本文将从多个方面对这两种神经网络进行详细的比较和分析。 引言 神经网络是一种模拟人脑
    的头像 发表于 07-02 14:24 2896次阅读

    神经网络架构有哪些

    神经网络架构是机器学习领域中的核心组成部分,它们模仿了生物神经网络的运作方式,通过复杂的网络结构实现信息的处理、存储和传递。随着深度学习技术
    的头像 发表于 07-01 14:16 609次阅读

    卷积神经网络的优势和应用领域

    说到机器学习,大相信大家自然而然想到的就是现在大热的卷积神经网络,或者换句话来说,深度学习网络。对于这些网络或者模型来说,能够大大降低进入门
    的头像 发表于 01-25 09:25 2063次阅读
    卷积<b class='flag-5'>神经网络</b>的优势和应用领域

    详解深度学习神经网络与卷积神经网络的应用

    处理技术也可以通过深度学习来获得更优异的效果,比如去噪、超分辨率和跟踪算法等。为了跟上时代的步伐,必须对深度学习神经网络技术有所学习和研究。本文
    的头像 发表于 01-11 10:51 1902次阅读
    详解深度<b class='flag-5'>学习</b>、<b class='flag-5'>神经网络</b>与卷积<b class='flag-5'>神经网络</b>的应用