机器学习基本概念知识汇

目录

    • 目录
    • 背景
    • 机器学习
      • 基本概念
      • 机器学习方法
        • 监督学习
        • 无监督学习
        • 半监督式学习
        • 强化学习
        • 机器学习中分类与聚类的本质区别
          • 分类
          • 聚类
          • 分类与聚类的比较
      • 机器学习算法分类
        • 回归算法
        • 基于实例的算法
        • 决策树学习
        • 贝叶斯方法
        • 基于核的算法
        • 聚类算法
        • 降低维度算法
        • 关联规则学习
        • 集成算法
        • 人工神经网络
      • 机器学习算法比较
      • 机器学习算法应用光学字符识别
        • 基本概念
        • 基本思想
        • 基本识别步骤
        • 参考
      • 机器学习算法应用人脸识别
        • 人脸识别基本分类
        • 人脸识别基本流程及方法
          • 基本流程
          • 基于PCA的人脸识别方法
        • 人脸识别优秀公司
    • 深度学习
        • 深度学习基本概念
        • deep learning训练过程
        • Deep Learning的常用模型或者方法
          • AutoEncoder自动编码器
          • Deep Belief Networks深信度网络
          • Convolutional Neural Networks卷积神经网络
            • 特点
            • 约束
            • CNN的网络结构
            • CNN网络训练步骤
            • LeNet-5

背景

本文是前段时间打算转行人工智能方向时,总结的关于机器学习,摄影测量/及研究生课题等一些基本内容,算是面试前的一个突击学习,今日整理一下,以备日后查阅。
本文是集各位网友的博客收集总结而来,由于学习过程中记录不全,只列出了部分链接,未列出的部分请各位谅解。

mark 上海杨浦区佳木斯路星巴克 2018.02.10


机器学习

1. 基本概念

机器学习是英文名称Machine Learning(简称ML)的直译。机器学习涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
相对于传统的计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去即可。机器学习根本不接受你输入的指令,相反,它只接受你输入的数据!也就是说它某种意义上具有了我们人处理事情的能力。

2. 机器学习方法

机器学习分为:监督学习,无监督学习,半监督学习,强化学习

监督学习:

监督学习:从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。训练集中的目标是由人标注的。监督学习就是最常见的分类(注意和聚类区分)问题,通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优表示某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。也就具有了对未知数据分类的能力。监督学习的目标往往是让计算机去学习我们已经创建好的分类系统(模型)。

监督学习是训练神经网络和决策树的常见技术。这两种技术高度依赖事先确定的分类系统给出的信息,对于神经网络,分类系统利用信息判断网络的错误,然后不断调整网络参数。对于决策树,分类系统用它来判断哪些属性提供了最多的信息。

在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。
监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)

(1) regression:Y是实数vector。回归问题,就是拟合(X,Y)的一条曲线,使得下式cost function L最小。

(2) classification:Y是一个finite number,可以看做类标号。分类问题需要首先给定有label的数据训练分类器,故属于有监督学习过程。分类问题中,cost function L(X,Y)是X属于类Y的概率的负对数。
,其中fi(X)=P(Y=i | X);

属于监督式学习的算法有:回归模型,决策树,随机森林,K邻近算法,逻辑回归等

无监督学习

无监督学习:在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。

无监督学习的目的是学习一个function f,使它可以描述给定数据的位置分布P(Z)。 包括两种:density estimation & clustering.

density estimation就是密度估计,估计该数据在任意位置的分布密度
clustering就是聚类,将Z聚集几类(如K-Means),或者给出一个样本属于每一类的概率。由于不需要事先根据训练数据去train聚类器,故属于无监督学习。

属于无监督式学习的算法有:关联规则,K-means聚类算法等。

解释1:输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。通俗点将就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类器设计。
解释2:非监督学习目标不是告诉计算机怎么做,而是让它(计算机)自己去学习怎样做事情。非监督学习有两种思路。第一种思路是在指导Agent时不为其指定明确分类,而是在成功时,采用某种形式的激励制度。需要注意的是,这类训练通常会置于决策问题的框架里,因为它的目标不是为了产生一个分类系统,而是做出最大回报的决定,这种思路很好的概括了现实世界,agent可以对正确的行为做出激励,而对错误行为做出惩罚。

