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_1^T(X^TX)\theta_1 + \theta_2^T(X^TX)\theta_2 \ge \theta_1^T(X^TX)\theta_2 + \theta_2^T(X^TX)\theta_1$$ 移项与合并后,我们发现,只需要满足:$$(\theta_1-\theta_2)^T(X^TX)(\theta_1-\theta_2)\ge0$$ 代价函数就是凸函数。根据半正定矩阵的定义,只有 $(X^TX)$ 是半正定矩阵时,该不等式成立。而 $(X^TX)$ 很显然是半正定的,因为对于任意向量 $a$,我们都有 $$a^T(X^TX)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}(ABA^TC)=\sum_k\sum_lb_{j,k}a_{l,k}c_{l,i}=(BA^TC)_{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) = (BA^TC)^T + CAB = CAB+C^TAB^T$$

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

首先把代价函数全部展开,获得:$$J(\theta) = \theta^TX^TX\theta - \theta^TX^TY - Y^TX\theta + Y^TY$$ 由于数值的迹等于自身,我们有:$$J(\theta) = \text{tr}(\theta^TX^TX\theta - \theta^TX^TY - Y^TX\theta + Y^TY)$$ $$= \text{tr}(\theta^TX^TX\theta) - \text{tr}(\theta^TX^TY) - \text{tr}(Y^TX\theta) + \text{tr}(Y^TY)$$ 我们把梯度加进去,由于最后一项和 $\theta$ 无关,可以直接略去。有:$$\nabla_\theta J(\theta) = \nabla_\theta \text{tr}(\theta^TX^TX\theta) - \nabla_\theta \text{tr}(\theta^TX^TY) - \nabla_\theta \text{tr}(Y^TX\theta)$$ 对第一项和第三项使用公式 2:$$\nabla_\theta J(\theta) = \nabla_\theta \text{tr}(\theta\theta^TX^TX) - \nabla_\theta \text{tr}(\theta^TX^TY) - \nabla_\theta \text{tr}(\theta Y^TX)$$ 对第一项使用公式 3(令 $A = \theta, B = I,C = X^TX$,其中 $I$ 是单位矩阵):$$\nabla_\theta \text{tr}(\theta\theta^TX^TX) = X^TX\theta + X^TX\theta = 2X^TX\theta$$ 对第二项和第三项使用公式 1:$$\nabla_\theta \text{tr}(\theta^TX^TY) = 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 = (X^TX)^{-1}X^TY$$ 若 $(X^TX)$ 不可逆,似乎也可以用伪逆矩阵带入算出 $\theta$,不过我并不知道为什么这样是正确的...

转载于:https://www.cnblogs.com/tsreaper/p/normal-equation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值