目录

机器学习初体验

在这个万物皆可CS的时代,程序猿如果不学点机器学习/深度学习知识,仿佛都有点跟不上潮流了

随着近几年人工智能的热潮,AI,AlphaGo,大数据,数据挖掘,机器学习这些词汇在互联网中随处可见。人脸识别,语音助手,美颜拍照,APP广告推送,甚至大数据杀熟这些技术的背后究竟是人性的泯灭,还是道德的沦丧…

咳咳… 回到正题,先来看看人工智能,机器学习,深度学习三者的关系

https://cdn.jsdelivr.net/gh/xxy-im/storage@gh-pages/images/ai_ml_dl.png
三者关系

人工智能(AI)

一个笼统的概念,简单描述一门让机器好似有人类智慧的计算机学科。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。

机器学习(Machine Learning)

顾名思义是一种让计算机自己学习的算法。在智能应用开发的早期,许多系统都是使用大量的if-else结构来进行决策和处理数据的,比如希望判断邮件是否为垃圾邮件,可能需要先创建一个类似敏感词库的东西,然后判断邮件的内容是否包含这些关键词,if包含则为垃圾邮件,else不是垃圾邮件。这样的系统在某些领域确实是非常简单且高效的,尤其在一些系统所有的输入和输出都是能够被人们掌握的情况下。但是这种靠if-else的人为决策,明显很难对任务的变化进行自适应,且在开发系统时需对该系统将要处理的各种场景了如指掌。就像你很难用if-else来写一个人脸检测系统。


成功的机器学习算法是能够将决策过程自动化的那些算法,而这些决策过程是通过大量的数据输入(即已知的示例)中泛化得出的。
通常任何问题都可以用 $y=f(x)$ 模型或概率模型$P(Y|X)$ 表示,而机器学习的最终结果就是求出这个决策函数 $f(x)$ 或条件概率分布 $P(Y|X)$

基本概念

样本数据

上面说到机器学习最终目的是求出 $y=f(x)$ 这个模型,样本数据便是一些已知的 $(x, y)$ 或者只有 $x$。其中 $x$ 叫做输入数据,$y$ 叫做输出数据(或者叫标签、标注)。$x$ 和 $y$可以是多维的可以包含多个特征。例如输入实例$x$的特征向量记作 $$ x= (x^{(1)}, x^{(2)}, x^{(3)}, \ldots, x^{(i)}, \ldots, x^{(n)})^T $$ $x^{(1)}$ 表示 $x$ 的第 $i$ 个特征。而 $x_i$表示多个输入中的第i个输入,即 $$ x_i = (x_{i}^{(1)}, x_{i}^{(2)}, x_{i}^{(3)}, \ldots, x_{i}^{(n)}) $$

数据集

完整的数据集表示为 $T = \lbrace(x_1, y_1), (x_2, y_2), (x_3, y_3), \ldots, (x_n, y_n)\rbrace$,并不是所有的数据都将用于模型训练,通常数据集会被分为三个部分:训练集、验证集、测试集

  • 训练集:用于训练学习模型,通常比例不低于总数据量的50%
  • 验证集:用于衡量训练过程中模型的好坏,通过不断迭代来优化模型
  • 测试集:验证集智能用于监视和辅助模型训练,不能用来代表模型的好坏,哪怕验证的准确率是100%测试集也有可能是10%的准确率,这时的模型也是不能被接受的

特征

特征是机器学习和模式识别领域一个比较特有的名词,在传统机器学习算法中,由于计算性能和参数的限制,所以输入的数据维数不能太高。我们手机随随便便一张照片就有几个MB的数据量,可能会有几百万个像素,这么高维的数据量我们是不能直接输入给学习机的,因此我们需要针对特别的应用提取相对应的特征向量,特征向量的作用主要有两个:

  1. 降低数据维度:通过提取特征向量,把原始数据的维度大大较低,简化模型的参数数量
  2. 提升模型性能:一个好的特征,可以提前把原始数据最关键的部分提取出来,因此可以提高学习机的性能

用于模型训练的每一个具体输入实例通常由特征向量表示,人工拆解特征的方法即所谓的特征工程,而深度学习算法自动将概念拆解成特征向量,免去的传统机器算法拆解特征这个步骤

机器学习基本分类

监督学习

