作家
登录

如何用PyTorch实现递归神经网络?

作者: 来源: 2017-04-26 13:03:04 阅读 我要评论

大年夜 Siri 到谷歌翻译,深度神经收集已经在机械懂得天然说话方面取得了巨大年夜冲破。这些模型大年夜多半将说话视为单调的单词或字符序列,并应用一种称为轮回神经收集(recurrent neural network/RNN)的模型来处理该序列。然则很多说话学家认为说话最好被懂得为具有树形构造的层次化词组,一种被称为递归神经收集(recursive neural network)的深度进修模型推敲到了这种构造,这方面已经有大年夜量的研究。固然这些模型异常难以实现且效力很低,然则一个全新的深度进修框架 PyTorch 能使它们和其它复杂的天然说话处理模型变得加倍轻易。

固然递归神经收集很好地显示了 PyTorch 的灵活性,但它也广泛支撑其它的各类深度进修框架,特其余是,它可以或许对计算机视觉(computer vision)计算供给强大年夜的支撑。PyTorch 是 Facebook AI Research 和其它几个实验室的开辟人员的结不雅,该框架结合了 Torch7 高效灵活的 GPU 加快后端库与直不雅的 Python 前端,它的特点是快速成形、代码可读和支撑最广泛的深度进修模型。

开端 SPINN

链接中的文┞仿(https://github.com/jekbradbury/examples/tree/spinn/snli)具体介绍了一个递归神经收集的 PyTorch 实现,它具有一个轮回跟踪器(recurrent tracker)和 TreeLSTM 节点,也称为 SPINN——SPINN 是深度进修模型用于天然说话处理的一个例子,它很难经由过程很多风行的框架构建。这里的模型实现部分应用了批处理(batch),所以它可以应用 GPU 加快,使得运行速度明雕刻于不应用批处理的版本。

SPINN 的意思是客栈加强的解析器-说冥器神经收集(Stack-augmented Parser-Interpreter Neural Network),由 Bowman 等人于 2016 年作为解决天然说话推理义务的一种办法惹人,该论文中应用了斯坦福大年夜学的 SNLI 数据集。

官方教程包含 60 分钟的介绍和深度 Q-进修(Deep Q-Learning,一种现代强化进修模型)的练习训练。斯坦福的 Justin Johnson 传授有一个异常周全的教程,官方法例还包含——深度卷积生查对抗收集(DCGAN)、ImageNet 模型和神经机械翻译模型(neural machine translation)。新加坡国立大年夜学的 Richie Ng 制造了最新的其它 PyTorch 实现、示例和教程的列表。PyTorch 开发人员和用户社区在评论辩论论坛上的第一时光答复问题,但你应当起首检查 API 文档。

该义务是将语句对分为三类:假设语句 1 是一幅看不见的图像的精确标题,那么竽暌癸句 2(a)肯定(b)可能照样(c)绝对不是一个精确的标题?(这些类分别被称为蕴含(entailment)、中立(neutral)和抵触(contradiction))。例如,假设一句话是「两只狗正跑过一片场地」,蕴含可能会使这个语句对变成「户外的动物」,中立可能会使这个语句对变成「一些小狗正在跑测验测验图抓住一根棍子」,抵触能会使这个语句对变成「宠物正坐在沙发上」。

特别地,研究 SPINN 的初始目标是在肯定语句的关系之前将每个句子编码(encoding)成固定长度的向量表示(也有其它方法,例如留意模型(attention model)中将每个句子的每个部分用一种柔焦(soft focus)的办法互相比较)。

数据集是用句法解析树(syntactic parse tree)办法由机械生成的,句法解析树将每个句子中的单词分构成具有自力意义的短语和子句,每个短语由两个词或子短语构成。很多说话学家认为,仁攀类经由过程如膳绫擎所说的树的分层方法来组合词意并懂得说话,所以用雷同的方法测验测验构建一个神经收集是值得的。下面的例子是数据集中的一个句子,其解析树由嵌套括号表示:

  1. ( ( The church ) ( ( has ( cracks ( in ( the ceiling ) ) ) ) . ) ) 
  1. X = Reduce(“the”, “ceiling”) 
  2. Y = Reduce(“in”, X) 
  3. ... etc. 

然则,如不雅我欲望收集以更类似仁攀类的方法工作,大年夜左到右浏览并保存句子的语境,同时仍然应用解析树组合短语?或者,如不雅我想练习一个收集来构建本身的解析树,让解析树根据它看到的单词攫取句子?这是一个同样的但方法略有不合的解析树的写法:

  1. The church ) has cracks in the ceiling ) ) ) ) . ) ) 

或者用第 3 种方法表示,如下:

我所做的只是删除开括号,然后用「S」标记「shift」,并用「R」调换闭括号用于「reduce」。然则如今可以大年夜左到右攫守信息作为一组指令来操作一个客栈(stack)和一个类似客栈的缓冲区(buffer),能获得与上述递归办法完全雷同的结不雅:

  1. 将单词放入缓冲区。
  2. 大年夜缓冲区的前部弹出「The」,将其推送(push)到客栈上层,紧接着是「church」。
  3. 弹出前 2 个客栈值,应用于 Reduce,然后将结不雅推送回客栈。
  4. 大年夜缓冲区弹出「has」,然后推送到客栈,然后是「cracks」,然后是「in」,然后是「the」,然后是「ceiling」。
  5. 反复四次:弹出 2 个客栈值,应用于 Reduce,然后推送结不雅。
  6. 大年夜缓冲区弹出「.」,然后推送到客栈上层。
  7. 反复两次:弹出 2 个客栈值,应用于 Reduce,然后推送结不雅。
  8. 弹出残剩的客栈值,并将其作为句子编码返回。
  1. context[t+1] = Tracker(context[t], b, s1, s2) 
     1/9    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      未来的人们,将会如何看待我们现在的机器人?

    【义务编辑:wangxueyan TEL:(010)68476606】 >>>详细阅读


    本文标题:如何用PyTorch实现递归神经网络?

    地址:http://www.17bianji.com/lsqh/34965.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)