梯度下降(gradient descent)

xiaoxiao2021-02-28  181

梯度

在某个点的位置法向量,所以它的方向表示下降最快或者上升最快也就很好理解了。 法向量:假设平面a与向量n垂直,且n是非零向量,那么n就是a的法向量。由于是垂直的关系,针对当前点而言,肯定是变化最快的方向。

梯度是一个方向,而且是针对某个点(其实是这个点对应的切面)这个方法变化率最快,用偏导来表达 =(fx,fy,fz)(1)

梯度下降方法主要用户解决机器学习的训练问题。于是引出监督学习。

监督学习

如上图所示,监督学习:对于给定的训练集合,按照某一学习算法学习之后,得到一种好的假设(Hypotheses)用于预测新的数据。 而学习的过程,很多都利用了梯度下降法,比如:线性回归、神经网络等。

已知m组数据 (x1,y1),....,(xm,ym) ,其中 xi 是具有n维特征的向量。我们做如下假设:

h(x)=i=0mθixi=θTx(2) 对于给定的训练集合,如何选择最优的 θ 值。一个方法是:至少在训练集合上,h(x)越接近实际值y越好。因此,制定一个成本函数(cost function)则至关重要,在机器学习模型中,都必须有一个成本函数或者误差函数,这样才有目标性。 定义目标函数为: J(θ)=12i=1m(h(x(i))y(i))2(3)

有的地方用了下标,为了区分,注意上标代表第i个训练样本,下标代表第j个特征。后面会重复提到,因为这地方特别容易弄混。

该成本函数使用的误差的平方和,类似于普通的最小二乘法。后续我们会发现,可以使用各种极大似然,对数极大似然。

kmeans聚类的成本函数,类似上面的方法,其中 yi 就相当于质心的概念,每个样本和质心的距离之和最小;当然有k个聚类的,则不能只满足一个聚类结果方差较小,而是所有的聚类的方差之和最小。 看来,很多问题都是相通的。 参考:http://blog.csdn.net/iterate7/article/details/75194548


无论什么学习训练算法,必须了解几个方面,比如:训练数据; 训练算法的成本函数或者目标函数; 训练的步骤和参数如何更新; 最终的输出;以及训练中的各种细节trick。然后再结合实际项目进行实战和反复思考,然后读paper,总结出训练算法的特点,以后可以方便的使用和解决问题。


解决问题

上面的成本函数也有了,下面就要解决,参数如何求解的问题。 为了满足上面的成本函数,并利用梯度下降法来解决这个问题的算法我们称之为:最小均方法LMS,least mean squares; 也成为:也被称为Widrow-Hoff 学习算法。 那么几个问题来了:我们需要解决的参数如何更新和训练。 1. 初始化参数 θ , 各种随机方法,也有专门的方法用于优化。 2. 更新 θ 的方法如下:

θj:=θjαJ(θ)(θj)(4) 梯度下降体现在这个公式里!只要这么更新参数, J(θ) 就会以最快的速度下降。 3. α 是学习速率,也有专门的优化方法针对这个参数。不展开。也就是说,这个值可以根据训练的特点和不同的步骤,来取不同的值,从而使训练的方法更快更好的收敛。 4. 把 J(θ) 带入梯度公式,则有 J(θ)(θj)=(θj)(12(h(x)y)2)=(h(x)y)mi=1(h(xi)yi)(θj)=mi=1(θixiyi)(θj)=(h(x)y)(xj)(5) 代入(4)中: θj:=θjα(h(x)y)(xj)(6) 这是总体的训练更新公式。

在强调一次,这里 xj 是第j个特征,不理解的请反复参考公式(2). 这里参考cs229斯坦福公开ml的note反复推算,一直以为别人写错了上下标,因为很多朋友的笔记上下标都有混淆,于是对照css229开始不断的推算,才算明白。

如果给定一个样本(training example, i),如果更新呢?

