Chinese

标签传播算法

因为标注成本比较高,当你的训练数据集只有一部分数据是有标注的情况下,使用监督学习你只能扔掉那些没有标注的X。而实际上,有标注的样本和无标注的样本之间是有关系的,这种关系信息也可以用来帮助学习。这就是半监督学习标签传播(Label Propagation)算法的思路。

它的基本逻辑是借助于近朱者赤的思路,也就是KNN的思路,如果A和B在X空间上很接近,那么A的Y标签就可以传给B。进一步迭代下去,如果C和B也很接近,C的标签也应该和B一样。所以基本计算逻辑就是两步,第一步是计算样本间的距离,构建转移矩阵,第二步是将转移矩阵和Y矩阵相乘,Y里面包括了已标注和未标注的两部分,通过相乘可以将已标注的Y转播给未标注的Y。具体论文可以看这里。在sklearn模块中已经内置了这种算法,文档示例可以看这里。下面是用python的numpy模块实现的一个toy demo。

值乎?

刚开通了值乎,有趣的数据问题可以来问我,当然一分钟比较短啦。有严肃的长问题还是去知乎问我吧。


python中的数据工具箱

最近参加了第九届北京R语言大会,做了一个关于python的简单介绍。相关ppt在如下连接,需要的下载。
链接: http://pan.baidu.com/s/1dEGl63f 密码: k3y6
博客,只要有时间,我还是会继续坚持的。

基于深度LSTM的中文分词

本例尝试的用多层LSTM来玩中文分词,大部分代码和之前的文章是一样的。不一样的就是使用了更复杂的模型,用了多个LSTM叠加在一起。这对于句子这种有时序特征的数据更有帮助。在前面部分的代码是计算了字向量,但是发现是没有太大必要。除了用多层LSTM,后面还尝试了双向LSTM,效果也还可以。

自夸

李舰和我合写的一本书在2015年的7月份上市了,今天来自推一下这本书。此书是面向于初学者,提供宽而浅的导论性质读物。

http://book.douban.com/subject/26576631/

数据科学是将数据转化为行动的艺术,是综合了统计学、计算机科学和领域知识的新兴学科。数据科学与很多传统学科的最大区别在于其为应用而生,因此本书一切从实际应用出发,以R语言为核心工具,介绍了各类分析方法的实现及其在各领域的应用情况。

如果是初学者,可以从“编程篇”开始阅读,了解R语言的基本特点。如果是程序员,在迅速掌握语法后,可以深入研究“模型篇”,学习如何用统计学和其他流行的分析方法来描绘复杂的数据世界。如果关心数据价值的落地,“应用篇”必不负你所望,金融、制药、文本挖掘、社交网络、地理信息、高性能计算、可重复研究,这些最热门的行业和应用领域的案例将会为你带来数据应用的最真实的体验。

本书适用于所有对数据应用感兴趣的读者,也适合作为统计和数据分析的实务操作型课程的教材。

深度学习入门资源索引

深度学习(Deep Learning)属于非常前沿的学科,没有现成的的综合型教材,主要是通过阅读大量论文和代码练习来学习。值得读的经典论文很多,下面介绍的一些教程中多少都有提及,另外就是去google重要文献。代码方面推荐使用python为基础的theano框架,因为它比较偏底层,可以从细节掌握如何构建一个深度学习模块,而且方便结合python在数据领域的其它积累,例如numpy。当然到了生产环境你可以再考虑torch之类的框架。从代码角度切入学习的好处是,理解起来不会像理论切入那么枯燥,可以很快做起一个好玩的东西。当然,最后你还是得补充理论的。下面精选介绍一些本人在学习时遇到的好教程。

1、入门首选:
http://deeplearning.net/tutorial/
该站提供了一系列的theano代码示范,通过研究模仿,就可以学会包括NN/DBN/CNN/RNN在内的大部分主流技术。其中也有很多文献连接以供参考。

2、BP神经网络:
http://neuralnetworksanddeeplearning.com/
第1部分的教程中,神经网格的参数是theano自动求导的,如果想深入了解细节,还得手动推导加代码实现一遍。该教程对BP神经网络的理论细节讲的非常好。

3、理论补充:
http://goodfeli.github.io/dlbook/
该书内容比较广泛,虽未最终完成,但已初见气象。用来完善理论知识是再好不过。

