赞
踩
这篇文章打算讲一下LSTM,虽然这类文章已经很多了,但以前刚开始看的时候还是一知半解,有一些细节没有搞清楚,我打算借这篇文章好好梳理一下。
在许多讲LSTM的文章中,都会出现下面这个图。
Alt text
说实话,这个图确实很清晰明了(对于懂的人来说)。在很多文章中我都发现了这样的问题,有的时候,对于已经明白的人,一些很“显然”的问题就被忽略了,但是对于刚入门的人来说,一些基础的问题却要搞很久才能弄明白。所以,我希望在这里能尽可能讲的“慢”一些,把细节部分都讲清楚。
当然了,在看这篇文章之前,大家应该对RNN有一个基础的了解。
相比于原始的RNN的隐层(hidden state), LSTM增加了一个细胞状态(cell state),我下面把lstm中间一个时刻t的输入输出标出来:
我们可以先把中间那一坨遮起来,看一下LSTM在t时刻的输入与输出,首先,输入有三个: 细胞状态 C t − 1 C_{t-1} Ct−1,隐层状态 h t − 1 h_{t-1} ht−1, t t t时刻输入向量 X t X_t Xt,而输出有两个:细胞状态 C t C_t Ct, 隐层状态 h t h_t ht。其中 h t h_t ht还作为 t t t时刻的输出。
至于绿色框内部的结构与逻辑,我会在下面详细的讲,不过当前,我们从这个图里,只需要看出个大概就行了:
总的来说呢,细胞状态的信息一直在上面那条线上传递,隐层状态一直在下面那条线上传递,不过它们会有一些交互,在LSTM中,通常被叫做“门”结构。
LSTM也是RNN的一种,输入基本没什么差别。通常我们需要一个时序的结构喂给LSTM,数据会被分成 t t t个部分,也就是上面图里面的 X t X_t Xt, X t X_t Xt可以看作是一个向量 ,在实际训练的时候,我们会用batch来训练,所以通常它的shape是**(batch_size, input_dim)**。当然我们来看这个结构的时候可以认为batch_size是1,理解和计算之类的也比较简单。
另外还有一点想啰嗦一下, C 0 C_0 C0与 h 0 h_0 h0的值,也就是两个隐层的初始值,一般是用全0初始化。两个隐层的同样是向量的形式,在定义LSTM的时候,会定义隐层大小(hidden size),即 S h a
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。