My solution to cs224n assignment2

My solution

1.tensorflow

  这个题目是一个编程题目,模板填空。
  这个题目相当于给出了tensorflow实现的模板或者框架。有必要掌握这个常用的框架,相比以前写的tensorflow代码大多是零散的,需要了解学习这种写法(不过具体写起来还是要因地制宜,我觉得零散的写法简单地封装有时候写起来也不错),就像需要学习pytorch的框架的写法一样,直接把模型写在forward函数里面。
  具体代码略,以前的tensorflow代码也写过很多了,就是没有掌握框架的写法。

2.transition-based dependency parser

模拟解析过程

My solution to cs224n assignment2

  模拟解析,比较容易:

stack buffer new dependency transition
[ROOT] [I, parsed, this, sentence, correctly] None Init
[ROOT, I] [parsed, this, sentence, correctly] None SHIFT
[ROOT, I, parsed] [this, sentence, correctly] None SHIFT
[ROOT, parsed] [this, sentence, correctly] (parserd, I) LEFT-ARC
[ROOT, parsed, this] [sentence, correctly] None SHIFT
[ROOT, parsed, this, sentence] [correctly] None SHIFT
[ROOT, parsed, sentence] [correctly] (sentence, this) LEFT-ARC
[ROOT, parsed] [correctly] (parsed, sentence) RIGHT-ARC
[ROOT, parsed, corectly] [] None SHIFT
[ROOT, parsed] [] (parsed, correctly) RIGHT-ARC
[ROOT] [] (ROOT, parsed) RIGHT-ARC

NN解析算法的细节

  除了按照模板填空补全算法,还有一些对NN的考察,以下为涉及到的知识点的简要简析:

1.初始化

Given a matrix A of dimension m×n,Xavier initialization selects values Aij uniformly from [ϵ,ϵ],where ϵ=6m+n

2.dropout

My solution to cs224n assignment2
  E(hdrop)=γEdEh=γ(1pdrop)h=h
  γ=11pdrop

3.Adam

My solution to cs224n assignment2 
  梯度变化比较缓慢,不容易在最优解附近波动。另一方面,可以认为相当于渐进地一边调整一边计算了一个更大的minibatch,所以梯度会更准确。
  
My solution to cs224n assignment2

  这样调整后,还加入了v这个项,在一段时间梯度很大的时候用于减缓学习率防止滑出过远,一段时间梯度很小的时候增加学习率,使得梯度比较小的时候能不陷入局部极值。

4.L2 reg

  正常的正则化

参数的保存和调优

  框架还保存了dev集合上的最优记录对应的参数,用于测试

3.RNN LM

RNN

RNN定义
  
My solution to cs224n assignment2

GRU, LSTM是属于gated的RNN,与RNN大体一致,只是加了门。
LSTM已经很熟悉了,下面是GRU的模型:

My solution to cs224n assignment2

类似RNN的一些模型类称为QRNNs(类RNNs),QRNN内部可能加入卷积来捕获n-gram同时帮助并行加速。

困惑度的定义

  困惑度的定义是语言模型中转移概率的概率倒数的几何平均。
  所谓转移概率是指给出前面的语境,然后语言模型给出的正确单词的概率。那么我们根据转移概率与交叉熵的关系可知,交叉熵是困惑度的对数。
  

求导

  和普通的BP没有本质区别,链式法则+维度调整,已经很熟了,所以我没去做。