梯度下降法原理与仿真系列(1)

更多相关内容请关注vx公号 优化与算法 便捷及时阅览

1 引言

梯度下降法(Gradient Descent)也称为最速下降法(Steepest Descent),是法国数学家奥古斯丁·路易·柯西 (Augustin Louis Cauchy) 于1847年提出来,它是最优化方法中最经典和最简单的一阶方法之一。梯度下降法由于其较低的复杂度和简单的操作而在很多领域得到广泛研究和应用,如机器学习。由梯度下降法衍生了许多其他算法,如次梯度下降法,近端梯度下降法,随机梯度下降法,回溯梯度发,动量加速梯度法等等。本文只介绍最基础的梯度下降法原理和理论分析,与此同时,通过仿真来说明梯度下降法的优势和缺陷。其他重要的梯度下降衍生方法会持续更新,敬请关注。

2 梯度下降法原理

2.1 偏导数,方向导数和梯度

在直角坐标系下,标量函数 f:\mathbb{R}^{n}\mapsto \mathbb{R} 的梯度 \nabla f 定义为:

\nabla f = \frac{{\partial f}}{{\partial x}}{\bf{i}} + \frac{{\partial f}}{{\partial y}}{\bf{j}} + \frac{{\partial f}}{{\partial z}}{\bf{k}}

其中 \bf{i}\bf{j}\bf{k} 表示在三个维度的单位方向矢量。\frac{{\partial f}}{{\partial x}}\frac{{\partial f}}{{\partial y}}\frac{{\partial f}}{{\partial z}} 为对应的偏导数。

  • 方向导数:函数在某点处有无数条切线,沿着这些方向的斜率组成了方向导数,每一条切线都代表一个变化的方向。
  • 偏导数:函数在一个点处有无数个导数,而延着坐标轴方向对应的导数叫偏导数。
  • 梯度:是一个向量,它是的方向是最大方向导数所对应的方向。

梯度下降法就是以梯度为搜索方向的迭代优化算法

梯度下降法迭代过程

2.2 梯度下降法描述

对于无约束优化问题:

\mathop {\arg \min }\limits_{{\bf{x}} \in {\mathbb{R}^n}} f({\bf{x}})

函数 f 可以是凸的,也可以是非凸的,在高维非凸的情况下,解这样一个优化问题可能很难计算解析解,而我们可以使用数值迭代法来求得一个局部最优解。这样的迭代方法有很多,比如本文讲的梯度下降法,牛顿迭代法,共轭梯度法等,其中梯度下降法利用了梯度信息,属于一阶方法,牛顿法利用了海森矩阵,属于二阶方法,而共轭梯度法是介于这二者之间的方法。

复杂函数图像

我们先来看看梯度下降法是什么样子的,梯度下降法的迭代公式为:
{{\bf{x}}^{k + 1}} = {{\bf{x}}^k} + {\alpha _k}{{\bf{d}}^k}
式 (2) 中 {{\bf{x}}^k} 表示第 k 次迭代时的位置,\alpha_k 表示第 k 次迭代的步长,\bf{d}_k 表示第 k 次迭代的寻优方向。梯度下降法就是在给定初始点 \bf{x}_0 后,通过不断沿着寻优方向迭代找到局部最优值的过程。

那么梯度下降法中的<font color="#dd00dd">步长</font>和<font color="#dd00dd">方向</font>怎么确定呢?
一般来说,步长的选择有多种方式,可以是固定的,也可以是随着迭代过程而变化的
寻优方向则是 f(\bf{x}) 在点 \bf{x}_k 处的梯度反方向,

2.3 梯度下降法的矩阵形式

