Description
之前线性回归讲了如何用线性函数去拟合数据,那么当数据比较复杂, 不是线性关系时,线性函数拟合的效果就不会很好, 我们就需要尝试使用非线性函数去拟合数据。
假设我们使用三次方程 来拟合数据, 可以发现三次方程可以看作是不同特征向量的线性组合。 令 ,则:
令 包含向量 。 重写上诉三次方程为:
因此,一个多项式方程可以被看作是关于 的线性方程。
我们称原始输入为 attributes
, 为 features map
,
映射之后的新输入为 features
。
LMS(least mean squares) with features
之前 LMS 更新方程如下:
\begin{equation*} \begin{aligned} \theta &:=\theta+\alpha \sum_{i=1}^{n}\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x^{(i)} \\ &:=\theta+\alpha \sum_{i=1}^{n}\left(y^{(i)}-\theta^{T} x^{(i)}\right) x^{(i)} \end{aligned} \end{equation*}
令 为从 attributes
( )
到 ( )的 feature map
。
直接将 使用 代替得:
LMS with kernel skills
直接使用 LMS 算法更新 需要很大的计算量。
举个例子,假设 , feature map
为最高次小于等于 3 的多项式:
的维度为 ,如果 ,那么每次更新都需要保存和计算 个数据, 花费相当大。
为了简化这个计算,我们引入了 Kernel Trick 方法解决计算问题。
为了简单,我们将 初始化为 0。 注意到,在每个阶段,都可以把 看作 的线性组合。 数学归纳法证明如下:
最开始, 。 之后每步更新中,假设
其中, 。
那么下一步的 可以表示为:
证毕。
由上证明可得:
将上一时刻的 用 替换得:
我们通常将 记作 , 表示两个向量之间的内积。到此,我们成功将问题转换成了 的更新。 但我们仍然需要计算 ,对于每个 ,其计算复杂度为 。 这计算量相当的大了,但是,有下面两个方法可以解决这个问题:
- 提前将 计算好,在循环里面就可以直接使用了;
- 绝大多数的核函数可以高效的计算内积。
拿我们之前定义的 feature map
来说,其内积为:
\begin{aligned} \langle\phi(x), \phi(z)\rangle &=1+\sum_{i=1}^{d} x_{i} z_{i}+\sum_{i, j \in\{1, \ldots, d\}} x_{i} x_{j} z_{i} z_{j}+\sum_{i, j, k \in\{1, \ldots, d\}} x_{i} x_{j} x_{k} z_{i} z_{j} z_{k} \\ &=1+\sum_{i=1}^{d} x_{i} z_{i}+\left(\sum_{i=1}^{d} x_{i} z_{i}\right)^{2}+\left(\sum_{i=1}^{d} x_{i} z_{i}\right)^{3} \\ &=1+\langle x, z\rangle+\langle x, z\rangle^{2}+\langle x, z\rangle^{3} \end{aligned}
因此,我们可以先计算 ,时间复杂度为 , 然后再用常数倍的时间复杂度就可以求出 。
从上面的分析可以看出,核函数非常重要,知道如何求解核函数,就可以求出问题的最优解。
我们定义 Kernel
为:
我们讲前面的算法重新整理一下:
- 计算所有核函数
Kernel
, - Loop. 令 为 的矩阵, ,有
至此,我们将 更新的时间复杂度降到了 。 求解预测值时也非常简单:
可以看出,我们其实并不需要知道真正的 feature map
是什么就可以计算预测值了,
只要有一个合适的 Kernel
就可以了。
换句话说,我们需要找一个函数 ,验证其满足一些性质,使得这个函数对应的 feature map
存在,
就可以使用上诉算法求解了。
先来看几个 Kernel 方程的例子。
-
\begin{aligned} K(x,z)&=(\sum_{i=1}^{d}x_{i}z_{i})(\sum_{j=1}^{d}x_{j}z_{j}) \\ &=\sum_{i=1}^{n}\sum_{j=1}^{n}x_{i}x_{j}z_{i}z_{j} \\ &=\sum_{i,j=1}^{d}(x_{i}x_{j})(z_{i}z_{j}) \end{aligned}
由 知,
-
\begin{aligned} K(x,z)=\sum_{i,j=1}^{d}(x_{i},x_{j})(z_{i},z_{j})+\sum_{i=1}^{d}(\sqrt{2cx_{i}})(\sqrt{2cz_{i}})+c^2 \end{aligned}
其对应的
feature map
为:
更一般的, 也是一个 Kernel
。
Kernel 作为衡量相似性的指标
对于 ,如果 和 离得越远, 越小。 因此,可以把 看作是衡量 (或者 )相似性的标准。
基于这个想法,我们可以快速的验证一些函数是否可以作为 Kernel
。
例如,当:
这个函数满足上面提到的性质:当 靠近, 变大,当 离远, 变小。
这个 Kernel
叫做 Gaussian Kernel
,之后我们会讨论它。
Kernel 的必要条件
定义 Kernel Maxtrix , 。
如果 可以作为 Kernel 函数,那么 , 因此 是一个对称矩阵。
另外,对于任意向量 ,有:
\begin{aligned} z^T K z&=\sum_{i}\sum_{j}z_{i}K_{ij}z_{j} \\ &= \sum_{i}\sum_{j}z_{i}\phi(x^{(i)})^{T}\phi(x^{(j)})z_{j} \\ &= \sum_{i}\sum_{j}z_{i}\sum_{k}\phi_{k}(x^{(i)})\phi_{k}(x^{(j)})z_j \\ &= \sum_{k}\sum_{i}\sum_{j}z_{i}\phi_{k}(x^{(i)})\phi_{k}(x^{(j)})z_{j} \\ &= \sum_{k}(\sum_{i}z_{i}\phi_{k}(x^{(i)}))^2 \\ &\geq 0 \end{aligned}
其中, 是 的第 个元素。 。 这表明 是一个半正定矩阵。
综上,K 矩阵是一个半正定对称矩阵。
Kernel 的充分条件
事实上,上面的必要条件也是 Kernel 的充分条件。
TODO: 证明太长不想看了。