1. 简介
- 梯度下降法(GradientDescent) 算法,不像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法(都是无约束最优化问题)求解出最优解,所谓的通用就是很多机器学习算法都是用梯度下降,甚至深度学习也是用它来求解最优解。所有优化算法的目的都是期望以最快的速度把模型参数 θ \theta θ求解出来,梯度下降法就是一种经典常用的优化算法。
- 之前利用正规方程求解的θ是最优解的原因是MSE这个损失函数是凸函数。但是,机器学习的损失函数并非都是凸函数,设置导数=0会得到很多个极值,不能确定唯一解。
2. 使用正规方程的弊端
- 使用正规方程 θ = ( X T ⋅ X ) − 1 X T y \theta = (X^T\cdot X)^{-1}X^Ty θ=(XT⋅X)−1XTy 求解的另一个限制是特征维度 ( X 1 、 X 2 、 X n ) (X_1、X_2、X_n) (X1、X2、Xn)不能太多,矩阵逆运算的时间复杂度通常为O(n3)。
- 换句话说,就是如果特征数量翻倍,你的计算时间大致为原来的 2 3 2^3 23倍,也就是之前时间的8倍。
- 举个例子,2个特征1秒,4个特征就是8秒,8个特征就是64秒,16个特征就是512秒。
当特征更多的时候,运行时间会非常漫长。 - 所以正规方程求出最优解并不是机器学习甚至深度学习常用的手段。
- 之前我们令导数为0,反过来求解最低点θ是多少,而梯度下降法是一点点去逼近最优解!
3. 梯度下降操作
如上图,先随机瞎蒙一个值(最右侧的紫色点儿),然后一步一步进行Learning step,逼近最优解。
学习率一般都是正数,如果在山左侧(曲线左半边)梯度是负的,那么这个负号就会把w往大了调,如果在山右侧(曲线右半边)梯度就是正的,那么负号就会把 w j w_j wj往小了调。每次 w j w_j wj调整的幅度就是 α ∗ g r a d i e n t \alpha*gradient