Deep Learning及NLP(自然语言处理)杂谈--第三部分-程序员宅基地

技术标签: python  人工智能  

本杂谈分为三个部分,此文为第三部分。

第三部分

这一部分只介绍了一个model,就是在CV领域大名鼎鼎的CNN其他课程大多请的外宾过来讲课,讲得都是DL如何在实际情况下的应用。

CNN

Basic CNN

CNN顾名思义倦积神经网络这个model叫倦积神经网络是因为它提取features的方式和倦积有些类似都是一格一格(或者几格几格)的左右移动。

CNN和Recursive NN是很类似的

所不同的是CNN省略了Recursive NN的第一步也就是Parsing tree的那一步。

Induced Feature Graph,可以自己生成拓扑结构。看似挺不错的。RNN是使用过的vector在同一layer里不会再使用第二次,CNN是用过的vector在同一layer里还可以用,从不计较。

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

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

这种模型简单是简单,但是效果不好

CNN and pooling

带Pooling的CNN和Basic CNN在对于最下面两层的处理方面都是一样的,先生成金字塔的最下面两层:

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

但是这样提取出来的只有一个,提取出来的features太少,于是我们用不同宽度的window提取出feature map,然后再pooling,这样提取出来的features就多了。

有一个trick据说可以提高精度这种方法是主动让models overfitting

在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模型

第一层

第一层使用的是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

 Application Q&A

基于memory network的Q&A。Memory Networks不是和之前我们讲得模型里所定义的那种Memory。之前课上介绍的Model里的memory是使用各种data然后训练model,可以认为memory存储在这个model的weight里,可以用来进行object detection等的工作。而这堂课讲得memory和之前定义的不是一个概念,之前的memory类似计算机的软件,这堂课讲得memory类似计算机的硬盘,需要用到memory的时候从硬盘里提取数据,不需要的时候就放那里。

Q&A类似我们中学英语考试的阅读理解,或者语文高考的最后几道阅读题。我们实际想要达到的目标是能够让计算机完成语文高考的阅读题的水平,这种目标想法很好,但是实现很难衡量现有模型的好与坏,而且也不可能一下就实现这么复杂的架构。所以基于以上考虑聪明的科学家把Q&A分成了好几块类似我们中学英语的阅读理解,不用回答完整的句子,只要像英语阅读那样司选一或者只要回答单个或者几个关键词即可。论文中有具体的介绍分出来的Tasks的讲解和例子,从前到后的排序是由容易及难。我们大致的认为先把以上的几个分块的任务完成之后,再使用一个优化的model使得输出的句子比较nature就能完成AI的Q&A的任务了。

这个Memory Network的目标是可以理解(comprehension)一篇文章或者一部电影,然后根据文章或者电影的内容回答问题。但是动词的种类那么多,如果一个单词一个处理方法的话不现实,效率也挺低,而很多动词的意思其实是类似的,所以就可以使用下图中的基本Command来替代这些各种各样的单词。

替代完成后,再进行处理就相对来说简单了。

有了处理过的数据,也有了多个简单的Q&A目标,接下来就可以进行model的建立了。

我们建立的model主要分为四个部分I,G,O,R

I这一模块,其实之前的课程大部分都是针对I模块所包含的任务的,比如说Parsing,RNN。

不论在论文里还是在课上讲到的O模块的搜寻的向量只搜索两个,具体搜索方法如下:

简单的说就是每次取出最高score的向量,然后再根据取出来的这两个向量和原始的问题生成貌似nature的回答。

那么如果在Memory里一个单词没有见过或者一个单词遗失了怎么办呢?简单的办法就是使用临近的单词,然后Bag-of-words

当然以上的内容还远远没有达到AI的要求,课上和论文里都给出了approach AI的两个方法:

parallel计算

Efficient formulations

Structured VS unstructured computation

structured graph就是指各个units之间的连接都很规矩比如说CNN

这种规矩的表示方法的好处是:cache的使用都是连续的,很容易load,对内存的使用也很少。缺点就是灵活性不好

还有一种就是unstructured graph

好处是表达能力更强,但是cache的使用不连续,不容易load,对内存使用偏高(和之前的对立)

我们的目标就是在不影响性能的前提下,使表达更加structured

Block operations and BLAS

Block operations一个最简单的例子就是矩阵乘法和加法,也就类似把相似的运算打包成一整块,然后输入进去批量计算。

