苹果的Siri 和谷歌的语音搜索都使用循环神经网络(RNN),这是一种处理序列数据的尖端方法。它是第一个具有内部存储器来记住输入的算法,使其成为解决涉及连续数据的机器学习问题的理想选择。这是过去几年在深度学习领域取得惊人进步的算法之一。本文解释了循环神经网络的基础知识、最紧迫的问题以及如何解决这些问题。
递归神经网络简介
用于对序列数据建模的深度学习技术是循环神经网络(RNN)。在注意力模型出现之前,RNN 是处理序列数据的标准建议。深度前馈模型可能需要序列中每个元素的特定参数。此外,它可能无法推广到可变长度序列。
循环神经网络对序列的每个元素使用相同的权重,减少参数数量并允许模型泛化到不同长度的序列。由于其设计,RNN 可以推广到结构化数据以及顺序数据,例如地理和图形数据。
与许多其他深度学习技术一样,循环神经网络相对较旧。它们最初是在20 世纪80 年代开发的,但直到最近我们才能够充分发挥其潜力。 20 世纪90 年代长短期记忆(LSTM) 的出现,加上计算能力的提高和现在需要处理的海量数据,使RNN 走到了最前沿。
什么是递归神经网络 (RNN)
在人工智能、机器学习和深度学习领域,神经网络模仿人脑的功能,使计算机程序能够识别模式并解决常见问题。
RNN 是一种可用于对序列数据建模的神经网络。 RNN 由前馈网络组成,其运行方式与人脑类似。简而言之,循环神经网络可以以其他算法无法做到的方式预测连续数据。
标准神经网络的所有输入和输出都是相互独立的,但在某些情况下,需要前一个单词,例如在预测短语中的下一个单词时,因此可以记住前一个单词。必须保留。因此,创建了一个使用隐藏层的RNN 来克服这个问题。 RNN 最重要的组成部分是记住有关序列的特定信息的隐藏状态。
RNN 具有存储有关其计算的所有信息的内存。在所有输入或隐藏层上执行相同的任务会产生相同的结果,因此相同的设置用于所有输入。
传统 RNN 的架构
RNN 是一种具有隐藏状态并可以使用过去的输出作为输入的神经网络。它通常看起来像这样:
RNN 架构可能会根据您尝试解决的问题而有所不同。从只有一种输入和输出到多种(存在差异)。以下是一些RNN 架构示例,可帮助您更好地理解这一点。
1对1:这里只有一对。传统的神经网络使用一对一的架构。一对多:一对多网络中的一个输入可以产生多个输出。例如,音乐制作使用了太多的网络。多对一:在这种情况下,来自不同时间步长的许多输入被组合起来产生一个输出。情感分析和识别使用这样的网络,其中单词序列决定类别标签。多对多:多对多有多种选择。两个输入产生三个输出。机器翻译系统(例如英语到法语或反之亦然)使用多对多网络。
循环神经网络是如何工作的
循环神经网络中的信息通过循环循环到中间隐藏层。
输入层x接收神经网络输入,对其进行处理,并将其传递到中间层。
隐藏层h 有多个隐藏层,每个隐藏层都有自己的激活函数、权重和偏差。当不同隐藏层的不同参数不受先前层的影响时,即当神经网络没有记忆时,可以使用循环神经网络。
不同的激活函数、权重和偏差通过循环神经网络进行归一化,以确保每个隐藏层具有相同的特征。不要构建许多隐藏层,只需创建一个隐藏层并根据需要循环多次即可。
常用激活函数
神经元的激活函数决定神经元是打开还是关闭。非线性函数通常将神经元的输出转换为0 到1 或-1 到1 之间的数字。
以下是一些最常用的功能。
Sigmoid:用公式g(z)=1/(1 + e ^- z)来表示。 Tanh:用公式g(z)=(e^-z e^-z)/(e^-z + e^-z) 来表示。 Relu:用公式g(z)=max(0, z)来表示。
循环神经网络与前馈神经网络
前馈神经网络只有一条从输入层经过隐藏层到输出层的信息流路径。数据在网络中以直线路径流动,不会两次经过同一节点。下图显示了RNN 和前馈神经网络之间的信息流。
前馈神经网络不会记住它们收到的信息,因此它们无法预测接下来会发生什么。前馈网络不知道时间顺序,因为它们只分析当前输入。除了训练之外,我对过去没有任何记忆。
信息通过RNN 循环内的循环传递。在做出决定之前评估您从当前和过去的输入中学到的知识。另一方面,循环神经网络可以通过内部记忆进行回忆。生成输出,复制它,然后将其发送回网络。
时间反向传播 (BPTT)
将反向传播算法应用于以时间序列数据作为输入的循环神经网络称为时间反向传播。
在典型的RNN 中,一次将一个输入发送到网络并获得一个输出。另一方面,反向传播使用当前和先前的输入作为输入。这称为时间步,时间步由同时输入到RNN 的多个时间序列数据点组成。
神经网络的输出用于在训练一定时间并产生输出后计算和收集误差。然后回滚网络并重新计算和调整权重以解决故障。
标准RNN的两个问题
RNN 必须克服两个重要的挑战,但要理解它们,我们首先需要理解什么是梯度。
斜率是相对于输入的偏导数。如果您不知道这意味着什么,请考虑以下内容:斜率量化了当输入轻微变化时函数的输出变化的程度。
函数的斜率也称为梯度。斜率越陡,模型学习的速度就越快,斜率就越高。另一方面,如果斜率为零,则模型停止训练。斜率测量误差变化时所有权重的变化。
爆炸性梯度:当算法无缘无故地给予权重高得离谱的优先级时,就会发生爆炸性梯度。幸运的是,您可以通过截断或压缩梯度轻松解决这个问题。梯度消失:如果梯度值太小,梯度消失,模型停止训练或花费太长时间。这在20 世纪90 年代是一个大问题,而且比爆炸梯度更难解决。幸运的是,Sepp Hochreiter 和Juergen Schmidhuber 的LSTM 概念解决了这个问题。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。