无监督学习的方法分为两大类:
(1) 一类为基于概率密度函数估计的直接方法:指设法找到各类别在特征空间的分布参数,再进行分类。
(2) 另一类是称为基于样本间相似性度量的简洁聚类方法:其原理是设法定出不同类别的核心或初始内核,然后依据样本与核心之间的相似性度量将样本聚集成不同的类别。

利用聚类结果,可以提取数据集中隐藏信息,对未来数据进行分类和预测。应用于数据挖掘,模式识别,图像处理等。

属于无监督式学习的算法有:关联规则,K-means聚类算法等。

PCA和很多deep learning算法都属于无监督学习。

半监督式学习:

半监督学习:在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。
应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

强化学习:

强化学习:在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习(Temporal difference learning)

机器学习中分类与聚类的本质区别

机器学习中有两类的大问题,一个是分类,一个是聚类

分类

分类有如下几种说法,但表达的意思是相同的。

  • 分类(classification):分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y中。
  • 分类:根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种目标函数),使它能够对未知类别的样本进行分类。这属于supervised learning(监督学习)。
  • 分类:通过学习来得到样本属性与类标号之间的关系。

用自己的话来说,就是我们根据已知的一些样本(包括属性与类标号)来得到分类模型(即得到样本属性与类标号之间的函数),然后通过此目标函数来对只包含属性的样本数据进行分类。

分类算法的局限
分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。但是很多时候上述条件得不到满足,尤其是在处理海量数据的时候,如果通过预处理使得数据满足分类算法的要求,则代价非常大,这时候可以考虑使用聚类算法。

分类和回归都可用于预测,两者的目的都是从历史数据纪录中自动推导出对给定数据的推广描述,从而能对未来数据进行预测。与回归不同的是,分类的输出是离散的类别值,而回归的输出是连续数值。二者常表现为决策树的形式,根据数据值从树根开始搜索,沿着数据满足的分支往上走,走到树叶就能确定类别。

   要构造分类器,需要有一个训练样本数据集作为输入。训练集由一组数据库记录或元组构成,每个元组是一个由有关字段(又称属性或特征)值组成的特征向量,此 外,训练样本还有一个类别标记。一个具体样本的形式可表示为:(v1,v2,…,vn; c);其中vi表示字段值,c表示类别。分类器的构造方法有统计方法、机器学习方法、神经网络方法等等。
1)预测准确度;2)计算复杂度;3)模型描述的简洁度。

聚类

聚类的相关的一些概念如下

  • 聚类:指事先并不知道任何样本的类别标号,希望通过某种算法来把一组未知类别的样本划分成若干类别,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,这在机器学习中被称作 unsupervised learning (无监督学习)
  • 通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。
  • 聚类的目标:组内的对象相互之间时相似的(相关的),而不同组中的对象是不同的(不相关的)。组内的相似性越大,组间差别越大,聚类就越好。
    与分类技术不同,在机器学习中,聚类是一种无指导学习。也就是说,聚类是在预先不知道欲划分类的情况下,根据信息相似度原则进行信息聚类的一种方法。聚 类的目的是使得属于同类别的对象之间的差别尽可能的小,而不同类别上的对象的差别尽可能的大。因此,聚类的意义就在于将观察到的内容组织成类分层结构,把 类似的事物组织在一起。通过聚类,人们能够识别密集的和稀疏的区域,因而发现全局的分布模式,以及数据属性之间的有趣的关系。

分类方法:K-均值聚类算法、K-中心点聚类算法、CLARANS、BIRCH、CLIQUE、DBSCAN等。
[参考链接]https://www.cnblogs.com/batys/p/3274138.html

分类与聚类的比较