BLAS: Basic Linear Algebra Subroutines是一款很先进的并行计算工具,课上还推荐了其他很棒的并行计算工具。

CPUs and GPUs

课上讲师说CPU和GPU已经达到了peak performance。

内存的大小很受限,CPU和GPU的通讯很慢是一个瓶颈。

CPU更少的cores            每个core运算速度更快

GPU更多的cores            每个core运算速度慢

但是GPU有数量优势,整体来说GPU运算速度比CPU快

乍一看貌似完全使用GPU更好,其实不然。

由于有通讯瓶颈,在计算量较小的时候使用CPU其实更有计算优势,在计算数量较多的时候使用GPU才有明显的优势。

Data parallelism

这个就是用来优化之前的Batching gradient descent

1.先指定一个master core然后多个worker core,首先master给每个worker分配计算的任务

2.然后每个worker core各自分别计算

3.计算完成后汇总到master那里,由master汇总计算出最终结果

这里的parallelism是同步的。

Model parallelism

这个就是把model进行分块然后各个模块分别分配给各个core计算然后汇总结果。

一台计算机的计算能力怎么说都是有限的,能不能使用多台计算机同时帮助计算呢?

但是计算机之间的以太网通信速度太慢了,开发更快速的计算机间通信才行。

Asynchronous SGD

前面说得同步的计算方法需要等待每个work core都计算完成才能汇总计算出结果,这样就会使一部分时间消耗在等待上面。

鉴于此就提出了异步的SGD

分配任务还是照常分配,但是谁计算完成谁就上传计算结果给master,然后master汇总完成之后立即给每个work core更新数据

HW3及有用的链接

homework

if __name__=='__main__'

http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html


with … as …

http://zhoutall.com/archives/325

matlib.plot.subplot

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplot

set_aspect

http://matplotlib.org/api/axes_api.html?highlight=set_aspect#matplotlib.axes.Axes.set_aspect

‘equal’

same scaling from data to plot units for x and y

num

a circle will be stretched such that the height is num times the width. aspect=1 is the same as aspect=’equal’.


优化方法

http://weibo.com/p/230418eb3aea990102v41r

有用的资源

Speech recognition model的开源project

http://kaldi.sourceforge.net/

 

两个dataset语音识别方面的:

TIMIT

http://blog.163.com/gz_aaa/blog/static/37834532201471881923177/

http://www.fon.hum.uva.nl/david/ma_ssp/2007/TIMIT/

 

Switchboard

http://www.isip.piconepress.com/projects/switchboard/


几个开源的Parallelism Packages

1.BLAS

2.CPUs: Intel MKL, Atlas, GOTO

 GPUs: Cuda, OpenAcc, clBLAS

3.Theano, Torch


转载于:https://my.oschina.net/stevie/blog/691801

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chuanzhuanxian8669/article/details/101069405

智能推荐

ant弹窗_【React】急:请问ant modal(弹出框)怎么修改样式?-程序员宅基地

文章浏览阅读2.8k次。ant的modal组件我想修改.ant-modal-footer 或者content里面的内容的样式都不可以。我试了wrapClassName也不会生效。请问该怎么自定义这些样式?我的ant是按需引入的。并没有写@import ‘~antd/dist/antd.css’;回答我在检查dom的时候,发现modal这个dom居然跑到了如图:而后明白了API中这个属性的解释:原来默认挂在到了body节..._antd modal wrapclassname没作用

linux删除用户-程序员宅基地

文章浏览阅读6.3k次,点赞5次,收藏16次。linux删除用户如果你想从系统中删除用户, userdel 可以满足这个需求。默认情况下, userdel 命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。如果加上 -r 参数, userdel 会删除用户的HOME目录以及邮件目录。然而,系统上仍可能存有已删除用户的其他文件。这在有些环境中会造成问题。[root@localhost ~]# use..._linux删除用户

Spring创建bean的三种方式_spring bean如何创建-程序员宅基地

文章浏览阅读3.3w次,点赞12次,收藏48次。关于Spring创建bean的三种方式,可以支持用户自定义工厂方法。链接:https://blog.csdn.net/magicianjun/article/details/78737840原文如下:Spring支持如下三种方式创建Bean1:调用构造器创建Bean2:调用静态工厂方法创建Bean3:调用实例工厂方法创建Bean一:调用构造方法创建Bean 调用构造方法创建Bean是最常用的一种..._spring bean如何创建

