RNN和LSTM
RNN:循环神经网络,用于处理序列信息,即有上下文关系的信息
RNN中会把上一层处理后的信息作为输入传入到下一层,这样,这一层
就会同时考虑此时的输入和上一个时刻的输入,做到处理序列信息。
按时间线展开
其中各个时间点具有同一个W,U,V,这也是RNN的权值共享。
RNN接受的输入的特征为(b, n_features),时间序列为T。
初始输入为h0,一般初始化为zeros(b, hidden_unit),
W矩阵维度(hidden_unit, hidden_unit)
U矩阵维度(n_features, hidden_unit)
V矩阵维度(hidden_unit, output)
def run_step_forward(x, prev_h, Wx, Wh, b): # x(N*D) Wx(D*H) pre_H(N*H) Wh(H*H) b(1*H) next_h = np.tanh(x.dot(Wx) + prev_h.dot(Wh) + b) # N * H cache = (x, Wx, Wh, prev_h, next_h) return next_h, cache def rnn_forward(x, h0, Wx, Wh, b): N, T, D = x.shape _, H = h0.shape h = np.zeros((N, T, H)) cache = [] h_interm = h0 for i in range(T): h[:, i, :], cache_sub = run_step_forward(x[:, i, :], h_interm, Wx, Wh, b) h_interm = h[:, i, :] cache.append(cache_sub) return h, cache
LSTM:Long Short Term
内容来自https://blog.csdn.net/v_JULY_v/article/details/89894058
LSTM的设计思路是按需遗忘或保留前文信息,为了满足这项要求,增加了细胞状态
LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。
门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法的非线性操作。
1. 遗忘门:
2. 输入门
、
3. 更新胞元状态
4. 输出门
最终LSTM的输出为