首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

吴恩达机器学习1

开始之前

停更很久了,我的锅,发生太多事了

欢迎来到新的版块机器学习,当然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),就这样来回振荡,永远都到不了最低点,所以我们可以看出,α的取值多么重要,α太小了,需要移动的次数就多,α太大了,会发生来回振荡,可能越荡越大,还有可能陷入死循环,但是α的值不一定是固定的哦,可以根据实际动态改变,而导数的作用就是让点永远向最低点的方向移动

二维是这样,多维同理,就是计算偏导数罢了

有人可能会问,这样的算法可能会出现几个结果啊,比如下图这种情况

很明显,图中有几个最低点嘛,这样我们怎么知道有没有把答案找完呢?

实际上,线性回归的代价函数的图像只可能是上面案例的那一种,像一个碗一样,只有一个最低点,具体为什么,这里不做证明,大家可以私下自己证明一下,我本来想证明的,但国内外凹函数凸函数定义的不同快把我搞晕了,如果有朋友成功证明了的可以私发我一下

只有一个最低点叫全局最优解,有多个最低点每一个最低点叫局部最优解

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716G01MXU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券