4、图像处理中的卷积神经网络:
http://vision.stanford.edu/teaching/cs231n/syllabus.html
前面三部分相当于导论,比较宽泛一些,该教程则是专注于卷积神经网络在图像视觉领域的运用,CNN方面知识由此深入。

5、自然语言处理中的深度学习:
http://cs224d.stanford.edu/
本教程则偏重于深度学习在自然语言处理领域的运用,词向量等方面知识由此深入。

6、递归神经网络:
http://www.wildml.com/
该博客讲的RNN是非常棒的系列,不可不读。

7、keras框架:
http://keras.io/
keras框架是基于theano的上层框架,容易快速出原型,网站中提供的大量实例也是非常难得的研究资料。

8、深度学习和NLP
https://github.com/nreimers/deeplearning4nlp-tutorial/tree/master/2015-10_Lecture
该教程是第5部分的补充,理论讲的不多,theano和keras代码讲的很多,附带的代码笔记很有参考价值。

9、机器学习教程
https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/
牛津大学的机器学习课程,讲到了大量深度学习和强化学习的内容,适合于复习过一遍。

10、搭建硬件平台
http://xccds1977.blogspot.com/2015/10/blog-post.html
到这里,你的理论和代码功力应该差不多入门了,可以组个GPU机器来大干一场了。可以参考笔者这个博客来攒个机器。

11、去kaggle实战玩玩吧
http://www.kaggle.com/

如何搭建一台深度学习服务器

在计算机时代的早期,一名极客的满足感很大程度上来源于能DIY一台机器。到了深度学习的时代,前面那句话仍然是对的。

缘起
在2013年,MIT科技评论将深度学习列为当年十大科技突破之首。其原因在于,模型有其为庞大的网络结构,参数够多,学习能力够强,能配合大数据达到惊人的效果。而且,能自动学习特征,避免了“特征工程”这种繁琐的手工劳动。对于图像、音频和文字处理领域有极大的意义。因为最近在尝试用深度学习做文本挖掘,所以需要一台深度学习服务器(相信我,如果用CPU来跑,你的人生显得好短)。

那么就有三个选择项:
A、购买组装好的服务器,例如NVIDIA DIGITS DEVBOX
B、购买云服务,例如Amazon的GPU服务
C、自己攒一台深度学习服务器。
A项从性价比上不合算,而且不一定买的到。B项的云服务对于研究探索性质工作而言也比较贵,机器配置也不一定合适,所以我们就C项了。

硬件选择:基本思路是单显卡机器,保留升级空间

显卡选择:
先解释一点,深度学习为什么需要显卡计算?
GPU 是为大规模的并行运算而优化;
GPU 上则更多的是运算单元(整数、浮点的乘加单元,特殊运算单元等等);
GPU 往往拥有更大带宽的显存,因此在大吞吐量的应用中也会有很好的性能。
这里有一个很有趣的解释视频,解释了GPU和CPU的计算区别。

所以显卡选择最重要,因为准备基于CUDA计算(CUDA (Compute Unified Device Architecture) 是NVIDIA开发的GPU并行计算环境。),所以只能选择Nvida系列的。在英伟达产品系列中,有消费领域的GeForce系列,有专业绘图领域的Quadro系列,有高性能计算领域的Tesla系列,如何选择?

有论文研究,太高的精度对于深度学习的错误率是没有提升的,而且大部分的环境框架都只支持单精度,所以双精度浮点计算是不必要,Tesla系列都去掉了。从显卡效能的指标看,CUDA核心数要多,GPU频率要快,显存要大,带宽要高。这样,最新Titan X算是价格便宜量又足的选择。

CPU选择:
在深度学习任务中,CPU并不负责主要任务,单显卡计算时只有一个核心达到100%负荷,所以CPU的核心数量和显卡数量一致即可,太多没有必要,但是处理PCIE的带宽要到40。

主板选择:
需要支持X99架构,支持PCIe3.0,还要支持4通道DDR4内存架构。如果要搞四显卡并行,PCIE带宽支持要达到40,并且支持4-Way NVIDA SLI技术。

内存:
达到显存的二倍即可,当然有钱的话越大越好。

电源问题:一个显卡的功率接近300W,四显卡建议电源在1500W以上,为了以后扩展,选择了1600W的电源。

