障碍6:RNN很慢
作为最重要的积木之一,RNN成为很多NLP系统的性能瓶颈。
解决方案
Quasi-Recurrent Neural Networks by James Bradbury, Stephen Merity, Caiming Xiong & Richard Socher (ICLR 2017)这篇论文提出综合CNN和RNN的优点,得到一种叫做QRNN的模型。
RNN每个时刻需要等前一个时刻计算完毕,所以无法并行化。QRNN先将所有输入相邻两个拼成一行(这是为什么叫Quasi的原因),得到一个大矩阵乘上$W$,于是可以在时间上并行化。在计算隐藏状态的时候,虽然无法在时间上并行化,但可以在特征维度上并行化。
效果
效果比一些实现更好,但速度总是更快,最高16倍的加速比。
障碍7:架构研究很慢
(跟刚才说的手工设计特征->手工设计架构一样)能不能让深度学习模型自动设计架构呢?
Neural architecture search with reinforcement learning by Zoph and Le, 2016做了一点这样的研究,虽然无法自动设计QRNN、DMN这样的复杂架构,但好歹可以“设计”一些诸如隐藏层数、单元数等超参数。
由RNN以$p$采样一个架构,然后训练它得到准确率$R$,计算$p$的梯度乘上$R$更新controller。由于选择架构是一个离散的决策,所以实际上无法得到梯度,得用强化学习来训练。
其工作的效果如下,对CNN可以自动选择过滤器的个数、宽高等参数:
结果
刚刚介绍了pointer sentinel LSTM将困惑度降到70,这个方法迅速地将数字逼近60……
这是search出来的一个单元:
有够复杂的。
总结:NLP受到很多限制
-
无法做有目的的QA
-
无法用通用架构联合训练多任务
-
很难综合多元逻辑与基于记忆的推理
-
需要很多数据,无法从少量数据展开想象
还有很多极限等待挑战,对这门课来讲,恭喜通关!