【happyprince】tensorflow学习小组总结


#1

##week4-RNN##

###1. 李宏毅老师的RNN### https://www.bilibili.com/video/av15889450/index_21.html#page=21 ####1.1 RNN的引入与问题提出#### RNN可以处理含有序列的数据问题,例如定票系中对自然语言处理中的词序列等。

问题提出:当不考虑词的序列时,arrive Taipei on November 2nd与leave Taipei on November on November 2nd建模/训练/结果预测是区别不出这两个不同意思。所以,要寻找一种含有记忆的方法去记住整个句子的意思,并理解句子的意思的不同。

####1.2 RNN是什么及分类#### RNN是Recurrent Neural Networks的简称,即循环神经网络。

为了解决对于序列串的记录问题,RNN引入了一个内存把上一次的结保存下来,像下面的store箭头,是第t时刻的数据为第t+1时刻把数据保存起来,当t+1时刻的数据进来后,把内存数据取出,作为下一时间的输入,与新输入一起计算[计算方法是第t时刻的值与第t+1时刻的值,在给出权值矩阵W下作线性组合计算],如下图。

另外,从网下找到了另一个图,更简单地描述了这个过程:

RNN分类 类1,Elman Network, 这种情况,是把隐含层的值传给下一个时刻。 类2,Jordan Network,把t时刻输出数据作一个保存,并在下面一个时刻传给隐含层。 类3,Bidirectional RNN,这是一个双向的RNN,这种RNN的好处是,在训练的过程中,可以双向一起计算,每个时刻都可以把整个个序列的信息用上。例如,在得出y_t+1这个结果,上面的x_t+1是从x_t+2更前面的的序列值传输有记忆计算得到的;对于下面的x_t+1,是从x_t后面的序列经过值传输有记忆计算得到的。这样,每个结果y_t都采用了整个个序列的所有信息。

###1.3 LSTM讲解### LSTM是Long Short-term Memory的简称。

一个LSTM神经元,同4个input与1个output组成,其中3个input是Gate,1个为输入数据,对于Gate也是由输入数据来进行控制的。激活函数通常选用sigmoid function, sigmoid的输出介于0到1之间,表征了Gate的打开程度。如果程序是同步的,按上图的顺序进行运行。 第一步,由Z输入数据; 第二步,经过函数g,得到g(Z); 第三步,对于输入数据Z,给过权重矩阵作用后,生成Z_i,Z_i进行控制输入; 第四步,经过函数g,得到f(Z_i); 第五步,g(Z)g(Z_i),表示g(Z_i)进行对g(Z)输入进行控制; 第六步,对于输入数据Z,给过权重矩阵作用后,生成Z_f,Z_f进行控制输入; 第七步,经过函数f,得到f(Z_f); 第八步,从内存中取出数据C; 第九步,把C与f(Z_f)结合,得到cf(Z_f),进行控制是否会被忘记之前的数据,形成新的数据C‘; C’ = g(Z)f(Z_i) + cf(Z_f) 第十步,把C’保存到内存中; 第十一步,C‘经过函数h(C’),准备输出; 第十二步,对于输入数据Z,给过权重矩阵作用后,生成Z_o,Z_o进行控制输入; 第十三步,经过函数f,得到f(Z_o); 第十四步,h(C’)爱到f(Z_o)的控制进行输出a=h(C’)f(Z_o); 由上面那个图,把四个输入放在一起,把C内存放在一边,加入多一个时刻: 增加更多的一些关系,最下面的c_t-1,h_t-1,x_t,这三个合并作为输入,然后再与四个不同的矩阵相乘得到4个gates. 同时,再增加一层,形成下如下图:

LSTM是一个典型的模型,当提到RNN时,很多时候,都指的是它。

###1.4 LSTM的学习问题与解决### RNN的学习方法BPTT【BACKpropagation through time】【进一步深入,与其它的梯度一起学习】 问题:RNN的学习不稳定,有时还可以,有时会很不理想;损失函数的表面要么非常平坦,要么非常陡峭(The error surface is either very flat or very steep);当在比较平坦的时候,梯度值会比较小,需要一个比较大的学习率;而当这个学习过程中遇到了陡峭的地方,梯度值会会异常的大,如果用大的学习率去学习时,就会出现下面绿色的曲线了。

解决爆炸问题: 这个问题通过设置阈值去解决。 Razvan Pascanu使用了叫做“Clipping”的训练技巧:为梯度设置阈值,超过该阈值的梯度值都会被cut,这样参数更新的幅度就不会过大(虚线表示的轨迹),因此容易收敛。

