神经网络与深度学习总结(4)

1.概述

这一周主要的内容就是自然语言处理和循环神经网络。

本文参考了邱锡鹏老师的《神经网络与深度学习》,app store上同名软件的演示以及《动手学深度学习》。

2.循环神经网络

这是循环神经网络的基本结构,与卷积神经网络相似,我们把神经网络当成一个函数来理解。循环神经网络的特点就是加入了隐藏层,为了更清楚地看明白函数的输入输出,我们把它按时间展开,如下图所示。

对于输出y_{t},输入为h_{t}。而h_{t}的输入有两个,分别是x_{t},h_{t-1}

综上所述,函数关系如下

y_{t}=Vf(Uh_{t-1}+Wx_{t}+b)

其中,V,U,W,b为网络给定的参数,另外这些参数(权值)在时间层面上时共享的。

这样简单的循环神经网络就介绍完了。循环神经网络最开始就是为了解决序列输入的问题,因为无论是多层感知器(MLP)还是卷积神经网络都没法处理不定长的序列输入。所谓的序列输入可以简单抽象理解成离散输入的一长串数字(在自然语言处理中会再详细讲这一过程)。

而循环神经网络因其具有记忆能力,可以通过理想的参数设置使网络“不忘记”之前的参数,进而处理这些按时间先后输入的离散数据。最直接的应用场景就是机器翻译,文本(句子)是单词按先后顺序排列的离散输入,输出同样是序列。也就是常说的序列到序列(Seq2Seq)。

3.门控循环神经网络LSTM和GRU

循环神经网络理论上可以通过隐藏层不断传递之前的数据,可实际上在训练过程中很容易出现长程依赖问题(Long-Term Dependencies)。可以简单理解成循环神经网络只具备短期记忆,而在长数据中开始输入的数据会渐渐丢失。

导致这一问题的原因有很多,最主要的可以归结为梯度消失和梯度爆炸。因为循环神经网络同样采用梯度下降的方法实现参数更新,而长程数据很可能因为梯度消失和爆炸而无法得到保留。

针对这一问题,就提出了长短期记忆网络LSTM,而门控循环神经网络GRU则是对LSTM的简化。

这里推荐一篇博客。把LSTM的结构讲得很清楚。不过这里我还是按自己的理解简述一下。

http://t.csdnimg.cn/uuY64

既然叫门控,就先弄清楚门的概念。学过数电模电的同学应该很熟悉,与门,非门,本质上也是一种函数关系,晶闸管就是可控元件。扯远了,理解成函数关系以后,我们来看看LSTM的几个可控门。

LSTM在可控门外还添加了一种除了h外的隐藏层,称为细胞状态c(感觉就是这些乱七八糟的专有名词让理解变难了)。这个隐藏层和h一样逐层传递,如下图所示。​​​​​​​

遗忘门f:控制上一个时刻的细胞状态需要遗忘多少信息

输入门i:控制当前候选细胞状态有多少信息需要保留

输出门o:控制当前时刻的细胞状态有多少信息需要输出给外部状态h

整个LSTM网络的公式如下所示。

其实对序列输入x和外部状态h进行向量拼接就是为了使参数变成一个W,拆开来看的话可以和简单循环神经网络一样理解。

简单粗暴地把整个LSTM理解成函数的话,如下视频所示。

LSTM演示视频​​​​​​​

输入有三项x_{t},h_{t-1},c_{t-1},理论输出为h_{t},c_{t},不过c_{t}并不直接输出。

接下来简单看一下GRU的网络结构

把遗忘门和输入门进行了融合,而且取消了细胞状态而简化了LSTM。输入输出和简单的循环神经网络一致。

4.自然语言处理

这里只是简单扩充一下NLP的相关知识,不做深入分析。

4.1Embedding:将符号转换为数值

符号是对一个具体对象的引用。比如“老虎”,这个词是一个符号,但是它却包含了很多信息,比如它指的是一种哺乳动物,它有4条腿,2个眼睛,它有寿命、有体重等等。

“老虎”这个词本身没有存储很多信息,但是它背后却代表了很多信息。可以用Python的“dict”类型来描述这种关系。

{
  "tiger": {
    "legs": 4,
    "eyes": 2,
    "life": 25,
    ...
  }
}
符号本身相当于dict中的key,可以通过符号找到它所代表的对象,也就是dict中的key对应的value。

在Embedding模块中有一个二维数组,假设有如下数据。

在Embedding内部可以这样表示:

[
  [4.0, 2.0, 25.0],
  [10.0, 2.0, 3.0],
  ...
]
当输入数字0时,Embedding就会取出向量[4.0, 2.0, 25.0],将数字0转换为数值。

这里的0代表的是数组的索引,只要再用一个字典,就可以将符号转换为索引,然后就可以通过Embedding将索引转换为数值,最终完成符号向数值的转换。

{
  "tiger": 0,
  "crab": 1,
  ...
}
Embedding将每一个整型数字转化为一个向量。

主要有两个参数,num_embeddings和embedding_dim分别代表内部二维数组的行和列数量,以上面的例子来说就是动物的种类数和每种动物的信息条目数。

4.2实体识别

这里的实体指的是文本中出现的一些重要对象,比如人名、公司名、时间、地点等。

这里就要说一下token的概念了,因为存在基于字符和基于单词的两种处理方式,我们将它们统称为token,即最小的处理样本。

实体识别的整个架构可以分为三个部分,特征表示,特征编码,标签解码。

特征表示就是对token进行embedding。

特征编码主要是对输入的分布式表示信息进行变换,提取句子的语义信息。常用的特征提取器有CNN,RNN,Transformer等模型。

标签解码是实体识别的最后一步,它的主要目标是对输入的每个token输出一个标签类别。总结为四种解码方式:多层感知机;条件随机场;循环神经网络;指针网络

这只是自然语言处理的一个例子,以后有空再深入了解下其他更复杂的任务和框架,比如BERT之类的。

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值