【读书笔记】【机器学习实战】第十四章:循环神经网络

阅读书籍为《Hands-On Machine Learning with Scikit-Learn & TensorFlow》王静源等翻译的中文译版《机器学习实战,基于 Scikit-Learn 和 TensorFlow》,本文中所有图片均来自于书籍相关部分截图。

RNN是什么

1.循环神经网络擅长预测未来;
2.循环神经网络因其特定结构可以分析时间序列数据,比如预测股票价格起伏,可以在自动驾驶中预测汽车运动轨迹避免事故,可以用来识别语音,情感分析,翻译等工作,甚至可以“创作”。

1.循环神经元

以当前迭代输出作为下一次迭代输入的一部分参与运算,这样输入输出迭代重复的神经元称为循环神经元。单个循环神经元实例如下图所示
在这里插入图片描述
单个实例的循环神经元输出数学表达如下
在这里插入图片描述
其中最外层表达为激活函数,b是偏执项,Xt为当前的迭代的原始输入,Wx是当前迭代输入的权重,Yt-1是上一次迭代的结果,Wy是上次结果的权重值,这样一次次迭代计算,最终的值就与前面所有的输入都有关。
一层循环神经元实例及展开如下图
在这里插入图片描述
输出数学表达如下
在这里插入图片描述
与单个循环神经元的数学表示不同,此表达式中的输入和偏置项为包含当前循环神经层中所有神经元信息的矩阵。比如b,是一个(神经元数目大小的)向量,其中的数值为当前层每个神经元的偏执项的值。

2.记忆单元

有上面的原理和公式可得,循环神经单元在迭代的过程中的输出包含了之前迭代的所有输入。我们将这样的特性称为神经元的“记忆”。
这些能够保存一些时间迭代状态的神经网络称为记忆单元。
由于展现给用户的只是一个神经元的第一次迭代的输入和最后一次迭代的输出,中间的迭代层处于隐藏状态,我们定义这些在时间t迭代的层为隐藏层h(t) = f(h(t-1), X(t)),如下图所示。
在这里插入图片描述
但在一些复杂的记忆单元中有时候会出现隐藏状态和输出不同。

3.输入输出序列

1.序列到序列网络:用于预测股票价格等时间序列比较有效。提供过去N天的价格,输出每一天第二天的价格(n-1到明天)。
在这里插入图片描述
2.序列到向量网络(编码器):输入给网络一个电影评论相关的单词序列,网络会计算并输出这个电影的受欢迎程度评分(-1讨厌到1喜欢)。
在这里插入图片描述
3.向量到序列网络(解码器):输入给网络一个向量信息,比如一副图片,网络会输出图片的标题。
在这里插入图片描述
4.延迟的序列到序列网络(编码器-解码器网络):是以上23类型网络的结合,一般用于机器翻译。
在这里插入图片描述

LSTM长期记忆单元( 对记忆加上“时效”的RNN)

1997年由Sepp Hochreiter 和 Rgen Schmidhuber首次提出,后经Alex Graves, Haim Sak 和 Wojciech Zaremba逐步修改。
LSTM可以快速收敛还可以检测数据中的长期依赖,非常适用于处理时间序列数据。
在这里插入图片描述
LSTM与普通记忆单元的不同:除了输入外普通记忆单元只有h(t-1),但LSTM多了一个C(t-1)(cell (t))。在此我们可以认为h(t)是短期记忆,C(t)是长期记忆。
LSTM工作原理解释
1.从上至下看,我们首先看了最上面的忘记门限:长期记忆C(t-1)经过忘记门限从左至右贯穿网络,忘记门限会根据(不同的规则比如时间长短等)决定要当前迭代的内容是否可以忘记
2.忘记门限的右边的是输入门限:上一次的短期记忆和输入混合,迭代计算后传入输入门限,输入门限会判断当前迭代结果的哪些部分值得被记住,然后将需要记住的内容送往上面与经过遗忘的长期记忆相加构成新的长期记忆也就是输出C(t);
3.新的长期记忆C(t)还会被复制然后经过tanh函数,其结果会被输出门限过滤然后形成新的短期记忆h(t);
模拟新记忆的产生
1.当前输入向量X(t)和一个短期记忆h(t-1)被输入从左至右的四个全连接层分别为f(t)(forget(i)), g(t), i(t)(input(i)), o(t)(output(i));
2.第一个f(t)控制忘记门限:f(t)的输出为(0,1)如果为1,门限打开,反之则关闭。判断当前信息是否不重要;
3.第二个g(t)是主要的处理单元:分析输入数据,由于LSTM没有直接输出,数据的处理结果会经输入门限被部分存储。
4.第三个i(t)控制输入门限:i(t)的输出为(0,1)如果为1,门限打开,反之则关闭。选择重要的部分;
4.第四个o(t)控制输出门限:o(t)的输出为(0,1)如果为1,门限打开,反之则关闭。寻找这次应该输出的长期记忆的部分;
这样可以使得网络可以很好处理任务中的前后关系,当前的任务与之前的哪些任务是相互影响的关系等;
TF调用

