循环神经网络
1.循环神经网络的定义
循环神经网络是一种对序列数据建模的神经网络。RNN不同于前向神经网络,它的层内、层与层之间的信息可以双向传递,更高效地存储信息,利用更复杂的方法来更新规则,通常用于处理信息序列的任务。RNN在自然语言处理、图像识别、语音识别、上下文的预测、在线交易预测、实时翻译等领域得到了大量的应用。
2.循环神经网络的结构
左侧从下到上是输入层->隐藏层->输出层,右侧是隐藏层的环结构展开,Xt是一个n维向量,X=[X1,…,Xt−1,Xt,Xt+1,…XT],例如对于语言模型,每一个Xt将代表一个词向量,一整个序列就代表一句话。ht代表时刻t的隐藏状态,Ot代表时刻t的输出,U、V、W都为权重。
RNN能够学习序列每一刻的主要原因是它们随时间共享参数,并且序列的每个输入处的状态变量随时间更新。 给定先前观察到的序列值,可以将随时间共享的这些参数与状态变量进行组合后以预测序列中的下一个值,因此RNN在解决时间任务方面更强大。
3.循环神经网络的基本原理
由卷积神经网络的结构可知,其中ht= f (ht-1, xt)是时间t处的记忆,当采用tanh函数时,ht=tanh(Wht-1+UXt),Ot=softmax(Vht)是时间t时刻的输出。且与CNN一样,RNN也是参数共享,在时间维度上,共享权重参数U、V和W。
在每个时间节点t = 0,1,2,3,4神经网络的输出都会产生误差值:E0, E1,E2,E3,E4 。与前馈神经网络类似,RNN也使用反向传播梯度下降法更新权重。
4.循环神经网络的类型
(1)输入一个输出多个,如输入一张图像,输出图像的描述信息。
(2)输入是多个,输出则是一个,如输入段话,输出这段话的情感。
(3)输入输出都是多个,如机器翻译输入一段话输出也是一段话。
(4)多个输入和输出是同步的,如进行字幕标记。
5.CNN和RNN有什么不同
·传统神经网络,卷积神经网络,输入和输出之间是相互独立的。
·RNN可以更好的处理具有时序关系的任务。
·RNN通过其循环结构引入“记忆”的概念;输出不仅依赖于输入,还依赖“记忆”,且将同一个结构循环利用。
6.长短期记忆神经网络LSTM
①LSTM的定义
LSTM将信息存放在递归网络正常信息流之外的门控单元中,这些单元可以存储、写入或读取信息。通过门的开关判定存储哪些信息,何时允许读取、写入或清除信息。这些门是模拟的,包含输出范围全部在0~1之间的Sigmoid函数的逐元素相乘操作。这些门依据接收到的信号开关,而且会用自身的权重集对信息进行筛选,根据强度和输入内容决定是否允许信息通过。权重会通过网络学习过程进行调整。
②LSTM的结构
③长短期记忆网络的工作步骤
– 决定从元胞状态中扔掉哪些信息。由叫做“遗忘门”的Sigmoid层控制。遗忘门会输出0~1之间的数,1表示保,0表示丢弃。
– 通过输入门将有用的新信息加入到元胞状态。首先,将前一状态和当前状态的输入输入到Sigmoid函数中滤除不重要信息。另外,通过tanh函数得到一个-1〜1之间的输出结果。这将产生一个新的候选值,后续将判断是否将其加入到元胞状态中。
– 将上一步中Sigmoid函数和tanh函数的输出结果相乘,并加上第一步中的输出结果,从而实现保留重要信息,此时更新状态即可忘掉那些不重要的信息。
– 最后,从当前状态中选择重要的信息作为元胞状态的输出。将前一隐状态和当前输入值通过Sigmoid函数得到一个0〜1之间的结果值。再对第三步中输出结果计算tanh函数输出值,并与得到的结果相乘,作为当前元胞隐状态的输出结果,同时也作为下一个隐状态的输入值。
7.门控循环单元GRU
GRU模型只有两个门,分别是更新门和重置门,更新门是遗忘门和输入门的结合体。将元胞状态和隐状态合并,更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多。重置门用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略的越多。这个模型比长短期记忆网络更加简化,也变得越来越流行。
8.深度RNN
深层RNN网络是在RNN模型多了几个隐藏层,是因为考虑到当信息量太大的时候一次性保存不下所有重要信息,通过多个隐藏层可以保存更多的重要信息;其中每一层循环体中参数是共享的,但是不
同层之间的权重矩阵是不同的。
9.双向RNN
双向RNN假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关;双向RNN是一个相对简单的RNNs,由两个RNNs上下叠加在 一起组成。输出由这两个RNNs的隐藏层的状态决定。
10.RNN代码示例
进行词向量处理,构建一个随机的词向量矩阵,它会随着训练而获得适合任务的词向量。
将数据处理为LSTM的输入格式并定义LSTM。
定义损失函数和优化器。
执行LSTM,训练并预测文字情感。
在训练过程中,随着训练的进行mean loss不断降低,训练结束后对数据集进行文字情感预测。
扩大数据集进行训练,数据集采取酒店评论(好评差评各50条),并进行预测,因为某些评论观点比较模糊,所以经过训练mean loss并没有达到特别好的结果,可以进一步增大数据量或对数据进行加工处理。我也尝试了进一步扩大数据到10万条左右,但我的电脑难以处理如此庞大的数据量,所以在github上观察了一些该项目处理结果。
11.词嵌入(word embeddngs)
①什么是词嵌入
每一个的词汇也用向量来描述,但是每一个维度是一个属性。就是找到一个映射或者函数,生成在一个新的空间上的表达。通俗的翻译可以认为是单词嵌入,就是把X所属空间的单词映射为到Y空间的多维向量,那么该多维向量相当于嵌入到Y所属空间中。词嵌入可以将更多的信息塞入更低的维度中。
②词嵌入在tensorflow中的实现
采用tf.nn.embedding_lookup(embedding_map, self.input_seqs),其本质其实就是按照self.input_seqs顺序返回embedding_map中的第self.input_seqs行组成tensor。
③Word2Vec
Word2Vec算法是一种简单的计算更加高效的方式来实现对词嵌入的学习算法,包括 2 种模型:
Skip-gram(SG):根据中心词预测目标上下文
CBOW:通过上下文的词向量预测中心词
每种语言模型又包含负采样和分级的 Softmax两种训练方法。训练神经网络时候的隐藏层参数即是学习到的词嵌入。
一般来说,CBOW 比 Skip-gram 训练速度快,训练过程更加稳定,原因是 CBOW 使用上下文average的方式进行训练,每个训练 step 会见到更多样本。而在生僻字(出现频率低的字)处理上,skip-gram比CBOW效果更好,原因是skip-gram不会刻意回避生僻字。
④什么是Attention
是受到人类注意力机制的启发。人们在进行观察图像的时候,其实并不是一次就把整幅图像的每个位置像素都看过,大多是根据需求将注意力集中到图像的特定部分。而且人类会根据之前观察的图像学习到未来要观察图像注意力应该集中的位置。