• 聚类分析是研究如何在没有训练的条件下把样本划分为若干类。
• 在分类中,对于目标数据库中存在哪些类是知道的,要做的就是将每一条记录分别属于哪一类标记出来。
• 聚类需要解决的问题是将已给定的若干无标记的模式聚集起来使之成为有意义的聚类,聚类是在预先不知道目标数据库到底有多少类的情况下,希望将所有的记录组成不同的类或者说聚类,并且使得在这种分类情况下,以某种度量(例如:距离)为标准的相似性,在同一聚类之间最小化,而在不同聚类之间最大化。
• 与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据样本有类别标记。
要说明内容
因为最近在研究者两种算法,也就刚好用来说一下分类和聚类不同的算法。

[参考链接]http://blog.csdn.net/u010412719/article/details/46726625

机器学习算法分类

1. 回归算法

回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。
常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)

2. 基于实例的算法

基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM)
深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示

3. 决策树学习

决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)

4. 贝叶斯方法

贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN)。

5. 基于核的算法

基于核的算法中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:支持向量机(Support Vector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等。

6. 聚类算法

聚类,就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

EM算法,指的是最大期望算法(Expectation Maximization Algorithm,又译期望最大化算法),是一种迭代算法,在统计学中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。
EM算法的思想是:
1, 给θ自主规定个初值(既然我不知道想实现“两个碟子平均分配锅里的菜”的话每个碟子需要有多少菜,那我就先估计个值);
2,根据给定观测数据和当前的参数θ,求未观测数据z的条件概率分布的期望(在上一步中,已经根据手感将菜倒进了两个碟子,然后这一步根据“两个碟子里都有菜”和“当前两个碟子都有多少菜”来判断自己倒菜的手感);
3,上一步中z已经求出来了,于是根据极大似然估计求最优的θ’(手感已经有了,那就根据手感判断下盘子里应该有多少菜,然后把菜匀匀);
4,因为第二步和第三步的结果可能不是最优的,所以重复第二步和第三步,直到收敛(重复多次匀匀的过程,直到两个碟子中菜的量大致一样)。
而上面的第二步被称作E步(求期望),第三步被称作M步(求极大化),于是EM算法就在不停的EM、EM、EM….,所以被叫做EM算法,你看,多形象(摊手)。

7. 降低维度算法

像聚类算法一样,降低维度算法试图分析数据的内在结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

8. 关联规则学习

关联规则学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。

9. 集成算法

集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

10. 人工神经网络

人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)

机器学习算法比较:

常见的机器学习算法
以下是最常用的机器学习算法,大部分数据问题都可以通过它们解决:
本章节待完善

  • 1.线性回归 (Linear Regression)
  • 2.逻辑回归 (Logistic Regression)
  • 3.决策树 (Decision Tree)
  • 4.支持向量机(SVM)
    http://blog.csdn.net/resourse_sharing/article/details/45505113

  • 5.朴素贝叶斯 (Naive Bayes)
    1.朴素贝叶斯
    优点:
     朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
     对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;
     对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    缺点:
     需要计算先验概率;
     分类决策存在错误率;
     对输入数据的表达形式很敏感。
    参考:http://blog.csdn.net/amds123/article/details/70173402

  • 6.K邻近算法(KNN)

  • 7.K-均值算法(K-means)
  • 8.随机森林 (Random Forest)
  • 9.降低维度算法(DimensionalityReduction Algorithms)
  • 10.GradientBoost和Adaboost算法

参考:
http://www.csuldw.com/2016/02/26/2016-02-26-choosing-a-machine-learning-classifier/

机器学习算法应用——光学字符识别

1. 基本概念

OCR (Optical Character Recognition,光学字符识别):是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

2. 基本思想

一般OCR套路是这样的

  • 1.先检测和提取Text region.
  • 2.接着利用radon hough变换 等方法 进行文本校正。
  • 3.通过投影直方图分割出单行的文本的图片。
  • 4.单行的OCR

