在
001 机器不学习 | 介绍(一)
的最后提到,机器学习就是:
找到一个函数
给它输入
它输出结果很不错
那么问题来了,怎样才能找到这个函数呢?怎么样的输出结果才叫很不错呢?下面我们就来探讨一下。
不过在这之前要先弄明白,这里所说的一个函数并不是说要找一个统一的、能解决所有问题的函数(不太可能有这样的函数吧),而是针对某一个问题,存在一个函数在解决这个问题时表现很不错。
下文的描述中,假设都是针对某一个问题,目标是找到一个解决这个问题时表现“最好”的函数。
下面我们开始介绍机器学习的步骤!
第一步:选择合适的模型
我们画一个方框表示所有可能的函数,你能想到的、想不到的函数都在这个方框里。
很容易想象,这个方框里一定会有我们要找的那个函数。不妨把这个函数表示成方框内的一个点:
找这一个函数也太难了吧!!!
把这个点画大一点啊喂!!(好的
不管那么多,就是干!我们在大框框里“随便”画个小框框!
运气真好!正好把要找的这个函数包含进去了,范围还缩小了那么多!我们画的这一个小框框同样包含一系列函数,这些函数具有相似的特征,我们把这个小框框叫做一个函数集合。
这个函数集合在机器学习中就是一类模型(Model),而找函数集合的过程就是在选择模型,这个模型要(尽可能)包含我们要找的那个函数,同时还不要太复杂。
这就是机器学习第一步:
选择合适的模型
举个例子,假设我们选择的函数集合里的函数都长这个样子:
这是一个线性模型,x表示模型的输入,f(x)表示在x的输入下模型的输出,k和b是这个模型的参数。
我们可以通过调整 k 和 b 的值得到不同的模型,这些模型都有相似的特征,在图像上都是一条直线。
在解决实际问题中,我们的输入和输出可能不止一维(可以理解成输入和输出不止一个),输入和输出之间的关系也可能更加复杂(非线性的),因此需要具体问题具体分析,选择适合的模型。
后续的更新就是围绕着各种机器学习的模型来进行讲解。
现在我们先假设输入和输出就只有一个,并且选定线性模型来解决问题,接下来要怎么做呢?
第二步:判断模型的好坏
在选定线性模型之后,还有模型参数k和b等待我们去确定,这时我们就要收集数据来帮助我们确定模型的参数。
由于待解决问题来源于实际,我们可能只能在自然条件下进行观察(可能无法指定一个输入x得到一个输出y),就像是封一个在玻璃柜里的黑盒。但是我们可以通过观察收集到一些输入、输出数据。
我们先随意选一组模型参数 k=1和b=0,模型就变成:
收集到的数据看看这个模型表现得怎么样。
给模型一个输入x,看看模型的输出f(x)和实际的ŷ(在 y 的头顶加一个 ^ 表示真实值)差距是多少。一般来说,我们希望差距越小越好!
这就是机器学习第二步:
判断的模型好坏
我们把模型的一项输出f(x)和实际的ŷ的差距叫做这一项的误差(error),模型的误差就是把每一项的误差进行求和。那么怎么定义每一项的误差呢?
最直观的方法,把ŷ 和 f(x) 相减得到的结果当作误差:
但这样得到的误差有正有负,会相互抵消,这不是我们想要的结果!
正负误差不应互相抵消,我们可以取绝对值再求和,就能把每一项的误差加起来了。
但是绝对值在实际运算中,需要判断正负号,干脆直接取平方,所以每一项的误差变成:
最后把每一项误差求和,得到模型的误差。
模型的误差是由模型的输出、真实值共同决定的,所以模型的误差是关于模型的输出和真实值的一个函数,我们把这个函数叫做模型 f 的损失函数(Loss Function),记作 L(f)
输出结果是数值的问题,我们可以这么定义损失函数,但如果输出的结果是分类时,我们应该怎么定义损失函数呢?
在后续的更新中,会介绍针对不同的模型,如何定义它们的损失函数。
第三步:训练模型
在定义损失函数之后,我们就可以衡量一个模型的好坏了。在上一步中,我们为模型设置了一组参数,得到一个模型。把收集的数据输入到这个模型中,用定义的损失函数检验模型的好坏。
如果模型得表现十分糟糕,说明模型的参数不太正确,需要重新调整参数。
如果模型表现得还不错,就看看能不能再调整一下参数,让模型变得更好。
根据收集的数据,不断调整模型的参数,使模型表现有所改变的过程,我们称为训练(Train),用作训练模型的数据称为训练数据(Training Data)。
这就是机器学习第三步:
训练模型
那么该如何调整模型的参数让模型变得更好呢?
你懂的
最后,通过一些例子,简单概括一些名词。
回归(Regression):模型的输出是一个数值(scalar)。
预测明天的AQI
84
分类(Classification):模型的输出是一个向量(vector)。
邮件分类
开piao
这是垃圾邮件
结构化学习(Structured Learning):模型输出是一个对象(object),可理解为除了回归、分类以外的问题。
信息检索
附近的美食
一食堂、二食堂、三食堂
有监督学习(Supervised Learning):模型训练的时候,把标注告诉机器,再给机器别的数据,机器会告诉你更像哪个标注。
识别猫和狗
这是猫
这是狗
比较像猫
无监督学习(Unsupervised Learning):模型训练的时候,不把标注(labelled)告诉机器,机器自己归类。
识别猫和狗
我觉得是这样子的
半监督学习(Semi-supervised Learning):介于有监督学习和无监督学习之间,大多数情况下,拥有一丢丢有标注的数据和大量的无标注的数据(比较符合现实情况)。
识别猫和狗
迁移学习(Transfer Learning):把一个领域的知识迁移到另一个领域。
强化学习(Reinforcement Learning):让机器不断地尝试,从错误中学习,最后找到规律,学会达到目的的方法。
机器人客服
你好
......
你好
......
你好
再见
滚
(我是不是应该说你好)
这一部分概括得比较简单,目的是让大家大致了解一下这些名词的含义。
机器学习的介绍到这里就结束啦!从下一次开始,正式进入机器学习模型和方法介绍,敬请期待!
各位小伙伴有什么建议或者想法,欢迎留言!
领取专属 10元无门槛券
私享最新 技术干货