一、LSTM核心思想
LSTM是一种RNN模型
LSTM是对简单循环神经网络的改进
LSTM可以避免梯度消失的问题,可以有更长的记忆
1.1 Conveyor Belt(传输带)
传输带记为向量Ct:过去的信息通过传输带直接送到下一个时刻,不会发生太大的变化。
LSTM就是靠传输带来避免梯度消失的问题
二、LSTM分布指南
2.1 Forget Gate(遗忘门)
遗忘门有两部门组成;
输入的Sigmoid函数是一个向量a,Sigmoid对向量a中的每一个元素都进行压缩,压缩在(0,1)之间的范围
Elementwise multiplication:两个矩阵对应位置元素进行乘积
遗忘门(ft):一个向量,有选择的让传输带C的值通过。
假如f的一个元素为0,,则C对应的元素就不能通过,对应的输出为0。
假如f的一个元素为1,,则C对应的元素全部通过,对应的输出为C本身。
参数矩阵Wf ,需要通过反向传播从训练数据中学习。
2.2 Input Gate(输入门)
输入门(it):更新传输带的值
参数矩阵Wi ,需要通过反向传播从训练数据中学习。
2.3 New value(新的值)
New value:将值添加到传输带上
2.4 Output gate(输出门)
输出门(Ot):
三、LSTM: Number of Parameters(参数数量)
有4个参数矩阵,每个参数矩阵
行:shape(h)
列:shape(h)+ shape(x)
LSTM参数数量(没有统计截距)
4×shape(h)× [ shape(h)+ shape(x) ]
四、LSTM for IMDB Review
# 设置超参数 vocabulary = 10000 # 词典里面有10000个词汇 embedding_dim=32 # shape(x)=32,词向量x的维度为32 word_num = 500 # 每个电影评论有500个单词,如果超过500个单词,就会被截掉;如果不到500,就会补够。 state_dim =32 # shape(h) = 32,状态向量h的维度为32 # 开始搭建网络 model = Sequential() # 建立Sequential()模型 # 往model里面加层,Embedding层,把词映射成向量 model.add(Embedding(vocabulary,embedding_dim,input_length=word_num)) # 需要指定状态向量h的维度,设置RNN层的return_sequences=False,表示RNN只输出最后一个状态向量h,把之前的状态向量舍去 model.add(LSTM(state_dim,return_sequences=False)) # 全连接层,输入RNN的最后一个状态h,输出0-1之间的数 model.add(Dense(1, activation="sigmoid")) model.summary()
五、Summary(总结)
LSTM uses a "conveyor belt"to get longer memory than SimpleRNN.
Each of the following blocks has a parameter matrix:
Forget gate(遗忘门)
Input gate (输入门)
New value (新的输入)
Output gate(输出门)
Number of parameters:
4 x shape (h) x [ shape (h) +shape (x) ].