深度强化学习[Deep Reinforcement Learning]相关工作

此处列下要阅读学习的论文,待后续逐步增添其内容。 【0】. 强化学习经典教材 贡献:非常系统地介绍了强化学习的常用算法,在第二版最后章节添加了强化学习与心理学和神经学研究的关联性。 Sutton R S, Barto A G. Reinforcement learning: An introduction[M]. Cambridge: MIT press, 1998. 【1】. 2013年DeepMind团队Mnih等人在NIPS workshop上提出了深度强化学习的开创性工作DQN,在视频游戏领域取得突破。此工作使得DeepMind公司一战成名。 贡献:首次提出DQN,引起谷歌公司的注意并以4亿美元被其收购,致力于解决AI问题。 Mnih V, Kavukcuoglu K, Silver D, et al. Playing atari with deep reinforcement learning[C]//Proceedings of the NIPS Workshop on … 继续阅读

漫谈四种神经网络序列解码模型【附示例代码】

以下为漫谈,即瞎聊,利用通俗的语言来谈谈神经网络模型中4种序列解码模型,主要是从整体概念和思路上进行通俗解释帮助理解。预警,以下可能为了偷懒就不贴公式了,一些细节也被略过了,感兴趣的可以直接去阅读原文[1][2][3]。 [1] Sequence to Sequence Learning with Neural Networks [2] Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation [3] Neural Machine Translation by Jointly Learning to Align and Translate 利用神经网络进行序列编码的模型主要为RNN,目前比较火的一些变种模型有LSTM和GRU,只是cell单元不同而已。以下统统用RNN来代表。 编码模型比较简单,如下图所示,输入文本{X1-X6}经过循环迭代编码,在每个时刻得到当前时刻的一个隐层状态,最后序列结束后进行特征融合得到句子的表示。注意,一种比较常用的方式是将编码模型最后一个时刻的隐层状态做为整个序列的编码表示,但是实际应用中这种效果并不太好,因而我们的图例中直接采用了整个序列隐层编码进行求和平均的方式得到序列的编码向量。 早期的一些任务主要是做一些主题分类、情感检测等等分类任务,那么在编码向量上面添加一个softmax就可以解决问题。但是对于机器翻译和语音识别等问题则需要进行序列化解码。 注意到,编码时RNN每个时刻除了自己上一时刻的隐层状态编码外,还有当前时刻的输入字符,而解码时则没有这种输入。那么,一种比较直接的方式是把编码端得到的编码向量做为解码模型的每时刻输入特征。如下图所示: 简单直观而且解码模型和编码模型并没有任何区别,然而学者感觉该模型并不优雅,那么接下来我们就来介绍一些精巧点的吧。 =============此处开始转入瞎聊模式============== 我们用考试作弊来做为一个通俗的例子来解释一下模型。 首先我们假设输入文本是所学课本,编码端则是对课本的理解所整理的课堂笔记。解码端的隐层神经网络则是我们的大脑,而每一时刻的输出则是考试时要写在卷子上的答案。在上面最简单的解码模型中,可以考虑成是考试时一边写答案一边翻看课堂笔记。如果这是一般作弊学生的做法,学霸则不需要翻书,他们有一个强大的大脑神经网络,可以记住自己的课堂笔记。解码时只需要回顾一下自己前面写过什么,然后依次认真的把答案写在答卷上,就是下面这种模型了[1]: 还有很多学弱,他们不只需要作弊,而且翻看笔记的时候还需要回顾自己上一时刻写在答卷上的答案(学弱嘛,简直弱到连自己上一时刻写在答卷上的文字都记不住了),就是下面的答题模式了[2]: … 继续阅读

DeepLearning常用库简要介绍与对比

