https://blog.csdn.net/wjc1182511338/article/details/79285503
因为RNN的问题:遗漏信息,只具有短时记忆
原因:反向传播时,RNN面临梯度消失问题 。梯度更新规则:新的权重 = 权重 - 学习率*梯度 获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。
LSTM 和 GRU就是作为解决方案 --------使用“门”的内部机制
链接里面有动态图可以充分了解
激活函数的特点及其在这里面的应用:
1.tanh:数值在-1~1之间。
2.sigmoid:数值在0~1之间 。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
RNN:输入和先前隐藏状态组合成向量, 向量经过激活函数 tanh之后,输出的是新的隐藏状态或网络记忆。
LSTM:三种门结构:遗忘门、输入门和输出门
1.遗忘门:前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数,遗忘的是上一步细胞状态的信息,即ct-1的
2.输入门:前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数和tanh函数中,两个输出相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。将新的信息选择性的记录到细胞状态中。
3.细胞状态:下一步,就是计算细胞状态。首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。更新细胞状态
4.输出门:输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。最后决定做什么样的预测
看图是最清楚直接理解的,最后的伪代码实现的,实际就是透过公式理解GRU
GRU:更新门(类似LSTM 中的遗忘门和输入门)和 重置门。 对比LSTM张量少训练快
总结:总而言之,RNN 适用于处理序列数据用于预测,但却受到短时记忆的制约。LSTM 和 GRU 采用门结构来克服短时记忆的影响。门结构可以调节流经序列链的信息流。LSTM 和 GRU 被广泛地应用到语音识别、语音合成和自然语言处理等。
插一张LSTM的图片和公式:
时不时的忘记,所以随便写下,很基础的内容。原文很详细,尤其是输入的几个流动图很清楚。
知识未完善部分:1.激活函数
未完待续。。。。。。。。。。。。。。。