θj:=θj+α(y(i)h(x(i))(x(i)j)(7)

利用一个样本更新第 j个特征的参数的方法特别说明:上标代表第i个训练样例; 下标j代表的是第j个特征。如果还不太好理解的话,写个线性方程来对应一下: h(x)=θ0x+θ1x3+5 x0xx1x3 .参数 θj 和第j个特征相关。请参考公式6.

如果是m个训练样例呢?类似

θj:=θj+αi=1m(y(i)h(x(i))(x(i)j)(8)

利用公式8来梯度下降,每次训练一个参数则需要全部m个数据,称为批量梯度下降算法(batch gradient descent)。

迭代终止条件 1. 参数更新变化幅度小于设定阈值 2. 目标函数变化幅度小鱼设定阈值。

特点

梯度下降无法保证找到全局最优解。一般需要多次初始化,多次跑几轮选择最优,但仍然无法保证全局最优。当目标函数是凸函数的时候,找到的局部最优解就是全局最优解。线性回归问题,目标函数是二次凸函数,可以找到最优解。

随机梯度下降(增量梯度下降)

利用公式8,每次所有的训练样本都要计算,当训练数据量大的时候,这几乎是不可能的。于是简化为下面的公式,并取名为:随机梯度下降算法(stotistic gradient descent=sgd)或增量梯度下降算法(incremental gradient descent)。 算法如下

repeat until converage {   for i=1 to m   {    θj:=θj+α(y(i)h(x(i))(x(i)j)   } }

这个随机梯度算法是常用的最优化问题的解决算法。我们来试一试。 ##线性回归

h(x)=θ0+θ1x


逻辑回归

假设函数:

hθ(x)=g(θTx) g(z)=11+exp(z) g是激活函数,可以映射到0-1连续空间。于是逻辑回归常用于二值分类。 逻辑回归的分类模型在深化:

和线性回归模型,唯一的不同就是多了一个激活函数。也就是这个唯一的不同,使得本质上仍然是线性回归的模型变得大有用途,现在的神经网络的前一层神经元到下一层神经元的’刺激’过程也是一个逻辑回归过程。可以参考 神经元

回归正题: 成本函数 cost(hθ(x),y)=

{log(hθ(x)),log(1hθ(x)),if y=1if y=0 整合在一起: Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))(10) 那么成本函数定义为: J(θ)=1mi=1mCost(hθ(x(i),y(i))=1m[i=1m(y(i)log(hθ(x(i))(1y(i)log(1hθ(x(i))] 我们的目标就是最小化 J(θ) 通过梯度下降法得到参数分布,并利用假设来预测分类。 假设是 hθ(x)=11+eθTx 最后:

是的,你没有看错。最后的随机梯度算法的更新方法和线性回归一样!!只是假设执行层多了激活sigmoid。只是这地方用了全部数据,不是stotistic。 至此,逻辑回归基本也就告一段落了。一句话总结:带激活函数的线性回归,同样利用随机梯度优化找到一个最优解。

牛顿法

对比一下牛顿法的更新方法(一阶)

xk+1=xkf(xk)f′′(xk)

softmax

神经网络最后一步很多都用到了这个,多分类归一化技术。 一张图看懂归一化、多分类: 来推导一下吧。

hθ(x)=P(y=1|x;θ)P(y=2|x;θ)...P(y=k|x;θ)=1kj=1eθTjxeθT1(x)eθT2(x)...eθTk(x)(11) 公式11就是softmax归一化多分类的数学表达,结合图例理解更加容易。 概率函数可以表示为: p(y|x;θ)=j=1k(eθTj(x)kl=1eθTl(x))I{y=j} 似然函数: log似然: l(θ)=i=1mj=1kI{y=j}logeθTj(x)kl=1eθTl(x) 于是损失函数或成本函数: J(θ)=1m[i=1mj=1kI{y=j}logeθTj(x)kl=1eθTl(x)](12) 其余的和线性回归一样,求偏导则可得到更新公式。

随机梯度下降、梯度下降、批量梯度下降

梯度下降:梯度下降就是我上面的推导,要留意,在梯度下降中,对于θθ的更新,所有的样本都有贡献,也就是参与调整θθ.其计算得到的是一个标准梯度。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦~

随机梯度下降:可以看到多了随机两个字,随机也就是说我用样本中的一个例子来近似我所有的样本,来调整θθ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,容易陷入到局部最优解中

批量梯度下降:其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的

参考文献

http://52opencourse.com/125/coursera公开课笔记-斯坦福大学机器学习第六课-逻辑回归-logistic-regression http://blog.csdn.net/itplus/article/details/21896453

转载请注明原文地址: https://www.6miu.com/read-19869.html

最新回复(0)