RNN、LSTM知识点总结

CNN——用于计算机视觉(CV)

RNN——用于自然语言处理(NLP)

RNN、LSTM知识点总结_第1张图片

理解:其中h0,h1...ht-1是中间结果,x0,x1...x代表时序输入。举例:如I am Chinese,I love China,则x0=‘I’,x1=‘am’...xt=‘China’,但单词不能直接输入网络,所以使用word2vec将单词转换成向量后,即可作为输入。

缺点:RNN会考虑之前的所有结果记录下来,记得太多就会产生错误或误差

LSTM:针对RNN的缺点,选择性的保留之前的信息

RNN、LSTM知识点总结_第2张图片

RNN、LSTM知识点总结_第3张图片

每个黄色方框表示一个神经网络层,由权值,偏置以及激活函数组成;每个粉色圆圈表示元素级别操作;箭头表示向量流向;相交的箭头表示向量的拼接;分叉的箭头表示向量的复制

RNN、LSTM知识点总结_第4张图片

LSTM的核心部分是上图,这一部分一般叫做单元状态(cell state)它自始至终存在于LSTM的整个链式系统中,其中( C:控制参数,决定什么信息保留,什么信息遗忘)

RNN、LSTM知识点总结_第5张图片

RNN、LSTM知识点总结_第6张图片

门:让信息选择式通过的方法,由一个sigmoid函数和乘法操作构成。通过使用sigmoid输出0到1之间的数值,用于描述每个部分有多少量可以通过,0代表不允许任何量通过,1代表允许任意量通过。

RNN、LSTM知识点总结_第7张图片

RNN、LSTM知识点总结_第8张图片

RNN、LSTM知识点总结_第9张图片

遗忘门:决定应丢弃或保留哪些信息,来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。  

输入门:用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。然后计算细胞状态,前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。  

输出门:用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。  最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。

RNN、LSTM知识点总结_第10张图片

RNN、LSTM知识点总结_第11张图片

word2Vec:将文本向量化(对顺序敏感,能体现相近意思)

使用-1到1描述一个属性(如一个人性格是内向还是外向),一般用50-300维度的向量

RNN、LSTM知识点总结_第12张图片

RNN、LSTM知识点总结_第13张图片

一个50维词向量(表示50个特征)

RNN、LSTM知识点总结_第14张图片

 使用热力图表示(颜色越深表示数值越大,-1.6到1.6之间)

例如我们通过这种方法得到三个词向量,其中man和boy的词向量有很多地方是相近的

RNN、LSTM知识点总结_第15张图片

如何训练一个词向量(一个词应该用什么向量表示)(前向传播去计算损失函数值,反向传播则通过损失函数值去更新权值参数)

随机赋值创建一个词库表1),然后输入一句话的前俩个词,根据输入的俩个词从词库表中找出这俩个词的向量,然后输入网络,最终得到一个分类结果,然后将结果与真实结果比对后得到损失值,然后反向传播更新网络权值和词库表 ,当训练到一定程度后即可得到所有词的词向量了

RNN、LSTM知识点总结_第16张图片

训练的数据从哪来?合乎语言逻辑的文本都可以

构建训练数据:通过一个滑动串口来选取

RNN、LSTM知识点总结_第17张图片

RNN、LSTM知识点总结_第18张图片

 不同的选取模型   

CBOW

RNN、LSTM知识点总结_第19张图片

RNN、LSTM知识点总结_第20张图片

Skipgram

RNN、LSTM知识点总结_第21张图片

RNN、LSTM知识点总结_第22张图片

RNN、LSTM知识点总结_第23张图片

给定一个点序列(图像和sinx函数相似),然后我们选择一个一个合适的滑动块模式(如50个数一组),然后输入到RNN中(如图) (备注:xi可以输入1维数,可以输入多维向量)

RNN、LSTM知识点总结_第24张图片 RNN、LSTM知识点总结_第25张图片

网络结构图:

(None,49,1)代表有49个输入节点(滑动块规模),每个输入为1维的数字

然后第一个LSTM,将1维数转换成50维的向量了

然后第二个LSTM,将50维转换成100维的向量了 ,并且只去了最终结果ht,前面的结果丢掉了(None,100)(dropout略)

然后全连接层将100维转为1维数,这个数就是最终的结果(输入x0,x1,x2,x3,...x49后预测得到的值)

RNN、LSTM知识点总结_第26张图片

 首先读csv文件(5000个数据),将数据集切分为测试集和训练集,然后构建模型(根据上图设计即可,再指定以下损失函数MSE,优化器ADMA),然后画结构图,

有4000-50个序列, 然后从csv中获取0到50的数据,然后取前49个数据作为训练集xi,最后一个最为预测值y,然后从1到51开始以此类推获取

RNN、LSTM知识点总结_第27张图片

最终得到:x=》(3950,49,1)y=》(3950,1)(当我们拿到陌生代码时应习惯打印shape,通过数据维度来理解代码)

RNN、LSTM知识点总结_第28张图片

然后用x和y去训练

RNN、LSTM知识点总结_第29张图片

EarlyStopping:监视损失函数值是否已经收敛,收敛则会停止训练

ModelCheckPoint:保存训练权值,方便接续前一次继续训练

 测试

RNN、LSTM知识点总结_第30张图片

你可能感兴趣的:(rnn,lstm,深度学习)