本文主要是介绍斯坦福CS229机器学习笔记-Lecture2-线性回归+梯度下降+正规方程组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写成博客分享出来
博文中部分图片和公式都来源于CS229官方notes。
CS229的视频和讲义均为互联网公开资源
Lecture 2
这一节主要讲的是三个部分的内容:
·Linear Regression(线性回归)
·Gradient Descent(梯度下降)
·Normal Equations(正规方程组)
1、 线性回归
首先给了一个例子,如何根据房屋的大小等数据,来预测房屋的价格
引入一些符号以便于叙述:
m – 表示训练样本的数目
x – 表示输入变量/特征
y – 表示输出变量/目标变量
(x,y)- 表示一个训练样本
第i个训练样本( x(i),y(i) ),注意i不是指数,而是上标而已
在 监督学习中,一般是如下过程:
给定一个训练集,通过学习算法,得到一个函数:h (hypothesis)
这样我们的新的输入x就能通过h函数得到一个预测:y
如果我们用一个线性模型来刻画y和x的关系,(当然y和x的关系肯定可以用其他模型来刻画,只不过吴老师这里在讲线性模型而已。其实, 生活中很多关系的确是可以用线性模型进行简单的刻画)一般就写成如下形式:
这里的x的右下标,代表这个样本的第几个特征,右上标才表示第几个样本。比如第i个房子可能有面积、和卧室数目这两个特征,那么x(i)就是一个二维的向量x(i) =(x1(i) ,x2(i))
也就是说,右下标刻画了输入向量x的维度。
Θ是参数-parameter,有时候我们其实也叫它权重-weight,每一个theta刻画了它对应的这个特征对于结果的影响力。
我举个例子,这里如果θ1= 100,而θ2 = 10,那么很明显,说明x1(房屋面积)对于房屋最终价格的影响就大于x2(卧室数目)的影响,因为x1如果增加1,那么总价格就增加100,如果x2增加1,总的价格才增加10。所以theta的维度应与输入x的维度相对应。
我们最终的目的其实就是希望得到(学习到)合适的θ参数,来刻画 y 和 x的关系
如果增设x0等于1,(表示截距),那么就可以得到泛化形式:
n – 表示样本的维度,即每一个输入样本有多少特征需要考虑
那么如何去学习呢?我们监督学习还提供了监督信息,就是 这里的y,每一个样本其实一对(x,y),如果我们把已有的x输入到h函数,那么就希望得到已有的x所对应的正确的y,这才说明h函数时可靠的。所以得到如下另一个函数:
Cost Function/Loss Function (代价函数/损失函数)
将 拥有训练集x作为输入的 h函数的输出 减去 已知正确的 y,使得他们的差的平方 最小(最理想的情况当然是0),那么说明h至少能对我训练集的x做出好的预测。至于最前面为什么乘以一个 1/2 , 完全是为了对其求导时方便而已,对于整个函数值是大是小没有影响。
实际上,上面这个函数叫做 ordinary least square普通最小二乘法,字面意思,就是让函数的平方最小呗。
2、 梯度下降
第一步中我们已经得到了损失函数,那么如何来选择θ来使得损失函数值最小呢?
于是就来到了梯度下降的环节了。通过从山顶下坡的例子来理解:
从山顶上选一点,一步一步往下走,一步一步似爪牙,似魔鬼的步伐~摩擦摩擦
就走到了最低点,而且还是最快地走到了最低点
当然也有可能走到局部最低点,但你也不知道其他地方还有更低的点,这是可能的
为什么说这样子走得最快呢?微积分中我们已经学过:函数在一点沿梯度方向的变化率最大,最大值为该梯度的模。
所以我们根本不需要环顾四周去试探方向,因为梯度方向就是最陡的方向,我们沿着负梯度方向前进,自然就下降的最快。这样得到theta的更新公式:
其中α – 称为 learning rate,学习率,就是我沿着负梯度方向,每次迈多大一步,这个参数是手动设置的。
将损失函数代入并化简:
所以对于单个的训练样本,就得到如下的更新规则:
实际上,这个更新规则也叫做:LMS - least mean square – 最小均方算法
batchgradient descent,批量梯度下降
而对于我们训练集的所有样本来说,我们需要考虑到每个样本, “ You're going to perform a sum over your M training examples. “
注意:下式中把括号内取反,所以α的符号变正,并不是写错
Stochasticgradient descent随机梯度下降
(Sometimes we call it incremental gradient descent 增量梯度下降)
每一次只考虑第i个example,而不是需要遍历全部的M个样本。和批量梯度下降对比,你会发现α后面并没有求和符号来对i求和,反而是再外层多了一个对于i的循环,即每次更新时只考虑一个样本。
所以对于大规模数据,SGD算法下降速度会快很多,但是问题在于它可能不会精确收敛到全局最小值。但是在实际应用中,这个值十分接近全局最小值,所以对于实际应用是可接受的。
3、 正规方程组
梯度下降算法,实际是一种迭代算法,通过不断更新theta使其逼近最合适的值。但是还存在其他的方法,不迭代,求出合适的theta值。
首先介绍一些线性代数的知识:
若定义 f 是使得矩阵 映射为 实数的 一个函数,那么f关于矩阵A的梯度表示为:
可见f关于矩阵A的梯度也是一个和A同样size的矩阵,举例来说:
同时补充一下线性代数中的知识:关于矩阵的trace 迹,有:
这些其实都不用记,就是吴老师写出来以便后面证明一个式子时要用到,了解即可
那么我们现在开始推导,如何求出theta的取值。
先要把损失函数化成矩阵和向量的形式:
所以对损失函数求导:
我备注一下详细求解过程:
至此,Lecture 2 三部分的内容就记录完毕~
这篇关于斯坦福CS229机器学习笔记-Lecture2-线性回归+梯度下降+正规方程组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!