梯度下降法理论及部分代码实现

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

梯度下降法

梯度下降法是一种最优化算法,常用来优化参数,通常也称为最速下降法。

梯度下降法是一般分为如下两步:

1)首先对参数θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量;

2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。

以一个线性回归问题为例,应用libsvm 包里的数据heart_scale.mat 数据做测试。假设要学习这么一个函数:

+++==22110)()(x x x h x h θθθθ

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

2||||2

1)(Y X J -=θθ (1) 其中X 看以看成一行一行的样本向量,那么Θ就是一列一列的了。目标很简单,就是求损失J 最小值时候的解Θ:

先直接求导,对于求导过程,详解如下:

首先定义损失变量:

∑=-=n

j i j ij i y X r 1θ

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

∑==m i i r J 1

221 一步一步的求导:

∑=∂∂⨯=∂∂m i j

i i j r r J 1)(θθ 再求:

ij j

i X r =∂∂θ 那么把分步骤合起来就是:

∑∑==-=∂∂m i ij n k i k ik j X y X J 11

)(θθ 令导数为0,求此时的Θ,整理一下,有:

∑∑∑====m i m

i j ij n k k ik ij y X X X

111^θ 用矩阵符号将上面的细节运算抽象一下:

0=-=∂∂Y X X X J T T θθ

让导数为0,那么求得的解为:

Y X X X T T 1)(-=θ

求解矩阵的逆复杂度有点儿高,可以用梯度下降来求解:

][)()(1111Y X X X J J T i T i i i i --=∂∂-=∆-=----θγθθ

θγθθγθθ (2) 其中γ就是下降的速度,一般是一个小的数值,可以从0.01开始尝试,越大下降越快,收敛越快。

迭代终止的条件取:

εθθ<--||||1i i

部分代码如下:

w_old=zeros(size(X,2),1);%%初始化参数w

k=1;

while 1

minJ_w(k) = 1/2 * (norm(X*w_old - Y))^2; %%损失函数 公式(1)

%%norm 默认为L2标准化 w_new = w_old - gamma*(X'*X*w_old - X'*Y);%%梯度下降公式

%%公式(2)

if norm(w_new-w_old) < epsilon %%终止条件

W_best = w_new;

break ;

end

w_old = w_new;

k=k+1;

end

实验结果:

相关文档
最新文档