主要内容
- input encoding for natural language tasks
- feed-forward networks
- convolutional networks,
- recurrent networks
- recursive networks
- the computation graph abstraction for automatic gradient computation
神经网络中的术语
- feature:concrete, linguistic input
- input vector: the actual input that is fed to the neural-network classifier
- input vector entry: a specific value of the input
数学符号
- 加粗大写字母(X,Y, Z ) 表示矩阵
- 加粗小写字母代表向量 b
- W1表示神经网络中的第一层
- (W)2 (W1)2 矩阵的幂
- [v1;v2] 表示向量连接
神经网络架构
- feed-forward networks
-
include networks with
fully connected layers,such as the
multi-layer perceptron, as well as
networks with convolutional and pooling layers. All of the networks act as classifiers, but each with different strengths.
-
Fully connected feed-forward neural networks
- can be used as a drop-in replacement(替代品) wherever a linear learner is used
- The non-linearity of the network, as well as the ability to easily integrate pre-trained word embeddings, often lead to superior classification accuracy(非线性网络以及容易集成预训练的字嵌入能力,通常可以提高分类的准确性)
- As a classifier replacement,provide benefits for CCG supertagging, dialog state tracking, pre-ordering for statistical machine translation and language modeling.
-
Networks with convolutional and pooling layers
- are useful for classification tasks in which we expect to find strong local clues regarding class membership, but these clues can appear in different places in the input
- allow the model to learn to find such local indicators,regardless of their position.
- show promising results(有希望的结果) on many tasks, including document classification,short-text categorization(短文本分类),sentiment classification,relation type classification between entities(实体之间的关系类型分类), event detection, paraphrase identification(释义识别), semantic role labeling(语义角色标注),question answering,predicting box-office revenues of movies based on critic reviews(基于评论的票房预测),modeling text interestingness(建模文本的趣味性),and modeling the relation between character-sequences and part-of-speech tags(模拟字符序列和词性标签之间的关系).
- 缺点:In order to encode arbitrary large items as fixed size vectors capturing their most salient features,it sacrifices most of the structural information.
- 更好的是, Recurrent and recursive architectures, allow us to work with sequences and trees while preserving a lot of the structural information
-
- recursive networks
-
designed to model sequences
- can produce very strong results for language modeling, sequence tagging,machine translation,dependency parsing(依存关系句法分析),sentiment analysis,noisy text normalization(噪杂文本规范化),dialog state tracking,response generation(响应生成),modeling the relation between character sequences and part-of-speech tags
- recurrent networks
-
can handle trees
- can produce state-of-the-art or near state-of-the-art results for constituency and dependency parse re-ranking(选区和依赖解析重排序), discourse parsing(语义关系分类),semantic relation classification(语义关系分类),political ideology detection based on parse trees(政治意识形态检测),sentiment classification,target-dependent sentiment classification(依赖目标的情绪分类),question answering.
特征表示
- a feed-forward neural network 是一个函数 NN(x),其输入是一个din dimensional vector x,输出是doutdimensional output vector
- 该函数作为一个分类器,assigning the input x a degree of membership in one or more of dout classes(为输入x在一个或多个dout类中分配一个隶属度)
- 不再将每个特征表示为唯一维度而是将其表示为密集向量。也就是说,将每个核心特征嵌入到d维空间中,并表示为该空间的向量。然后可以像函数NN的其他参数一样训练这种嵌入。
- 基于前馈神经网络的NLP分类系统的基本架构如下:
- 提取一系列与预测输出项相关的核心语言特征f1,…,fk
- 对于每个感兴趣的特征fi,检索对应的向量v(fi)
- 将这些向量组合成输入向量x
- 将x馈入非线性分类器
- 这个结构的关键在于使用密集型特征向量而不是稀疏特征向量,使用核心特征而不是特征组合
- 对于这些核心特征的表示主要有稀疏和稠密两种表现形式即one-hot和Dense Vectors,如上图所示。其主要区别为:
1)one-hot:每个维度表示一个特征,其特征值是二维的,即若该特征值存在即为1,不存在则为0。每个特征都有其自身的维度。
2)Dense Vectors:每个核心特征代表一个向量,每个输入向量X对应几个输入向量条目。特征到向量的映射来自于嵌入表。每个特征都是d维向量,训练会使得相似的特征具有相似的向量。 - 应用场景
1)如果我们在一个类别中具有相对较少的不同特征,并且我们相信在不同特征之间没有关系,这时采用one-hot表示。
2)如果我们相信在一个组的不同特征之间存在联系,那么此时应该采用Dense Vectors,可以让神经网络弄清楚特征间的相关性并通过共享参数获得一些统计强度
可变数量的特征
- 在很多情况下,特征的数量我们提前是不知道的。因此,我们需要用一个固定长度的向量表示一组无限数量的特征。一种方法就是CBOW(连续词袋),它与传统的词袋表示非常相似但是抛弃了顺序信息。
- CBOW(f1,…,fk) =
- 一个CBOW表示的变体就是权重CBOW,不同的向量有不同的权重:
WCBOW(f1,…,fk) =
:表示不同特征的相对重要性。例如, 可以是TF-IDF分数
距离和位置特征
- 句子中两个词的先行距离可以被看成一个informative feature
- 距离特征编码:将距离分成几组,每一组(bin)与一个d维向量相关联(得到distance-embedding vector),然后将这些向量作为网络中的常规参数去训练
特征组合
- 在神经网络中,特征提取仅涉及核心特征
- 在传统的基于线性模型的神经网络中,功能设计师不仅要手动指定感兴趣的核心特征,还要指定这些特征之间的相互关系。
在线性模型中特征组合很重要,因为他们为输入引入了更多的维度,使得空间数据点更接近线性可分。
?
而在神经网络中定义的非线性的分类器用于寻找指定的特征组合,减少了工程量
-Kernel methods(核方法)允许功能设计师仅指定核心特征,而将特征组合的方面留给学习算法,它允许精确的最优化问题。然而,其运算复杂度与训练的数据量成线性关系,因此不适用于很大的数据集。神经网络的分类的复杂度与训练的数据大小无关,而只与神经网络的大小线性相关。
Dimensionality(维度 )
- 维度随着类成员的数量增加而增长。
- 由于维度对内存需求和处理时间有直接的影响,所以要多尝试几次不同的大小,选择一个在速度和任务准确性上选择一个最好的。
Vector Sharing(特征共享)
- 在一些情况下,一些特征共享相同的词汇表(vocabulary)。
- 对于两个向量,是否共享词汇表是一个经验问题。如果认为单词出现在不同位置时表现不同,那么久使用两个不同的词汇表。否则就共享一个词汇表。
Network’s Output(网络输出)
- 在多类分类问题中,网络的输出是一个k维向量,每个维度代表一个特定输出类的强度。也就是说,输出仍然保持在传统的线性模型中。
- 在第四章中,输出层对应一个d*k维的矩阵。其中,每一列表示d维embeddings,向量表示之间的相似性表示输出类之间模型学习的相似性。
第四章:前馈神经网络
- representation power
- common non-linearities
- loss function
4.1一个典型的神经网络如下图所示:
1)其中,每个圆圈代表一个神经元,射入箭头是神经元的输入,射出箭头是神经元的输出。每个箭头都携带一个权重,代表其重要性。
2)最底层没有传入箭头,是网络的输入层。最顶层没有外出箭头,是网络的输出层。其他层称之为“隐藏层”。神经元中的
代表一个非线性函数,通常是
3)在这个图的表示中,每一个神经元都与下一层的所有神经元相连接,对于类似网络结构称之为完全连接层或者仿射层
4)将具有标量输入和输出的计算单元看作神经元,计算出每个神经元与其权重的乘积,在进行加和,之后通过一个非线性函数对该加和进行运算,得到输出。
5)下面,用一些简洁的数学符号来描述整个运算过程。
- 把输入层看成一个4维的向量x,其上层是一个6维向量(h1)
- h = xW,其中W是一个向量矩阵, 指的是输入行中第i个神经元与其连接的第j个神经元的权重
- 每次向下层传递时,都要经过激活函数g的变换
- 因此,第三层得到的输入为:(g(x****W1))W2
4.2用数学符号表示
- 最简单的神经网络是感知机,是关于输入的一个线性函数:
= xW + b (x∈ ,W∈ , b∈ )
其中,W是权重矩阵,b是偏差项
- 包含一个隐藏层的多层感知机(MLP1):
= g( ) +
(x∈ , ∈ , ∈ , ∈ , ∈ )
- 包含两个隐藏层的多层感知机(如上图所示):
= +
使用中间变量可能更清晰:
= y
y =
1)由每个线性变换产生的向量成为"layer",最外层变换结果成为输出层(其偏差项往往为0),其他线性变换称为"hidden layer"(每个"hidden layer"都要经过一个非线性的激活函数)。
2)具有多个隐藏层的网络称为是深度网络,因此也称深度学习
3)神经网络的每一层将
维向量作为其输入,并将其转换为
维向量。层的维度被视为其输出的维度。对于感知机来说,x的维度是1*
,W的维度是
,b的维度是1*
4)对于
,
- 如果 =1,那么网络的输出是一个标量,以通过输出的值来用于回归(或评分),或者通过查询输出的符号用于二进制分类
- 如果 =k > 1,可以将每一个维度与一个类相关联,并找出具有最大值的维度,以此用于k-class分类。如果输出向量条目为正并且总和为1,则可以将输出看作为类分配上的分布。(这种输出归一化常在输出层上应用,通过softmax变换来实现)
4.3 表现力
- MLP1是一种通用的逼近器,他可以用所需的非零误差逼近一系列函数,包括 有界子集上的所有连续函数,以及从任何有限维离散空间到另一个有限维离散空间的任何函数映射
- 然而,MPL1并不能保证训练算法可以找到生成训练数据的正确函数,也没有说明隐藏层应该有多大。
- 因此,在实践中,我们使用本地搜索算法在相对少量的数据上训练,并且使用相对适中的隐藏层(上限几千)。
4.4 Common Non-linearities(常见的非线性,即激活函数g)
在什么场景下使用哪种非线性函数,目前还没有一个很好的结论,这大多还是一个经验问题。常见的非线性函数大概有如下几种:
- Sigmoid(S型)
σ(x) = , σ(x) [0,1]
- TANH(双曲正切)
tanh(x) = ,tanh(x) [-1,1]
3.HARD TANH(是tanh的近似值,其计算速度更快)
hardtanh(x) =
4.RELU(整流线性单元,易于使用,结果出色)
ReLU(x) = max(0, x) = =
5.根据经验,其工作性能:RELU > tanh > singmoid
注:另外两种的工作性能在不同情况下有很好的非线性
1)Cube:g(x) =
,它在用于预测行动的前馈网络中更有效
2)tanhCube: g(x) = tanh(
+ x), 在用于基于图形的依赖解析器的结构预测中的一个组件更有效。
这些激活功能在某些情况下可以改善性能,但其通用性还不确定
Output Transformations(输出转换)
-
当我们对可能的输出类的概率分布建模感兴趣时,我们可以采用softmax转换,将输出向量转换成为一个非负实数的向量且总和为1,并使其成为k个可能结果的离散概率分布。
x =x1, . . . , xk
softmax(xi) =
-
为了更高效,softmax通常与概率训练目标一起使用,例如交叉熵
-
当softmax应用于没有隐藏层的output时,结果是著名的多项逻辑回归模型,也称最大熵分类器
4.6 Embedding Layers(嵌入层)
-
在NLP应用中,输入向量x由几个嵌入向量组成。我们可以明确x的来源,并将其包含在网络的定义中。我们引入c(·),一个从核心特征到输入向量的函数。
1)c通常提取与每个特征相关联的嵌入向量,并进行连接。x = c(f1, f2, f3) =
= (c( ))
= ( )
= + )) +2)另一个常见的选择是c对嵌入向量求和(假设嵌入向量具有相同的维度)
x = c(f1, f2, f3) =
= (c( ))
= ( )
= + )) + -
假设有一个V个单词的词表,每个词嵌入d维向量 。则可以将向量集合视为| V |×d的嵌入矩阵E,其中每行对应嵌入特征。令:
: 1 x |V|向量,除了一个索引值为1外全为0(该索引对应第i个特征的值)
E将选择相应的E的行,因此,v( )可以用E和 来定义,即:v( ) = E
例如:
= (0,1,0),E=因此,v( ) = ( )
-
类似的,
CBOW( ,…, ) = = ( )E -
然后,网络的输入被认为是一个one-hot向量的集合。虽然这在数学上很好地定义,但是有效的实现通常涉及基于散列的数据结构,将特征映射到它们对应的嵌入向量,而不是通过one-hot表示
-
在本文中,我们将c与网络架构分开:网络的输入始终是密集的实值输入向量,并且在输入传递到网络之前应用c
4.6.2 A Note on Notation(关于符号的注记)
当一个网络的输入是几个向量的的连接时,
1)显式连接:([x;y;z]W+b)
2) 仿射变换:(xU + yV + zW +b),如果矩阵U,V,W彼此不同,那么这两种向量表示等价
4.6.2 A Note on Sparse vs. Dense Features(关于稀疏与密集特征的注记)
- 考虑传统的没有嵌入层的网络,其中
- V是所有可用的特征组合,
- 个特征, V
- 网络输入:x = , x
- 因此第一层(忽略非线性激活函数):
xW + b = ( )W
W ,b
- 这非常类似于在特征上产生CBOW表示的嵌入层,其中矩阵
- W充当嵌入矩阵
- 主要区别在于偏置矢量b的引入,以及嵌入层通常不经历非线性激活而是直接传递到第一层
- 另一个区别是上述情况迫使每个特征接收一个单独的向量(W中的行),而嵌入层提供更大的灵活性,例如允许特征“next word is dog”和“previous word is dog”共享相同的向量。
4.7 Loss Function(损失函数)
训练神经网络时,就像训练线性分类器时一样,需要定义一个损失函数L( ,y),说明当真实输出为y时预测 的丢失( 是网络的输出,y则是真实的输出)。训练的目标是最小化这种损失。
给定真实预期输出y时,损失函数L( ,y)将为网络的输出 指定数值分数(标量)。损失函数可以是将两个向量映射到标量的任意函数,出于优化的实际目的,我们将其局限于可以轻松计算梯度(或子梯度)的函数。下面给出一些常用的Loss Function:
- Hinge(二进制)
- 对于一个二元分类问题,网络的输出是一个单个的标量 ,预期输出y {+1,-1}。
- Hinge loss,也称为边缘损失或SVM loss
- = max(0,1-y* )
- 只有当y* > 0(也就是说,两者同号)时,分类才正确
- 如果y* > 0并且| | 1,那么loss为0。也就是说,二元hinge函数要实行正确的分类,其边界至少为1。
- Hinge (multiclass)
-
=
,网络的输出向量。
y:one-hot vector,正确的output class - 分类规则:选择具有最高分数的class:
prediction = arg max - t= arg
: 正确的的class
k = arg : 最高得分的类
并且使得
那么, = max(0,1 - ( )) - 每当我们需要一个 hard decision rule时并且不需要去模拟类成员概率,该方法就很有效
-
=
,网络的输出向量。
- Log Loss
- 是一个 hinge loss的一个变体,with an infinite margin
- =
- Categorical Cross-Entropy Loss(分类交叉熵)
- 当分数的概率解释理想时,该方法有效
- y =
,在标签1,…,n上代表真正的多项分布
= ,是被sonftmax激活函数转化过的网络输出,表示class membership的条件分布, = P(y = i | x) - 分类交叉熵Loss测量真实标签分布y和预测标签 的不相似性,并定义为交叉熵: = -
- 对于hard classification problems(硬分类问题),其中每个训练示例仅有一个正确的类分配。此时y是一个one-hot vector,表示正确的class,其交叉熵简化为:
= -
其中,t为correct class assignment。 - 目的:将正确的分类的概率质量设置为1。因为分数 使用softmax函数转换并表示条件分布,所以增加the mass assigned to the correct class意味着减少 the mass assigned to all the other classes。
- 益处:不仅能预测 the one-best class label,而且也能预测a distribution over the possible labels。
- 但是要使用分类交叉熵Loss时,必须保证网络输出已经使用softmax进行了转换
- Ranking Losses
-
有时,我们并没有对标签进行监督,而是根据对正确和不正确的条目 进行监督,并且我们要将正确条目的得分高于错误的。当我们只有positive examples时才会出现这样的训练情况,从而我们需要通过破坏一个positive examples来得到一个negative examples。在这种情况下有效的损失函数是margin-based ranking loss,定义如下:
= max
:网络给input vector x的打分
目的:正确的inputs score高于不正确的 -
一个通常的变体是使用ranking loss的log version:
= -
在语言任务中使用ranking hinge loss的例子是,训练导出预训练的字嵌入的辅助任务的训练。我们给出一个正确的单词序列和损坏的单词序列,我们的目标是正确序列的得分高于损坏的。
-
5.Word Embeddings(词嵌入)
神经网络方法的一个重要要组成部分是使用嵌入 - 将每个特征表示为低维空间中的向量。但是这些vector来自于何处?这就是本节要讨论的内容。
5.1 Random Initialization(随机初始化)
- 当有足够的监督训练数据时,可以将特征嵌入视为与其他模型参数相同:将嵌入向量初始化为随机值,并让网络训练程序将它们调整为“good”vectors。
- 执行初始化的方式
- word2vec implementation
将单词向量初始化为[ ]范围内的均匀采样随机数,其中d是维数 - xavier initialization
使用[ ] 的均匀采样值进行初始化
- word2vec implementation
- 在实践中
- 使用随机初始化方法初始化常见特征的嵌入向量,例如词性标签或单个字母
- 使用某种形式的监督或无监督预训练来初始化潜在的稀有特征,例如单个单词的功能。预训练的vector在网络训练过程中被视为fixed vectors或者randomly-initialized vectors
5.2 Supervised Task-Specific Pre-training(监督任务特定的预训练)
- 如果我们对任务A感兴趣,但只有有限数量的标记数据(例如:语法分析)
此时有一个辅助任务B,有更多的标记数据(比如:词性标记) - 我们希望预先训练我们的word vectors,以便它们作为任务B的预测变量表现的更好,然后使用这些训练的向量来训练任务A.
- 在训练任务A时,我们可以将预训练的vector视为fixed,或者将其进一步调整为任务A.另一种选择是将两个目标联合训练