对单行的OCR主要由两种思想

  • 第一种是需要分割字符的。
    分割字符的方法也比较多,用的最多的是基于投影直方图极值点作为候选分割点并使用分类器+beam search 搜索最佳分割点。
    搜索到分割点之后对于单个字符,传统的就是特征工程+分类器。 一般流程是 灰度 - 二值化->矫正图像 -> 提取特征(方法多种多样例如pca lbp 等等) ->分类器(分类器大致有SVM ANN KNN等等 )。
    现在的 CNN(卷积神经网络)可以很大程度上免去特征工程。
  • 第二种是无需分割字符的
    还有一点就是端到端(end to end)的识别,但前提是你需要大量的标注好的数据集。 这种方法可以不分割图像直接以连续的输出字符序列。
    对于短长度的可以使用mutli-label classification 。比如像车牌,验证码。 这里我试过一个车牌的多标签分类。 车牌识别中的不分割字符的端到端(End-to-End)识别
    google做街景门牌号识别就是用的这种方法。

如果字符序列长度较比如很长的手写体 而且不固定的话。可以使用类似于语音识别中采用的方法,让训练好的单个字符分类器在序列图像上滑动,输出概率图,接着用 lstm rnn 等序列模型+ ctc loss输出字符序列。 像现在的tesseract 4.0 已经使用lstm来进行ocr了。

3. 基本识别步骤

首先OCR是模式识别的一个领域,所以整体过程也就是模式识别的过程。其过程整体来说可以分为以下几个步骤:

  • 1.预处理:对包含文字的图像进行处理以便后续进行特征提取、学习。这个过程的主要目的是减少图像中的无用信息,以便方便后面的处理。在这个步骤通常有:灰度化(如果是彩色图像)、降噪、二值化、字符切分以及归一化这些子步骤。经过二值化后,图像只剩下两种颜色,即黑和白,其中一个是图像背景,另一个颜色就是要识别的文字了。降噪在这个阶段非常重要,降噪算法的好坏对特征提取的影响很大。字符切分则是将图像中的文字分割成单个文字——识别的时候是一个字一个字识别的。如果文字行有倾斜的话往往还要进行倾斜校正。归一化则是将单个的文字图像规整到同样的尺寸,在同一个规格下,才能应用统一的算法。
  • 2.特征提取和降维:特征是用来识别文字的关键信息,每个不同的文字都能通过特征来和其他文字进行区分。对于数字和英文字母来说,这个特征提取是比较容易的,因为数字只有10个,英文字母只有52个,都是小字符集。对于汉字来说,特征提取比较困难,因为首先汉字是大字符集,国标中光是最常用的第一级汉字就有3755个;第二个汉字结构复杂,形近字多。在确定了使用何种特征后,视情况而定,还有可能要进行特征降维,这种情况就是如果特征的维数太高(特征一般用一个向量表示,维数即该向量的分量数),分类器的效率会受到很大的影响,为了提高识别速率,往往就要进行降维,这个过程也很重要,既要降低维数吧,又得使得减少维数后的特征向量还保留了足够的信息量(以区分不同的文字)。
  • 3.分类器设计、训练和实际识别:分类器是用来进行识别的,就是对于第二步,你对一个文字图像,提取出特征给,丢给分类器,分类器就对其进行分类,告诉你这个特征该识别成哪个文字。在进行实际识别前,往往还要对分类器进行训练,这是一个监督学习的案例。成熟的分类器也很多,什么svm,kn,神经网络etc。我当时不知天高地厚用经典bp神经网络去学习,结果……呵呵……
  • 4.后处理:后处理是用来对分类结果进行优化的,第一个,分类器的分类有时候不一定是完全正确的(实际上也做不到完全正确),比如对汉字的识别,由于汉字中形近字的存在,很容易将一个字识别成其形近字。后处理中可以去解决这个问题,比如通过语言模型来进行校正——如果分类器将“在哪里”识别成“存哪里”,通过语言模型会发现“存哪里”是错误的,然后进行校正。第二个,OCR的识别图像往往是有大量文字的,而且这些文字存在排版、字体大小等复杂情况,后处理中可以尝试去对识别结果进行格式化,比如按照图像中的排版排列什么的,举个栗子,一张图像,其左半部分的文字和右半部分的文字毫无关系,而在字符切分过程中,往往是按行切分的,那么识别结果中左半部分的第一行后面会跟着右半部分的第一行诸如此类。