网上近日流传一张DL相关库在Github上的受关注度对比(数据应该是2016/03/15左右统计的): 其中tensorflow,caffe,keras和Theano排名比较靠前。 今日组会报告上tj师弟从个人使用经验上做了简单介绍与对比,分享给大家。 ===================华丽的分隔线==================== 师弟的原文出处:http://tianjun.me/essays/102/ 本文将从deep learning 相关工具库的使用者角度来介绍下github上stars数排在前面的几个库(tensorflow, keras, torch, theano, skflow, lasagne, blocks)。由于我的主要研究内容为文本相关的工作,所以各个库的分析带有一定主观因素,以RNN模型为主,CNN相关的内容了解得不是特别深入(本文没有比较caffe和mxnet,其实主要原因还是自己C++太久没用了……)。 阅读本文你会了解: 1. 各个库是如何对神经网络中的结构和计算单元进行抽象的; 2. 如何用每个库跑RNN相关的模型; 3. 各个库学习和使用的难以程度对比; 4. 在各个库基础之上进一步改进和开发的难易程度. 本文不会涉及: 1. 各个库运行时间效率的对比(我没有自己做过相关的对比实验,但是网上有很多数据可以查); 2. CNN相关模型的构建(前面提到了自己最近对这块了解得不多); 3. RNN相关模型的原理和解释(网上很多资料,可以先学习后再进一步阅读). 先说说这几个库之间的大致关系 对于一个优秀的深度学习系统,或者更广来说优秀的科学计算系统,最重要的是编程接口的设计。他们都采用将一个领域特定语言(domain specific language)嵌入到一个主语言中。例如numpy将矩阵运算嵌入到python中。这类嵌入一般分为两种,其中一种嵌入的较浅,其中每个语句都按原来的意思执行,且通常采用命令式编程(imperative programming),其中numpy和Torch就是属于这种。而另一种则用一种深的嵌入方式,提供一整套针对具体应用的迷你语言。这一种通常使用声明式语言(declarative programing),既用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括Caffe,theano和刚公布的TensorFlow。 以上是摘自MXNet设计和实现中的一段话。理解了这段话后,对后面各个库的进一步理解很有帮助。MXNet的设计者表示融合了这两种编程模式,我们先抛开mxnet,如上所述torch是采用命令式编程,然后theano和tensorflow是采用声明式编程,skflow对常用的tensorflow的封装,lasagne是对theano的封装,blocks除了对theano进行封装之外还提供了额外的处理机制,keras则是用一套接口同时封装了theano和tensorflow,如下图所示。 从theano说起 前面说theano是声明式语言,其基本过程可以描述为以下几步: 1. … 继续阅读

基于Theano的DNN框架Blocks使用简要总结

Blocks官方代码地址:https://github.com/mila-udem/blocks Blocks是加拿大Montreal大学Bengio实验室牵头开发的基于Python的神经网络模型框架,可方便地在大规模数据上进行复杂神经网络模型的训练。它包含有很多外置工具包如,logging, monitoring, visualization, and serialization,而Fuel则提供了数据格式的标准化。 Fuel官方代码地址:https://github.com/mila-udem/fuel 由于Blocks仍在进一步开发中,以下说明中遇到的错误可能已被修复,因而只可作为参考[注:当前时间2016/03/01]。 1. 安装Blocks和Fuel: 安装git,git的安装和使用可参考[Bitbucket-团队开发私有库使用指南, http://jacoxu.com/?p=1611] 接下来安装blocks,由于需要通过github下载,进入git bash,输入: pip install git+git://github.com/mila-udem/blocks.git \ -r https://raw.githubusercontent.com/mila-udem/blocks/master/requirements.txt 注:a). 实际运行中,可修改一下requirements.txt文件中所定义的库,如numpy等在安装ANACOND的时候都已经安装,那么可以删除掉requirements.txt文件中对应依赖行。 b). 若执行过程中有错误可能会导致blocks没有正常安装,则需要重新执行一下 pip install git+git://github.com/mila-udem/blocks.git 若安装成功则在c:\anaconda2\lib\site-packages 目录下可以看到和blocks及fuel相关的4个文件夹,并且在在python模式下执行如下两行命令,不报错即可: from blocks.bricks import Tanh from fuel.datasets import MNIST 说明Blocks和Fuel已经可以正常调用。 2. 利用Fuel下载数据集 … 继续阅读

神经记忆网络、神经机器翻译和神经图灵机的初步探讨

近期看过神经记忆网络、神经机器翻译和神经图灵机三篇工作之后在基于对话历史的信息抽取工作上进行了初步对比尝试,根据自己的理解进行了模型对比。欢迎大家一起讨论。 首先三篇工作的文献分别出自: [1] 神经记忆网络:2015 NIPS, End-To-End Memory Networks (Facebook AI) [2] 神经机器翻译:2015 ICLR, Neural Machine Translation by Jointly Learning to Align and Translate [3] 神经图灵机:2014 ArXiv, Neural Turing Machines (Google DeepMind) 其中神经记忆网络和神经机器翻译的模型框图如下: 实验数据:1000轮垂直领域完整对话历史的信息抽取问题 – 神经记忆网络数据格式: 1 小姐 您 怎么 称呼 … 继续阅读

Win7配置Theano环境,附Ubuntu+TensorFlow安装

