梯度下降法理论和部分代码实现.docVIP

  • 13
  • 0
  • 约9.68千字
  • 约 3页
  • 2017-08-03 发布于河南
  • 举报
梯度下降法 梯度下降法是一种 HYPERLINK /wiki/%E6%9C%80%E9%80%9F%E4%B8%8B%E9%99%8D%E6%B3%95 \t /nupt123456789/article/details/_blank 最优化算法,常用来优化参数,通常也称为最速下降法。 梯度下降法是一般分为如下两步: 1)首先对参数θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量; 2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。 以一个线性回归问题为例,应用libsvm包里的数据heart_scale.mat数据做测试。假设要学习这么一个函数: 那么损失函数可以定义成: (1) 其中X看以看成一行一行的样本向量,那么Θ就是一列一列的了。目标很简单,就是求损失J最小值时候的解Θ: 先直接求导,对于求导过程,详解如下: 首先定义损失变量: 那么损失函数就可以表示成: 一步一步的求导: 再求: 那么把分步骤合起来就是: 令导数为0,求此时的Θ,整理一下,有: 用矩阵符号将上面的细节运算抽象一下: 让导数为0,那么求得的解为: 求解矩阵的逆复杂度有点儿高,可以用梯度下降来求解: (2) 其中γ就是下降的速度,一般是一个小的数值,可以从0.01开始尝试,越大下降越快,收敛越快。 迭代终止的条件取: 部分代码如下: 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 实验结果:

文档评论(0)

1亿VIP精品文档

相关文档