TreeLSTM Sentiment Classification

昨天的周日讨论班讲的是TreeLSTM Sentiment Classification,主讲人:王铭涛

今天我来做一下总结。

下面的图片来自于 王铭涛的ppt

导读

我们一步一步来。先说最基础的RNN结构:

公式为:

就一个简单的隐层h。

但是RNN的缺点是会有梯度爆炸或者梯度消失问题。这里我就不详细解释了。下面推荐阅读有我之前的RNN,LSTM详细讲解,想更深一步了解的可以去看看。

因为这个致命的问题,有人提出了LSTM网络,改善了RNN的缺点,我们来回顾下:

重新添加了输入门i,输出门o,遗忘门f和记忆单元C,外加之前的一个隐层h(此h非RNN的h,公式可见区别,但都是隐层)。

这种普通的LSTM都是解决线性问题的。例如常用的应用之句子分类:

每个词在随着时间序列的增加而不断地依次进入LSTM网络。

这种方法有明显的局限性:当前词的输入需要依赖前一步词的输入。但是如果我当前词要进行运算,而此时前一步词还没有进行计算可怎么办?比如下面的基于依存树的情感分类。(依存树的详细讲解在今晚凌晨的推文。)

TreeLSTM

比如,这是一棵依存树的抽象表达(如果暂时不知道依存树的就把这个当成一棵树):

空白方框就LSTM的一个单元。文本序列为x1,x2,x4,x5,x6。(x3ppt中少画了,谅解)

x是输入的序列,y是每个x输入后经过LSTM一个时间片段的预测输出。我们可以看出(y5你们能看出是哪个),y4的产生依靠于x4的输入,y5的产生依靠于x5的输入,y6的产生依靠于x6的输入;y3产生需要依赖于y4,y5,y6的输入,y2的产生依靠于x2的输入;y1的产生依靠于y2,x1,y3的输入。这个显然就不能用到普通LSTM了。这时候TreeLSTM就登场上了历史舞台,开始绽放放光彩!

既然TreeLSTM和普通LSTM不一样了,那么咱们怎么计算他们呢?

虽说不一样,其实也是有相同的地方。比如普通LSTM当前时间段需要的输入是在执行在本时间段以前就产生了。这样就能一个接一个的运行下去。

TreeLSTM也一样,我们看图:

我们先找y2,y4,y5,y6的产生依赖于的x2,x4,x5,x6都已经存在,那么我们就能通过x2,x4,x5,x6分别过自己的隐层,得到对应的y2,y4,y5,y6;类似的,y2,y3也能相继产生;接着最终的y1也产生了。

计算逻辑

那这样的到底怎么个呢?暂时我知道的有两种方法

前提:

如果当前节点的孩子节点有了值(就是有了y),那么我们就将该孩子节点与当前节点的度去掉。

方法一

当前节点入度为0的时候,也就是计算它的所有准备条件都有了的时候,就能对它进行计算了。

所以,这个方法总结就是入度为0的节点都可以计算,然后更新每个节点的入度,再重复该操作。

方法二

层次遍历。最下面的从最下面的开始计算,最下面的肯定是可以直接计算的。然后刷新,再计算。

这两种方法在自己以后优化batch的时候很有用的。

具体TreeLSTM计算分析

我们找具体找一个分析:

y1的产生依靠于y2,x1,y3的输入。那具体怎么计算的呢?

这里有张计算图,请看:

其中h为LSTM的隐层,c为LSTM的记忆单元。

公式为(在普通LSTM上稍微修改了下):

根据公式,我们来梳理下上面计算图:

h2,h3求和再与x1进行

得到u1。

c2,f2与c3,f3分别按位相乘再求和,再加上u1,i1按位相乘,最后两个和相加即可,得到c1。(i1怎么算,公式里有。)

最后通过该公式

得到隐层h1。

计算loss

每个隐层y都要经过一个线性层,映射到具体的类别上,就是每个x对应一个类别,公式为:

最终的损失函数为:

这个损失函数用的是交叉熵,最后是一个正则化。我之前也讲过,放到下面的推荐里了。

原文发布于微信公众号 - 深度学习自然语言处理(zenRRan)

原文发表时间:2018-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据智能实战

神经网络在关系抽取中的应用

一、关系抽取简介 信息抽取的主要目的是将非结构化或半结构化描述的自然语言文本转化成结构化数据(Structuring),关系抽取是其重要的子任务,主要负责从文本...

333100
来自专栏数据科学学习手札

(数据科学学习手札40)tensorflow实现LSTM时间序列预测

  上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在...

57040
来自专栏深度学习自然语言处理

如何直观地解释 back propagation 算法?

BackPropagation算法是多层神经网络的训练中举足轻重的算法。 简单的理解,它的确就是复合函数的链式法则,但其在实际运算中的意义比链式法则要大的多。 ...

17420
来自专栏深度学习自然语言处理

神经网络基础模型--Logistic Regression的理论和实践

1 概述 Logistic Regression 即 逻辑回归,属于监督学习,输入x(特征数据),输出为0或1(显然是二分类)。为什么要用逻辑回归讲神经...

368150
来自专栏程序猿

数据挖掘算法之决策树算法

数据挖掘算法之 决策树算法 机器学习中,决策树是一个预测模型;它代表的是对象属性值与对象值之间的一种映射关系。树中每个节点表示某个对象,每个分叉路径则...

31450
来自专栏人工智能

【机器学习】彻底搞懂CNN

作者:水奈樾人工智能爱好者 博客专栏:http://www.cnblogs.com/rucwxb/ 上世纪科学家们发现了几个视觉神经特点,视神经具有局部感受野,...

561100
来自专栏YoungGy

机器翻译之Facebook的CNN与Google的Attention

传统的seq2seq facebook的cnn 结构 特点 position embedding 卷积的引入 GLU控制信息的流动 attention goog...

40190
来自专栏深度学习自然语言处理

机器学习之多层感知机理论与实践

阅读大概需要10分钟 作者 Lefteris 翻译 bluepomelo 编辑 zenRRan 有修改 原文链接 http://blog.refu.co/?p=...

48540
来自专栏IT派

经典!构建你的第一个神经网络识别数字

在Keras环境下构建多层感知器模型,对数字图像进行精确识别。模型不消耗大量计算资源,使用了cpu版本的keras,以Tensorflow 作为backende...

37150
来自专栏磐创AI技术团队的专栏

入门 | Tensorflow实战讲解神经网络搭建详细过程

16740

扫码关注云+社区

领取腾讯云代金券