Category Archives: ML&DL

CNN

CNN卷积神经网络原理简介

CNN的结构,以经典的LeNet5来说明:

LeNet5这张图从左到右,先是input,这是输入层,即输入的图片。input-layer到C1这部分就是一个卷积层(convolution运算),C1到S2是一个子采样层(pooling运算),关于卷积和子采样的具体过程可以参考下图:

 

CNN的基本结构大概就是这样,由输入、卷积层、子采样层、全连接层、分类层、输出这些基本“构件”组成,一般根据具体的应用或者问题,去确定要多少卷积层和子采样层、采用什么分类器。当确定好了结构以后,如何求解层与层之间的连接参数?一般采用向前传播(FP)+向后传播(BP)的方法来训练

多层感知机(MLP)原理简介

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:

从上图可以看到,多层感知机层与层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接)。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。

多层感知机层与层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接)。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。

输入层没什么好说,你输入什么就是什么,比如输入是一个n维向量,就有n个神经元。

隐藏层的神经元怎么得来?首先它与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是

f(W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f 可以是常用的sigmoid函数或者tanh函数:

       

最后就是输出层,输出层与隐藏层是什么关系?其实隐藏层到输出层可以看成是一个多类别的逻辑回归,也即softmax回归,所以输出层的输出就是softmax(W2X1+b2),X1表示隐藏层的输出f(W1X+b1)。
MLP整个模型就是这样子的,上面说的这个三层的MLP用公式总结起来就是,函数G是softmax

深度学习框架的评估与比较

人工智能无疑是计算机世界的前沿领域,而深度学习无疑又是人工智能的研究热点,那么现在都有哪些开源的深度学习工具,他们各自的优缺点又是什么呢?最近zer0nbamos在GitHub上发表了一篇文章,对CaffeCNTKTensorFlowTheanoTorch等深度学习工具从网络、模型能力、接口、部署、性能、架构、生态系统、跨平台等方面做了比较

网络和模型能力

Caffe可能是第一个主流的工业级深度学习工具,它开始于2013年底,具有出色的卷积神经网络实现。在计算机视觉领域Caffe依然是最流行的工具包,它有很多扩展,但是由于一些遗留的架构问题,它对递归网络和语言建模的支持很差。此外,在Caffe中图层需要使用C++定义,而网络则使用Protobuf定义。

CNTK由深度学习热潮的发起演讲人创建,目前已经发展成一个通用的、平台独立的深度学习系统。在CNTK中,网络会被指定为向量运算的符号图,运算的组合会形成层。CNTK通过细粒度的构件块让用户不需要使用低层次的语言就能创建新的、复杂的层类型。

TensorFlow是一个理想的RNN(递归神经网络) API和实现,TensorFlow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,但TensorFlow并不支持双向RNN和3D卷积,同时公共版本的图定义也不支持循环和条件控制,这使得RNN的实现并不理想,因为必须要使用Python循环且无法进行图编译优化。

Theano支持大部分先进的网络,现在的很多研究想法都来源于Theano,它引领了符号图在编程网络中使用的趋势。Theano的符号API支持循环控制,让RNN的实现更加容易且高效。

Torch对卷积网络的支持非常好。在TensorFlow和Theano中时域卷积可以通过conv2d来实现,但这样做有点取巧;Torch通过时域卷积的本地接口使得它的使用非常直观。Torch通过很多非官方的扩展支持大量的RNN,同时网络的定义方法也有很多种。但Torch本质上是以图层的方式定义网络的,这种粗粒度的方式使得它对新图层类型的扩展缺乏足够的支持。与Caffe相比,在Torch中定义新图层非常容易,不需要使用C++编程,图层和网络定义方式之间的区别最小。

接口

Caffe支持pycaffe接口,但这仅仅是用来辅助命令行接口的,而即便是使用pycaffe也必须使用protobuf定义模型。

CNTK的使用方式与Caffe相似,也是通过指定配置文件并运行命令行,但CNTK没有Python或者任何其他高级语言的接口。

TensorFlow支持Python和C++两种类型的接口。用户可以在一个相对丰富的高层环境中做实验并在需要本地代码或低延迟的环境中部署模型。

Theano支持Python接口。

Torch运行在LuaJIT上,与C++、C#以及Java等工业语言相比速度非常快,用户能够编写任意类型的计算,不需要担心性能,唯一的问题就是Lua并不是主流的语言。

模型部署

Caffe是基于C++的,因此可以在多种设备上编译,具有跨平台性,在部署方面是最佳选择。

CNTK与Caffe一样也是基于C++并且跨平台的,大部分情况下部署非常简单。但是它不支持ARM架构,这限制了它在移动设备上的能力。

TensorFlow支持C++接口,同时由于它使用了Eigen而不是BLAS类库,所以能够基于ARM架构编译和优化。TensorFlow的用户能够将训练好的模型部署到多种设备上,不需要实现单独的模型解码器或者加载Python/LuaJIT解释器。但是TensorFlow并不支持Windows,因此其模型无法部署到Windows设备上。

Theano缺少底层的接口,并且其Python解释器也很低效,对工业用户而言缺少吸引力。虽然对大的模型其Python开销并不大,但它的限制摆在那,唯一的亮点就是它跨平台,模型能够部署到Windows环境上。

Torch的模型运行需要LuaJIT的支持,虽然这样做对性能的影响并不大,但却对集成造成了很大的障碍,使得它的吸引力不如Caffe/CNTK/TensorFlow等直接支持C++的框架。

性能

在单GPU的场景下,所有这些工具集都调用了cuDNN,因此只要外层的计算或者内存分配差异不大其表现都差不多。本文的性能测试是基于Soumith@FB的ConvNets基准测试来做的。

Caffe 简单快速。

CNTK 简单快速。

TensorFlow仅使用了cuDNN v2,但即使如此它的性能依然要比同样使用cuDNN v2的Torch要慢1.5倍,并且在批大小为128时训练GoogleNet还出现了内存溢出的问题

Theano在大型网络上的性能与Torch7不相上下。但它的主要问题是启动时间特别长,因为它需要将C/CUDA代码编译成二进制,而TensorFlow并没有这个问题。此外,Theano的导入也会消耗时间,并且在导入之后无法摆脱预配置的设备(例如GPU0)。

Torch非常好,没有TensorFlow和Theano的问题。

另外,在多GPU方面,CNTK相较于其他的深度学习工具包表现更好,它实现了1-bit SGD和自适应的minibatching。

架构

Caffe的架构在现在看来算是平均水准,它的主要痛点是图层需要使用C++定义,而模型需要使用protobuf定义。另外,如果想要支持CPU和GPU,用户还必须实现额外的函数,例如Forward_gpuBackward_gpu;对于自定义的层类型,还必须为其分配一个int类型的id,并将其添加到proto文件中。

TensorFlow的架构清晰,采用了模块化设计,支持多种前端和执行平台。

Theano 的架构比较变态,它的整个代码库都是Python的,就连C/CUDA代码也要被打包为Python字符串,这使得它难以导航、调试、重构和维护。

Torch7和nn类库拥有清晰的设计和模块化的接口。

跨平台

Caffe、CNTK和Theano都能在所有的系统上运行,而TensorFlow和Torch则不支持Windows。

from:http://www.infoq.com/cn/news/2016/01/evaluation-comparison-deep-learn

ML 工程师需了解的 10 大算法

那么如果你想进一步了解机器学习,你应该怎样开始呢?对我来说,我的入门是我在哥本哈大学留学时,参加的一个人工智能的课程。我的讲师是丹麦科技大学的一个全职的应用数学和计算机科学的教授,他主要研究逻辑学和人工智能,主要致力于使用逻辑学来对人类的计划,推理,和求解问题的过程进行建模。这个课程是针对理论/核心概念和动手解决问题的讨论。我们所用的课本是人工智能的经典之一: Peter Norvig’s Artificial Intelligence — A Modern Approach,其中涵盖的主题主要包括:智能代理,问题求解,敌对搜索,概率论,多智能体系统,社会AI,哲学/伦理学/人工智能的未来。课程的最后,三个人一组,我们实现了一个简单的基于搜索的代理,能够在虚拟环境下解决运输任务来作为编程项目。

多亏这个课,我学会了大量的知识,并决定继续学习这个专业的主题。在过去的几周里,我参加了旧金山的多个技术讲座,主要是关于深度学习,神经网络,数据结构的。还有一个机器学习的会议,很多该领域的专业人士都在场。最重要的是,我六月初的时候参加了Udacity的介绍机器学习(Intro to Machine Learning )的在线课程,并在前几天刚刚完成。在这篇文章中,我想分享一些我从课程中学习到的最常见的机器学习算法。

机器学习算法可以被分为三大类—监督学习,非监督学习,和强化学习。有监督的学习在数据集(训练集)的属性(标签)已知的条件下是有用的,但是在没有标签时,就失去作用了,需要使用其他方法来进行预测。当我们面临的是没有标记的数据(属性没有预先赋值),并且需要我们发现其中隐含的关系时,非监督学习就会很有用。增强学习介于这两个极端之间——对于每一个预测步骤或动作,都会有某种形式的反馈,但是没有确切的标签或着错误信息。因为这是一个入门课,我并不了解强化学习。但我希望这10个有监督和无监督学习算法就足够引起你的兴趣。

 

有监督的学习

1.决策树:决策树是一个使用类树图形,或者决策模型和其可能结果的决策支持工具,包括偶然事件的结果,资源成本和效用。看一下下面的图片感受一下它是什么样的。

 

从商业决策的角度来看,大多数时候,一个决策树就是使用最小数量的必须要问的是或不是的问题,来评估做出正确决策的可能性。作为一个方法,它允许你以一个结构化的和系统的方式来处理这个问题,从而得到一个合乎逻辑的结论。

 

2. 朴素贝叶斯分类:朴素贝叶斯分类是一族基于贝叶斯定理和特征之间的强独立性(朴素)的简单分类器。显著特点是方程式—— P(A|B) 是后验概率,P(B|A)  是似然概率,P(A) 是类的先验概率,P(B) 是预测的先验概率。

 

一些现实中的例子:

  • 标记一个电子邮件为垃圾邮件或非垃圾邮件
  • 将新闻文章分为技术类、政治类或体育类
  • 检查一段文字表达积极的情绪,或消极的情绪?
  • 用于人脸识别软件

 

3. 普通的最小二乘回归:如果你了解统计学,你以前可能听说过线性回归。最小二乘法是一种进行线性回归的方法。你可以把线性回归当作使用一条直线来拟合一系列的点的任务。有多种可能的方法来做到这一点,最小二乘的策略是这样的——你可以画一条线,然后对于每一个数据点,计算数据点和这条线的垂直距离,然后把它们加起来;拟合的线就是那个总和的距离尽可能小的线。

线性是指你用来拟合数据的模型,而最小二乘指的是你正在最小化的误差的度量。

4. 逻辑回归:逻辑回归是一种强大的统计方法,它使用一个或者更多的解释变量对一个二项式结果建模。它通过使用logistic 函数估计概率,这是累积 logistic  分布,来度量分类变量和一个或者更多的自变量之间的关系。

 

通常,回归可以被用于在现实世界的应用,如:

  • 信用评分
  • 度量营销活动的成功率
  • 预测某一产品的收入
  • 在一个特定的日子里会发生地震吗?

5. 支持向量机(SVM):支持向量机是一个二分类算法。给出N维空间的一组二分类的点,支持向量机产生一个 N-1 维的超平面将这些点分成两组。假设你在一张纸上有一些线性可分的二分类的点,支持向量机将会找到一条直线,将这些点分成两类,并位于离所有这些点尽可能远的位置。

就规模而言,其中一些最主要的问题已经使用支持向量机解决了(通过适当的修改),如,入广告显示,人类的剪接位点识别,基于图像的性别检测,大规模图像分类等等。

 

6. 集成方法:集成方法是构建一组分类器,然后通过对预测结果进行加权投票来对新的数据点进行分类。原始的集成方法是贝叶斯平均,但最近的算法包括纠错输出编码,bagging, 和boosting。

那么集成方法是怎样工作的,为什么他们会优于单个的模型?

  • 他们拉平了输出偏差:如果你将具有民主党倾向的民意调查和具有共和党倾向的民意调查取平均,你将得到一个中和的没有倾向一方的结果。
  • 它们减小了方差:一堆模型的聚合结果和单一模型的结果相比具有更少的噪声。在金融领域,这被称为多元化——多只股票的混合投资要比一只股票变化更小。这就是为什么数据点越多你的模型会越好,而不是数据点越少越好。
  • 它们不太可能产生过拟合:如果你有一个单独的没有过拟合的模型,你是用一种简单的方式(平均,加权平均,逻辑回归)将这些预测结果结合起来,然后就没有产生过拟合的空间了。

 

非监督学习

7. 聚类算法:聚类是将一组对象进行分组,使得同一组(簇)内的对象相似性远大于不同组之间的相似性。

每一种聚类算法都不太一样,这里有一些:

  • 基于质心的算法
  • 基于连通性的算法
  • 基于密度的算法
  • 概率聚类
  • 降维
  • 神经网络/深度学习

 

8. 主成分分析(PCA):主成分分析是一个统计过程,它使用正交变换,将一组可能相关的变量的一组观测值变换成线性不相关的变量,这些变量称为主成分。

PCA的应用包括压缩,简化数据使它们更容易学习,可视化。注意,选择是否使用主成分分析,领域知识是非常重要的。当数据充满噪声时,主成分分析是不合适的(主成分分析的所有成分都有很高的方差)。

 

9. 奇异值分解(SVD):在线性代数中,SVD是分解一个实数的比较复杂的矩阵。对于一个给定的m*n的矩阵M,存在一个分解M = UΣV,这里U和V是酉矩阵,Σ是一个对角矩阵。

PCA 是 SVD 的一个简单应用,在计算机视觉中,第一个人脸识别算法,就运用了 PCA 和 SVD 算法。使用这两个算法可以将人脸表示为 “特征脸”线性组合,降维,然后通过简单的方法匹配人脸的身份;虽然现代的方法复杂得多,但许多仍然依赖于类似的技术。

10. 独立成分分析(ICA):独立成分分析是一种统计方法,用来揭示随机变量集测试,信号集中的隐藏因素。独立成分分析为观测到的多变量的集合定义生成模型,它通常作为大型的样本数据数据库。在这个模型中,数据变量被假定为与一些潜在的未知变量的线性混合,混合系统也不知道。潜在变量被假设为非高斯并且相互独立的,它们被称为所观察到的数据的独立成分。

ICA 和 PCA 是相关的,但是它是一种更强大的技术,当那些经典的方法完全失效的时候,它能够从数据源中发现潜在的因素。它的应用包括数字图像,文档数据库,经济指标和心理测量。

英文出处:James Le

from:http://blog.jobbole.com/104457/

推荐系统相关资源汇总

为了更好的学习推荐系统,本博文将个人知道的关于推荐系统的相关资源整理汇总,拿出来与大家分享。本博文每月更新一次,长期维护,如果你有好的关于推荐系统的资源,请email我,放到这里与大家分享。

主页

数据集

论坛

会议

书籍

Recommender Systems Handbook: 阅读

from:http://www.diandianlab.com/%E5%AD%A6%E6%9C%AF%E6%B1%9F%E6%B9%96/cat_ico9/100.html

Machine Learning &Deep Learning Resource

基础:

什么是机器学习?
机器学习该怎么入门?
机器学习的八个步骤
神经网络:卷积神经网络
数据挖掘学习图谱
图解机器学习
深度学习概述:从感知机到深度网络
A gentle guide to machine learning
Conv Nets: A Modular Perspective
周剑铭 柳渝:机器与“学习”——寻找人工智能的幽灵
一天搞懂深度學習
机器学习自学指南
一文读懂 CNN、DNN、RNN 内部网络结构区别
何为机器学习特征选择的经典三刀?
A Guide to Deep Learning by  YN2

数学及算法基础:
机器学习(一) 简单的背景介绍、线性回归、梯度下降
机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
线性判别分析(LDA), 主成分分析(PCA)
麻省理工公开课:线性代数
李航老师的《统计学习方法》

框架:

 最好的Python机器学习库
SciKit-Learn
Caffe
Torchnet(Facebook)
TensorFlow(Google)
deeplearning4j

应用:

Neural Network for Recognition of Handwritten Digits
MNIST  OCR
ImageNet
TensorFlow在图像识别中的应用
探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
机器学习问题的十个实例

平台 :

大数据竞赛平台——Kaggle 入门

课程:

Machine Learning
Neural Networks for Machine Learning

资源汇总:
机器学习入门资源不完全汇总
DeepLearning.net
josephmisiti/awesome-machine-learning · GitHub 机器学习资源大全
《机器学习实践》源码和《机器学习-算法原理与编程实践》源码以及学习心得
Learn Machine Learning With These Six Great 
博客文章索引
参考文献和Deep Learning学习资源
李航《浅谈我对机器学习的理解》 机器学习与自然语言处理
机器学习(Machine Learning)&深度学习(Deep Learning)资料
DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
python sample code of DL
Scipy Lecture Notes
scikit-learn: machine learning in Python
Keras中文文档
机器学习资源大全中文版
机器学习的最佳入门学习资源
机器学习(Machine Learning)&深度学习(Deep Learning)资料

职位技能及需求:

大数据职位所需的数据场技能