可参考Windows安装Theano官方教程: http://deeplearning.net/software/theano/install_windows.html#install-windows 但是内容太多,不看也罢,很多软件已经不需要配置,或者是冗余的。如果你恰好和我一样都是Windows系统,Nvidia带GPU显卡,且你安装的时间离现在2016/02/03的日子还比较近,那么按照下面的顺序装机吧: 1. 安装Nvidia显卡驱动,官网: http://www.nvidia.cn/Download/index.aspx?lang=cn 2. 安装Visual_Studio: https://www.visualstudio.com/ 3. 安装JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html 4. 安装CUDA 使用GPU加速(选择自己的配置,如Windows – x86_64-7-local) https://developer.nvidia.com/cuda-downloads 5. 安装ANACOND可以免去安装很多Python库的麻烦: https://www.continuum.io/downloads#_windows 6. Python IDE: PyCharm: http://www.jetbrains.com/pycharm/download/#section=windows 7. 配置G++ 官网给的建议是安装TDM-GCC(http://tdm-gcc.tdragon.net/),但是我安装之后出现g++加载错误,不确定是不是版本不匹配的问题。在参考博文(http://blog.sina.com.cn/s/blog_96b836170102vq22.html)中提到可以安装MinGW解决g++问题,解决方案为:在cmd输入:conda install mingw libpython,MinGW等文件夹会自动装到anaconda下面。 8. 安装Theano https://github.com/Theano/Theano/archive/master.zip 解压,进入目录在命令行中执行“python setup.py develop” 9. 配置GPU和G++编译环境:创建文件C:\Users\jacoxu\.theanorc,内容如下: … 继续阅读

思考一下Memory的形式

【声明】:如下观点均是个人鄙见,尽可能地引出论文出处,有待同大家一起讨论商榷。 【一】. 2015-ICLR-《Neural Machine Translation by Jointly Learning to Align and Translate》 【二】. 2015-ACL-《Neural Responding Machine for Short-Text Conversation》 【三】. 2015-ICLR-《Memory Networks》 序,统一概念: 句子中的词向量化表示 和 段落中的句子向量化表示 意思逻辑一致。【1,2】两篇文章均是在句子层面的,因而采用句子/词 的表示方法,而在【3】QA系统应用中 对应为 段落/句子。 论文【一】观点: 应用领域:机器翻译系统。 1.1    输入端所有输入文本信息都压缩到固定长度的向量的方法是错误的; 原因:句子较长时,即输入信息较多时,解码能力变差,即模型解析能力变弱。(摘自【原文P1第三段】A potential issue with this encoder–decoder … 继续阅读

RAM与QA相关文章资源列表

RAM并非Random-Access Memory,而是DL领域时下热门的Reasoning, Attention, Memory。NIPS2015将于12月5日组织一个RAM (Reasoning, Attention, Memory) workshop,组织方则是Facebook AI Research的Jason Weston (Memory Networks作者) ,Reference列表中的文章都挺不错,近日查阅了几篇QA相关的文章及资源整理如下。整理粗糙,望谅解。文章列表从近日最新的工作往前开始追溯: (如下文章中引用率出自Google scholar-2015/11/02) [1]. 《Empirical Study on Deep Learning Models for QA》 时间:2015/10/26,单位:US IBM Watson,作者:Yang Yu 数据集:Facebook’s bAbI (问答系统) 动机:深入探究Memory组件和Attention机制在解决QA问题中的应用。虽然之前的文章中有提及很相关的工作神经图灵机(NTM,Neural Turing Machine)和神经机器翻译(NMT,Neural Machine Translation)模型,且很多工作已经采用机器翻译模型解决QA任务,但并没有论文采用NMT和NTM解决QA问题。因而本文在Facebook的人工构造QA数据集上融合并对比了当下热门三种DL方法:Neural Machine Translation,Neural Turing … 继续阅读

Global Vectors-使用小试

Socher 2014 EMNLP 中给出一个新的词向量方法:GloVec 官方下载地址为:http://nlp.stanford.edu/projects/glove/ 按照说明进行编译make,不过编译时出现错误,从他人经验中看,应该是GCC版本的问题。 $gcc -v gcc version 4.3.4 这里有建议为4.7.3 版本,http://blog.csdn.net/adooadoo/article/details/38505497 那么更新一下版本吧,先查看一下本地服务器的Linux版本: $lsb_release -a Distributor ID: SUSE LINUX Description: SUSE Linux Enterprise Server 11 (x86_64) Release: 11 Codename: n/a 这里有提供多种版本的GCC 4 SUSE http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/,不过基于二进制文件进行安装的步骤很繁琐,例如是这样子的:http://blog.csdn.net/cloudskyfhx/article/details/17660607 另一种方式是:suse 的安装包里面有gcc,使用命令yast2,打开图形界面,找到软件管理,查找gcc,点击安装,系统会帮你装好的。 你下载二进制的包,有很多依赖包要装,很麻烦。。。。反正就是各种麻烦,组里的好多服务器申请权限又需要时间,想想就麻烦,还是用自家的虚拟机Ubuntu虚拟机吧。 自家Ubuntu的GCC版本是gcc version … 继续阅读