NLP

自然语言处理神经网络模型入门

2018-10-12  本文已影响29人  JackHorse

主要内容

1.神经网络中的术语

数学符号

2.神经网络架构

feed-forward networks
: 包括具有完全连接层的网络,例如多层感知器,以及具有卷积(convolutional )和池化层(pooling)的网络。 All of the networks act as classifiers, but each with different strengths.

递归网络(recursive networks)
: 旨在模拟序列

循环网络
: can handle trees

3.特征表示

3.1可变数量的特征

3.2距离和位置特征

3.4特征组合

3.5维度(Dimensionality )

3.6特征共享(Vector Sharing)

3.7网络输出(Network’s Output)

4.前馈神经网络

本章包括:

4.1一个典型的神经网络如下图所示:

[图片上传失败...(image-559882-1539350214260)]
1)其中,每个圆圈代表一个神经元,射入箭头是神经元的输入,射出箭头是神经元的输出。每个箭头都携带一个权重,代表其重要性。
2)最底层没有传入箭头,是网络的输入层。最顶层没有外出箭头,是网络的输出层。其他层称之为“隐藏层”。神经元中的\int代表一个非线性函数,通常是\frac{1}{1+e^{-xa}}
3)在这个图的表示中,每一个神经元都与下一层的所有神经元相连接,对于类似网络结构称之为完全连接层或者仿射层
4)将具有标量输入和输出的计算单元看作神经元,计算出每个神经元与其权重的乘积,在进行加和,之后通过一个非线性函数对该加和进行运算,得到输出。
5)下面,用一些简洁的数学符号来描述整个运算过程。

  1. 把输入层看成一个4维的向量x,其上层是一个6维向量(h1)
  2. h = xW,其中W是一个向量矩阵,W_{ij}指的是输入行中第i个神经元与其连接的第j个神经元的权重
  3. 每次向下层传递时,都要经过激活函数g的变换
  4. 因此,第三层得到的输入为:(g(x****W1))W2

4.2用数学符号表示

NN_{Perception}(x) = xW + b (x∈R^{d_{in}},W∈R^{d_{in}*d_{out}}, b∈R^{d_{out}}
其中,W是权重矩阵,b是偏差项

NN_{MLP1}(x) = g(xW^{1} + b^{1})W^{2} +b^{2}
(x∈R^{d_{in}},W^{1}R^{d_{in}*d_{1}}, b^{1}R^{d_{1}}, W^{2}R^{d_{1}*d_{2}},b^{2}R^{d_{2}}

NN_{MLP2}(x) = g^{2}(g^{1}(xW^{1} + b^{1})$$W^{2} +b^{2})W^{3}

使用中间变量可能更清晰:

NN_{MLP2}(x) = y
h^{1} = g^{1}(xW^{1} + b^{1})
h^{2} = g^{2}(h^{1}W^{2} + b^{2})
y = h^{2}W^{3}

1)由每个线性变换产生的向量成为"layer",最外层变换结果成为输出层(其偏差项往往为0),其他线性变换称为"hidden layer"(每个"hidden layer"都要经过一个非线性的激活函数)。
2)具有多个隐藏层的网络称为是深度网络,因此也称深度学习
3)神经网络的每一层将d_{in}维向量作为其输入,并将其转换为d_{out}维向量。层的维度被视为其输出的维度。对于感知机来说,x的维度是1d_{in},W的维度是d_{in}*d_{out},b的维度是1d_{out}
4)对于d_{out},

4.3 表现力

4.4 Common Non-linearities(常见的非线性,即激活函数g)

在什么场景下使用哪种非线性函数,目前还没有一个很好的结论,这大多还是一个经验问题。常见的非线性函数大概有如下几种:

  1. Sigmoid(S型)

σ(x) = \frac{1}{1+e^{-x}}, σ(x)\in[0,1]

  1. TANH(双曲正切)

tanh(x) = \frac{e^{2x}-1}{e^{2x}+1},tanh(x)\in[-1,1]

3.HARD TANH(是tanh的近似值,其计算速度更快)

hardtanh(x) = \begin{cases} -1 \qquad & x \lt -1 \\ 1 \qquad & x \gt 1 \\ x \qquad & otherwise \end{cases}

