开始之前
停更很久了,我的锅,发生太多事了
欢迎来到新的版块机器学习,当然web前端依旧会更新,只是怕大家看了不感兴趣,换一个方向试试
机器学习是现在的热门话题,学习资料也很多,我这里采用吴恩达教授在coursera网站上发布的课程,并进行二次加工,总结+自己的理解,愿意自己去看的也行,原版是英文,不过貌似有中文翻译
前面的概念很多,有些晦涩难懂,但只有大家理解了,才方便之后学代码
之前有人跟我说过一句话,虽然我写这个达不到传道授业解惑的目的,但至少给大家一个知识结构方向,知道从哪里下手了,我觉得这就是我的本意
什么是机器学习?
机器学习是实现人工智能的一个途径
还未接触机器学习的时候
编程就是我们告诉机器解决某个问题的算法
我们告诉机器遇到不同的情况分别怎么做
而人工智能明显是机器自己学会做这些事
那么机器学习到底是什么呢?
它又是怎么实现人工智能的呢?
两种定义
让机器不需要明确的编程就能自己通过学习实现一些东西
给定一个任务T,让机器尝试去实现它,给定一个衡量标准P,判断机器每次实现的好坏,让机器不断的去完成任务T,即训练,并从训练所得的经验E中不断的改进自己
机器经过大量训练后得到的能够完成任务T的东西就是模型,比如得到了一个可以拟合已有数据的函数,而训练就是为了得到这些模型的参数,比如函数中的参数
还看不懂没关系
多看几遍
觉得跟人工智能没关也没关系
继续往下学
简单知识结构
为什么说它是简单知识结构
因为你之后还会遇到半监督学习、强化学习
还会遇到各种分支
目前先了解这些即可
接下来我们慢慢解释这些概念
监督学习与非监督学习
监督学习和非监督学习的不同主要在于上文提到的衡量标准P,监督学习的东西是以具体的答案作为衡量标准的,在训练机器的时候,我们已经知道某个输入大概会有一个怎样的输出,我们的目的是让机器经过学习后能够自己给出一个答案,就像老师教学生一样,而非监督学习则没有标准答案,我们不知道会有怎样的输出,让机器自己去探索,它的衡量标准是这个探索出的结果是否符合我们的要求
回归与分类
回归与分类属于监督学习的范畴,它们的区别在于答案的类型不同,回归是给出一个具体的值,比如预测明年的房价是多少啊,而分类则是给出一个判断结果,比如明天是否下雨,有点像微积分中的连续型随机变量和离散型随机变量
聚类
聚类属于非监督学习的范畴,比如给机器大量的数据,让它自己探索出这些数据是否具有一定的结构
代价函数
代价函数(cost function)也叫损失函数(loss function),假设我们已经有一个模型了,代价函数就是用来衡量我们这个模型的准确度的,那它是怎么来衡量的呢?
我们以监督学习中的回归作为案例来讲代价函数
大家都学过微积分里的线性回归吧,我们先来模拟一种最简单的情况,二维坐标轴上有一些点,像这样
我们希望得到一个函数y(x)=kx+b(k、b为参数),使大部分的点落在这个函数上,为此我们训练机器,让它能自己得出k和b的值,很容易看出,这些点拟合所得的函数应该为y(x)=x,即k=1,b=0,那如果我的机器刚开始得到的模型为y(x)=2x呢?明显是不准确的,那它的代价该是多少呢?
事实上,我们是用方差(variance)的1/2来表示它的代价(cost)的,至于为什么是1/2之后会说,方差大家都学过,就不说公式了,下面是计算过程
所以可以得到,当k=2,b=0时,它的代价为3,进一步推广,不同的k和b应该对应着不同的代价,代价函数J就是代价关于模型参数的函数,在这里就是关于k和b的函数,即:
代价越小,模型的准确度越高,所以我们让机器不停调整自己的模型参数,直到找到那个代价最小时的参数
从算术层面上,找函数的最值我们用的是求导,这里先不说求导结果,反正你可以稍微得知为什么我们让代价等于方差的1/2了,因为后面有个平方,求导后就消掉了,方便计算
从图像层面上,这里应该是一个三维图像,x轴是k,y轴是b,z轴就是代价,我们需要找到图像的最低点,我把图像做出来了方便大家理解
红色代表k,绿色代表b,蓝色代表代价,我们换一个角度再来看看它的最低点
很明显的看出当k取1,b取0的时候刚好是最低点,代价为0
梯度下降
那么问题来了
机器如何来找到代价的最小值呢?
事实上
机器并不是通过求导解方程来找到极值点的
毕竟解方程真的很难
而是通过梯度下降(gradient descent)算法进行循环迭代
我们先来直观感受一下梯度下降算法,假如我们把代价函数看成一个滑道,我们随机选择一个地方坐下,然后滑到最低点(不要去纠结其他的,只是做个比喻,肯定会滑下去的,不会卡在路上的)
吴恩达教授把梯度下降比作下山,但我觉得因为这里的图像是凹下去的,所以比作滑道更形象一点儿
受重力作用会以最快速的一条路径滑下去,最终会停在最低点,为什么叫梯度下降呢?越平缓的地方下降的越慢,呈梯度变换
那么在梯度下降的算法中是谁来充当重力的角色,让我们找到一个到达最低点的路径呢?
答案是通过当前所在点的导数和学习率
具体算法如下:
随机找一个起始点(k,b,j),规定α的值(α>0),α叫做学习率,α的取值也很有讲究哦,下面会讲,按照下面的公式不停改变k和b的值,直到新的点的导数等于0或者无限接近0(除非你找的初始点就是极值点)
这个公式就是不停让k和b减去它们当前点的偏导数与α的乘积,注意一定是当前点的偏导数哦,即使第一步的k改变了,第二步求偏导数也是用的原来k没变时的函数,k和b都改变了,整个代价函数才会改变
为什么这个公式能找到最低点呢,我们来举个例子,可以自己去试更多的例子,现在是二维的情况
这个函数是x^2,最低点应该是(0,0),我们现在在点(1,1)上,该点的导数为2,假设学习率为0.1,那么按照公式,新的点应该是(0.8,0.64),是不是更靠近最低点了,而且新的点的导数也变小了,也就是说下一次点的改变幅度会变小,但仍会靠近最低点,这样经过循环迭代,越来越接近最低点,那如果学习率为0.5呢?新的点恰好直接到最低点了。那如果学习率为1呢?我们发现新的点直接越过了最低点,跑到了负半轴的(-1,1),这时候导数变成了负数,下一个点又变回了(1,1),就这样来回振荡,永远都到不了最低点,所以我们可以看出,α的取值多么重要,α太小了,需要移动的次数就多,α太大了,会发生来回振荡,可能越荡越大,还有可能陷入死循环,但是α的值不一定是固定的哦,可以根据实际动态改变,而导数的作用就是让点永远向最低点的方向移动
二维是这样,多维同理,就是计算偏导数罢了
有人可能会问,这样的算法可能会出现几个结果啊,比如下图这种情况
很明显,图中有几个最低点嘛,这样我们怎么知道有没有把答案找完呢?
实际上,线性回归的代价函数的图像只可能是上面案例的那一种,像一个碗一样,只有一个最低点,具体为什么,这里不做证明,大家可以私下自己证明一下,我本来想证明的,但国内外凹函数凸函数定义的不同快把我搞晕了,如果有朋友成功证明了的可以私发我一下
只有一个最低点叫全局最优解,有多个最低点每一个最低点叫局部最优解
领取专属 10元无门槛券
私享最新 技术干货