不写R包的分析师不是好全栈

深度学习简析,TensorFlow,Torch,Theano,Mxnet

    技术学习


Deep Learning


“Deep learning is a branch of machine learning based on a set of algorithms that attempt to model high-level abstractions in data by using multiple processing layers with complex structures or otherwise, composed of multiple non-linear transformations”



  • Deeplearning大多指的是各种不同类型的Deep Network

    • Deep Neural Network

    • Deep Belief Network

    • etc…





深度学习擅长处理的问题


“深度模型有极为庞大的网络结构,参数够多,学习能力够强,能配合大数据达到惊人的效果。而且,能自动学习特征,避免了“特征工程”这种繁琐的手工劳动。对于图像、音频和文字处理领域有极大的意义。 –xccd



  • 本身可以用于分类和回归

  • 信噪比较大,数据较全

  • 文字,图片,视频

    • 识别图片

    • 手写识别(Kaggle)

    • 语音识别(讯飞)






GPU



  • 显卡的计算核心

  • 由NVIDIA由1999年提出

  • 代替CPU完成更高效的显示,计算(11~18)


GPU




NVIDIA做了什么?



  • 贡献GPU的概念

  • 为科研机构免费赠送计算显卡

  • CUDA(GPU并行计算框架)

  • CuDNN(GPU加速的深度学习)


CUDA




GPU有多快



  • img

  • img

  • img

  • img




不同的深度框架


frame




主要的框架





































框架名来源语言特点
Tensor FlowGooglePython,C++谷歌出品,必数精品
TorchIDIAP (Torch)LUA,C速度极快(FB的fbcunn是基于Torch)
TheanoUniversity of MontrealPython十多个深度学习的包都是由Theano发展而来
MXnetDMLCPython, R, Julia, Go, JNI专业的分布式设计,接口完全

当然还有很多比较有名的框架:



  • Caffe/Caffe2,作者贾扬清6800+Stars

  • convnetjs,基于JS的深度学习框架

  • h2o,基于JAVA开发,有python和R的接口.由商业公司H2O.ai开发

  • Expresso,拥有GUI界面的框架




TensorFlow


tf



优点



  • Google的稳定框架

  • 与Theano类似的符号编程

  • 快速开发




缺点



  • 速度慢,内存占用大(较于Torch)

  • 有一些Bug待修复(比如Loop)




应用场景



  • Gmail邮箱

  • 谷歌图片

  • 语音识别





Tensor Flow


Linux + Google


# For CPU-only version
$ pip install https://storage.googleapis.com/tensorflow/linux \
/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

# For GPU-enabled version (only install this version if you have the CUDA sdk installed)
$ pip install https://storage.googleapis.com/tensorflow \
/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl



Tensor Flow


限制计算能力在3.5以上的显卡



  • NVidia Titan

  • NVidia Titan X

  • NVidia K20

  • NVidia K40




Theano


tf - 应用最广泛的python深度学习包



优点



  • 采用symbolic tensor graph来进行编程

    • y=ReLU(W*x+b)

    • 编译成C++或者CUDA


  • 更高的扩展性

  • 二次开发之后的包保证易用性Blocks,Keras




缺点



  • 编译过程相对缓慢(框架成本高)

  • 效率难以提高

    • 只有python框架,没有C++/CUDA






Theano



安装


sudo apt-get install python-numpy python-scipy \
python-dev python-pip python-nose g++ git libatlas3gf-base libatlas-dev
sudo pip install Theano




Torch


tf



优点



  • 速度快

  • 打包好的接口,卷积函数等




缺点



  • 没有python/R接口

  • 学习曲线比较陡峭

  • 扩展性较差,layerwise approach.






MXnet


tf - Distributed (Deep) Machine Learning Common



优点



  • @陈天奇领队开发,算法框架稳定(xgboost)

  • 接口完全,不需要二次开发(R/Python/Julia/Go/…)

  • 分布式计算框架




缺点



  • 安装稍微复杂一点

  • R包处于开发阶段(有望推出windows版本)





MXnet



安装


git clone –recursive https://github.com/dmlc/mxnet
sudo apt-get update
sudo apt-get install -y build-essential git libblas-dev libopencv-dev
make -j4
Rscript -e "install.packages(‘devtools’, repo = ‘https://cran.rstudio.com')"
cd R-package
Rscript -e "library(devtools); library(methods);\
options(repos=c(CRAN=’https://cran.rstudio.com')); \
install_deps(dependencies = TRUE)"
cd ..
make rpkg
R CMD INSTALL mxnet_0.5.tar.gz




Deep Learn



例子,动物图像识别



  • 识别1000种不同的动物

  • 随机在百度选几张图片作为测试

  • 见示例代码


http://karpathy.github.io/2015/10/25/selfie/





Twitter自拍得分



  • 爬虫爬取7,000,000自拍图片

  • 样本标记

    • 计算图片获得赞的比例

    • (赞的人数/看过该自拍的人数)

    • 去除异常数据(tag较多,名人效应..)

    • 比例最高的1百万作为正样本

    • 最低的1百万作为负样本


  • 扔到Deeplearning(Caffe)训练ConvNet


png http://karpathy.github.io/2015/10/25/selfie/




最终结论



  • 发挥足够开发能力:

    • TensorFlow(Python-users)

    • Theano


  • 即学即用:

    • MXnet(R/Py)

    • Torch


  • 一台配置GPU的机器,比如,NVIDIA DIGITS DevBox


dev



page PV:  ・  site PV:  ・  site UV: