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+CTABT$

网络上貌似有很多精巧的证明方法,不过我都不怎么懂- -,还是暴力展开比较实在:$$\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  阅读(658)  评论(0编辑  收藏  举报