首页 > 代码库 > CS224d lecture 13札记

CS224d lecture 13札记

欢迎转载。转载注明出处:

http://blog.csdn.net/neighborhoodguo/article/details/47387229


不知不觉到了第三部分了。整个课程也快结束了,尽管不是第一次整个推完公开课。可是还是有些兴奋呢!

废话不多说,開始总结啦!

这节课就介绍了一个模型,就是在Computer Vision里十分popular的CNN(Convolutional Neural Networks)。

只是这里介绍它在NLP的应用,可见model事实上是能够有不同的应用的哦,没准我们的大脑就是这么运转的,哈哈扯远了。

从RNN引入CNN

技术分享

RNN是先整出来一个parsing tree然后一步一步的向上爬(蜗牛吗?- -),CNN不用整出来一个parsing tree。用论文里的话说就是Induced Feature Graph,能够自己生成拓扑结构。看似挺不错的。

RNN是使用过的vector在同一layer里不会再使用第二次,CNN是用过的vector在同一layer里还能够用,从不计较。

CNN非常像卷积的。选一个window,然后从左向右的一步一步的移动。然后生成上一层的layer。

第一部分介绍了一个最最简单的CNN。就是一个金字塔的结构:

技术分享

然后使用和RNN里一样的计算步骤。一步一步的recursive

技术分享

这样的模型简单是简单,可是效果不好

CNN and pooling

于是就想出来一个好办法,第一步和之前的金字塔结构一样,就是生成金字塔的最以下两层:

技术分享

然后生成了一个c的vector,接下来就pooling的过程,c_hat = max{C}

可是这样提取出来的仅仅有一个啊,怎么办呢?多建几个金字塔不久好了,不正确多建几个金字塔的底座,专业点说就是用不同宽度的window提取出feature map。然后再pooling。这样提取出来的features就多了。

技术分享

tricks

有一个trick据说能够提高精度

技术分享

在training阶段的最后一步,在z之前element-wise乘一个r,r是Bernoulli random variables。

这样能够有意的提高overfitting的可能性,继而能够训练尽可能多的features

在使用的时候当然不用再乘r了,可是weight会非常大。所以:

技术分享

使其缩小。再计算最后结果

另一个trick是为了避免overfitting的:

技术分享

 

另一个trick - -

因为我们的模型非常复杂,dataset也非常大,训练时间非常长。可是终于的训练结果可能不是最优的,所以就每隔一段时间,记录下来对应的weight和accuracy,在最后训练完毕的时候使用accuracy最高的weight。

 

Complex pooling schemes

技术分享

在课程的最后讲了一个最复杂也是最牛掰的CNN,在看完paper之后算是弄明确了

第一层

第一层使用的是Wide Convolution

技术分享

左边的是narrow右边的是wide

详细要怎么convolution呢?首先选一个m作为weight matrix

技术分享

然后生成M

技术分享

最后往上 计算一层:

技术分享

第二层

这个model里使用的k-max pooling和之前的不一样,这里一次提取出来前k个最大的,不像之前模型仅仅提取出最大的

首先是k的计算方法:

技术分享

当中L是总层数,l是对应的层,s是句子里的单词数。k_top这个就自己优化了。

技术分享

计算方法和这个类似,区别就是取出前k个最大的

 

Folding

这个最简单,就是把每两行相加起来,加之前是d行,加之后是d / 2行

 

最后一层

得到了想要的features最后就用Fully connected layer做预測了!

 

CNN application machine translation

技术分享

先无论用之前讲得哪种CNN生成最顶上的那个feature,然后用RNN生成相应的target language

 

各种model的优劣

Bag of vectors对于简单的分类问题非常好

Window Model对于单词的分类非常好,长段的分类不行

CNNs直接被吹得万金油了

Recursive NN语义学上貌似可信,可是得生成一个parsing tree(我怎么感觉这个不靠谱)

Recurrent NN认知学上貌似可信,可是如今性能不是最优的

CS224d lecture 13札记