深度学习——循环序列模型[14]

哪些是序列数据

2. 符号表示

例子:从一句话中识别出名字(named-entity recognization problem,搜索引擎中比如找出新闻人物、时间等应用),输出的0、1表示是否是名字

X是输入,x<t>表示输入的第t个值,y是输出,也有对应的位置。Tx表示输入的长度,Ty表述输出的长度。x(i)<t>表示第i个样本的第t个值

怎么表示输入

建立一个字典dictionary,一般30,000-50,000个,按序排列单词。如下,字典为10,000个词,对于输入,每个词用一个10000维的向量表示。如单词为a,a在字典第一个位置,则向量第一个值为1,其他为0,也称为one-shot

3. RNN模型

为什么不用标准的网络来处理这个问题(每个值分别作为网络的输入):

输入和输出的结果长度不一定相同; 结果不能很好地共享,比如第一个词学到peter为人名,当学到第三个位置也是peter时如果能获得第一个位置的结果也很有用

recurrent neural network模型

从左到右读取输入,把x<1>输入到网络的第一个隐藏层,然后识别出结果y hat,并输出激活值a<1>,当读取到x<2>时,它会利用输入的x<2>以及第一个time-step时间步的结果a<1>来预测结果

右侧的图一般在论文什么中会使用

waa表示:用来计算a,且需要乘以a

wax:用来计算a,后面需要乘以x

RNN的一个缺点:可能只利用前面的信息并不能得出正确的结果,比如第二句话,he said后,并不能很好地判断Teddy是否人名,所以有BRNN

前向传播

一般用tanh激活函数,计算a和y使用的激活函数是不同的。只是一般不特意用不同的符号区分

简化符号表示:把向量堆叠

5. 反向传播

loss函数定义,反向传播backpropagation through time红色的部分

5. RNN不同结构类型

one-to-one:基本的结构

many-to-many:长度相同的

many-to-many:长度不同的,先读入所有输入,然后输出,如机器翻译

one-to-many:序列生成,如输入一个音符,然后输出一串音乐,把中间时间步的输出作为下一步的输入

many-to-one:情感分析,根据一句话来分析他的情感分类,比如好、不好等。所有输入后,最后输出一个结果来判断等级

6. 语言模型

什么是语言模型:判断出输入是某一句话的概率,这里的概率计算为什么用P(y<1>..),而不是用P(x<1>。。)?后面会说

数据的表示:训练集:corpus of english text

建立一个字典,把单词符号化,每个单词为y<t>,对于未知的用UNK表示,结束用EOS表示

第一个输入x<1>为空,输出为P(a), P(ab)...,也就是字典中任一单词为首个单词的概率,用softmax

第二个输入x<2>=y<1>:当正确的首个单词为cats时,第二个单词是任一个的概率,这里用了条件概率P(average|cats)

最后,P(y<1>, y<2>,y<3>) 是各个输出的乘积。所以前面为什么不用x?用y的话会表示前面的输出吧,x只能表示输入?

这里也定义了Loss函数

7. 对新序列进行采样

看看RNN学出了什么,对训练的结果进行采样

采样:对y hat输出根据概率分布随机采样得到一个结果,把采样的结果作为下个的输入。如何判断结束:EOS或规定步数

基于字符的语言模型

每个单词都是识别成字符,上面是基于词汇的语言模型

字符的缺点:数据大,单词间的联系不好

8. 梯度消失问题

比如上面的句子,cat和后面的单复数was是有影响的,如果网络层数很多,就很难影响到

还有梯度消失问题,比较难解决

梯度爆炸问题,可以用梯度剪枝来解决,当判断梯度到一定阈值时就进行调整

8. GRU gated recurrent unit

一个RNN单元

简化的GRU

c 表示memory cell,是记忆细胞,比如记住cat是单/复数

C~<t>是用来更新c<t>人候选值

下面一个是用来更新的门,u表示更新

在下是更新的计算公式

因为tanh有两个部分取值趋近于-1/1,所以不容易出现梯度消失的问题

完整的GRU:

增加一个参数r,来表示c~<t>和c<t-1>之间的关系读

9. LSTM long short term memory

与GRU相比,它有3个门,更加复杂,现在一般做为默认的选择。GRU更简单,更容易建立复杂的网络,速度更快

peephole connection:除了a和x,上一个c<t-1>也会对门值产生影响

这里不再像GRU,c和a不再相等

10. BRNN bidirection RNN双向RNN

例:要判断Teddy是否为人名,不仅要前面的信息,也需要后面的信息

标准的BRNN结构

有从左向右的计算,也有从右向左的计算,构成一个Acyclic graph无环图,最后y hat结果是通过两个方向的激活值来得到

中间的单元可以是标准的RNN,也可以是GRU/LSTM单元

一般NLP问题会使用LSTM单元的BRNN结构

BRNN需要一个完整的句子,如果用于语音识别,就需要等一个人把话都说完才可以。所以这个标准的结构更适合于NLP问题

10. 深层循环神经网络

在原来的时间序列上叠加几层,一般层数不会太多,但是一个时间步中可以有多层,只是水平方向不链接

 

猜你喜欢

转载自www.cnblogs.com/coolqiyu/p/8894682.html
今日推荐