机器学习之梯度下降

  1. 梯度下降(Gradient Descent)

在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降是最常采用的方法之一,另一种常用的方法是最小二乘法。

  • 什么是梯度

在微积分里面,对多元函数的参数求\partial偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y),分别对x,y求偏导数,求得的梯度向量就是\left( {\frac{​{\partial f}}{​{\partial x}},\frac{​{\partial f}}{​{\partial y}}} \right)T,简称gradf(x,y),对于在点\left( {​{x_0},{y_0}} \right)的具体梯度向量就是\left( {\frac{​{\partial f}}{​{\partial {x_0}}},\frac{​{\partial f}}{​{\partial {y_0}}}} \right)T,如果是3个参数的向量梯度,就是{\left( {\frac{​{\partial f}}{​{\partial x}},\frac{​{\partial f}}{​{\partial y}},\frac{​{\partial f}}{​{\partial z}}} \right)^T},其他多个参数的梯度以此类推。

那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上来讲,就是函数变化最快的地方。具体来说对于函数f(x,y)在点\left( {​{x_0},{y_0}} \right),沿着梯度向量的方向就是\left( {\frac{​{\partial f}}{​{\partial {x_0}}},\frac{​{\partial f}}{​{\partial {y_0}}}} \right)T的方向是f(x,y)增加最快的方向。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是- \left( {\frac{​{\partial f}}{​{\partial {x_0}}},\frac{​{\partial f}}{​{\partial {y_0}}}} \right)T的方向,梯度减小最快,也就是更加容易找到函数的最小值。

  • 梯度下降与梯度上升

在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步迭代求解,得到最小化的损失函数。反过来,如果我们需要求解损失函数的最大值,这时候就需要用梯度上升法来迭代了。

梯度下降法和梯度上升法是可以互相转换的。比如我们需要求解损失函数f\left( \theta \right)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数-f\left( \theta \right)的最大值,这时梯度上升法就派上用场了。

  • 梯度下降法算法详解
  • 梯度下降的直观解释

比如我们在山上的某处位置,但是我们不知道如何下山,于是决定走一步算一步,也就是在每走到一个位置,求解当前位置的梯度,沿着梯度的方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最容易下山的位置走一步。这样一步步走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低谷。

从上面的解释可以看出,梯度下降不一定能够找到全局最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

  • 梯度下降的相关概念

1、步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度{x_i}负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

2、特征(feature):指的是样本输入部分,比如样本({x_0},{y_0}),\left( {​{x_1},{y_1}} \right),则样本特征为x,样本输出为y.

3、假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为{h_\theta }\left( x \right)。比如对于样本\left( {​{x_i},{y_i}} \right)(i = 1,2,...,n),可以采用拟合函数:{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x

4、损失函数(loss function):为了评估模型的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和架设函数的差取平方。比如对于样本\left( {​{x_i},{y_i}} \right)(i = 1,2,...,n),采用线性回归,损失函数为:

J\left( {​{\theta _0},{\theta _1}} \right) = \sum\limits_{i = 1} {m{​{({h_\theta }({x_i}) - {y_i})}^2}}

其中{x_i}表示样本特征x的第i个元素,{y_i}表示样本输出的第i个元素,{h_\theta }\left( {​{x_i}} \right)为假设函数。

  • 梯度下降详细算法

梯度下降的算法可以有代数法和矩阵法(也称向量法)两种表示。

  1. 梯度下降法的代数方式描述

1.先决条件:确认优化模型的假设函数和损失函数。

比如对于线性回归,假设函数表示为:

{h_\theta }\left( {​{x_1},{x_2},...,{x_n}} \right) = {\theta _0} + {\theta _1}{x_1} + ... + {\theta _n}{x_n},其中

{\theta _i}(i = 0,1,2..n)为模型参数,{x _i}(i = 0,1,2..n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征{x_0=1}这样

{h_\theta }\left( {​{x_1},{x_2},...,{x_n}} \right) = \sum\limits_{i = 0}^n {​{\theta _i}{x_i}}

同样是线性回归,对应于上面的假设函数,损失函数为:

1、算法相关参数初始化:主要初始化{\theta _0},{\theta _1},..,{\theta _n},算法终止距离\varepsilon以及步长\alpha。在没有任何先验知识的时候,在没有任何先验知识的时候,可以试着将所有的θ初始化为0, 将步长初始化为1。在调优的时候再优化。

2、算法过程:

1确定当前位置的损失函数的梯度,对于θ其梯度表达式如下:

\frac{\partial }{​{\partial {\theta _i}}}J\left( {​{\theta _0},{\theta _1},..,{\theta _n}} \right)

2用步长乘以损失函数的梯度,得到当前位置的下降距离,即:

\alpha \frac{\partial }{​{\partial {\theta _i}}}J\left( {​{\theta _0},{\theta _1},..,{\theta _n}} \right)

3确定是否所有的{​{\theta _i}}的梯度下降距离都小于\varepsilon,如果小于\varepsilon则算法终止,当前所有的{\theta _i}(i = 0,1,2..n)即为最终结果。否则进入步骤4

4更新所有的{​{\theta _i}},对于{​{\theta _i}},其更新表达式如下。更新完毕后继续转入步骤1

{\theta _i} = {\theta _i} - \alpha \frac{\partial }{​{\partial {\theta _i}}}J\left( {​{\theta _0},{\theta _1},..,{\theta _n}} \right)

下面用线性回归的例子来具体描述梯度下降。假设我们的样本是

\left( {x{​{\left( 0 \right)}_1},x{​{\left( 0 \right)}_2},...,x{​{\left( 0 \right)}_n},{y_0}} \right),\left( {x{​{\left( 1 \right)}_1},x{​{\left( 1 \right)}_2},...,x{​{\left( 1 \right)}_n},{y_1}} \right),..,\left( {x{​{\left( m \right)}_1},x{​{\left( m \right)}_2},...,x_{_n}^{\left( m \right)},{y_n}} \right),损失函数如前面先决条件所述:

J\left( {​{\theta _0},{\theta _1},..,{\theta _n}} \right) = \sum\limits_{i = 0} {m{​{({h_\theta }\left( {​{x_0},{x_1},...,{x_n}} \right) - {y_i})}^2}}

则在算法过程步骤中1中对于{​{\theta _i}}的偏导数计算如下:

\frac{\partial }{​{​{\theta _i}}}J\left( {​{\theta _0},{\theta _1},..,{\theta _n}} \right) = \frac{1}{m}\sum\limits_{i = 0} {m({h_\theta }\left( {x{j_0},x{j_1},...,x{j_n}} \right) - yj)} x_i^j

由于样本中没有x_0上式中令所有的x_0^j为1.

步骤4中{​{\theta _i}}更新表达式如下:{\theta _i} = {\theta _i} - \alpha \frac{1}{m}\sum\limits_{i = 0} {m({h_\theta }\left( {x{j_0},x{j_1},...,x{j_n}} \right) - yj)} x_i^j

从这个例子可以看出来当前点的梯度方向是由所有样本决定的,加1/m是为了好理解。

由于步长也为常数,他们的乘积也常数,所以这里\alpha/m可以用一个常数表示。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值