scanner读取带空格字符串_Scanner中nextInt()和nextline()读取字符串的问题-程序员宅基地

文章浏览阅读669次。importjava.util.Scanner;public classMain {public static voidmain(String[] args) {ints1;String s2;Scanner sc= newScanner(System.in);System.out.print("请输入第一个数:");s1=sc.nextInt();System.out.print("请输入第二个..._sc.nextline()读到了空字符串

springmvc——Day01-程序员宅基地

文章浏览阅读214次。springmvc 第一天 springmvc的基础知识 课程安排:第一天:springmvc的基础知识什么是springmvc?springmvc框架原理(掌握) 前端控制器、处理器映射器、处理器适配器、视图解析器springmvc入门程序 目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习 非注解的处理器映射器、处理器适配器 ...

生产者-消费者模型_sem_init 生产者 消费者-程序员宅基地

文章浏览阅读304次。在写生产者—消费者模型时,先谈及一个概念——信号量。 sem函数: (1)sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。 value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程内线程共享,还是由进程之间共享。如果 pshared 的值为 0,那么信号量将被进程内的线程共享,并且应该放置在这个进程的所有线程_sem_init 生产者 消费者

随便推点

Pytorch 技巧 torch.clamp_ 限定输入矩阵内的值到指定范围内_th.clamp_-程序员宅基地

文章浏览阅读1.1k次。torch.clamp(input, min, max, out=None) → TensorClamps all elements in input into the range [ min, max ]. Letting min_value and max_value be min and max, respectively, this returns:将input内的值限定在(min,max)区间内。yi=min⁡(max⁡(xi,min_valuei),max_valuei)y_i = \m_th.clamp_

c++使用智能指针时,尽量不要暴露原始指针_c++获取指针不使用原指针-程序员宅基地

文章浏览阅读1.1k次。 c++使用智能指针 ,如std::auto_ptr apstr1(new string("test")); 不应写成:string* str1 = new string("test")); std::auto_ptr apstr1(str1);。  总之c++使用智能指针时,尽量不要暴露原始指针,比较不会产生不必要的问题。 _c++获取指针不使用原指针

Pie_pie kai-程序员宅基地

文章浏览阅读125次。PieMy birthday is coming up and traditionally I’m serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should be one piece o_pie kai

Jackson 与 fastJson 对象与json字符串互相转换_fastjson unrecognized field-程序员宅基地

文章浏览阅读724次。Jacksonjava对象与json字符串互相转换的关键就是ObjectMapper对象的writeValue()方法 和 readValue()方法;其中json字符串可以字符串的形式传入/传出,也可以以文件的形式传入/传出,见writeValue()方法 和 readValue()方法不同的参数。ObjectMapper mapper = new ObjectMapper(); // java对象转换为json字符换String Json = mapper.writeValueAsStrin_fastjson unrecognized field

[RK3568 Android11] 开发之编译源码_error: hardware/rockchip/librga/android.bp:18:1: m-程序员宅基地

文章浏览阅读1.6k次。目录前言一、环境搭建二、完整编译三、部分编译四、编译报错问题五,烧入系统,Android11界面展示前言 编译源码是作为底层驱动工程师首要进行的工作,源码没有编译和编译不成功,是没有办法进行下一步调试,而且每个原厂厂商都有自己一套的编译方式;所以此篇文件讲解下RK3568 Android11 SDK源码编译步骤和遇到的编译问题; 编译的方式有两种:完整编译和部分编译; 完整编译:自动全部编译完成,生成升级所需要的update...._error: hardware/rockchip/librga/android.bp:18:1: module "gen_rga_version": m

PowerPC的八卦情史_powerpc收购-程序员宅基地

文章浏览阅读676次。出处:http://www.eefocus.com/demi/blog/09-10/178204_659af.html 昨天参加了power.org。这对我完全是未知领域,于是今昨两天看了几年来关于powerPC比较重要的“旧闻”,发现其历史嬗变简直是一部江湖恩怨世情小说…… Intel有史以来最大的竞争对手据说是80年代的摩托罗拉,当时俩公司在危机处理器上掐的你死我活。当时是由于 IBM PC 兼容机的逐步普及,技术上相对落后的英特尔反而占了更多_powerpc收购