Linear Regression 中 Normal Equation 的推导

\(X\) 是训练数据组成的矩阵,每一行代表一条训练数据,每一列代表一种特征。设 \(Y\) 是训练数据的“正确答案”组成的向量,再设 \(\theta\) 是每种特征的权值组成的向量,linear regression 的目的就是通过让代价函数 \(J(\theta) = \frac{1}{2}(X\theta-Y)^T(X\theta-Y)\) 最小化,获得一个最优的 \(\theta\),从而对新的数据做出正确的推断。

我们当然可以使用梯度下降法慢慢调整 \(\theta\),使得代价函数下降,但我们还可以推导一个 normal equation,通过等式直接求出最优的 \(\theta\)

Normal equation 的推导思想,就是让 \(\nabla_\theta J(\theta) = 0\),从而解出最优的 \(\theta\)。这就要求代价函数是一个凸函数(因为凸函数的局部最优值就是全局最优值)。我们首先来看代价函数在什么情况下是凸函数。

代价函数为凸函数的条件

根据凸函数的定义,只有满足 \(f(tx+(1-t)y) \le tf(x) + (1-t)f(y)\quad (0 < t < 1)\)\(f\) 才是凸函数。所以我们需要证明: $$J(t\theta_1 + (1-t)\theta_2) \le tJ(\theta_1) + (1-t)J(\theta_2)$$ 经过一番展开和化简之后,我们可以将证明的目标简化为: $$\theta_1T(XTX)\theta_1 + \theta_2T(XTX)\theta_2 \ge \theta_1T(XTX)\theta_2 + \theta_2T(XTX)\theta_1$$ 移项与合并后,我们发现,只需要满足:$$(\theta_1-\theta_2)T(XTX)(\theta_1-\theta_2)\ge0$$ 代价函数就是凸函数。根据半正定矩阵的定义,只有 \((X^TX)\) 是半正定矩阵时,该不等式成立。而 \((X^TX)\) 很显然是半正定的,因为对于任意向量 \(a\),我们都有 $$aT(XTX)a = (Xa)^T(Xa) \ge 0$$

梯度的推导

我们接下来计算 \(\nabla_\theta J(\theta) = 0\) 成立时 \(\theta\) 的值。首先推导三个等式。

等式 1:\(\nabla_A\text{tr}(AB) = B^T\)

直接把矩阵的迹展开成矩阵元素的形式即可证明:$$\text{tr}(AB) = \sum_i\sum_ja_{i,j}b_{j,i}$$ $$\frac{\partial}{\partial a_{i,j}}\text{tr}(AB) = b_{j,i}$$ $$\nabla_A\text{tr}(AB) = B^T$$ 同理还能证明 \(\nabla_A\text{tr}(A^TB) = B\)

等式 2:\(\text{tr}(A_1A_2\dots A_n) = \text{tr}(A_nA_1A_2\dots A_{n-1})\)

我们先证明 \(\text{tr}(AB) = \text{tr}(BA)\):$$\text{tr}(AB) = \sum_i\sum_ja_{i,j}b_{j,i} = \sum_j\sum_ib_{j,i}a_{i,j} = \text{tr}(BA)$$ 再证明原等式: $$\text{tr}(A_1A_2\dots A_n) = \text{tr}((A_1A_2\dots A_{n-1})A_n) = \text{tr}(A_nA_1A_2\dots A_{n-1})$$

等式 3:\(\nabla_A\text{tr}(ABA^TC) = CAB+C^TAB^T\)

网络上貌似有很多精巧的证明方法,不过我都不怎么懂- -,还是暴力展开比较实在:$$\text{tr}(ABA^TC) = \sum_i\sum_j\sum_k\sum_la_{i,j}b_{j,k}a_{l,k}c_{l,i}$$ $$\frac{\partial}{\partial a_{i,j}}\text{tr}(ABATC)=\sum_k\sum_lb_{j,k}a_{l,k}c_{l,i}=(BATC)_{j,i}$$ $$\frac{\partial}{\partial a_{l,k}}\text{tr}(ABA^TC)=\sum_k\sum_la_{i,j}b_{j,k}c_{l,i}=(CAB)_{l,k}$$ 要注意矩阵 \(A\) 中元素的偏导会出现两次,例如与 \(a\_{1,2}\) 有关的偏导会在 \(i=1,j=2\) 时出现一次,还会在 \(l=1,k=2\) 时出现一次,所以我们要把两个偏导结果加起来,得到:$$\nabla_A\text{tr}(ABA^TC) = (BATC)T + CAB = CAB+CTABT$$

有了以上三个等式,我们就可以推导梯度了。

首先把代价函数全部展开,获得:$$J(\theta) = \thetaTXTX\theta - \thetaTXTY - Y^TX\theta + Y^TY$$ 由于数值的迹等于自身,我们有:$$J(\theta) = \text{tr}(\thetaTXTX\theta - \thetaTXTY - Y^TX\theta + Y^TY)$$ $$= \text{tr}(\thetaTXTX\theta) - \text{tr}(\thetaTXTY) - \text{tr}(Y^TX\theta) + \text{tr}(Y^TY)$$ 我们把梯度加进去,由于最后一项和 \(\theta\) 无关,可以直接略去。有:$$\nabla_\theta J(\theta) = \nabla_\theta \text{tr}(\thetaTXTX\theta) - \nabla_\theta \text{tr}(\thetaTXTY) - \nabla_\theta \text{tr}(Y^TX\theta)$$ 对第一项和第三项使用公式 2:$$\nabla_\theta J(\theta) = \nabla_\theta \text{tr}(\theta\thetaTXTX) - \nabla_\theta \text{tr}(\thetaTXTY) - \nabla_\theta \text{tr}(\theta Y^TX)$$ 对第一项使用公式 3(令 \(A = \theta, B = I,C = X^TX\),其中 \(I\) 是单位矩阵):$$\nabla_\theta \text{tr}(\theta\thetaTXTX) = X^TX\theta + X^TX\theta = 2X^TX\theta$$ 对第二项和第三项使用公式 1:$$\nabla_\theta \text{tr}(\thetaTXTY) = X^TY$$ $$\nabla_\theta \text{tr}(\theta Y^TX) = X^TY$$ 所以 $$\nabla_\theta J(\theta) = 2X^TX\theta - 2X^TY = 0$$ $$X^TX\theta = X^TY$$ 这就是 normal equation。

\((X^TX)\) 为正定矩阵,则由正定矩阵的行列式大于 0 可知正定矩阵一定有逆矩阵,我们有 $$\theta = (XTX)X^TY$$ 若 \((X^TX)\) 不可逆,似乎也可以用伪逆矩阵带入算出 \(\theta\),不过我并不知道为什么这样是正确的...

posted @ 2017-08-13 23:37  TsReaper  阅读(696)  评论(0)    收藏  举报