梯度下降无约束最优化问题

Posted 辰chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梯度下降无约束最优化问题相关的知识,希望对你有一定的参考价值。

目录

前言

本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。本文通过公式推导+代码两个方面同时进行,因为涉及到代码的编译运行,如果你没有 N u m P y NumPy NumPy P a n d a s Pandas Pandas M a t p l o t l i b Matplotlib Matplotlib 的基础,建议先修文章:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),本文是梯度下降的第一部分,后续还会有:梯度下降优化梯度下降优化进阶 (暂未更新)

1.无约束最优化

🚩无约束最优化问题(unconstrained optimizationproblem)指的是从一个问题的所有可能的备选方案中,选择出依某种指标来说是最优的解决方案。从数学上说,最优化是研究在一个给定的集合S上泛函 J ( θ ) J(\\theta) J(θ)的极小化或极大化问题:广义上,最优化包括数学规划、图和网络、组合最优化、库存论、决策论、排队论、最优控制等。狭义上,最优化仅指数学规划。

大白话说就是,比如对于一个二次函数我们要求其极值,无约束的意思就是 x x x 的取值是任意的,在 R R R 上都可取,对于有约束可以形象化理解为我们对 x x x 的范围进行了限制,比如我们要求 x > 0 x>0 x>0

2.梯度下降

🚩梯度下降法 ( G r a d i e n t (Gradient (Gradient D e s c e n t ) Descent) Descent) 是一个算法,但不是像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法(都是无约束最优化问题)求解出最优解, 所谓的通用就是很多机器学习算法都是用梯度下降,甚至深度学习也是用它来求解最优解。所有优化算法的目的都是期望以最快的速度把模型参数θ求解出来,梯度下降法就是一种经典常用的优化算法。

之前利用正规方程求解的 θ \\theta θ 是最优解的原因是 M S E MSE MSE 这个损失函数是凸函数。但是,机器学习的损失函数并非都是凸函数,设置导数为 0 0 0 会得到很多个极值,不能确定唯一解。

使用正规方程 θ = ( X T X ) − 1 X T y \\theta = (X^TX)^-1X^Ty θ=(XTX)1XTy 求解的另一个限制是特征维度( X 1 、 X 2 … … 、 X n X_1、X_2……、X_n X1X2Xn)不能太多,矩阵逆运算的时间复杂度通常为 O ( n 3 ) O(n^3) O(n3) 。换句话说,就是如果特征数量翻倍,你的计算时间大致为原来的 2 3 2^3 23 倍,也就是之前时间的 8 8 8 倍。举个例子, 2 2 2 个特征 1 1 1 秒, 4 4 4 个特征就是 8 8 8 秒, 8 8 8 个特征就是 64 64 64 秒, 16 16 16 个特征就是 512 512 512 秒,当特征更多的时候呢?运行时间会非常漫长~

所以正规方程求出最优解并不是机器学习甚至深度学习常用的手段。

之前我们令导数为 0 0 0,反过来求解最低点 θ \\theta θ 是多少,而梯度下降法是一点点去逼近最优解!


其实这就跟生活中的情形很像,比如你问一个朋友的工资是多少,他说你猜?那就很难了,他说你猜完我告诉你是猜高了还是猜低了,这样你就可以奔着对的方向一直猜下去,最后总会猜对!梯度下降法就是这样的,多次尝试。并且,在试的过程中还得想办法知道是不是在猜对的路上,说白了就是得到正确的反馈再调整然后继续猜才有意义~

这个就好比道士下山,我们把 L o s s Loss Loss (或者称为 C o s t Cost Cost,即损失)曲线看成是山谷,如果走过了,就再往回返,所以是一个迭代的过程。

3.梯度下降公式

🚩这里梯度下降法的公式就是一个式子指导计算机迭代过程中如何去调整 θ \\theta θ,可以通过泰勒公式一阶展开来进行推导和证明:

  • θ n + 1 = θ n − α ∗ g r a d i e n t \\theta^n + 1 = \\theta^n - \\alpha * gradient θn+1=θnαgradient

其中 α \\alpha α 表示步幅,也称为学习率, g r a d i e n t gradient gradient 表示梯度,即导数, θ \\theta θ 是方程系数

  • θ n + 1 = θ n − α ∗ ∂ J ( θ ) ∂ θ \\theta^n + 1 = \\theta^n - \\alpha * \\frac\\partial J(\\theta)\\partial \\theta θn+1=θnαθJ(θ)

    有些公式,使用其他字母表示:

  • θ n + 1 = θ n − η ∗ ∂ J ( θ ) ∂ θ \\theta^n + 1 = \\theta^n - \\eta * \\frac\\partial J(\\theta)\\partial \\theta θn+1=θnηθJ(θ)

  • w j n + 1 = w j n − η ∗ ∂ J ( θ ) ∂ θ j w_j^n + 1 = w_j^n - \\eta * \\frac\\partial J(\\theta)\\partial \\theta_j wjn+1=wjnηθjJ(θ)

这里的 w j w_j wj 就是 θ \\theta θ 中的某一个 j = 0 , . . . , m j = 0,...,m j=0,...,m,这里的 η \\eta η 就是梯度下降图里的 l e a r n i n g learning learning s t e p step step,很多时候也叫学习率 l e a r n i n g learning learning r a t e rate rate,很多时候也用 α \\alpha α 表示,这个学习率我们可以看作是下山迈的步子的大小,步子迈的大下山就快。


学习率一般都是正数,如果在山左侧(曲线左半边)梯度是负的,那么这个负号就会把 w j w_j wj 往大了调, 如果在山右侧(曲线右半边)梯度就是正的,那么负号就会把 w j w_j wj 往小了调。每次 w j w_j wj 调整的幅度就是 η ∗ g r a d i e n t \\eta * gradient ηgradient,就是横轴上移动的距离。

因此,无论在左边,还是在右边,梯度下降都可以快速找到最优解,实现快速下山~

如果特征或维度越多,那么这个公式用的次数就越多,也就是每次迭代要应用的这个式子多次(多少特征,就应用多少次),所以其实上面的图不是特别准,因为 θ \\theta θ 对应的是很多维度,应该每一个维度都可以画一个这样的图,或者是一个多维空间的图。

  如果特征或维度越多,那么这个公式用的次数就越多,也就是每次迭代要应用的这个式子多次(多少特征,就应用多少次),所以其实上面的图不是特别准,因为 θ \\theta θ 对应的是很多维度,应该每一个维度都可以画一个这样的图,或者是一个多维空间的图。