前言
最新目标 YOLOv7,但在之前估计需要先完成 LSTM 和 YOLO 的学习,两个网络将只对他们的前向传播过程进行推导,像 YOLO 这种比较复杂的算法,在学习的过程中,我准备将它按实现步骤,逐步对其中一些有意思的方法进行实现。
这篇文章将记录我关于 长短期记忆网络(LSTM) 的学习过程。1
LSTM 网络结构
下面是偷来的 LSTM 总体(组合模型)的结构图2:
由于 LSTM 是一种改进之后的循环神经网络,所以在网络的前向传播的流程和 RNN 一致,都是通过上一时刻的隐藏状态和本时刻的输入,计算本时刻的输出,不同的是 LSTM 在计算过程中新增了 细胞状态,该状态将保存过去的信息。
LSTM 也通过这一改动,一举解决了 RNN 对于 短期输入敏感 和 无法处理长距离依赖 的问题。
然后像 RNN 一样,剖析一下单个模型的输入输出:
单个模型中包含有3个输入,当前时刻的输入向量 、上一时刻的隐藏状态 和 上一时刻的细胞状态 。
单个模型中包含有2个输出,当前时刻的隐藏状态 和 当前时刻的细胞状态 。
门结构(Gate)
门结构(Gate) 就是以向量作为输入进行全连接,得到的输出通过激活,输出0到1之间的向量:
其中的 就是就是门结构的 门控函数。3
当 为 0 时,任何向量与之相乘都会得到零向量,这就相当于什么都不能通过;
当 为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。
简单来说:一个门结构 = 一个有输出激活的隐藏层
LSTM 前向传播
这里我按 LSTM 的网络结构和我个人的理解方法,重新绘制了一份 LSTM 的网络结构图,下面将通过该图对 LSTM 的前向传播过程进行解析:
遗忘门(Forget Gate)
遗忘门 将决定上一时刻的细胞状态 有多少保留到当前时刻 ,相当于是计算上一时刻细胞状态的权重。
LSTM 中的遗忘门结构如下:
是将两个向量连接成一个更长的向量。
和 分别是遗忘门的全连接中的权重和偏置,并且在各个时刻的遗忘门中共享。
是遗忘门的门函数(激活函数),一般指代 函数。
是遗忘门当前时刻的输出,在计算当前时刻细胞状态时,它将作为上一时刻细胞状态的权重。
输入门(Input Gate)
输入门 将决定当前时刻的输入 有多少保留到当前时刻 。
输入门的基本计算方法和结构与遗忘门一致,不同的是输入门中包含有2个门结构, 和 是输入门当前时刻的输出。
在已有 、、 和 之后,就能获得当前时刻细胞状态 的表达式:
输出门(Output Gate)
输出门 有两个部分,分别将决定 和 有多少输出到当前时刻的 。
是当前时刻的隐藏状态也是当前时刻的输出,后续将 作为输入,实现多层的 LSTM 网络。4
LSTM 反向传播
反向传播就不多讲了,反正就是求偏导、求累加、求转置,之后看看有没有现成的深度学习框架,做个案例就行,目前还没有深入的打算。
因为 时间要开始加速了 !!
好吧,现在的主要目标是 YOLO,目前假期只有一个半月了,我怕来不及了。