机箱散热:
因为各种部件相当庞大,需要有良好散热功能的大机箱,选择了Tt Thermaltake Core V51机箱,标配3个12cm风扇。未来如果需要还可以加装水冷设备。

以上就是主要硬件环境的选择和安装。

软件环境安装:

主要安装了Ubuntu系统,CUDA环境,以及theano、keras环境

1、安装ubuntu 14.04(不要安装麒麟版本)
通过官网下载iso文件刻录U盘安装,在SSD硬盘上自动安装完成。
2、安装cuda 7.5 deb文件(自带显卡驱动)
2.1 获取CUDA安装包,在NVidia官网下载local deb文件。
2.2执行如下命令安装:
    $ sudo dpkg -i cuda-repo-ubuntu1410-7-0-local_7.0-28_amd64.deb
    $ sudo apt-get update
    $ sudo apt-get install cuda
2.3设置环境变量:sudo gedit /etc/profile
    $ export PATH=/usr/local/cuda-7.5/bin:$PATH
    $ export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
2.4重启机器:用其中一个样例进行验证测试
    $ cuda-install-samples-7.5.sh ~
    $ cd ~/NVIDIA_CUDA-Samples_7.5/5_Simulations/nbody
    $ make
    $ ./nbody
    或者在sample目录中make测试项目1_utility,再运行./deviceQuery

3、安装python以及theano工具
3.1 直接下载安装anaconda套件64位版本。
    下载后用conda升级到最新。anaconda自带openblas,使numpy和theano计算能达到最大效能
3.2 修改了theano配置文件,使之缺省由gpu运算
在主目录下新建.theanorc文件
.theanorc中输入下面的内容
[cuda]
root=/usr/local/cuda/bin/
[global]
floatX = float32
device = gpu0
[nvcc]
fastmath = True
3.3 安装完成后参考如下地址进行测试
THEANO_FLAGS=floatX=float32,device=gpu python `python -c “import os, theano; print os.path.dirname(theano.__file__)”`/misc/check_blas.py
3.4 安装keras
    通过anaconda安装pip install keras
    注意keras依赖的theano是dev版本的,需要从github下源码来安装。注意本系统此时有两个python,所以要写路径
    sudo /home/user/anaconda/bin/python setup.py develop

4、设置远程服务器调用
4.1 安装ssh,启动服务
4.2 设置notebook server
在ipython中如下命令设置密码:
from IPython.lib import passwd
passwd()
记下生成的字符串。
创建一个ipython配置文件,比如起名叫myserver
ipython profile create myserver
vim ~/.ipython/profile_myserver/ipython_notebook_config.py
编辑文件,加入下面几项:
c = get_config()
c.IPKernelApp.pylab = ‘inline’ #启动inline模式
c.NotebookApp.ip = ‘*’
c.NotebookApp.open_browser = False
c.NotebookApp.password = u’sha1:yourhashedpassword’  #把第二步的密码考进来
c.NotebookApp.port = 6868   #自己设一个端口号
启动服务
ipython notebook –profile=myserver

4.3 远程浏览器调用
远程中浏览器登陆http://192.168.3.31:6868/,输入密码,即可进入ipython notebook。
如果需要保持连接,则
nohup ipython notebook –profile=myserver
杀掉连接
lsof nohup.out
kill -9 “PID”

完工!

最后的硬件配置:
CPU: Intel X99平台 i7 5960K
内存: DDR4 2800 32G(8G*4)
主板: GIGABYTE X99-UD4
显卡: GTX Titan X
硬盘: SSD+普通硬盘

系统和软件
操作系统: Ubuntu 14.04.3 x64
CUDA: 7.5
Anaconda 2.3
Theano 7.0
Keras 2.0

参考资料:
http://timdettmers.com/2014/08/14/which-gpu-for-deep-learning/
http://timdettmers.com/2015/03/09/deep-learning-hardware-guide/
http://graphific.github.io/posts/running-a-deep-learning-dream-machine/
http://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#ubuntu-x86_64-deb
http://deeplearning.net/software/theano/tutorial/using_gpu.html#cuda

之前网上找到另一种安装theano方式是自行安装组件。但尝试未成功,有可能是因为CPU等硬件不同,可能需要自行编译安装openblas,numpy, scipy, theano等环境,极为繁琐。最后还是直接用Anaconda方便。