4.RELU(整流线性单元,易于使用,结果出色)

ReLU(x) = max(0, x) = = \begin{cases} 0 \qquad & x \lt 0 \\ x \qquad & otherwise \end{cases}

5.根据经验,其工作性能:RELU > tanh > singmoid

注:另外两种的工作性能在不同情况下有很好的非线性

1)Cube:g(x) = x^{3} ,它在用于预测行动的前馈网络中更有效
2)tanhCube: g(x) = tanh(x^{3} + x), 在用于基于图形的依赖解析器的结构预测中的一个组件更有效。
这些激活功能在某些情况下可以改善性能,但其通用性还不确定

4.5输出转换(Output Transformations)

4.6 嵌入层(Embedding Layers)

4.6.2 关于符号的注记(A Note on Notation)

当一个网络的输入是几个向量的的连接时,
1)显式连接:([x;y;z]W+b)

  1. 仿射变换:(xU + yV + zW +b),如果矩阵U,V,W彼此不同,那么这两种向量表示等价

4.6.3 关于稀疏与密集特征的注记(A Note on Sparse vs. Dense Features)

4.7 损失函数 (Loss Function)

训练神经网络时,就像训练线性分类器时一样,需要定义一个损失函数L(\bar{y},y),说明当真实输出为y时预测\bar{y}的丢失(\bar{y}是网络的输出,y则是真实的输出)。训练的目标是最小化这种损失。

给定真实预期输出y时,损失函数L(\bar{y},y)将为网络的输出\bar{y}指定数值分数(标量)。损失函数可以是将两个向量映射到标量的任意函数,出于优化的实际目的,我们将其局限于可以轻松计算梯度(或子梯度)的函数。下面给出一些常用的Loss Function:

  1. Hinge(二进制)
    • 对于一个二元分类问题,网络的输出是一个单个的标量\bar{y},预期输出y\in{+1,-1}。
    • Hinge loss,也称为边缘损失或SVM loss
    • L_{hinge(binary)}(\bar{y},y) = max(0,1-y*\bar{y})
    • 只有当y*\bar{y} > 0(也就是说,两者同号)时,分类才正确
    • 如果y*\bar{y} > 0并且|\bar{y}| \ge 1,那么loss为0。也就是说,二元hinge函数要实行正确的分类,其边界至少为1。
  2. Hinge (multiclass)
    • \bar{y} = \bar{y}_{1},....,\bar{y}_{n},网络的输出向量。
      y:one-hot vector,正确的output class
    • 分类规则:选择具有最高分数的class:
      prediction = arg max\bar{y}_{i}
    • t= arg max_{i}y_{i} : 正确的的class
      k = arg max_{i\ne t} : 最高得分的类
      并且使得k \ne t
      那么,L_{hinge(multiclass)}(\bar{y},y) = max(0,1 - (\bar{y}_{t} - \bar{y}_{k}))
    • 每当我们需要一个 hard decision rule时并且不需要去模拟类成员概率,该方法就很有效

5.Word Embeddings(词嵌入)

神经网络方法的一个重要要组成部分是使用嵌入 - 将每个特征表示为低维空间中的向量。但是这些vector来自于何处?这就是本节要讨论的内容。

5.1 Random Initialization(随机初始化)

5.2 Supervised Task-Specific Pre-training(有监督的特定任务的预训练)

5.3 Unsupervised Pre-training(无监督的预训练)

5.4 训练目标

1给定一个词w和其上下文c
2)不同的算法会制定不同的辅助任务(auxiliary tasks)
3在所有的case下,每个单词被表示为d维向量,其被初始化为随机值
4)训练模型\rightarrow使其很好地执行辅助任务\rightarrow从而产生用于把词和上下文联系起来的good word embeddings\rightarrow反过来使得相似单词的嵌入向量也彼此相似

  1. 除了观察到的 ”word-context pairs“的集合D之外,还生成了一个"random words and context pairings"的集合\bar{D}
  2. 二元分类的问题是:给定的(w,c)对是否来自集合D?
  3. 这些方法有三个不同之处\begin{cases} 如何构造集合\bar{D} \\ 分类器的结构 \\ 优化的目标 \end{cases}

