文章目录
一、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) ].