Highway Networks For Sentence Classification

2017 年 9 月 30 日 哈工大SCIR 刘宗林
Highway Networks For Sentence Classification

声明:本文转载自公众号 黑龙江大学自然语言处理实验室,作者为该实验室研究生刘宗林,已获得授权。


导读:本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现Highway Networks。


一 、Highway Networks与Deep Networks的关系


深层神经网络相比于浅层神经网络具有更好的效果,在很多方面都已经取得了很好的效果,特别是在图像处理方面已经取得了很大的突破,然而,伴随着深度的增加,深层神经网络存在的问题也就越大,像大家所熟知的梯度消失问题,这也就造成了训练深层神经网络困难的难题。2015年由Rupesh Kumar Srivastava等人受到LSTM门机制的启发提出的网络结构(Highway Networks)很好的解决了训练深层神经网络的难题,Highway Networks 允许信息高速无阻碍的通过深层神经网络的各层,这样有效的减缓了梯度的问题,使深层神经网络不在仅仅具有浅层神经网络的效果。


二、Deep Networks梯度消失/爆炸(vanishing and exploding gradient)问题


我们先来看一下简单的深层神经网络(仅仅几个隐层)


先把各个层的公式写出来:



我们对W1求导:



其中:


以上公式仅仅是四个隐层的情况,当隐层的数量达到数十层甚至是数百层的情况下,一层一层的反向传播回去,当权值 < 1的时候,反向传播到某一层之后权值近乎不变,相当于输入x的映射,例如,g(t) =〖0.9〗^100已经是很小很小了,这就造成了只有前面几层能够正常的反向传播,后面的那些隐层仅仅相当于输入x的权重的映射,权重不进行更新。反过来,当权值 > 1的时候,会造成梯度爆炸,同样是仅仅前面的几层能更改正常学习,后面的隐层会变得很大。


三、Highway Networks Formula


1. Notation


(.) 操作代表的是矩阵按位相乘

sigmoid函数:


2. Highway Networks formula


对于我们普通的神经网络,用非线性激活函数H将输入的x转换成y,公式1忽略了bias。但是,H不仅仅局限于激活函数,也采用其他的形式,像convolutional和recurrent。



对于Highway Networks神经网络,增加了两个非线性转换层,一个是 T(transform gate) 和一个是 C(carry gate),通俗来讲,T表示输入信息经过convolutional或者是recurrent的信息被转换的部分,C表示的是原始输入信息x保留的部分 ,其中 T=sigmoid(wx + b) 。



为了计算方便,这里定义了 C =  1 - T。



需要注意的是x,y, H, T的维度必须一致,要想保证其维度一致,可以采用sub-sampling或者zero-padding策略,也可以使用普通的线性层改变维度,使其一致。


几个公式相比,公式3要比公式1灵活的多,可以考虑一下特殊的情况,T= 0的时候,y = x,原始输入信息全部保留,不做任何的改变,T = 1的时候,Y = H,原始信息全部转换,不在保留原始信息,仅仅相当于一个普通的神经网络。



四、Highway BiLSTM Networks


1. Highway BiLSTM Networks  Structure Diagram


下图是 Highway BiLSTM Networks 结构图:  input:代表输入的词向量;B:在本任务代表bidirection lstm,代表公式(2)中的 H;T:代表公式(2)中的 T,是Highway Networks中的transform gate;C:代表公式(2)中的 C,是Highway Networks中的carry gate;Layer = n,代表Highway Networks中的第n层;Highway:框出来的代表一层Highway Networks。在这个结构图中,Highway Networks第 n - 1 层的输出作为第n层的输入。



2. Highway BiLSTM Networks  Demo


pytorch搭建神经网络一般需要继承nn.Module这个类,然后实现里面的forward()函数,搭建Highway BiLSTM Networks写了两个类,并使用nn.ModuleList将两个类联系起来:

  class HBiLSTM(nn.Module):  
     def __init__(self, args):      
         super(HBiLSTM, self).__init__()      
         ......  
     def forward(self, x):      
         # 实现Highway BiLSTM Networks的公式      
         ......
  class HBiLSTM_model(nn.Module):   
     def __init__(self, args):      
         super(HBiLSTM_model, self).__init__()      
         ......      
         # args.layer_num_highway 代表Highway BiLSTM Networks有几层      
         self.highway = nn.ModuleList([HBiLSTM(args)
         for _ in range(args.layer_num_highway)])      
         ......
     def forward(self, x):      
         ......      
         # 调用HBiLSTM类的forward()函数      
         for current_layer in self.highway:          
         x, self.hidden = current_layer(x, self.hidden)

HBiLSTM类的forward()函数里面我们实现Highway BiLSTM Networks的的公式。首先我们先来计算H,上文已经说过,H可以是卷积或者是LSTM,在这里,normal_fc就是我们需要的H。

   x, hidden = self.bilstm(x, hidden)       
  # torch.transpose是转置操作      
  normal_fc = torch.transpose(x, 0, 1)

