本次整理梯度下降法的学习笔记;
先贴出文章结构
~具体样例
一起去爬山吗?下山为例吧,要从山顶到山底,球球有一个一眼可以看出坡度的超能力,球球要利用这个超能力下山,因为是晚上,球球也看不见,球球就找最陡的地方滚下去,球球知道从山顶到山底它的总体坡度是有变化趋势的,所以它觉得这是个利用超能力的好机会,利用超能力耗时间,但是不用超能力又不方便寻路,说不定就滚到了山的对面,我们开始探究球球对这个鸡肋的超能力使用之法。
~抽象样例
迭代法的一种,用于求解最小二乘问题,最小二乘问题是指,在已取定的某函数类中,求目标函数F (.x)使其方差,即各样点处偏差的平方和。
用法
在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
其实可以看出来,梯度下降就是从初始值一步一步迭代求解,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
~基础知识
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
微分由函数B=f(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。
举几个微分栗子吧,
学习率a
迭代的步长,就是球球下降距离,为了使得距离不会太多或太少用学习率约束距离。
梯度下降内容
待优化连续可微函数f(x),学习率a和初始数据{x|x1,x2,x3...}
计算待优化函数梯度vf(x)
迭代公式xn+1=xn-avf(x)
计算f(xn+1)处函数梯度vf(xn+1)
计算梯度向量的模来判断算法的收敛情况||vf(x)||<=极小的值
收敛则停止,否则继续迭代
举一个实例
求函数f(x)=x^2的最小值
方法归类
1.批量梯度下降
批量梯度下降法计算梯度时,使用全部样本数据,分别计算梯度后除以样本个数(取平均)作为一次迭代使用的梯度向量。
2.随机梯度下降
随机梯度下降法在计算优化函数的梯度时利用随机选择的一个样本数据
3.小批量梯度下降
小批量梯度下降法在计算优化函数的梯度时利用随机选择的一部分样本数据
注意事项
优缺点汇总
1.批量梯度下降
优点:全局最优解;容易同时实现;
缺点:当样本数目很多时,耗时过多
2.随机梯度下降
优点:耗时少;
缺点:准确度下降,并不是全局最优,不容易同时实现。
3.小批量梯度下降
优点:有以上两者,的中和优点,速度适中,准确度适中
缺点:速度不如随机梯度下降,准确度不如批量梯度下降
手工推导:
#include<iostream>
using namespace std;
int main()
{
double x=-5,a=0.05,n=0,v,m=-4,f=-5;
v=2*x;
while(v*v>=0.0001)
{
m=f-a*v;
f=m;
v=2*m;
}
cout<<m<<endl;
}
以上是f(x)=x^2用梯度下降法计算的初步代码,代表理解一部分。
当a=0.5时输出下个情况
python样例
网友评论