资讯专栏INFORMATION COLUMN

cs231n学习笔记【1】--- Lecture_10 --- RNN

TalkingData / 1040人阅读

摘要:上面这张图中的第二个就是用来做的,这的其实就是我想要学的东西,因为我最近刚把跑通,过个几天想要参加下的比赛,网上搜到在年就做了英文的类似项目,第一名是的。

写在前面

这节课讲的内容是RNN有关的知识内容,本来是直接要做assignment3的,后来看完英文介绍和我下下来的代码发现就像是做完形填空一样我要把代码填入预先设置好的位置。一下子蒙圈了,这怎么填???
问了同学后才知道,Syllabus都已经设计好了,先看讲义和视频,一点点公式啊什么的都有讲,再自己去写。所以第一篇笔记我就要直接先学习一下RNN,不想直接从头,这样很打击我的积极性,因为前面有很多知识点我其实已经很熟了。
如果后期我还有时间的话,我想我会把前面的cs231n的课程的学习笔记写下来的。

正文 从 "Vanilla" Neural Network 开始

Vanilla是一种feed-forward network,很简单的,一个fixed structure 的input,然后经过几个hidden就output,进过发展,有了更多的类型的rnn网络,用于更多的业务场景。

上面这张图中的第二个 one to many 就是用来做 Image Captioning 的,这的其实就是我想要学的东西,因为我最近刚把show and tell 跑通,过个几天想要参加下challenger.ai的image caption比赛,网上搜到mscoco在16年就做了英文的类似项目,第一名是google的show and tell。

除了one to many 还可以有 many to one 来做视频里的情感分类。可以是一段剧情的对话最后分析出是什么样的情感。

之前传出一个消息,google的专业翻译准确率高达百分之99,非常惊人的实力,其实用的也是RNN,泛化来讲就是上面的这种多对多的方式。但是肯定不是Input和output的个数一样多,很好理解。可以去看看google的论文关于seq2seq的。但其实下面有讲seq2seq不是这么简单的处理方式,是有个encoder+decoder的方式,也就是many to one 然后 one to many。

每一帧的视频分类,这个我接触不多,不太了解具体用途。

总的来说,rnn可以分成这么几种用途,那么下面就要开始讲讲详细的rnn了。

从一个旧的状态传递到一个新的状态,我们需要有一个系数矩阵W,之前的状态向量以及新的输入向量,通过公式的计算得到新的状态值。

从下面这个最简单的vanilla network入手。

现在的f函数使用的是tanh,然后看公式的下角标也很清楚,因为是加了一个隐含层的关系,所以不同的系数矩阵看的也很明白。

然后隐含层可以不断地增多,就变成了RNN,在初始化时,每一层的W矩阵都是一样的,如下图。

从上面的图我们可以很自然的推出下面我们需要计算loss了,计算每个层的loss,最后都相加起来成为最终的loss。

然后就是提到了我之前有讲的seq2seq模型,显示encoder生成一个vector,然后这个vector放到后面的decoder去生成一个新的sequence,也就是别的语言。可以不是句子的层面,也可以是character的层面,也就是一个vector就代表了一个单词,但这样就不是seq2seq了。

下面就讲讲一个简单的character层面的example。


我们的训练数据就是简单的四个字母 [h,e,l,o]

使用了一个隐含层的方式

最后计算出来的结果选择下一个字母应该是什么字母,可以看到h的预测就是错的,其认为o的可能性更大。那么接下来就是需要softmax的时候了,如果对softmax不了解的同学可以去看看ufldl的 Softmax回归,这个简单来讲就是用于处理多分类问题。

下面的四张图片是一个test-example,先给定第一个字母,通过这个字母不断地生成下一个直到结束,不用去看数值,我听了视频后才知道,虽然h后面o的可能性大,但是这里假设就是e,然后e输入到第二个time-step。



上面的过程很好理解,接下来我们就要利用loss来backpropagation,修正整个网路,但是如果直接是全局在计算的话,会发现显存或内存不够,而且会计算的十分的久,因为训练集是十分巨大的。那么有什么办法呢?truncated,也就是分块计算,因为我们的sequence输入是有个时间顺序的,假设我们设置一个chunk是100,那么我们跑了100个字母,后计算这100个的backpropagation,然后再跑100,现在有了200了,但是我们计算的是后100的backpropagation,如此反复。


后面的内容我发现不用讲了,剩下就是介绍他们在不同数据集上的实验,以及最后因为梯度爆炸和梯度消散谈起了LSTM和GRU,这两个神经元的设计我以后可能会写文章来讲,但不是现在。1997年就有的东西,在20年后的今天被大范围广泛利用了。

看完这么多最主要的是学习一下 min-char-rnn.py 这个代码,顺便给大家安利一个详解代码的地址 karpathy"blog

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20137.html

相关文章

  • cs231n学习笔记1】--- Lecture_10 --- RNN

    摘要:上面这张图中的第二个就是用来做的,这的其实就是我想要学的东西,因为我最近刚把跑通,过个几天想要参加下的比赛,网上搜到在年就做了英文的类似项目,第一名是的。 写在前面 这节课讲的内容是RNN有关的知识内容,本来是直接要做assignment3的,后来看完英文介绍和我下下来的代码发现就像是做完形填空一样我要把代码填入预先设置好的位置。一下子蒙圈了,这怎么填???问了同学后才知道,Sylla...

    VPointer 评论0 收藏0
  • 超过 150 个最佳机器学习,NLP 和 Python教程

    摘要:作者微信号微信公众号简书地址我把这篇文章分为四个部分机器学习,,和数学。在这篇文章中,我把每个主题的教程数量都是控制在五到六个,这些精选出来的教程都是非常重要的。每一个链接都会链接到别的链接,从而导致很多新的教程。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:http://www.jianshu.com/p/2be3... showIm...

    JayChen 评论0 收藏0
  • 斯坦福 CS224n 中文笔记整理活动 | ApacheCN

    摘要:改编自维基百科课程视频斯坦福深度学习自然语言处理课程负责人章节列表流程一认领首先查看整体进度,确认没有人认领了你想认领的章节。二整理笔记下载英文字幕翻译可以利用谷歌翻译,但一定要把它变得可读排版成段落,并添加视频截图三提交项目将文档放在中。 参与方式:https://github.com/apachecn/s... 整体进度:https://github.com/apachecn/s....

    wangbjun 评论0 收藏0
  • 深度学习如何入门?

    摘要:同时推荐阅读由,和提供的深度学习教程,其中介绍略少一些。自然语言处理的深度学习,另一个斯坦福大学的学者的创始人也是一个很好的课程,可以解决与相关的所有最新的深入学习研究。 如果您具有数学和计算机科学方面的工程背景或相关知识的编码经验,只需两个月即可熟练掌握深度学习。 难以置信? 四步使它成为可能。 欲了解更多,请往下看 Step 1: 学习机器学习基础 (可选,但强烈推荐) 开始于An...

    wzyplus 评论0 收藏0
  • 深度学习如何入门?

    摘要:同时推荐阅读由,和提供的深度学习教程,其中介绍略少一些。自然语言处理的深度学习,另一个斯坦福大学的学者的创始人也是一个很好的课程,可以解决与相关的所有最新的深入学习研究。 如果您具有数学和计算机科学方面的工程背景或相关知识的编码经验,只需两个月即可熟练掌握深度学习。 难以置信? 四步使它成为可能。 欲了解更多,请往下看 Step 1: 学习机器学习基础 (可选,但强烈推荐) 开始于An...

    Guakin_Huang 评论0 收藏0

发表评论

0条评论

TalkingData

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<