上文提及,x,y,H,T的维度必须保持一致,并且提供了两种策略,这里我们使用一个普通的Linear去转换维度。

  source_x = source_x.contiguous()  
 information_source = source_x.view(source_x.size(0)
                 * source_x.size(1), source_x.size(2))  
 information_source = self.gate_layer(information_source)  
 information_source = information_source.view(source_x.size(0),
                 source_x.size(1), information_source.size(1))

也可以采用zero-padding的策略保证维度一致。

  # you also can choose the strategy that zero-padding  
 zeros = torch.zeros(source_x.size(0), source_x.size(1),
                 carry_layer.size(2) - source_x.size(2))  
 source_x = Variable(torch.cat((zeros, source_x.data), 2))

维度一致之后我们就可以根据我们的公式来写代码了。

  # transformation gate layer in the formula is T  
 transformation_layer = F.sigmoid(information_source)  
 # carry gate layer in the formula is C  
 carry_layer = 1 - transformation_layer  
 # formula Y = H * T + x * C  
 allow_transformation = torch.mul(normal_fc, transformation_layer)  
 allow_carry = torch.mul(information_source, carry_layer)      
 information_flow = torch.add(allow_transformation, allow_carry)

最后的information_flow就是我们的输出,但是,还需要经过转换维度保证维度一致。


注:详细代码请参考Github: https://github.com/bamtercelboo/pytorch_Highway_Networks


五、Highway BiLSTM Networks 实验结果


本次实验任务是使用Highway BiLSTM Networks 完成情感分类任务(一句话的态度分成积极或者是消极),数据来源于Twitter情感分类数据集,以下是数据集中的各个标签的句子个数:



下图是本次实验任务在2-class数据集中的测试结果。图中1-300在Highway BiLSTM Networks中表示Layer = 1,BiLSTM 隐层的维度是300维。  



实验结果:从图中可以看出,简单的多层双向LSTM并没有带来情感分析性能的提升,尤其是是到了10层之后,效果有不如随机的猜测。当用上Highway Networks之后,虽然性能也在逐步的下降,但是下降的幅度有了明显的改善。


References

[1] R. K. Srivastava, K. Greff, and J. Schmidhuber. Highway networks. arXiv:1505.00387, 2015.

[2] R. K. Srivastava, K. Greff, and J. Schmidhuber. Training very deep networks. 1507.06228, 2015.

[3] Julian Georg Zilly, Rupesh Kumar Srivastava, Jan Koutník, and Jürgen Schmidhuber. Recurrent highway networks. arXiv preprint arXiv:1607.03474, 2016.

[4] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.


本期责任编辑: 张伟男

本期编辑:  蔡碧波



“哈工大SCIR”公众号

主编:车万翔

副主编: 张伟男,丁效

责任编辑: 张伟男,丁效,郭江,赵森栋

编辑: 李家琦,赵得志,赵怀鹏,吴洋,刘元兴,蔡碧波


长按下图并点击 “识别图中二维码”,即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公共号:”哈工大SCIR” 。

登录查看更多
4

相关内容

题目: ImageNet Classification with Deep Convolutional Neural Networks

摘要:

我们训练了一个大型的深度卷积神经网络,将LSVRC-2010 ImageNet训练集中的130万幅高分辨率图像分成1000个不同的类。在测试数据上,我们获得了前1名和前5名的错误率,分别为39.7%和18.9%,这比之前的最新结果要好得多。该神经网络有6000万个参数和50万个神经元,由5个卷积层组成,其中一些是最大池化层,还有两个全局连接层,最后是1000路的softmax。为了加快训练速度,我们使用了不饱和的神经元和一个非常高效的卷积网络GPU实现。为了减少全局连通层中的过拟合,我们采用了一种新的正则化方法,该方法被证明是非常有效的。

作者:

Ilya Sutskever是OpenAI的联合创始人和首席科学家,之前是斯坦福大学博士后,研究领域是机器学习,神经网络。

成为VIP会员查看完整内容
0
11

The classification of sentences is very challenging, since sentences contain the limited contextual information. In this paper, we proposed an Attention-Gated Convolutional Neural Network (AGCNN) for sentence classification, which generates attention weights from the feature's context windows of different sizes by using specialized convolution encoders. It makes full use of limited contextual information to extract and enhance the influence of important features in predicting the sentence's category. Experimental results demonstrated that our model can achieve up to 3.1% higher accuracy than standard CNN models, and gain competitive results over the baselines on four out of the six tasks. Besides, we designed an activation function, namely, Natural Logarithm rescaled Rectified Linear Unit (NLReLU). Experiments showed that NLReLU can outperform ReLU and is comparable to other well-known activation functions on AGCNN.

0
4
下载
预览

Text Classification is an important and classical problem in natural language processing. There have been a number of studies that applied convolutional neural networks (convolution on regular grid, e.g., sequence) to classification. However, only a limited number of studies have explored the more flexible graph convolutional neural networks (e.g., convolution on non-grid, e.g., arbitrary graph) for the task. In this work, we propose to use graph convolutional networks for text classification. We build a single text graph for a corpus based on word co-occurrence and document word relations, then learn a Text Graph Convolutional Network (Text GCN) for the corpus. Our Text GCN is initialized with one-hot representation for word and document, it then jointly learns the embeddings for both words and documents, as supervised by the known class labels for documents. Our experimental results on multiple benchmark datasets demonstrate that a vanilla Text GCN without any external word embeddings or knowledge outperforms state-of-the-art methods for text classification. On the other hand, Text GCN also learns predictive word and document embeddings. In addition, experimental results show that the improvement of Text GCN over state-of-the-art comparison methods become more prominent as we lower the percentage of training data, suggesting the robustness of Text GCN to less training data in text classification.

