[基础]斯坦福cs231n课程视频笔记(四) RNN相关概念
RNN
vanilla RNN VS vanilla NN的区别
抽出单个来看:
输入:
- x 表示当前状态下数据的输入,h 表示接收到的上一个节点的(hidden state)输入
输出:
- y 表示当前状态下的输出,h' 表示传递到下一个节点的输出
输出 h' 与 x 和 h 的值都相关,而 y 则常常是用 h' 投影到一个线性层,然后用诸如softmax进行分类得到所需要的数据。
#ignore bias here.
#状态
out_h = actiavte_function(h * w_h + x * w_x)
#输出
out_y = activate_function(out_h * w_o)
LSTM
-
LSTM相对于RNN来说,引入了门机制
-
每经过一个时间节点,RNN只传递了一个状态 h ,而LSTM传递了两个状态:细胞状态c 和 隐藏状态 h ,其中 细胞状态 c 对应于RNN中的 h. 细胞状态在传递的过程中,改变得很慢,通常是上一个节点的细胞状态加上一些数值,而 隐藏状态 则在不同节点下旺旺有很大的区别
抽出单个单元来看 Naive RNN vs LSTM
详细放大LSTM:
\[z=\tanh(W * [x^t,h^{t-1}])\\
z^i = \sigma (W^i * [x^t, h^{t-1}]) \\
z^f = \sigma (W^f * [x^t, h^{t-1}]) \\
z^o = \sigma (W^o * [x^t, h^{t-1}]) \\
\]
-
这里把对应 x 和对应 h 的权重参数W 拼到一起用一个表示, 后面的 [xt, h(t-1)] 指的是这两个变量horizontal stack 为一个向量表示
-
图中的 $\odot $ 表示对应元素相乘
LSTM 的步骤
- 忘记阶段,对上一个节点传进来的输入 选择性忘记,得到相应的门控信号 \(z^f\),忘记门.
- 选择记忆阶段,对当前节点的输入 选择性记忆,得到相应的门控信号 \(z^i\) , 记忆门(输入门)
- 同时,将输入数据乘上权值并经过激活函数tanh的变换,得到 \(z\) (注意这里的 \(z\) 并不是门控信号)
- 更新细胞状态,综合 忘记上一步输出的结果 和 记忆当前步输入结果,得到新的细胞状态
- 决定要输出什么,将细胞状态转换为需要输出的部分。。。
others
GRU, attention..
应用
seq2seq
别名:编码器-解码器(encoder-decoder)
输入不定长序列P,通过encoder转为定长特征向量K (编码了整个输入序列的信息),再通过decoder输出不定长序列Q (由特征向量和上一时刻的解码输出推理当前解码输出,最终连起来得到解码后的序列)
中间提取特征的RNN cell可以是RNN或是LSTM等循环神经网络
参考资料
https://zh.d2l.ai/chapter_natural-language-processing/seq2seq.html
https://www.jianshu.com/p/1d3de928f40c