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. 遗忘门:

 

 f_{t} = \sigma (W_{fh}h_{t-1} + W_{fx} x_{t} + b_{f})  

 

2. 输入门

 

 

 

 

 

 

 

 

 

 

i_{t} = \sigma (W_{ih}h_{t-1} + W_{ix}x_{t} + b_{i})

\tilde{C_{t}} = tanh(W_{Ch}h_{t-1} + W_{Cx}x_{t} + b_{C})

 

3. 更新胞元状态

 

 

 4. 输出门

o_{t} = \sigma (W_{oh}h_{t-1} + W_{ox}x_{t} + b_{o})

最终LSTM的输出为

 

posted @ 2020-12-21 23:15  learningcaiji  阅读(149)  评论(0编辑  收藏  举报