CV 第十课 RNN 上

http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture10.pdf

1. 分类

  one - many: one 可能是Image,输出的many可能是sequence of words

  many - one: 可以是情感分析 sequence of words -> sentiment  ; frames of a video -> actions  识别video中的动作

  many to many : 机器翻译 seq of words -> seq of words  ;  Video classification on frame level

 

 

 

2. RNN也能处理这种情况: fixed input size and fixed output size

 

  

 

 

 

3. RNN 的更新: 每一步更新hidden state

  1) 每一步使用的函数 fW,权重W 是相同的

  

    

 

 4.  Vanilla

  1) 计算图如下 :

    一般的 h0 = 0,每一步将 ht-1 x带入 fW    ht = tanh( Whh ht-1 + Whx Xt)

    其中,在一次RNN运行中,W都是相同的

  2) W的更新

    运行完一次后,进行backpropagation,利用梯度对W进行更新

  3) loss

    运行单次RNN时,我们会得到 t 次 y,每一步都会得到一个loss,like softmax loss ,最后将这些Loss加在一起得到 L

    然后Loss在每一步都计算 local gradient 

    loss.backward()

 

 

 

 

 

 

 

 

 

 

 5. 翻译

  1) 可以当时 one to many + many to one 

  2) 将一连串的input encode 成单个 vector    many to one

  3)   单个输入,输出 output sequence 

 

 

 

6. language modelling 

  1) 例如characters-level 的model ,预测下一个输入的character

   输入: one-hot的编码的h

   预测输出: e (2.2)

   实际最大:  o (4.4)

     措施:  这个时候应该用 softmax loss 来度量我们对预测结果的不满意程度

 

 

 

   2) 

  test time ,选取输出时,可以选取softmax中第一大或者第二大的值。

  在输入为 'h' 向量这里,我们选择softmax中值第二大的作为输出。 因为有时单词都有相同的前缀,图片也是。选取第二大的输出,可以产生大量不同的合理输出序列。

 

  

 

 

  3) 梯度更新的问题:

  

  问题 : 在做一些大样本的模型,如wikipedia的单词时,forward所有的单词计算loss,backward所有的单词计算梯度,才能前进一个learning rate,这样做太缓慢了,模型也不会收敛。

  

 

4

 

 

  4) 梯度更新的方法:

 

 

 

 

7. 模型结果~ 

  用该模型读取一些文本,之后的输出效果非常好,比如莎士比亚形的文章,数学教科书,甚至还有code

  https://gist.github.com/karpathy/d4dee 566867f8291f086

  

 

posted @ 2020-05-30 14:50  ChevisZhang  阅读(186)  评论(0编辑  收藏  举报