循环神经网络中的lstm大概是什么意思?

做为一个AI老司机,回答这个问题简直义不容辞。
要论系统的介绍,要属Google的RNN深度学习入门视频了,对于英文好的童鞋强烈推荐首先简单回顾下循环神经网络(RNN)的动机和概念。

本文最后更新时间:  2023-01-19 19:42:22

首先简单回顾下循环神经网络(RNN)的动机和概念。

循环神经网络的动机,是用隐藏状态记住一些历史信息,以处理序列化的输入数据。比如,字符识别问题中,单个字符的识别,和前后的字符都是相关的。再比如,处理视频,视频的每一帧,和前后帧也是相关的。

这里给出一些简单的示意代码:

rnn = RNN(D, H)

这里的`D`代表输入序列,`H`代表状态序列。输入序列`D`被转化为状态序列`H`。

h = rnn.next(h0, x)

这里`h0`是初始状态序列,`x`是输入序列。返回的输出`h`为包含时序信息的状态序列。

下一步运算之间使用上一步产生的状态序列:

h = rnn.next(x)

h的具体计算方法为:

h[t] = tanh(Wh(h[t- 1]) + Wx(x[t]) + b)

其中,`Wh`是记录状态之间连接的矩阵,`Wx`是记录输入与状态之间连接的矩阵,`b`是偏置。`tanh`函数的选取是经验的结果,在实践中发现,`tanh`的效果比较好。

我们可以看到,原生RNN中状态的计算方法是比较简单的。这就带来一个问题,如果相关的两个输入,在输入序列中的距离较远,那最终的效果就比较差了。当然,有时候,调整一些参数,可以将距离较远的相关输入(长时依赖关系)联系起来,但大多数时候,这很困难。

因此,我们考虑给我们的循环网络加入长期记忆功能。在状态之外,增加一个结构(不妨把这个结构叫做细胞)。然后,通过某些阀门,控制何时遗忘信息,何时将信息保存到细胞内。

(图片来源:arunmallya.github.io)

这样我们就得到了LSTM(Long Short-Term Memory,长短期记忆网络)。

LSTM和原生循环网络的总体结构是一致的。

lstm = nn.LSTM(D, H)

输入门,决定是否将信息传入细胞

i[t] = sigmoid(ai[t])

遗忘门,决定是否遗忘信息

f[t] = sigmoid(af[t])

输出门,决定细胞状态中哪些信息将被输出

o[t] = sigmoid(ao[t])

使用`tanh`调整输出结果(确保输出值在-1和1之间)

g[t] = tanh(ag[t])

细胞状态既取决于上一个时刻的细胞状态,也取决于输入门和遗忘门的作用

c[t] = f[t] * c[t - 1] + i[t] * g[t]

状态取决于输出门和细胞状态

h[t] = o[t] * tanh(c[t])

我们可以看到,LSTM和原生RNN的基本原理是一样的,LSTM在RNN的基础上增加了一个细胞状态而已。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。