监督学习是指从带有标注的训练数据中学习预测模型的机器学习问题。标注数据表示输入输出的对应关系,预测模型对给定的输入产生相应的输出。其本质是学习输入到输出映射的统计规律。
通常分为学习和预测两个过程,学习系统利用给定的训练数据集通过学习(或者说训练)得到一个模型,预测系统对给定的测试样本集的输入得出相应的输出。

问题分类:
输入变量 $X$ 和输出变量 $Y$有不同的类型,可以是连续的,也可以是离散的。根据输入输出的不同类型,对预测任务给予了不同的名称:

  • 分类问题:输出变量为有限个离散变量
  • 回归问题:输入变量与输出变量均为连续
  • 标注问题:输入变量与输出变量均为变量序列

非监督学习

非监督学习算法或者说无监督算法与监督学习算法的区别就在于,训练数据中只有输入是已知的,但是并没有为算法提供预期输出。需要算法自行总结数据中的规律,做出符合预期的判断。所以这类算法的理解和评估确实往往比较困难。
非监督学习算法可用于对已有数据的分析,也可以用于对未来数据的预测,与监督学习类似由学习系统和预测系统完成,其本质是学习数据中的统计规律或潜在结构。

非监督学习的两类算法:

  1. 聚类算法:根据数据的“相似性”将数据分为多类的过程,将数据集分成一个个的簇cluster(也可以理解为一组一组的形式)
  2. 降维算法:即在保证数据所具有的代表性特性或者分布的情况下,将高维数据转化为低维数据的过程(数据的可视化和精简数据)

非监督算法实例:

  • 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组,以便广告客户可以通过有关联的广告接触到他们的目标客户
  • Airbnb 需要将自己的房屋清单分组成不同的社区,以便用户能更轻松地查阅这些清单
  • 一个数据科学团队需要降低一个大型数据集的维度的数量,以便简化建模和降低文件大小

强化学习

强化学习指智能系统在与环境互动中学习最优行为策略的机器学习问题,本质是学习最优的序贯决策。学习过程中,系统不断的试错,已达到学习最优策略的目的。
大名鼎鼎的AlphaGo背后就有这强化学习算法的支持。

半监督学习和自动学习

  • 半监督学习:指利用标注数据和未标注数据学习,通常少量标注数据,大量未标注数据。因为标注数据的构建往往需要大量的人工,成本较高,未标注数据的收集则不需要太多成本。旨在利用未标注数据中的信息,辅助标注数据,进行监督学习,以较低的成本达到较好的学习效果

  • 自动学习:指机器不断主动给出实例让教师进行标注,然后利用标注数据学习预测模型的机器学习问题。通常的监督学习使用给定的标注数据往往是随机得到的,可以看做是”被动学习“,主动学习的目标是找出对学习最有帮助的实例让教师标注,以较小的标注代价,达到更好的学习效果

半监督学习和主动学习更接近监督学习

机器学习算法三要素

模型

模型是机器学习的最终结果,即上面所说的决策函数 $y=f(x)$ 或条件概率分布 $P(Y|X)$,它被用来预测特定问题下的某个输入对应的输出结果。而所有可能的决策函数或条件概率分布的集合便称为假设空间

策略

有了模型的假设空间,机器学习接着需要考虑按照什么样的准则学习或选择最优的模型。机器学习的目标便是从假设空间中选取最优模型。而最优的定义则由我们所选则的评价准则定义的,即我们选取的模型的策略。通常评价模型在某个样本点的好坏用损失函数 $L(Y, f(X))$ 表示,而对所有样本预测的平均好坏用风险函数 $R_{exp}(f) = E[L(Y, f(X))]$ 表示

算法

算法指学习模型的具体计算方法。机器学习基于训练数据集,根据学校策略,从假设空间中选择最优模型,最后需要考虑用什么样的计算方法求解最优模型
这时,机器学习问题归结为最优化问题,机器学习的算法成为求解最优化问题的算法。例如,当已经知道问题模型属于权值向量参数未定的线性决策函数,那么确定一个经验风险最小化的权值向量的过程就是这次学习的算法

机器学习方法之间的不同,主要来自其模型、策略、算法的不同。确定了模型、策略、算法,机器学习的方法也就确定了。这就是将其称为机器学习方法三要素的原因

深度学习(Deep Learning)

讲深度学习前先讲讲神经网络,传统神经网络也是机器学习算法中的一员。而深度学习涉及训练多层神经网络,也称为深度神经网络。

未完待续…