以求解线性方程 {\bf{y}} = {\bf{Ax}} 为例,
假设目标函数为
f({\bf{x}}) = \frac{1}{2}\left\| {{\bf{Ax}} - {\bf{y}}} \right\|_2^2
我们知道目标函数的梯度就是梯度下降法的寻优方向,所以我们可以先求目标函数的导数:
{\bf{g}} = {{\bf{A}}^T}({\bf{Ax}} - {\bf{y}})
{\bf{x}}_{k} 处,将 {{\bf{x}}_{k + 1}} = {{\bf{x}}_k} + {\alpha _k}{{\bf{g}}_k} 代入上式中,得到:
f({{\bf{x}}_{k + 1}}) = \frac{1}{2}\left\| {{\bf{A}}({{\bf{x}}_k} + {\alpha _k}{{\bf{g}}_k}) - {\bf{y}}} \right\|_2^2
接下来,为了求 {\bf{x}}_{k} 处的步长,我们介绍一种精确线搜索(Exact Line Search)方法,
精确线搜索方法的原理是沿着 {{\bf{x}}_k} + {\alpha _k}{{\bf{g}}_k} 方向最小化目标函数,从而得到此时的 {\alpha _k}。也就是求解这样一个问题:
{\alpha _k} = \mathop {\arg \min }\limits_\alpha f\left( {{{\bf{x}}_k} + {\alpha _k}{{\bf{g}}_k}} \right)
求解这个优化问题,我们只需对 {\alpha _k} 求导,并且令结果等于0,也就是:
\frac{{\partial f({{\bf{x}}_{k + 1}})}}{{\partial {\alpha _k}}} = 0
{\left( {{\bf{A}}{{\bf{g}}_k}} \right)^T}\left( {{\bf{A}}({{\bf{x}}_k} + {\alpha _k}{{\bf{g}}_k}) - {\bf{y}}} \right) = 0
{\alpha _k}{\left( {{\bf{A}}{{\bf{g}}_k}} \right)^T}{\bf{A}}{{\bf{g}}_k} + {\bf{g}}_k^T{{\bf{A}}^T}\left( {{\bf{A}}{{\bf{x}}_k} - {\bf{y}}} \right) = 0
{\alpha _k}{\left( {{\bf{A}}{{\bf{g}}_k}} \right)^T}{\bf{A}}{{\bf{g}}_k} = {\bf{g}}_k^T{{\bf{g}}_k}
{\alpha _k} = \frac{{{\bf{g}}_k^T{{\bf{g}}_k}}}{{{{\left( {{\bf{A}}{{\bf{g}}_k}} \right)}^T}{\bf{A}}{{\bf{g}}_k}}}
当然,还有其他的一些步长选择方法,比如回溯线搜索方法等,在这里就不再展开。
寻优方向和步长都得到了,那么矩阵形式的梯度下降法的迭代公式可以总结为:
{{\bf{x}}_{k + 1}} = {{\bf{x}}_k} + {\alpha _k}{{\bf{A}}^T}({\bf{A}}{{\bf{x}}_k} - {\bf{y}})

可以证明,采用精确线性搜索的最速下降法的收敛速度是线性的。对于极小化正定二次函数,梯度下降法产生的序列满足
\frac{{f({x_{k + 1}}) - f({x^*})}}{{f({x_k}) - f({x^*})}} \le {\left( {\frac{{{\lambda _1} - {\lambda _n}}}{{{\lambda _1} + {\lambda _n}}}} \right)^2} = {\left( {\frac{{\kappa - 1}}{{\kappa + 1}}} \right)^2}
这里 {{\lambda _1}}{{\lambda _1}} 分别表示矩阵 {{\bf{A}}^T}{\bf{A}} 的最大和最小特征值,\kappa = \frac{{{\lambda _1}}}{{{\lambda _n}}} 表示矩阵 {{\bf{A}}^T}{\bf{A}} 的条件数。可以看出梯度下降法的收敛速度是与对称矩阵 {{\bf{A}}^T}{\bf{A}} 的条件数有关的,条件数越小收敛速度越快。如果矩阵的条件数远大于1,则说明矩阵是ill-conditioned,反之,如果矩阵的条件数等于1,则说明矩阵是well-conditioned。

3 收敛性分析

如果函数 f 在定义域内是利普希兹连续(Lipschitz continuous)的,则有:
\left\| {f(x) - f(y)} \right\| \le L\left\| {x - y} \right\|
如果函数 f 的导数符合Lipschitz continuous,那么有:
\left\| {\nabla f(x) - \nabla f(y)} \right\| \le L\left\| {x - y} \right\|
其中 L>0 称为利普希兹常数。

在梯度满足利普希兹连续条件下,梯度下降法的收敛性如下:

步长为 \alpha \le \frac{1}{L} 的梯度下降法满足:
f({x_k}) - f({x^*}) \le \frac{{{{\left\| {{x_0} - {x^*}} \right\|}^2}}}{{2\alpha k}}
也就是说梯度下降法的收敛速度为 O\left( {\frac{1}{k}} \right),只需要 O\left( {\frac{1}{\varepsilon }} \right) 次迭代即可达到 f({x_k}) - f({x^*}) \le \varepsilon

上述结论的证明见参考文献[1],这里给一个简单的描述。
如果 \nabla f(x) 满足利普希兹连续条件,那么下式成立
f(y) \le f(x) + \nabla f{(x)^T}(y - x) + \frac{L}{2}{\left\| {y - x} \right\|^2}
y = x - \alpha \nabla f(x) 代入可得
f(y) \le f(x) - (1 - \frac{{L\alpha }}{2})\alpha {\left\| {\nabla f(x)} \right\|^2}
\tilde x = x - \alpha \nabla f(x),且 0 < \alpha \le \frac{1}{L},有
\begin{array}{l} f(\tilde x) \le f({x^*}) + \nabla f{(x)^T}(y - {x^*}) - \frac{\alpha }{2}{\left\| {\nabla f(x)} \right\|^2} \\ = f({x^*}) + \frac{1}{{2\alpha }}({\left\| {x - {x^*}} \right\|^2} - {\left\| {\tilde x - {x^*}} \right\|^2}) \\ \end{array}
将所有迭代求和
\begin{array}{l} \sum\limits_{i = 1}^k {\left( {f({x_i}) - f({x^*})} \right)} \le \frac{1}{{2\alpha }}\left( {{{\left\| {{x_0} - {x^*}} \right\|}^2} - {{\left\| {{x_k} - {x^*}} \right\|}^2}} \right) \\ \le \frac{1}{{2\alpha }}{\left\| {{x_0} - {x^*}} \right\|^2} \\ \end{array}
因为 f({x_k}) 是非增的,所以有
f({x_i}) - f({x^*}) \le \frac{1}{k}\sum\limits_{i = 1}^k {\left( {f({x_i}) - f({x^*})} \right)} \le \frac{{{{\left\| {{x_0} - {x^*}} \right\|}^2}}}{{2\alpha k}}

4 梯度下降法仿真

通过梯度下降法求解二次方程来说明梯度下降法的性能。设求解的问题为 {\bf{y}} = {\bf{Ax}},那么用梯度下降法求解 {\bf{x}}^{*} 可以写成优化问题: {\bf{x}}^{*}=\mathop {\arg \min }\limits_{{\bf{x}} \in {\mathbb{R}^n}} \frac{1}{2}\left\| {{\bf{Ax}} - {\bf{y}}} \right\|_2^2

4.1 Matlab code

  • 梯度下降法函数
function [hat_x, error] = opt_gd(y,A,iter_max)
% gradient descent algorithm for solving y=Ax
% Louis Zhang 2020.12.10
% email:zhangyanfeng527@gmail.com
n = size(A,2) ;
x0 = zeros(n,1) ;
g0 = A'*(y-A*x0) ;
% 初始化梯度
% 初始化x_0
for k = 1:iter_max
    g1 = A'*(y-A*x0) ;
    % 计算梯度
    %  alpha = (g0'*g0)/(norm(A*g0)^2) ;
    alpha = 0.1 ;
    % 计算步长
    hat_x = x0 + alpha*g1 ;
    % 更新x_k+1
    error(k) = (norm(y-A*hat_x)/norm(y))^2 ;
    % error(k) = (norm(hat_x-x0)/norm(hat_x))^2 ;
    if error(k)<1e-8
        break;
    else
        x0 = hat_x ;
        g0 = g1 ;
    end
end
end
  • 测试程序
clear
clc
N = 1000 ;
iter_max = 1000 ;
sig_max = 1 ;
% 最大奇异值
sig_min = 1 ;
% 最小奇异值
sig_num = linspace(sig_min,sig_max,N) ;
% 生成奇异值,最大奇异值为100,最小奇异值为1
V = diag(sig_num) ;
% 生成奇异值组成的对角矩阵
A_rand = randn(N,N) ;
% 生成随机矩阵
A_orth = orth(A_rand) ;
% 随机矩阵正交化
A = A_orth*V*A_orth^(-1) ;
% 得到设定条件数的矩阵A
cond(A)
% 试一下矩阵A的条件数是否正确
x = randn(N,1) ;
y = A*x ;

[hat_x,error] = opt_gd(y,A,iter_max) ;
% 使用梯度下降法求解y=Ax

figure(1)
plot(error,'m-o')
xlabel('迭代次数')
ylabel('NMSE')
title(['condition number=',num2str(sig_max/sig_min)])

4.2 仿真结果

固定步长为0.5,条件数为2

最优步长,条件数为2

最优步长,条件数为10

从结果可以看出来在相同条件数情况下,最优步长比固定步长收敛速度要快;在最优步长情况下,条件数越大收敛速度越慢。

5 讨论

5.1 梯度下降法优点

  • 梯度下降法的复杂度较低,比如在求解二次问题时,最小二乘的复杂度为 O\left( {{n^3}} \right),而梯度下降法的复杂度为 O\left( {{n^2}} \right)。在求解大规模问题时优势明显。

5.2 梯度下降法缺点

  • 梯度下降法的收敛速度较慢,原因是每次迭代时作为梯度方向作为寻优方向,梯度方向仅仅反映了点 {\bf{x}}_k 的局部性质,也就是说,对于局部来说,梯度方向是最快的方向,而对于全局来说,梯度方向不一定是最快的方向。
  • 梯度下降法的收敛受初始点的影响较大,在非凸问题中,初始点如果选在最优点附近,则能以较快的速度收敛到全局最优点,如果初始点与最优点较远,则可能收敛到局部最优点。
  • 梯度下降法存在锯齿收敛情况,尤其是在最优点附近时,由于梯度变化缓慢,收敛速度非常慢。

6 参考文献

[1]]袁亚湘, 孙文瑜. 最优化理论与方法[M]. 科学出版社, 1997.
[2]https://www.cs.ubc.ca/~schmidtm/Courses/540-W18/L4.pdf
[3]https://www.cs.cmu.edu/~ggordon/10725-F12/slides/05-gd-revisited.pdf
[4]]http://users.ece.utexas.edu/~cmcaram/EE381V_2012F/Lecture_4_Scribe_Notes.final.pdf

更多相关内容请关注vx公号 优化与算法 便捷及时阅览

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容