机器学习笔记2--梯度下降(Gradient decent)

来源:互联网 发布:linux local命令 编辑:程序博客网 时间:2024/05/29 19:27

转载请注明链接:http://blog.csdn.net/cracked_hitter/article/details/78453617

该系列文章为对Andrew Ng老师ML视频的学习笔记。主要是对其中的知识做一些梳理,并加入自己的一些理解与公式的推导。文章记录的并不详细,只对一些知识的要点进行整理。可能文章中会有不当之处,也希望各位在阅读过程中不吝赐教。

-------------------------------------------------------------------------

一、问题引入

首先我们引入一个问题,作为该算法模型待解决的问题,即房屋价格问题。其中最简单的表示即房屋面积(输入变量)---房屋价格(输出变量)的单变量问题。


我们将该部分数据,以散点图的方式绘制在二维坐标系上,则如下图1所示。房屋面积与房屋价格之间是一种成正相关的关系,我们可以以一条线来对这些数据进行拟合,下图可以用公式来进行拟合,即一个关于输入变量x的一次函数。梯度下降算法即是一种实现这种最优拟合(误差最小)的一种算法。


二、代价函数J(theta)

在引入梯度下降之前,我们先要引入代价函数(Costfunction)的概念。代价函数是评判我们当前模型的好坏的标准之一,其定义为通过我们的预测函数计算结果与训练数据中结果的平方差(这里实则不是真正意义上的平方差,而是平方差的1/2。这里这样使用的原因是在下一步使用梯度下降时需要对J进行求导,在求导过程中会产生系数2刚好与1/2相乘为1)。J越大,预测结果与训练数据的偏差越大,所以我们需要通过我们的算法来寻找 minJ

在此公式中的一些变量:

m:共有m组训练数据

x(i): 第i个训练数据输入值

y(i):第i个训练数据的输出值

h(theta):预测函数

theta0&theta1:参数

三、梯度下降grad

先来从梯度的定义对该算法进行理解,梯度即一个方向导数,在该方向上函数值下降的最快。所以沿梯度方向,函数能够最快的到达其最小值。以一个二次函数为例,从一个随机的初始点出发,每次沿梯度方向步进一个步长alpha直到梯度为0取到该函数的最小值

同样的如果对于两个变量theta0、theta1的代价函数J来说,

我们也可以利用该方法,在二维平面上寻找梯度方向从而得到局部最小值。

为什么说是局部最小值呢,当我们初始位置选择不同时,

对比下面两个图可以得到,最终得到的结果可能也不相同。




梯度下降的公式实现,通过在一点分别对theta0、theta1求偏导来求得该位置的梯度。

其中alpha我们在上文中也有提到,alpha规定了梯度下降算法的收敛速率,

若该值过大,可能会错过最小值点,若该值过小则会使收敛的速率降低。


偏导数的求解公式也做简单的记录。



四、多变量梯度下降

在实际的问题中,为了保证结果的正确性,往往会有着多个输入变量。通过多个变量的组合分别乘以不同的theta(即权重)来得到最终的结果输出,所以当输入为多变量时,我们可以这样定义我们的预测函数。


同时我们将输入变量以及权重theta定义为一个矩阵,同时加入偏置变量x0 = 1.



此时误差函数J(theta)同样定义为预测值与实际值的平方差


分别对每一个权重变量theta求偏导,得到误差函数的梯度,并按照梯度方向以学习速率alpha收敛于最小值






阅读全文
0 0