学完了SGD才突然想起来,线性回归明明是有解析解的,而且是精确的。
既然有精确的解析解,为什么还要用梯度下降得到数值解呢?
4个回答
线性回归$y=Xw+\epsilon$其中$X$是输入,$y$是输出,$w$是未知参数,$\epsilon$是噪声。所谓的解析解就是最小二乘法($w=argmin_w|Xw-y|^2$)意义下的对$X$的pseudoinverse $w=(X^TX)^{-1}X^Ty$.这有个前提是$X$和$y$服从联合正态分布。如果$X$和$y$不是联合正态分布,那么这个解析解就不是精确的。实际中X和y的分布有可能不知道或者太复杂,不能化简一步得到解析解,所以还是要靠SGD之类的循环算法去逼近最优解。
加一个blog https://wiseodd.github.io/techblog/2017/01/05/bayesian-regression/
还可以去看Murphy, Kevin P. Machine learning: a probabilistic perspective.
--------------------
1.如果X中含有非独立的变量,$rank(\Sigma_{XX})=rank(X^TX)<d$,d是X维度,则$X^TX$不可逆。此时最小二乘无解。
2.如果X中的变量非常相关,$X^TX$的condition number很大,$(X^TX)^{-1}$中误差会被放大,而且会非常大。GD不用求$X^TX$的逆,所以结果比较可信。
SofaSofa数据科学社区DS面试题库 DS面经我觉得主要有两个原因。
第一个原因:速度快。这个当然是最主要的原因之一了。Zealing的回答里已经提到了,精确解是需要求矩阵乘积和矩阵逆的,这个计算量是比较恐怖的。SGD比这个快多了。
第二个原因:SGD是线上算法(online)。有新数据进入的时候,不需要重新计算,而精确的矩阵求解是做不到线上算法的。