机器学习课程学习--梯度下降GradientDscent的理解

最近在跟着吴恩达老师和周莫烦老师的机器学习课程学习,
越往后学习越感觉基本知识的重要性
所以我自己恶补了一些基本的概念
这里从为什么做深度学习开始
一直谈到为什么梯度下降
一个学习笔记
供复习,学习,交流
本文中所有例子来源于吴恩达老师的课程周莫烦老师的课程

1.深度学习之数据

预先给定数据集(training data),数据可能代表了很多含义,包含了所描述对象的很多特征,在这里抽象成如下的笛卡尔序列:xy

2.建模与拟合

这就是深度学习的原因:为了达成某个目标,对机器进行训练,成长为一个独立的个体,完成目标

对于一组整合了物体各种属性的数据,我们先用标准答案,也就是training data进行喂养(feed),让他知道对应取值这里写图片描述下的标准的这里写图片描述

这就是类似于人类平时的学习行为:

学习的好坏,和每个人的天赋,做习题的多少等很多因素有关系。

类比到机器里面去,就是学习(拟合)过程中,构建的参数(hyperparameters)的准确性(对应一个人的天赋),和总共训练的数据的多少(对应习题的多少),这两个是机器进行学习过程中最为主要的影响因素。

学习完毕之后还有测验,这时候就用到测试集(testing data),测试集有答案,但是不告诉机器,机器会计算出一个预测值(根据周莫烦老师的记法,称为为prediction),这里根据吴恩达老师的记法记为这里写图片描述

由原始的y和机器学习之后的这里写图片描述可以构建误差,这里有两个记法:
(1)对于单个训练样本这里写图片描述误差函数称为loss
(2)对于所有的n个数据这里写图片描述误差函数称为cost
具体函数的说明放到后面
这里写图片描述

如图,蓝色部分的散点就是所有这里写图片描述的散点图,红色的曲线是机器进行学习,不断校验,迭代,改变参数得到的拟合曲线,这里是引用周莫烦老师的例子

3.构建误差函数

误差函数用于对学习的好坏做出评价

需要设置可调控参数(自己的理解,官方名字hyperparameters)。方便后来的迭代和逼近最优化值

构建误差函数这种行为,
放到人类学习过程就是随堂小测验的分数评估你这节课学得怎么样,
也就是对于当前的样本数据这里写图片描述的学习程度

通过同样的这里写图片描述,预测值肯定不会精确的得到这里写图片描述

于是,我们构建了误差函数,
这里学习的不够深入,暂时只阐述logistic regression

这里做一下说明,为什么叫回归,因为我们一开始只给指定的参数一个初值,这个初值不一定准确,构建出来的拟合曲线是非常不准确的,如图所示:

这里写图片描述

红色是正弦曲线,蓝色是初始的拟合曲线,
通过最初的设置的参数的值,可以看出拟合结果非常差

所以我们需要在不断的迭代过程中,反向传播这个参数,使用梯度下降,把这个参数回馈,然后优化。这些概念我都会在后面解释。先来看看不断迭代优化之后的拟合曲线:

这里写图片描述

可以看到在迭代次数很高之后,误差已经非常小了!

误差函数

在我们给定一些特征这里写图片描述的情况下,要让机器给出预测值,我们就需要具体深入探讨一些数学的东西。

为了预测这里写图片描述的值,必须建立 这里写图片描述关于预设的参数和自变量这里写图片描述预测函数,跟着前人的步子,站在巨人的肩膀上,prediction 这里写图片描述,也就是这里写图片描述,定义为:
这里写图片描述

其中这里写图片描述是总结出来的具有一定满足人们需求的函数,典型的函数有ReLU,sigmoid,tanh等等。后续的文章中可能会做具体解释,此处,顺着吴恩达老师的思路,先学习logistic regression,这里用到的这里写图片描述函数是sigmoid函数,其表达式为:
这里写图片描述

顺着吴恩达老师的教学思路,最容易想到的误差函数:
这里写图片描述

尽管看着不错,也符合了我们的要求,但是误差函数的定义是用于回馈我们设置的参数的,这其中最常用的方法就是梯度下降(Gradient Dscent),后面我们会重点讲述。上述定义的误差函数不是严格的凸函数(convex),沿着导数变化的方向不一定能找到最优化的解。于是,我们使用的误差函数被定义为如下这样,对原因感兴趣的同学可以继续深入学习一下。
单个训练样本的误差loss这里写图片描述

整个m的数据集的误差cost
这里写图片描述
(这里cdsn好像硬要强行打广告,后面的黑块去不掉,所以我截图导入的。。。)

我们会利用变化的梯度值去刻画这里写图片描述这里写图片描述,每次迭代的过程完毕后,利用导数对这里写图片描述这里写图片描述进行微调的公式如下:
这里写图片描述
这里写图片描述

其中的这里写图片描述代表了学习速率,其实直观理解就好,就是一个导数的系数,控制朝优化方向移动的移动速度,给一个好听的名字,就叫做学习速率

那么问题来了,在对参数这里写图片描述这里写图片描述的校正,和对于误差的整体优化上,我们为什么要用梯度来对他们进行刻画呢?

开始解释梯度下降的概念

梯度下降

梯度下降是对于误差函数的一种优化操作,
上面我们定义的“J”函数就是整个数据集上的误差(cost),
“J”大致呈现的是一个开口向上的凹函数。
如图所示(草图,真正意义上草图)
这里写图片描述

给定初始这里写图片描述这里写图片描述的值(随意赋值),产生误差“J”,
“J”可能分布在其导数大于零的一端,也可能分布在导数小于零的一端,
对应图中的A(导数大于0)B(导数小于0)

整个误差函数的图像中,显而易见,
误差函数最小值的点(C点),
也就是最优化的点在导数为0的点

那在我不断迭代的过程中,怎么确保最终收敛到这个点呢?

“导数”

说到这里时还是有点小激动的,
因为说实话这玩意儿以前学了没什么用,
现在看来还真是挺神奇的:

A点,导数大于零,应用w和b的迭代格式,
对他两进行调整,这里再给出一次:
这里写图片描述
这里写图片描述
每次迭代完毕之后减去导数的倍数(学习速率),误差在逐渐缩小,

误差正朝着最优化的值逼近,如图箭头所示

这里写图片描述

假如越过了最优化的值怎么办?
同样举例子,假如参数的变化使得它跃升到了B点,
再B点,导数小于0,
每次 迭代之后都要减去导数的倍数,
相当于加上一个数!
因此,也同样是朝着最优化值C点靠近

而且因为越逼近于最优化值点,导数越小,
最终必然会收敛在C附近
用一个极限的公式抽象大致表示为:

这里写图片描述

C是我图中的最优化值点

总结

有需求才会衍生出新的东西,

社会总是不断的进步正是因为人的需求是在逐渐增加。

所以顺着这个需求,追溯一下衍生出梯度下降方法的过程

以流程的方式呈现,

也希望看官能指出我的理解不足的地方,

大家互相交流
这里写图片描述

实际的神经网络用到的方法更为复杂,

有时间再更新下一篇

再次强烈推荐吴恩达老师的课程周莫烦老师的课程

愿大家一起学习,一起进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值