本文来自:集智专栏
作者:Kaiser
系列的第一篇概览了一下深度学习中的基本概念。第二篇介绍了深度学习的历史背景,以及如何高效地训练神经网络。而这一篇当中,我们将一起认识自然语言处理领域的核心:序列学习。
序列学习
生活中的所有事物都是与时间相关的,也就形成了一个序列。为了对序列数据(文本、演讲、视频等)我们可以使用神经网络并导入整个序列,但是这样我们的数据输入尺寸是固定的,局限性就很明显。如果重要的时序特征事件恰好落在输入窗以外,就会产生更大的问题。所以我们需要的是:
能对任意长度序列做逐个元素读取的神经网络(比如视频就是一系列的图片;我们每次给神经网络一张图);
有记忆的神经网络,能够记得若干个时间步以前的事件、这些问题和需求已经催生出多中不同的循环神经网络。
循环神经网络
若我们想让一个常规的神经网络解决两个数相加的问题,那我们只需要输入两个数字,再训练两数之和的预测即可。如果现在有3个数要相加,那么我们可以:
拓展网络架构,添加输入和权重,再重新训练;
把第一次的输出(即两数之和)和第三个数作为输入,再返回给网络。
方案(2)显然更好,因为我们希望避免重新训练整个网络(网络已经“知道”如何将两个数相加)。如果我们的任务变成:先对两数做加法,再减去两个不同的数,那这个方案又不好使了。即使我们使用额外的权重