参考

知乎钟翰廷
知乎JackYu

机器学习算法应用—–人脸识别

人脸识别:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别、面部识别。

人脸识别系统主要包括四个组成部分,分别为:人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及匹配与识别。

人脸识别基本分类

  • 1:1 人脸识别算法主要使用场景
    身份验证:支付宝,Ipone, 远程的互联网客户认证
  • 1:N人脸识别算法主要用于人脸检索
    排查犯罪嫌疑人、失踪人口的全库搜寻、一人多证的重复排查,身份识别
  • 拍照和直播APP的人脸图像叠加
  • 未来最大的使用端是机器人视觉交互

人脸识别基本流程及方法

人脸识别的基本算法:
主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法、基于模板的方法和基于模型的方法。

  1. 基于几何特征的方法是最早、最传统的方法,通常需要和其他算法结合才能有比较好的效果;

  2. 基于模板的方法可以分为基于相关匹配的方法、特征脸方法、线性判别分析方法、奇异值分解方法、神经网络方法、动态连接匹配方法等。

  3. 基于模型的方法则有基于隐马尔柯夫模型,主动形状模型和主动外观模型的方法等。
基本流程
基于PCA的人脸识别方法

基于PCA的人脸识别算法:
PCA(主成分分析),在此我们介绍通过PCA进行人脸识别的步骤。

  • 1 读取训练集图像数据
    读取测试集目录下指定个数的图像,然后将其保存在一个二维数组中。如果图像个数为m,图像长宽为i、j,则我们创建一个二维数组A[m][i*j=n]用来保存图像数据。数组的每一行表示一个图像的所有像素信息,每一列表示一个随机变量,也即不同图像同一位置的像素信息,降维也即用更少的列来代表图像。
  • 2 每列减去均值
    将步骤一的每列减去该列的均值,这样每列的数据均值为0。在利用matlab的函数princomp执行PCA的过程中,princomp会首先将每一列减去该列均值,不用我们自己执行。
  • 3 计算协方差矩阵
    协方差矩阵表示不同随机变量之间的相互关系,图像中也即求任意两个像素之间的关系。如果两个随机变量的协方差为正或为负,表明两个变量之间具有相关性,如果为零表示两个变量不相关。通过计算协方差矩阵,我们就可以获得不同像素之间的关系。针对人脸识别,计算的协方差矩阵大小为n*n,其中n表示图像的像素点个数。
  • 4 计算协方差矩阵的特征值和特征向量
    由于协方差矩阵是实对称阵,所以可以求得其所有的特征值和特征向量,其共有n个特征值和特征向量。
  • 5 选择主成分
    所谓主成分即是具有最大特征值的特征向量,所以我们需要将特征向量按照特征值由大到小排序,然后根据精度要求选择不同数量的特征向量,例如我们选择了前p个特征向量,通常p远小于n(在我们的人脸识别实验中,为了达到95%的精度,p只有72,而n为120*140=17040)。
  • 6 将训练集进行降维
    此步骤将原始的训练集进行降维变换,原始的图像数据是m*n的矩阵,只包含主成分的特征向量构成一个n*p的矩阵(每一列都是一个特征向量)。将两个矩阵相乘,我们即可获得降维之后的图像矩阵m*p,这个矩阵远小于原始的图像数据。
  • 7 将测试集进行降维
    同步骤6相似,读取所有的测试集图像,然后对其也进行降维操作。如果测试集有M幅图像,则降维后的矩阵为M*p。
  • 8 人脸识别
    该步骤为人脸识别的最后一步,用来对测试集进行识别,并计算识别准确率。该步骤有一个限制,测试集中的头像必须包含在训练集中,否则得出的结果将没有意义(这也就是代码一开始要求训练集大于测试集的目的)。识别的方法和最初的图像匹配方法类似:将测试集中的每一幅降维图像与降维的训练集进行匹配,然后将其分类到距离最小的训练集头像中,如果两个头像表示一个人,表示识别成功,否则表示识别失败。与原始的匹配相比