5.5 上下文的选择

  1. 在这里,文本用于创建辅助任务,其中目的是基于k个先前词的上下文来预测词。
  2. 虽然对语言建模辅助预测问题的训练确实产生了有用的嵌入,但是这种方法受到语言建模任务的约束,其中只允许查看前面的单词。
  3. 如果我们不关心语言建模而只关心最终的嵌入,我们可以通过忽略这个约束并使上下文成为焦点词的对称窗口来做得更好。

5.5.1 窗口方法(Window Approach)

  1. 辅助任务的创建:查看2k + 1个字的序列,其中中间的词被称为是焦点词,焦点词的两边各有k个词,成为context(上下文)
  2. 随后:
    1)创建一个任务,其目标是基于所有上下文的词(用CBOW或矢量连接)来预测焦点词。
    2)或者创建2k个不同的任务(distinct tasks),每个任务将焦点词与不同的上下文词配对。
  3. 2k任务方法被称为Skip-gram模型,基于Skip-gram的方法被证明对于训练是强健和有效的,并且经常产生最先进的结果。

5.5.2 Sentences, Paragraphs or Documents

5.5.3 句法窗口(Syntactic Window)

5.5.4 多种语言(Multilingual)

5.5.5 基于字符和子字表示(Character-Based and Sub-word Representations)

6. 神经网络训练

6.1 随机梯度训练(Stochastic Gradient Training)

6.1.1 Beyond SGD

6.2 计算图抽象(The Computation Graph Abstraction)

6.2.1 正向计算(Forward Computation)

6.2.2 反向计算(Backward Computation)


其中,\frac{∂f_{i}}{∂i}: 是f_{j}π^{-1}(j)对 i 求偏导, i ∈ π^{-1}(j)。该值依赖于f_{j}和它的参数v(a_{1}),...,v(a_{m})(其中a_{1}, . . . , a_{m} = π^{-1}(j)),这些值是在向前传递中计算的。

6.2.3 Software

import pycnn as pc
# model initialization.
model = pc.Model()
pW1 = model.add_parameters((20,150))
pb1 = model.add_parameters(20)
pW2 = model.add_parameters((17,20))
pb2 = model.add_parameters(17)
words = model.add_lookup_parameters((100, 50))
# Building the computation graph:
pc.renew_cg() # create a new graph.
# Wrap the model parameters as graph-nodes.
W1 = pc.parameter(pW1)
b1 = pc.parameter(pb1)
W2 = pc.parameter(pW2)
b2 = pc.parameter(pb2)
def get_index(x): return 1 # place holder
# Generate the embeddings layer.
vthe = pc.lookup(words, get_index("the"))
vblack = pc.lookup(words, get_index("black"))
vdog = pc.lookup(words, get_index("dog"))
# Connect the leaf nodes into a complete graph.
x = pc.concatenate([vthe, vblack, vdog])
output = pc.softmax(W2*(pc.tanh(W1*x)+b1)+b2)
loss = -pc.log(pc.pick(output, 5))
loss_value = loss.forward()
loss.backward() # the gradient is computed
                # and stored in the corresponding
                # parameters.

6.2.4 Implementation Recipe

6.2.5 网络组成(Network Composition)

6.3优化问题

6.3.1 初始化

6.3.2 消失和爆炸的梯度(Vanishing and Exploding Gradients)

6.3.3 饱和和死亡神经元(Saturation and Dead Neurons)

6.3.4 Shuffling

6.3.5 Learning Rate

6.3.6 Minibatches(小批次)

6.4 Regularization(正则化)

7. 级联和多任务学习(Cascading and Multi-task Learning)

7.1模型级联(Model Cascading)

7.2 多任务学习

8.结构化输出预测(Structured Output Prediction)

8.1贪婪的结构预测(Greedy Structured Prediction)

8.2 基于搜索的结构化预测(Search Based Structured Prediction)

8.2.1 Probabilistic Objective (CRF) :概率目标

8.2.2 重新排序(Reranking)

8.2.3 MEMM和混合方法(MEMM and Hybrid Approaches)

上一篇下一篇

猜你喜欢

热点阅读