爆炸原因是权重累乘,引起了梯度的消失与梯度的爆炸,例如

解决梯度消失问题: 这个问题一般是通过构建神经网络结构解决。 (1)LSTM 可以处理梯度的消失问题,不可以解决梯度的爆炸问题。因为记忆的旧信息与新输入的信息是相加的;另外forget gate 不关闭,梯度是不会消失。 (2) clockwise RNN (3) SCRN[Structurally Constrained Recurrent Network]

###1.5 RNN的应用#### ####1.5.1. Many to one#### Input is a vector sequence, but output is only one vector; #####(1) 应用1:情感分析#####

#####(2) 应用2:Key Term Extraction 关键词抽取#####

####1.5.2. Many to Many#### 输入与输出都是一个序列时。

#####(1) 语音识别【输出比输入短】##### 语音识别—CTC[Connectionist Temporal Classification] Graves, Alex, and Navdeep Jaitly. “Towards end-to-end speech recognition with recurrent neural networks.” Proceedings of the 31st International Conference on Machine Learning (ICML-14). 2014. #####(2)机器翻译##### 输入与输出有不同的长度[Sequence to sequence learning] 机器翻译:这个关联会一直下去,直到遇到了终止符。

另外,英文—>中文[借助语音为中间来翻译,不用识别英文意思] #####(3) 句法分析【Syntactic parsing】##### Syntactic parsing.把语法树描述成一个序列来求解。可以转换过来。 #####(4) Sequence-to-sequence Auto-encodeer##### a. 将文档转换为向量表示【如果用bag of word来描述,会把两句相反的句子理解成同一个意思的。而RNN考虑了序列,序列就有语序,会更鲁棒。】 b. 可以把语音的变长的序列变成定长的向量。 首先把音频段经过训练,变成一个定长的向储存起来;然后,预测时,把语音也经过同样的处理就成一个向量;最后计算这个向量的相似性来达到识别的效果。

下图带有红框的神经元包含了所有语音的信息,这个是完成了Encoder的最终阶段;然后,接入到decoder网络来进行训练,最后这个红框的向量是我们所需要的向量。这个有点像word2vec.训练出来可以在坐标系中表示这些向量,它的发音相近的会距离得比较近的。

另一个例子,seq2seq可以训练对话:

#####(5) Attention-based Model 注意力模型##### Neural Turing Machine 神经图灵机 #####(6) Reading Comprehension##### #####(7) 其它应用##### 视频标题生成 图片标题生成 可视化问答 Speech Question Answering
RNN与Structured Learning

###课外阅读###

描述了RNN向四个方法发展【Neural Turing Machines,Attentional Interfaces,Adaptive Computation Time,Neural Programmer】


#2

###2. 李飞飞团队### ####2.1 RNN的分类####

#####2.1.1 one to one##### Vanilla Neural Networks : Vanilla本意是香草,在这里基本等同于raw.可理解为最原始的神经网络, 一种原始的前向神经网络,输入是一个固定大小的对象例如图片或向量,只有一个输出,这个可以用来作分类,有一个分类的分数。 #####2.1.2 one to many##### 一个图片输入,输入出图片题目。 #####2.1.3 many to one##### Sentiment Classification 情感分类 #####2.1.4 many to many ##### 机器翻译 【一系列词对应一系列词】,输入与输出的系列都是变长的。 ####2.2 RNN#### 强调了一点,函数与权重W都是共享的。

###2.3 RNN学习###

当梯度值大于1时,梯度爆炸,解决方法采用Gradient clipping.设置一个域值,不要让梯度过度膨胀; 当梯度值小于1时,梯度消失,解决方法是调整RNN模型,例如LSTM 显示了由x与h_t-1时刻的值与权重W作用产生结果,经过激活函数生成四个门。 矩阵运算中,可以把h看与红色x与绿块h的维度,4h*2h与2h相乘,得到4h的矩阵,对这个4h的矩阵值做激活函数操作,生成i,f,o,g四个门,这是一个0~1的小数。 当生成了四个门,这里是LSTM的数据流及梯度流。 从x_t与h_t-1叠加形成一个新矩阵开始,经过W与激活函数生成了f,i,g,o四个门。f控制了上一次数据是否可以向前通过;i控制新数据的输入流,这个g就是新的数据内容了,与i控制组合得到结果并与C_t-1经f门作用后相合生成新的内存数据C_t. C _t在o的控制下输出h_t. 这个模型用到了cell的输出数据。

相对于李宏毅老师的课,这个还有很多其它项目展示,不列出来,LSTM从一个更细致的角度去展示了,含有形式化的语言会多一些。