人脸识别优秀公司

技术实力”,还是要看LFW榜和FDDB榜。face++ 99.5% , 商汤 Deepid3 99.53% , 腾讯 Tencent 99.65% , 百度 Baidu 99.77%,颜鉴(ColorReco)99.64%,北京飞搜科技 Faceall 99.4% ,都是一线了,赶超国外的google

Face++
• 清华创业团队推出人脸云识别开放平台 Face++

深度学习

2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。
这篇文章有两个主要观点:
1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类
2)深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。

参考:http://blog.csdn.net/boon_228/article/details/51700507

当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。
深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是可以用较少的参数表示复杂的函数)

深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。
区别于传统的浅层学习,深度学习的不同在于:
1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;
2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。

1. 深度学习基本概念

深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习是无监督学习的一种。

深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。

BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源。
BP算法存在的问题:
(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;
(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);
(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;

2. deep learning训练过程

如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。

2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x’尽可能一致。
方法是:

1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。

将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。

Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。

deep learning训练过程具体如下:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;
2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。

3. Deep Learning的常用模型或者方法

1. AutoEncoder自动编码器

待完善……..

2.Deep Belief Networks深信度网络

DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)

3. Convolutional Neural Networks卷积神经网络

卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。

1.特点
  • 局部连接:邻两层之间使用局部连接来获取图像的局部特性,具体来说,第m层的隐层单元只与第m-1层的局部区域有连接,第m-1层的这些局部区域被称为空间连续的接受域
  • 权值共享:对整个图像进行一次卷积操作,不同局部区域使用的是同一个卷积核(即权重参数相同),由此生成了一个特征映射(feature map)。通过不同的卷积核对整个图像进行卷积可生成不同的 feature map
2. 约束
  1. 特征提取:每一个神经元从上一层的局部接受域得到突触输入,因而迫使它提取局部特征。一旦一个特征被提取出来, 只要它相对于其他特征的位置被近似地保留下来,它的精确位置就变得没有那么重要了。
  2. 特征映射:网络的每一个隐含层都是由多个特征映射(feature map)组成的,每个特征映射都是二阶张量形式的。张量中的神经元共享同一种卷积核,这种结构形式具有如下的有益效果:a.平移不变性。b.自由参数数量的缩减(通过权值共享实现)。
  3. 子采样(pooling):每个卷积层后面跟着一个实现局部平均和子抽样的计算层,由此特征映射的分辨率降低。这种操作能够使特征映射的输出对平移和其他变形的敏感度下降。
3. CNN的网络结构

通常神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。S-元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。
卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。
机器学习基本概念知识汇_第1张图片
图:卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。
由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

关于参数减少与权值共享
CNN一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数
下图左:如果我们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如下图右:假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个0(数量级),这样训练起来就没那么费力了,但还是感觉很多的啊,那还有啥办法没?
机器学习基本概念知识汇_第2张图片
我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??只有100个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有100个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?这个……共同学习。
总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

4. CNN网络训练步骤
  • [1]卷积 convolution
  • [2]滑动的步长 stride
  • [3]卷积的边界处理(padding)
    tensorflow中卷积的 padding参数可以设为两个值SAME,VALID
    VALID模式如上图所示,对原始图像进行卷积,卷积后的矩阵只有3×3阶,比原来的图片要小了
    SAME模式要求卷积后的feature map与输入的矩阵大小相同,因此需要对输入矩阵的外层包裹n层0,然后再按照VALID的卷积方法进行卷积。n的求法如下式:
    • SAME:edge_row = (kernel_row - 1) / 2; edge_cols = (kernel_cols - 1) / 2;
    • VALID:edge_row = edge_cols = 0;
    其中,edge_row是包裹0的行数,edge_cols是包裹0的列数 , kernel_row就卷积核的行数
  • [4]池化(Pooling)
    通过将卷积层提取到的特征输入至分类器中进行训练,可以实现输出最终的分类结果。理论上可以直接将卷积层提取到的所有特征输入至分类器中,然而这将需要非常大的计算开销。例如:对于一个输入为96×96大小的图像样本,假设在卷积层使用200个8×8大小的卷积核对该输入图像进行卷积运算操作,每个卷积核都输出一个(96-8+1)×(96-8+1)=7921维的特征向量,最终卷积层将输出一个7921×200=1584200维的特征向量。将如此高维度的特征输入至分类器中进行训练需要耗费非常庞大的计算资源,同时也会产生严重的过拟合问题。
    由于图像具有 “静态性”,在图像的一个局部区域得到的特征极有可能在另一个局部区域同样适用。因此,可以对图像的一个局部区域中不同位置的特征进行聚合统计,这种操作称为“池化”(也称作子采样)。池化分为两种,一种是最大池化,在选中区域中找最大的值作为Pooling后的值,另一种是平均值池化,把选中的区域中的平均值作为Pooling后的值。
    参考:http://blog.csdn.net/u010089444/article/details/52563213
5. LeNet-5

LeNet-5是一个运用卷积神经网络进行手写数字识别的模型
机器学习基本概念知识汇_第3张图片
1. 输入层:输入图像大小为32 × 32 = 1024。
2. C1层:这一层是卷积层。滤波器的大小是5×5 = 25,共有6 个滤波器。得到6 组大小为28 × 28 = 784 的特征映射。因此,C1层的神经元个数为6 × 784 = 4, 704。可训练参数个数为6 × 25 + 6 = 156。连接数为156 × 784 = 122, 304(包括偏置在内,下同)。
3. S2 层:这一层为子采样层。由C1层每组特征映射中的2×2 邻域点次采样为1 个点,也就是4 个数的平均。这一层的神经元个数为14 × 14 = 196。可训练参数个数为6 × (1 + 1) = 12。连接数为6 × 196 × (4 + 1) = 122, 304 (包括偏置的连接)
4. C3 层:这一层是卷积层。由于S2 层也有多组特征映射,需要一个连接表来定义不同层特征映射之间的依赖关系。LeNet-5 的连接表如下图所示,这样的连接机制的基本假设是:C3层的最开始的6 个特征映射依赖于S2层的特征映射的每3 个连续子集。接下来的6 个特征映射依赖于S2 层的特征映射的每4 个连续子集。再接下来的3 个特征映射依赖于S2 层的特征映射的每4 个不连续子集。最后一个特征映射依赖于S2 层的所有特征映射。这样共有60 个滤波器,大小是5 × 5 = 25。得到16 组大小为10×10 = 100 的特征映射。C3层的神经元个数为16×100 = 1, 600。可训练参数个数为(60 × 25 + 16 = 1, 516。连接数为1, 516 × 100 = 151, 600。
5. S4 层:这一层是一个子采样层,由2×2 邻域点次采样为1 个点,得到16 组5×5 大小的特征映射。可训练参数个数为16 × 2 = 32。连接数为16 × (4 + 1) = 2000。
6. C5 层:是一个卷积层,得到120 组大小为1 × 1 的特征映射。每个特征映射与S4层的全部特征映射相连。有120 × 16 = 1, 920 个滤波器,大小是5 × 5 = 25。C5层的神经元个数为120,可训练参数个数为1, 920 × 25 + 120 = 48, 120。连接数为120 × (16 × 25 + 1) = 48, 120。
7. F6层:是一个全连接层,有84个神经元,可训练参数个数为84×(120+1) = 10, 164。连接数和可训练参数个数相同,为10, 164。
8. 输出层:输出层由10 个欧氏径向基函数(Radial Basis Function,RBF)函数组成。
参考1:http://blog.csdn.net/zouxy09/article/details/8781543
参考2:http://blog.csdn.net/u010089444/article/details/52563213
参考3: http://blog.csdn.net/boon_228/article/details/51700569


你可能感兴趣的:(机器学习)