也就是从 201四、15 年起,咱们基于深度神经网络的应用就已经在文本和语音识别领域达到 95% 的准确率,能够用来开发新一代的聊天机器人、我的助理和即时翻译系统等。微信
卷积神经网络(Convolutional Neural Nets, CNNs)是图像和视频识别领域公认的主力军,而循环神经网络(Recurrent Neural Nets, RNNs)在天然语言处理领域的地位与其是类似的。网络
但两者的一个主要不一样是,CNN 能够识别静态图像(或以帧分割的视频)中的特征,而 RNN 在文本和语音方面表现出色,由于这类问题属于序列或时间依赖问题。也就是说,待预测的后一个字符或单词依赖于前面的(从左到右)字符或单词,所以引入时间的概念,进而考虑到序列。架构
实际上,RNN 在全部的序列问题上都有良好表现,包括语音 / 文本识别、机器翻译、手写体识别、序列数据分析(预测),甚至不一样配置下的自动编码生成等等。函数
在很短的一段时期里,RNN 的改进版本大行其道,其中包括 LSTM(long short term memory,长短时间记忆网络)和 GRU(gated recurring units,门循环单元)。这两者都改进了 RNN 的记忆范围,令数据能够将距离其很远的文本信息利用起来。学习
当 RNN 从左到右按顺序读取字符时,上下文就成了一个重要问题。好比,对一条评论进行情感分析时,刚开始的几句话多是正面的(例如,食物好,气氛好)但以负面评论结束(如服务差,价格高),最后整条评论其实是负面的。这其实在逻辑上等同于“才怪”的玩笑:“这个领带看着不错……才怪!”编码
这个问题的解决方案是使用两个 LSTM 编码器,同时从两个方向读取文本(即双向编码器)。这至关于在如今掌握了(文本的)将来信息。这很大程度上解决了问题。精度确实提升了。人工智能
早些年,当 Facebook 和 Google 发布各自的自动语言翻译系统时,他们意识到了一个问题——翻译耗时太长了。lua
这其实是 RNN 在内部设计上存在的一个问题。因为网络一次只读取、解析输入文本中的一个单词(或字符),深度神经网络必须等前一个单词处理完,才能进行下一个单词的处理。翻译
这意味着 RNN 不能像 CNN 那样进行大规模并行处理(massive parallel processing,MPP),特别是在 RNN/LSTM 对文本进行双向处理时。设计
这也意味着 RNN 极度地计算密集,由于在整个任务运行完成以前,必须保存全部的中间结果。
2017 年初,Google 和 Facebook 针对该问题提出了类似的解决方案——在机器翻译系统中使用 CNN,以便将大规模并行处理的优点发挥出来。在 CNN 中,计算不依赖于以前时间的信息,所以每一个计算都是独立的,能够并行起来。
Google 的解决方案叫作 ByteNet,而 Facebook 的称为 FairSeq(这是用 Facebook 内部的人工智能研究团队 FAIR 来命名的)。FairSeq 的代码已发布至 GitHub。
Facebook 称他们的 FairSeq 网络的运行速度比基本的 RNN 快 9 倍。
CNN 在处理图像时,将图像看做一个二维的“块”(高度和宽度);迁移到文本处理上,就能够将文本看做一个一维对象(高度 1 个单位,长度 n 个单位)。
但 RNN 不能直接预约义对象长度,而 CNN 须要长度信息。所以,要使用 CNN,咱们必须不断增长层数,直到整个感觉野都被覆盖为止。这种作法会让 CNN 很是深,可是得益于大规模并行处理的优点,不管网络多深,均可以进行并行处理,节省大量时间。
固然,具体的解决方案不会像上面所说的那样简单。Google 和 Facebook 还向网络中添加了一个特殊结构:“注意力(Attention)”函数。
最初的注意力函数是去年由 Google Brain 和多伦多大学的研究者们提出的,命名为变换器(Transformer)。
原论文连接:
https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf。
当时,Facebook 和 Google 使用的函数几乎如出一辙,所以该函数备受关注,被称为“注意力”函数。该函数有两个独特的特征。
第一个特征被 Facebook 称为“多跳跃”。和传统 RNN 方法的每一个句子只“看”一次不一样,多跳跃让系统能够“瞥”一个句子“好多眼”。这种行为和人工翻译更类似。
每“一瞥”可能会关注某个名词或动词,而这些词并不必定是一个序列,所以在每一次迭代中能够更深刻地理解其含义。每“瞥”之间多是独立的,也可能依赖于前面的“瞥”,而后去关注相关的形容词、副词或助动词等。
上图是 Facebook 给出的一个法英翻译的例子,展现了第一次迭代的过程。该次迭代编码了每个法语单词,而后用“多跳跃”的方法选择最合适的英文翻译。
第二个特征是选通(即门控制),用来控制各隐藏层之间的信息流。在上下文理解过程当中,门经过对 CNN 的尺度控制,来判断哪些信息能更好地预测下一个单词。
至 2017 年中旬,Facebook 和 Google 已经经过使用 CNN 和注意力函数,彻底解决了机器翻译的时间效率问题。而更重要的一个问题是,这种技术大有用武之地,不能将其埋没在加速机器翻译的小小任务中。咱们可否将其推广到全部适用于 RNN 的问题?答案是,固然能够。
2017 年,相关的研究发表了不少;其中有些几乎是和 Facebook、Google 同时发表的。其中一个叙述比较全面的论文是 Shaojie Bai、J. Zico Kolter 和 Vladlen Koltun 发表的“An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling”。
原文连接:https://arxiv.org/pdf/1803.01271.pdf。
有些同仁将这种新架构命名为时间卷积网络。固然随着工业上的应用,这个名称有可能会被更改。
上述论文所作的工做是在 11 个不一样的、非语言翻译类的工业标准 RNN 问题上,将 TCN 与 RNN、LSTM、GRU 进行了直接比较。
研究的结论是:TCN 在其中的 9 个问题中,不只速度更快,且精度更高;在 1 个问题中与 GRU 打了平手(下表中的粗体文字表明精度最高项。图片截取自原论文)。
Shaojie Bai、J. Zico Kolter 和 Vladlen Koltun 还给出了下面这一实用的列表,列举了 TCN 的优缺点。
速度很重要。更快的网络能使反馈环更短。因为在 TCN 中能够进行大规模并行处理,网络训练和验证的时间都会变短。
TCN 为改变感觉野大小提供了更多灵活性,主要是经过堆叠更多的卷积层、使用更大的膨胀系数及增大滤波器大小。这些操做能够更好地控制模型的记忆长短。
TCN 的反向传播路径和序列的时间方向不一样。这避免了 RNN 中常常出现的梯度爆炸或梯度消失问题。
训练时须要的内存更少,尤为是对于长输入序列。
然而,做者指出,TCN 在迁移学习方面可能没有 CNN 的适应能力那么强。这是由于在不一样的领域,模型预测所须要的历史信息量多是不一样的。所以,在将一个模型从一个对记忆信息需求量少的问题迁移到一个须要更长记忆的问题上时,TCN 可能会表现得不好,由于其感觉野不够大。
进一步考虑TCN 已经被应用在不少重要领域,也得到了极大成功,甚至几乎能够解决一切序列问题。所以,咱们须要从新考虑咱们以前的见解。序列问题再也不是 RNN 的专属领域,而 TCN 应该成为咱们将来项目的优先选项。
关于做者:Bill Vorhies,数据科学中心主编,数据科学家,自 2001 年起就开始从事数据科学领域相关职业。邮箱:Bill@DataScienceCentral.com。
本文首发于 Data Science Central,原文连接:
https://www.datasciencecentral.com/profiles/blogs/temporal-convolutional-nets-tcns-take-over-from-rnns-for-nlp-pred