lstm_cell = tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)

GRU门限循环单元

2014年由Kyunghyun Cho首次提出;
GRU效果喜人,是LSTM众多简化版本种最著名的一个。
在这里插入图片描述
由原理图可见,GRU将LSTM的长期记忆和短期记忆两个状态向量合并为一个向量h(t);且没有输出门限;一个门限同时控制输入门限和忘记门限:为1时,输入门限打开忘记门限关闭,为0时反之;
TF调用

gru_cell = tf.contrib.rnn.GRUCell(num_units=n_neurons)

LSTM和GRU近些年取得成功的主要原因是在自然语言处理中的应用。接下来我们看看这样的结构如何应用在自然语言处理中。

自然语言处理(LSTM和GRU的成名作)

目前大部分的自然语言处理比如机器翻译,自动总结,语法分析,观点分析等都是基于RNN的。这一节我们将要探究机器翻译的原理。
机器翻译有如下两个主要的技术点:
1.翻译准备阶段:单词嵌入:
一般我们人类会潜意识地将进行情景分类。比如我们会自动将一些名字面包,牛奶,啤酒等归类为饮食,鞋子,衣服,帽子归类为服饰。也会将动词和特定的名词匹配,比如喝,我们就会自动去匹配饮品,穿就会自动匹配服饰。但电脑无法自动的识别和分类什么是食物,什么是服饰。为此我们需要对单词进行某些操作,让其相似的一类可以自动的按类别集中在一起。
最常见的方案就是将单词用一个小而密集的向量代表。这就是单词嵌入。
当单词的描述建立结束后,我们就可以将单词放入网络让网络学习单词的嵌入。训练刚开始的时候嵌入是简单的随机选择,但随着任务的不断执行反向传播会自动的移动嵌入。这就意味着随着训练的不断深入,相似的单词会逐渐的聚集在一起(实现了我们人类潜意识分类的功能),甚至最终会以最有有意义的方式组织起来。比如:单复数,形容词名词,性别等各种轴防止。机器就不会跟智障一样的输出穿面包,喝鞋这种傻屌翻译。
得到嵌入这个部分,我们可以重用其他大佬训练好的,重用预训练层的方法我们在第十一章提到过。
2.翻译阶段:编码器-解码器网络:
先来看一张简单的英翻法的原理图:
在这里插入图片描述
模型解释:
1.我们首先注意到,输入的英文被颠倒的顺序这种机制是为了保证英语句子的第一个单词是最后一个被输入编码器的。因为最后一个单词应该第一个被翻译。
2.需要注意的是网络的输入并不是直接的英语句子,而是单词的整数标识符经过嵌入查询的每个单词嵌入后的那个小而密集的代表向量。单词嵌入的代表向量才是网络的输入。
3.这部分并不是一开始与英文一同输入的数据(但是我也不知道这部分什么时候输入,这个图有点迷)在这里插入图片描述
4.令牌go和eos分别表示句子的起始和结束。
5.在每次训练中解码器并不直接输出结果而是输出可能单词的分数,然后SoftMax层会将分数转化为概率。最终输出概率最大的单词。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页