循环神经网络(RNN)是神经网络家族中的一员,专门用于处理序列数据。例如,考虑以下方程式:
ht = f(ht-1; x)
这个方程式表示网络接收输入x,并将其整合到状态h中,也称为隐藏状态,该状态会被传递到下一个时间步。黑色方块表示单个时间步的延迟。
上述方程之所以称为循环,是因为在时间t的h的定义引用了时间t-1的相同定义。如果想要找到第3个时间步的h值,必须展开方程1,即:
h3 = f(h2; x) = f(f(h1; x); x)
现在,面临一个问题,既然已经有了前馈神经网络(ANN),为什么还要使用RNN呢?让通过一个例子来理解这个问题:
考虑两个句子:“2017年去了印度”和“2017年,去了印度”。如果要求模型提取2017年这个人在哪里的信息,希望它能够识别出2017年这个年份,无论它出现在句子的第二个位置还是第六个位置。
假设将这两个句子提供给前馈神经网络,由于它每一层都有不同的学习权重,模型将尝试在句子的每个位置分别学习所有语言规则,尽管两个句子的意思相同,但它会将它们视为不同的。当存在许多具有相同逻辑含义的句子时,这可能会成为一个问题,并且总是会影响模型的准确性。
注意:RNN在每个时间步共享相同的学习权重,这是RNN的一个重要属性,因此不会遇到上述问题。
RNN将输入序列x值映射到相应的输出序列o值。损失L衡量实际输出y和预测输出o之间的差异。RNN还有输入到隐藏的连接,由权重矩阵U参数化,隐藏到隐藏的连接由权重矩阵W参数化,隐藏到输出的连接由权重矩阵V参数化。然后从时间步t=1到t=n,应用以下方程:
U, V, W是每个时间步共享的权重矩阵。
上述方程也被称为RNN的前向传播,其中b和c是偏置向量,tanh和softmax是激活函数。为了更新权重矩阵U、V、W,计算每个权重矩阵的损失函数梯度,即∂L/∂U、∂L/∂V、∂L/∂W,并借助反向传播算法更新每个权重矩阵。当反向传播算法应用于RNN时,有时也被称为BPTT,即通过时间的反向传播。梯度计算需要网络的前向传播和反向传播,这意味着两个传播的运行时间是O(n),即输入的长度。由于网络的设计本质上是顺序的,算法的运行时间无法进一步减少。
根据目标,可以选择任何损失函数。给定序列x值的总损失是每个时间步损失的总和。
RNN架构的另一个变化是,可以将从隐藏到隐藏状态的循环连接改为从输出到隐藏状态的连接。
注意:这种类型的RNN功能较弱,可以表达的函数集合较小,这是因为所做的连接。由图2表示的RNN是通用的,因为任何可以通过图灵机计算的函数都可以由这种有限大小的循环网络计算。
RNN被用于广泛的领域:
文本摘要:文本摘要是创建代表原始内容最重要和相关信息子集的过程。例如,文本摘要对于想要阅读摘要而不是整个内容的人来说是有用的。如果原始内容对读者没有用,它将节省时间。
语言翻译:几乎所有的语言翻译机器都使用RNN作为后端。它们用于将文本从一种语言转换为另一种语言。输入将是源语言,输出将是用户想要的语言。语言翻译最受欢迎的例子是谷歌翻译。
语言建模和生成文本:语言建模是给语言中的句子分配概率的任务。除了给每个单词序列分配概率外,语言模型还分配给定单词(或单词序列)跟随单词序列的概率。例如,现在每个消息传递器都提供这样的功能,尝试在打字时自动完成句子并显示建议。
聊天机器人:聊天机器人是模拟和处理人类对话的计算机程序。聊天机器人通常像简单的程序一样,用单行响应回答简单的查询,或者像数字助手一样复杂,它们从周围环境学习并发展,收集和处理信息。例如,大多数在线客户服务都有一个聊天机器人,以问答格式回应查询。
生成图像描述:卷积神经网络和循环神经网络的组合可以用来创建一个模型,该模型生成图像及其区域的自然语言描述。该模型将描述图像内部到底发生了什么。
结束语:本文的图片来源于Ian Goodfellow、Yoshua Bengio和Aaron Courville的《深度学习》。希望喜欢阅读这篇文章。如果发现它有用,请在朋友之间分享,或者在社交媒体上分享。对于任何疑问、建议或其他讨论,请在评论中联系,或者通过电子邮件或LinkedIn与联系。