0
12
下载
预览

Memory-based neural networks model temporal data by leveraging an ability to remember information for long periods. It is unclear, however, whether they also have an ability to perform complex relational reasoning with the information they remember. Here, we first confirm our intuitions that standard memory architectures may struggle at tasks that heavily involve an understanding of the ways in which entities are connected -- i.e., tasks involving relational reasoning. We then improve upon these deficits by using a new memory module -- a \textit{Relational Memory Core} (RMC) -- which employs multi-head dot product attention to allow memories to interact. Finally, we test the RMC on a suite of tasks that may profit from more capable relational reasoning across sequential information, and show large gains in RL domains (e.g. Mini PacMan), program evaluation, and language modeling, achieving state-of-the-art results on the WikiText-103, Project Gutenberg, and GigaWord datasets.

0
8
下载
预览

The pre-dominant approach to language modeling to date is based on recurrent neural networks. Their success on this task is often linked to their ability to capture unbounded context. In this paper we develop a finite context approach through stacked convolutions, which can be more efficient since they allow parallelization over sequential tokens. We propose a novel simplified gating mechanism that outperforms Oord et al (2016) and investigate the impact of key architectural decisions. The proposed approach achieves state-of-the-art on the WikiText-103 benchmark, even though it features long-term dependencies, as well as competitive results on the Google Billion Words benchmark. Our model reduces the latency to score a sentence by an order of magnitude compared to a recurrent baseline. To our knowledge, this is the first time a non-recurrent approach is competitive with strong recurrent models on these large scale language tasks.

0
5
下载
预览
小贴士
相关资讯
Graph Neural Networks 综述
计算机视觉life
23+阅读 · 2019年8月13日
三次简化一张图:一招理解LSTM/GRU门控机制
机器之心
15+阅读 · 2018年12月18日
递归神经网络
Datartisan数据工匠
4+阅读 · 2018年8月2日
基础 | GRU神经网络
黑龙江大学自然语言处理实验室
23+阅读 · 2018年3月5日
干货|从LSTM到Seq2Seq
全球人工智能
13+阅读 · 2018年1月9日
Simple Recurrent Unit For Sentence Classification
哈工大SCIR
6+阅读 · 2017年11月29日
TensorFlow seq2seq中的Attention机制(续)
深度学习每日摘要
15+阅读 · 2017年11月16日
BranchOut: Regularization for Online Ensemble Tracking with CNN
统计学习与视觉计算组
9+阅读 · 2017年10月7日
【深度学习基础】4. Recurrent Neural Networks
微信AI
15+阅读 · 2017年7月19日
卷积神经网络(CNN)学习笔记1:基础入门
黑龙江大学自然语言处理实验室
12+阅读 · 2016年6月16日
相关论文
Syntax-Aware Aspect Level Sentiment Classification with Graph Attention Networks
Binxuan Huang,Kathleen M. Carley
8+阅读 · 2019年9月5日
Signed Graph Attention Networks
Junjie Huang,Huawei Shen,Liang Hou,Xueqi Cheng
6+阅读 · 2019年9月5日
A Sensitivity Analysis of Attention-Gated Convolutional Neural Networks for Sentence Classification
Yang Liu,Jianpeng Zhang,Chao Gao,Jinghua Qu,Lixin Ji
4+阅读 · 2019年8月25日
An Attention-Gated Convolutional Neural Network for Sentence Classification
Yang Liu,Lixin Ji,Ruiyang Huang,Tuosiyu Ming,Chao Gao,Jianpeng Zhang
4+阅读 · 2018年12月28日
Liang Yao,Chengsheng Mao,Yuan Luo
12+阅读 · 2018年9月15日
Linfeng Song,Zhiguo Wang,Mo Yu,Yue Zhang,Radu Florian,Daniel Gildea
6+阅读 · 2018年9月6日
Relational recurrent neural networks
Adam Santoro,Ryan Faulkner,David Raposo,Jack Rae,Mike Chrzanowski,Theophane Weber,Daan Wierstra,Oriol Vinyals,Razvan Pascanu,Timothy Lillicrap
8+阅读 · 2018年6月28日
Jing Yu,Yuhang Lu,Zengchang Qin,Yanbing Liu,Jianlong Tan,Li Guo,Weifeng Zhang
3+阅读 · 2018年2月13日
Petar Veličković,Guillem Cucurull,Arantxa Casanova,Adriana Romero,Pietro Liò,Yoshua Bengio
8+阅读 · 2018年2月4日
Yann N. Dauphin,Angela Fan,Michael Auli,David Grangier
5+阅读 · 2017年9月8日
Top
微信扫码咨询专知VIP会员