码迷,mamicode.com
首页 > 其他好文 > 详细

梯度下降算法(Gradient Descent)

时间:2014-05-07 07:05:49      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:机器学习   梯度下降   优化方法   

最近在搞论文,需要用梯度下降算法求解,所以重新整理分享在这里。主要包括梯度介绍、公式求导、学习速率选择、代码实现。

梯度下降的性质:

1.求得的解和选取的初始点有关

2.可以保证找到局部最优解,因为梯度最终会减小为0,即步长会自动越来越小。

梯度简介

一个多元函数的在某点的梯度方向是函数值在该点增长最快的方向,即方向导数取最大值的方向。
bubuko.com,布布扣

问题描述公式求导学习率选择

假设要学习这么一个函数:

bubuko.com,布布扣

bubuko.com,布布扣

那么损失函数可以定义成:

bubuko.com,布布扣


像这种优化问题有很多方法,那咱们先直接求导吧,对于求导过程,好多还是不理解,可以用这种方法:

首先定义损失变量:

bubuko.com,布布扣

那么损失函数就可以表示成:

bubuko.com,布布扣

一步一步的求导:

bubuko.com,布布扣

再求:                             

                                                                               bubuko.com,布布扣


那么把分步骤合起来就是:

bubuko.com,布布扣

可以用最小二乘或者梯度下降来求解,这里我们看看梯度下降的实现,梯度下降的思想不难,只要确定好梯度以及梯度的方向就ok,因为是梯度的反方向去下降,所以在对参数更新的时候要注意:

bubuko.com,布布扣

下降速率可以从0.01开始尝试,越大下降越快,收敛越快。当然下降的速率可以改成自适用的,就是根据梯度的强弱适当调整步伐,这样效果还好一点儿。

代码

matlab实现
clc;
clear
% load data
heart_scale = load(‘heart_scale‘);
X = heart_scale.heart_scale_inst;
Y = heart_scale.heart_scale_label;
 
epsilon = 0.0003;
gamma= 0.0001;
 
w_old=zeros(size(X,2),1);%参数初始值均设为0
k=1;
figure(1);
while 1
minJ_w(k) = 1/2 * (norm(X*w_old - Y))^2;
w_new = w_old - gamma*(X‘*X*w_old - X‘*Y);
fprintf(‘The %dth iteration, minJ_w = %f, \n‘,k,minJ_w(k));
 
if norm(w_new-w_old) < epsilon %这里采用两次迭代中优化目标是否变化来判定是否收敛,也可以通过判定优化函数值是否变化来判定是否收敛
W_best = w_new;
break;
end
w_old = w_new;
k=k+1;
end
 
plot(minJ_w);%观察收敛性


梯度下降算法(Gradient Descent),布布扣,bubuko.com

梯度下降算法(Gradient Descent)

标签:机器学习   梯度下降   优化方法   

原文地址:http://blog.csdn.net/u010367506/article/details/25081727

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!