参考:/gitchat/column/5ad70dea9a722231b25ddbf8/topic/5b1086eccad6fe44db4c1268
1. 机器学习与人脑映射关系
我们自己用来判断万事万物的“观点”、“看法”、“洞察”,实际上都是我们头脑中一个个“模型”对所闻所见(输入数据)进行“预测”的结果。这些模型自身的质量,直接导致了预测结果的合理性。
从机器学习认识客观规律的过程中,我们可以知道,模型是由数据和算法决定的。对应到人脑,数据是我们经历和见过的万事万物,而算法则是我们的思辨能力。
2. 学原理和公式推导的意义
不同模型的特质、适用场景,对当前数据的匹配程度;不同算法对算力和时间的消耗;不同框架对软硬件的需求和并行化的力度;评判模型性能的指标有哪些,如何计算?正在使用的模型是怎么工作的?这些超参数是什么含义,调整它们会产生哪些影响?特征选取有哪些原则、方法可运用?真正创造价值的,从来都是解决实际问题的人。
但对于理论知识扎实的机器学习工程师来说,他们完全有可能针对具体业务问题,构造出目标函数,甚至开发出符合自身软硬件资源特点的求解算法。
作者强烈建议:即使目标岗位是“深度学习工程师”,也应该从统计学习方法学起。
一方面深度学习与机器学习具有传承的关系,学习后者对于直观理解前者有极大帮助。
另一方面,统计学习方法建立在将概念“数字化”(向量化)的基础上,以数学公式和计算来表达概念之间的关联及转化关系。机器学习是一种认识世界的工具,借助它,我们可以从一个新的角度来看待世间万物。
换句话说,当我们知道机器是怎样通过学习事物特征的概率分布和转换来掌握事物规律的时候,我们就有可能反过来审视自己看待世界的方法,发现其中不合理的部分,并主动优化自己的思维模型。
作者分享出来只是想说明:学习机器学习原理和公式推导,并非只是做一些无聊的数字变换。很可能由此为我们打开一扇窗,让我们从新的角度看待世界,并为日常的思考过程提供更加可量化的方法。
3. 数据模型算法之间的联系
机器学习三要素包括数据、模型、算法。简单来说,这三要素之间的关系,可以用下面这幅图来表示:
总结成一句话:算法通过在数据上进行运算产生模型。
3.1 数据
输入给计算机的图片或者视频是原始数据,由于计算机只能处理数值,而不是图片或者文字。所以我们就需要构建一个向量空间模型(Vector Space Model
,VSM)。VSM
负责将格式(文字、图片、音频、视频)转化为一个个向量。然后开发者把这些转换成的向量输入给机器学习程序,数据才能够得到处理。
3.1.1 无标注数据
比如图2小马宝莉中的6为女主角,我们要给她们做聚类,而且已经知道了,要用她们的两个特征来做聚类,这两个特征就是:独角和翅膀。
那么我们就可以定义一个二维的向量A=[a_1,a_2]
。a_1
表示是否有独角,有则a_1 = 1
, 否则a_1 = 0
。而a_2
表示是否有翅膀。
那么按照这个定义,我们的6匹小马最终就会被转化为下面6个向量:
X_1 = [1,0]X_2 = [0,0]X_3 = [0,0]X_4 = [0,1]X_5 = [0,1]X_6 = [1,0]
这样,计算机就可以对数据X_1
,……,X_6
进行处理了。这6个向量也就叫做这份数据的特征向量(Feature Vector)。
3.1.2 有标注数据
数据标注简单而言就是给训练样本打标签。这个标签是依据我们的具体需要给样本打上的。
比如,我们要给一系列图标做标注,所有图片分为两类:“猫”或者“不是猫”。那么就可以标注成下图这样:
我们把样本的标签用变量 y 表示,一般情况下,y 都是一个离散的标量值。
标注数据当然也要提取出特征向量 X。每一个标注样本既有无标注样本拥有的 X,同时还比无标注样本多了一个 y。例如:
我们用三维特征向量 X 表示老鼠分类器的源数据,每一维分别对应“耳朵是圆的”、“有细长尾巴”、“是尖鼻子”。同时用一个整型值 y 来表示是否为老鼠,是的话 y=1,否则 y=0。
那么图1老鼠和其他动物对应的数据就是这样的:
X_1 = [1,1,1]; y = 1X_2 = [1,1,1]; y = 1X_3 = [1,1,1]; y = 1X_4 = [1,1,1]; y = 1X_5 = [1,1,1]; y = 1X_6 = [0,1,1]; y = 0X_7 = [0,0,0]; y = 0X_8 = [0,1,0]; y = 0X_9 = [0,0,1]; y = 0
在数据转换到 VSM 之后,机器学习程序要做的就是把它交给算法,通过运算获得模型。
大家已经看到了,我们之所以能把具体的一系列童话人物转化为2维或者3维的向量,是因为我们已经确定了对某些人物用哪些特征。
这里其实有两步:
确定用哪些特征来表示数据;确定用什么方式表达这些特征。
这两步做的事情就叫做特征工程。有了特征工程,才有下一步的 VSM 转换。
3.2 模型
3.2.1 模型概念
模型是机器学习的结果,这个学习过程,称为训练(Train
)。
一个已经训练好的模型,可以被理解成一个函数:y=f(x)
。我们把数据(对应其中的 x)输入进去,得到输出结果(对应其中的 y)。
这个输出结果可能是一个数值(回归),也可能是一个标签(分类),它会告诉我们一些事情。
比如,我们用老鼠和非老鼠数据训练出了老鼠分类器。这个分类器就是分类模型,它其实是一个函数。
3.2.2 模型来源
模型是基于数据,经由训练得到的。训练又是怎么回事?
模型是函数:y=f(x)
,x
是其中的自变量,y
是因变量。从x
计算出y
要看f(x)
的具体形式是什么,它有哪些参数,这些参数的值都是什么。
在开始训练的时候,我们有一些样本数据。如果是标注数据,这些样本本身既有自变量x
(特征)也有因变量y
(预期结果)。否则就只有自变量x
。对应于y=f(x)
中的x
和y
取值实例。
这个时候,因为已经选定了模型类型,我们已经知道了f(x)
的形制,比如是一个线性模型y=f(x)=ax+bx+c
,但却不知道里面的参数a
、b
、c
的值。
**训练 **就是:根据已经被指定的f(x)
的具体形式——模型类型,结合训练数据,计算出其中各个参数的具体取值的过程。
训练过程需要依据某种章法进行运算。这个章法,就是算法。
3.3 算法
有监督和无监督学习的算法差别甚大。因为我们在日常中主要应用的还是有监督学习模型,所以就先以此为重点,进行讲解。
有监督学习的目标就是:让训练数据的所有x
经过f(x)
计算后,获得的y’
与它们原本对应的y
的差别尽量小。
我们需要用一个函数来描述y’
与y
之间的差别,这个函数叫做损失函数(Loss Function
)L(y, y’)= L(y, f(x))
。
Loss
函数针对一个训练数据,对于所有的训练数据,我们用代价函数(Cost Function
)来描述整体的损失。
代价函数一般写作:J
(theta
)——注意,代价函数的自变量不再是y
和f(x)
,而是变成了theta
,theta
表示f(x)
中所有待定的参数(theta
也可以是一个向量,每个维度表示一个具体的参数)!
至此,我们终于得到了一个关于我们真正要求取的变量(theta
)的函数。而同时,既然J(theta)
被称为代价函数,顾名思义,它的取值代表了整个模型付出的代价,这个代价自然是越小越好。
因此,我们也就有了学习的目标(也称为目标函数):argmin J(theta)
—— 最小化J(theta)
。
能够让J(theta)
达到最小的theta
,就是最好的theta
。当找到最好的theta
之后,我们把它带入到原f(x)
,使得f(x)
成为一个完整的x
的函数,也就是最终的模型函数。
怎么能够找到让J(theta)
最小的theta
呢?这就需要用到优化算法了。
具体的优化算法有很多,比如:梯度下降法(Gradient Descent
)、共轭梯度法(Conjugate Gradient
)、牛顿法和拟牛顿法、模拟退火法(Simulated Annealing
) 等等。
在这里需要强调一点:要得到高质量的模型,算法很重要,但往往(尤其是在应用经典模型时)更重要的是数据。
有监督学习需要标注数据。因此,在进入训练阶段前必须要经过一个步骤:人工标注。标注的过程繁琐且工作量颇大,却无法避免。
人工标注的过程看似简单,但实际上,标注策略和质量对最终生成模型的质量有直接影响。
往往能够决定有监督模型质量的,不是高深的算法和精密的模型,而是高质量的标注数据。