[基础]斯坦福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 的步骤

  1. 忘记阶段,对上一个节点传进来的输入 选择性忘记,得到相应的门控信号 \(z^f\),忘记门.
  2. 选择记忆阶段,对当前节点的输入 选择性记忆,得到相应的门控信号 \(z^i\) , 记忆门(输入门)
    • 同时,将输入数据乘上权值并经过激活函数tanh的变换,得到 \(z\) (注意这里的 \(z\) 并不是门控信号)
  3. 更新细胞状态,综合 忘记上一步输出的结果 和 记忆当前步输入结果,得到新的细胞状态
  4. 决定要输出什么,将细胞状态转换为需要输出的部分。。。

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

https://www.cnblogs.com/hellcat/p/7182541.html cs231n 笔记

https://zhuanlan.zhihu.com/p/32085405 他人的总结博客

posted @ 2021-02-04 17:33  lunaY  阅读(121)  评论(0编辑  收藏  举报