梯度下降法学习笔记
2016-07-20 23:11
323 查看
我们都知道梯度下降法是求解无约束最优化问题的最常用方法,可是为什么梯度下降可以用来求解最优化问题呢?梯度到底是什么?这里假设我们要解决一个最小值问题minf(x),当我们所研究的对象并不是一个凸函数或者即使是一个凸函数,但是计算量会非常的大,此时我们就会想能否有一种迭代的方法,当我们随机的选取一个点,我们以该点位为起点,然后沿着某个方向能够以最快的速度走到最小值点呢?基于这样的思路,我们首先来介绍到底什么是梯度。
假设v表示任意的一个单位向量,那么方向导数(表示函数t在方向v上的变化率)即为grad(t)⋅v,根据点乘的定义我们知道grad(t)⋅v=|grad(t)|⋅|v|⋅cosθ,因为v为一个单位向量,因此其又等于|grad(t)|⋅cosθ,故对于方向导数,其值最大的时候是θ=0,即向量v与梯度grad(t)平行的时候。因此t的函数值变化率最大的方向就是梯度方向。
随机选取初始节点X0=(x10,x20,...,xk0);
求出函数f(X)在Xi点的梯度∇f=δfδXi;
如果函数误差E(f(Xi),f(Xi−1))>ϵ,则依据梯度更新xi=xi−α∇f(xi)重复2,3步直到函数误差小于阈值ϵ。其中α为步长,用于控制每次下降的幅度,通常其值是逐渐递减的。
批量梯度下降
对于批量梯度下降,其对Θ的更新策略为θt+1j=θtj−1m∑i=1m(fθj(xij)−yi)xij我们可以看到对于批量梯度下降,其每一次更新都要考虑所有的样本,当样本量很大的时候,这种更新的速度是非常慢的,那么我们就想能否每来一个样本我们就更新一次而不是等所有样本都到来才更新?
随机梯度下降
对于梯度下降,其更新策略不再是每次更新都考虑所有的样本,而是对每个样本,都对参数进行一次更新,其更新策略如下:θt+1j=θtj−fθj(xij)−yi)xij在这种情况下,我们可能只需要其中的一部分样本就可以让算法收敛到极值点。
梯度
在百度百科上给出的梯度公式为:grad(t)=∇t=δtδxi+δtδyj+δtδzk其中i,j,k为基向量,其也可以表示为(δtδx,δtδy,δtδz)。通过上面的定义我们可以看到梯度是一个向量,是t在(x,y,z)点的一个方向,且沿着该方向是t值变化最大的方向。下面是对梯度为函数值变化最大的方向的证明:假设v表示任意的一个单位向量,那么方向导数(表示函数t在方向v上的变化率)即为grad(t)⋅v,根据点乘的定义我们知道grad(t)⋅v=|grad(t)|⋅|v|⋅cosθ,因为v为一个单位向量,因此其又等于|grad(t)|⋅cosθ,故对于方向导数,其值最大的时候是θ=0,即向量v与梯度grad(t)平行的时候。因此t的函数值变化率最大的方向就是梯度方向。
梯度下降法
根据对上面梯度的介绍,我们知道梯度方向是函数值变化最大的方向,因此对于问题minf(X),我们只需要沿着负梯度方向不断对x进行修正即可以最快的速度下降到极小值点,这也是通常人们把梯度下降法等同于最速下降法的原因。下面给出梯度下降法的基本步骤:随机选取初始节点X0=(x10,x20,...,xk0);
求出函数f(X)在Xi点的梯度∇f=δfδXi;
如果函数误差E(f(Xi),f(Xi−1))>ϵ,则依据梯度更新xi=xi−α∇f(xi)重复2,3步直到函数误差小于阈值ϵ。其中α为步长,用于控制每次下降的幅度,通常其值是逐渐递减的。
批量梯度下降与随机梯度下降
对于线性回归我们知道其模型为fΘ(X)=XTΘ,那么其损失函数J(Θ)=12m∑mi=1(fΘ(xi)−yi)2,故δfδΘ=1m∑mi=1(fΘ(xi)−yi)xi批量梯度下降
对于批量梯度下降,其对Θ的更新策略为θt+1j=θtj−1m∑i=1m(fθj(xij)−yi)xij我们可以看到对于批量梯度下降,其每一次更新都要考虑所有的样本,当样本量很大的时候,这种更新的速度是非常慢的,那么我们就想能否每来一个样本我们就更新一次而不是等所有样本都到来才更新?
随机梯度下降
对于梯度下降,其更新策略不再是每次更新都考虑所有的样本,而是对每个样本,都对参数进行一次更新,其更新策略如下:θt+1j=θtj−fθj(xij)−yi)xij在这种情况下,我们可能只需要其中的一部分样本就可以让算法收敛到极值点。
相关文章推荐
- 梯度下降法的解释和几点误解
- mysql导入大批量数据出现MySQL server has gone away的解决方法
- 桶排序,冒泡排序,快速排序算法Python实现
- ListView的Item高度不确定,导致最后一条item中ImageView 加载图片时不能完全显示
- Mac OSX 配置rz、sz 远程上传、下载文件
- JavaScript:DOM
- Android 仿腾讯QQ 的 ListView滑动删除
- vim 经典配色 molokai.vim 配色安装
- GitHub和SourceTree入门教程
- 【面试编程题】7-剑指offer之高质量的代码
- Python 学习之路-基本的概念(三)
- oxs proxychinas4 不起作用----关闭SIP
- IIS服务器 & PHP 测试问题
- 关于ffmpeg的例子muxing.c
- oracle常用函数
- gridview多选单选的实现
- 细剖最短路【闲谈,权当是饭后杂文】
- idea 14.0破解
- C语言中体现面向对象的地方
- 《玩转Bootstrap(基础)》笔记