CSK与KCF算法推导(二)

  本文是CSK与KCF算法推导的第二篇,主要介绍标量对向量求导、核函数、岭回归问题求解等内容。

向量求导

  很多论文里的数学推导都离不开对向量求导。对向量求导的本质也是对一个个分量求导,用向量写起来就非常紧凑美观。向量分为行向量和列向量,习惯上我们都是把变量写成列向量,所以大多数情况都是对列向量求导。有些书里提出了“分子布局”、“分母布局”的概念,帮助阐述如何对向量求导,但我怕比较繁琐就不在这里介绍了。

标量对向量求导

  两个向量的内积可以得到一个标量,这个标量对向量求导实际上是对向量的每个分量分别求导。设 q = { q 1 , q 2 , q 3 ⋯ q n } T q=\{q_1, q_2,q_3\cdots q_n\}^T q={q1,q2,q3qn}T x = { x 1 , x 2 , x 3 , ⋯ x n } T x=\{x_1,x_2,x_3,\cdots x_n\}^T x={x1,x2,x3,xn}T q q q x x x都是n维的列向量。把 q q q x x x的内积写成多项式的形式:
y = < q , x > = q T x = x T q = q 1 x 1 + q 2 x 2 + q 3 x 3 + ⋯ + q n x n y=<q,x>=q^Tx=x^Tq=q_1x_1+q_2x_2+q_3x_3+\cdots+q_nx_n y=<q,x>=qTx=xTq=q1x1+q2x2+q3x3++qnxn
  然后分别对 x x x的每个分量求导,结果也可以写成列向量。
∂ y ∂ x = ∂ q T x ∂ x = ∂ x T q ∂ x = [ ∂ ( q 1 x 1 + q 2 x 2 + q 3 x 3 + ⋯ + q n x n ) x 1 ∂ ( q 1 x 1 + q 2 x 2 + q 3 x 3 + ⋯ + q n x n ) x 2 ∂ ( q 1 x 1 + q 2 x 2 + q 3 x 3 + ⋯ + q n x n ) x 3 ⋮ ∂ ( q 1 x 1 + q 2 x 2 + q 3 x 3 + ⋯ + q n x n ) x n ] = [ q 1 q 2 q 3 ⋮ q n ] = q \frac {\partial y}{\partial x}=\frac {\partial q^Tx}{\partial x}=\frac {\partial x^Tq}{\partial x}= {\begin {bmatrix} \frac{\partial(q_1x_1+q_2x_2+q_3x_3+\cdots+q_nx_n)}{x_1}\\ \frac{\partial(q_1x_1+q_2x_2+q_3x_3+\cdots+q_nx_n)}{x_2}\\ \frac{\partial(q_1x_1+q_2x_2+q_3x_3+\cdots+q_nx_n)}{x_3}\\ \vdots\\ \frac{\partial(q_1x_1+q_2x_2+q_3x_3+\cdots+q_nx_n)}{x_n} \end {bmatrix}} = {\begin{bmatrix} q_1\\ q_2\\ q_3\\ \vdots\\ q_n \end{bmatrix}} = q xy=xqTx=xxTq=x1(q1x1+q2x2+q3x3++qnxn)x2(q1x1+q2x2+q3x3++qnxn)x3(q1x1+q2x2+q3x3++qnxn)xn(q1x1+q2x2+q3x3++qnxn)=q1q2q3qn=q
  在这里我们可以写一下全微分的形式,便于后面的理解:
d y = ∂ y ∂ x 1 d x 1 + ∂ y ∂ x 2 d x 2 + ∂ y ∂ x 3 d x 3 + ⋯ + ∂ y ∂ x n d x n = ( ∂ y ∂ x ) T d x dy=\frac{\partial y}{\partial x_1}dx_1+\frac{\partial y}{\partial x_2}dx_2+\frac{\partial y}{\partial x_3}dx_3+\cdots+\frac{\partial y}{\partial x_n}dx_n=\left(\frac {\partial y}{\partial x}\right)^Tdx dy=x1ydx1+x2ydx2+x3ydx3++xnydxn=(xy)Tdx
  由偏导数组合而成的向量 q q q是这个函数 y y y的梯度向量。梯度向量 q q q和自变量的微分量 d x dx dx的内积就是 y y y的微分量。为了统一形式,我们不如就约定,梯度向量都写成列向量

向量对向量求导

  从标量对向量求导推广到向量对向量求导就很简单了。从上面的一次内积推广到多次内积,结果以列向量表示。
在这里插入图片描述
  这时候列向量 y y y对列向量 x x x求偏导的结果应该为A,这样能够和前面的结论保持一致。
∂ y ∂ x = ∂ A T x ∂ x = A \frac {\partial y}{\partial x}=\frac {\partial A^Tx}{\partial x}=A xy=xATx=A
  矩阵 A A A具体应该怎么求呢?应该 y y y的分量横着写,然后竖着写每个分量对 x x x的偏导数,这样子 A A A中每一列都是一个梯度向量。
在这里插入图片描述

海森(Hessian)矩阵

  掌握了上面的求导方式之后,就可以求海森矩阵了。海森矩阵是多元函数的二阶偏导数构成的方阵。这里引入一个梯度算符“ ∇ \nabla ”,求多元函数 f ( x ) f(x) f(x)的梯度向量可以用“ ∇ x f \nabla_x f xf”表示, f ( x ) f(x) f(x)的海森矩阵就是“ ∇ x 2 f \nabla_x ^2f x2f”。
在这里插入图片描述

求导法则

  上面介绍了两个重要的公式 ∂ q T x / ∂ x = ∂ x T q / ∂ x = q \partial {q^T}x/\partial x =\partial {x^T}q/\partial x= q qTx/x=xTq/x=q ∂ A T x / ∂ x = A \partial {A^T}x/\partial x = A ATx/x=A,在很多要求梯度的情况下都可以用这个这两个公式,再结合线性求导法则,乘法求导法则,链式求导法则,基本上就不会有大问题了。
∂ ( c 1 f ( x ) + c 2 g ( x ) ) ∂ x = c 1 ∂ f ( x ) ∂ x + c 2 ∂ g ( x ) ∂ x \frac {\partial \left(c_1f(x)+c_2g(x)\right)}{\partial x}=c_1\frac{\partial f(x)}{\partial x}+c_2\frac{\partial g(x)}{\partial x} x(c1f(x)+c2g(x))=c1xf(x)+c2xg(x)
∂ ( f ( x ) g ( x ) ) ∂ x = ∂ f ( x ) ∂ x g ( x ) + f ( x ) ∂ g ( x ) ∂ x \frac{\partial (f(x)g(x))}{\partial x}=\frac{\partial f(x)}{\partial x}g(x)+f(x)\frac{\partial g(x)}{\partial x} x(f(x)g(x))=xf(x)g(x)+f(x)xg(x)
  这两条法则分别是线性求导法则和乘法求导法则,这个在标量对标量求导时适用,在对向量求导时也同样适用,大家肯定都比较熟悉了。但是链式求导法则和我们以前的经验有一点不一样,以前不需要注意左右顺序,但这里需要。
  前面我们写过一个全微分式子,就是 d y = ( ∂ y / ∂ x ) T d x dy=(\partial y/\partial x)^Tdx dy=(y/x)Tdx。从这里能够看到,要求梯度向量 ∂ y / ∂ x \partial y/\partial x y/x还可以通过先写全微分表达式,然后再对微分变量 d x dx dx前面的向量/矩阵转置来得到。我们可以用这个结论来推导链式求导法则。设 y = f ( g ( x ) ) y=f(g(x)) y=f(g(x)),求 ∂ y / ∂ x \partial y/\partial x y/x,先写我们已知的结论:
d y = ( ∂ y ∂ x ) T d x dy=\left(\frac{\partial y}{\partial x}\right)^Tdx dy=(xy)Tdx
  设 u = g ( x ) u=g(x) u=g(x),写出全微分关系式:
d y = ( ∂ y ∂ u ) T d u          d u = ( ∂ u ∂ x ) T d x → d y = ( ∂ y ∂ u ) T ( ∂ u ∂ x ) T d x dy = {\left( {\frac{{\partial y}}{{\partial u}}} \right)^T}du\;\;\;\;du = {\left( {\frac{{\partial u}}{{\partial x}}} \right)^T}dx \to dy = {\left( {\frac{{\partial y}}{{\partial u}}} \right)^T}{\left( {\frac{{\partial u}}{{\partial x}}} \right)^T}dx dy=(uy)Tdudu=(xu)Tdxdy=(uy)T(xu)Tdx
  上面的式子的含义就是 x x x的微小变化与 u u u x x x的梯度向量的内积可以得到 u u u的微小变化; u u u的微小变化与 y y y u u u的梯度向量的内积可以得到 y y y的微小变化。对比上面两个式子可以得出:
∂ y ∂ x = ( ( ∂ y ∂ u ) T ( ∂ u ∂ x ) T ) T = ∂ u ∂ x ∂ y ∂ u \frac{{\partial y}}{{\partial x}} = {\left( {{{\left( {\frac{{\partial y}}{{\partial u}}} \right)}^T}{{\left( {\frac{{\partial u}}{{\partial x}}} \right)}^T}} \right)^T} = \frac{{\partial u}}{{\partial x}}\frac{{\partial y}}{{\partial u}} xy=((uy)T(xu)T)T=xuuy
  如果函数嵌套的层数更多,结果也是类似的,函数从里往外依次求偏导,得到的结果依次从左往右相乘。如果不注意左右顺序,矩阵维度就无法对应。


2022年3月27日补充

标量对矩阵求导

  类似标量对向量求导,求导结果与自变量是相同的维度。
d y = < ∂ y ∂ x , d x > = ( ∂ y ∂ x ) T d x dy = <{{\partial y} \over {\partial x}},dx > = {\left( {{{\partial y} \over {\partial x}}} \right)^T}dx dy=<xy,dx>=(xy)Tdx
  标量对矩阵求导也应当是类似的形式。比如有一个m×n的矩阵 W W W和一个标量 s s s,它们之间满足这样的关系:
d s = < ∂ s ∂ W , d W > = t r ( ( ∂ s ∂ W ) T d W ) ds = < {{\partial s} \over {\partial W}},dW > = {\mathop{\rm tr}\nolimits} \left( {{{\left( {{{\partial s} \over {\partial W}}} \right)}^T}dW} \right) ds=<Ws,dW>=tr((Ws)TdW)
   d W dW dW ∂ s / ∂ W {\partial s} / {\partial W} s/W都是m×n的矩阵,我们用迹函数来表示矩阵内积。迹函数有一个特殊的性质:
t r ( A B C ) = t r ( B C A ) = t r ( C A B ) {\mathop{\rm tr}\nolimits} (ABC) = {\mathop{\rm tr}\nolimits} (BCA) = {\mathop{\rm tr}\nolimits} (CAB) tr(ABC)=tr(BCA)=tr(CAB)
  三个矩阵 A A A B B B C C C相乘得到一个方阵,它们循环移位后再相乘,不会改变结果的迹。之所以要求循环移位,是要让矩阵之间相乘的维度能够对应上。具体证明过程……我也不清楚,但是举几个简单的例子试一下会发现它确实是成立的。

向量对矩阵求导

  如果顺着上面的思路来,向量对矩阵求导,就是向量中的每个分量对矩阵求导再组合在一起,这将是一个三维的张量。但有时候我们又会发现,比如 s = W x s=Wx s=Wx,向量 s s s中的分量并不是和矩阵 W W W中的每个分量都有关的,如果按照前面的思路来,得到的将会是一个稀疏的结果。更直观的感觉可能是 s s s W W W求偏导应该得到一个向量,因为 s s s是由矩阵 W W W和向量 x x x相乘得到的。
  遇到这种情况我觉得还是得具体问题具体分析,一般写成微分的形式肯定没问题,然后可以代入其他地方进行计算。
d s = ( d W ) x ds = (dW)x ds=(dW)x


岭回归

  机器学习中的“回归”是相对于“分类”来说的,回归用于预测连续值,这里有点类似于数学上的拟合。
  设有一组样本 X X X和样本对应的标签 y y y X X X中每一行是一个样本,每个样本在标签 y y y中有一个对应的结果。我们的目的是找到样本 X X X和标签 y y y的一组线性关系,使样本 x i x_i xi经过线性运算的结果能尽可能接近标签值 y i y_i yi
ω 1 x i 1 + ω 2 x i 2 + ω 3 x i 3 + ⋯ + ω n x i n → y i {\omega _1}{x_{i1}} + {\omega _2}{x_{i2}} + {\omega _3}{x_{i3}} + \cdots + {\omega _n}{x_{in}} \to {y_i} ω1xi1+ω2xi2+ω3xi3++ωnxinyi
在这里插入图片描述
  所以问题实际上是结合已有的数据求最优的系数 ω \omega ω,最常见的做法是最小二乘法,最小二乘法的目的是使计算结果和标签的平方误差最小。而岭回归是在最小二乘法基础上引入了正则项,防止过拟合,提高了计算的稳定性。
  写出目标函数 L \mathcal L L,优化 ω \omega ω来令目标函数最小化。
min ⁡ ω L = ∣ ∣ y − X ω ∣ ∣ 2 + λ ∣ ∣ ω ∣ ∣ 2 \mathop {\min }\limits_\omega \mathcal L=||y-X\omega||^2+\lambda||\omega||^2 ωminL=yXω2+λω2
  类似一元二次函数,令梯度向量为零向量可以取到 L \mathcal L L的最小值。
∂ L ∂ ω = ∂ ( ( y − X ω ) T ( y − X ω ) + λ ω T ω ) ∂ ω = − X T 2 ( y − X ω ) + 2 λ ω = 0 \frac{{\partial {\mathcal L}}}{{\partial \omega }} = \frac{{\partial \left( {{{\left( {y - X\omega } \right)}^T}\left( {y - X\omega } \right) + \lambda {\omega ^T}\omega } \right)}}{{\partial \omega }} = - {X^T}2(y - X\omega ) + 2\lambda \omega = 0 ωL=ω((yXω)T(yXω)+λωTω)=XT2(yXω)+2λω=0
  上面的求导过程用了链式求导法则、乘法求导法则和线性求导法则。整理之后可以得到:
ω = ( X T X + λ I ) − 1 X T y \omega = \left( {{X^T}X + \lambda I} \right)^{-1}{X^T}y ω=(XTX+λI)1XTy
  相比于最小二乘法,岭回归的结果多了 λ I \lambda I λI,就像是一条山“岭”加在方阵 X T X X^TX XTX上,所以起名叫“岭回归”。原先最小二乘法计算过程中有可能 X T X X^TX XTX不是满秩,无法求逆。现在加上了 λ I \lambda I λI就一定能求逆了,所以提高了计算的稳定性。
  这里看上去只能求样本和标签的线性关系,但如果 x i x_i xi的分量中用的是多项式、指数函数、三角函数等,它也能够用来求解。这时候是将结果用一些多项式或者初等函数的线性组合来描述,不同的拟合方式取决于构建的模型。

表示定理(Representer Theorem)

表示定理是对偶空间的精髓所在。

  考虑一个线性回归问题:
min ⁡ ω ∑ i m L ( ω T x i , y i ) + λ ∣ ∣ ω ∣ ∣ 2 \mathop {\min }\limits_\omega \sum\limits_i^m {L({\omega ^T}{x_i},{y_i})} + \lambda ||\omega |{|^2} ωminimL(ωTxi,yi)+λω2
  表示定理所描述的问题相比于岭回归更加一般化,这里的误差函数也是任意的,而岭回归用的是最小平方误差。
   ω \omega ω x x x是相同维度n的向量,总共有m个样本,设 ω = ω ∥ + ω ⊥ \omega = \omega _\parallel+\omega_\bot ω=ω+ω,其中 ω ∥ \omega_\parallel ω存在于所有样本 x i x_i xi张成的子空间,就是说 ω ∥ \omega_\parallel ω可以用所有样本来线性表示;而 ω ⊥ \omega_\bot ω则是和每个样本都垂直, ω ⊥ \omega_\bot ω和每个样本的内积都是0。
ω ∥ = ∑ i m α i x i                ω ⊥ T x i = 0 {\omega _\parallel } = \sum\limits_i^m {{\alpha _i}{x_i}} \;\;\;\;\;\;\;{\omega _ \bot }^T{x_i} = 0 ω=imαixiωTxi=0

这里的 α \alpha α存在于对偶空间, ω \omega ω存在于源空间。

  这样的分解一定是合理的, ω ∥ \omega_\parallel ω存在于样本的生成子空间,而 ω ⊥ \omega_\bot ω存在于这个生成子空间的直和补子空间。它们俩的和可以用来表示全空间中的任意向量。把它们代入原问题中:
min ⁡ ω ∑ i m L ( ω ∥ T x i + ω ⊥ T x i , y i ) + λ ∣ ∣ ω ∥ + ω ⊥ ∣ ∣ 2 = min ⁡ ω ∑ i m L ( ω ∥ T x i , y i ) + λ ∣ ∣ ω ∥ ∣ ∣ 2 + λ ∣ ∣ ω ⊥ ∣ ∣ 2 \mathop {\min }\limits_\omega \sum\limits_i^m {L(\omega _\parallel ^T{x_i} + \omega _ \bot ^T{x_i},{y_i})} + \lambda ||{\omega _\parallel } + {\omega _ \bot }|{|^2} = \mathop {\min }\limits_\omega \sum\limits_i^m {L(\omega _\parallel ^T{x_i},{y_i})} + \lambda ||{\omega _\parallel }|{|^2} + \lambda ||{\omega _ \bot }|{|^2} ωminimL(ωTxi+ωTxi,yi)+λω+ω2=ωminimL(ωTxi,yi)+λω2+λω2
  这个最小化问题,肯定希望 ∣ ∣ ω ⊥ ∣ ∣ 2 ||\omega_\bot||^2 ω2越小越好; ω \omega ω的最优解,肯定是在 ω ⊥ = 0 \omega_\bot=\bold 0 ω=0的时候取到。所以 ω = ω ∥ \omega=\omega _\parallel ω=ω。有了这个先验条件之后,我们再回过头去看岭回归。
ω = ( X T X + λ I ) − 1 X T y = X T α \omega = \left( {{X^T}X + \lambda I} \right)^{-1}{X^T}y=X^T\alpha ω=(XTX+λI)1XTy=XTα
  这里用 X T α X^T\alpha XTα表示样本的线性组合,因为 X X X中的样本是一行一行放置的。
在这里插入图片描述
  求解 α \alpha α
( X T X + λ I ) X T α = X T y X T ( X X T + λ I ) α = X T y α = ( X X T + λ I ) − 1 y \begin{array}{l} \left( {{X^T}X + \lambda I} \right){X^T}\alpha = {X^T}y\\ {X^T}\left( {X{X^T} + \lambda I} \right)\alpha = {X^T}y\\ \alpha = {\left( {X{X^T} + \lambda I} \right)^{ - 1}}y \end{array} (XTX+λI)XTα=XTyXT(XXT+λI)α=XTyα=(XXT+λI)1y
  再理一下我们求解的思路。前面的岭回归其实运算量比较大,涉及大量矩阵运算。现在在求 ω \omega ω之前引入一个中间变量 α \alpha α,让问题一下子简单了很多。

降低维度

   X X T XX^T XXT就是我在上一篇文章中提到的Gram矩阵,矩阵中的元素是样本两两之间的内积。求 α \alpha α是一个m维的运算,m是样本的个数。然后将 α \alpha α作为系数,对样本线性求和就能够得到 ω \omega ω
  这个在样本维度n非常大的时候非常有用,很多情况下我们会把样本映射到高维的特征空间,维度n往往会远大于样本个数m,这时候用这个方法求解就一下子把n维的问题降到m维!

将问题归结为内积运算

  而且它也不需要显式地求出 ω \omega ω。比如当我们训练完成,然后输入新的一个样本 z z z
在这里插入图片描述
y z = z T X T α = [ z T x 1 z T x 2 z T x 3 ⋯ z T x m ] α {y_z} = {z^T}{X^T}\alpha = \left[ {\begin{matrix} {{z^T}{x_1}}&{{z^T}{x_2}}&{{z^T}{x_3}}& \cdots &{{z^T}{x_m}} \end{matrix}} \right]\alpha yz=zTXTα=[zTx1zTx2zTx3zTxm]α
  所以不管是训练的时候求 α \alpha α,还是输入新的样本进行推断,用到的都只是样本的内积,我们不用再去关心 ω \omega ω的具体形式。如果能有一个快速计算高维样本内积的方法就好了,这就用到了核函数。

核函数

  核函数的引入实际上是通过一个 φ ( x ) \varphi(x) φ(x)将低维的样本向量 x x x映射到高维空间,这个高维空间一般称为特征空间。引入核函数以后,只是样本的维度增加了,对解的结构没有影响。核函数一般用 κ ( u , v ) \kappa (u,v) κ(u,v)表示。
κ ( u , v ) = φ ( u ) T φ ( v ) \kappa (u,v) = \varphi {(u)^T}\varphi (v) κ(u,v)=φ(u)Tφ(v)
  它可以方便地计算 φ ( u ) \varphi(u) φ(u) φ ( v ) \varphi(v) φ(v)在高维空间的内积。而样本到了高维空间之后就有可能解决之前低维空间无法分类的问题。
  所以在多了核函数以后,只是我们处理的样本维度变了,解的整体结构还是没有变,只要把前面求内积的地方换成核函数就好了。
  带核函数的岭回归训练结果:
α = ( K + λ I ) − 1 y            K i j = κ ( x i , x j ) \alpha = {\left( {K + \lambda I} \right)^{ - 1}}y\;\;\;\;\;{K_{ij}} = \kappa ({x_i},{x_j}) α=(K+λI)1yKij=κ(xi,xj)
  带核函数的岭回归前向推断:
y z = [ κ ( z , x 1 ) κ ( z , x 2 ) κ ( z , x 3 ) ⋯ κ ( z , x m ) ] α {y_z} = \left[ {\begin{matrix} \kappa (z,x_1)&\kappa (z,x_2)&\kappa (z,x_3)& \cdots &\kappa (z,x_m) \end{matrix}} \right]\alpha yz=[κ(z,x1)κ(z,x2)κ(z,x3)κ(z,xm)]α

P.S.关于对偶空间的解释

  引用作者博士论文里的一张图,感觉解释得比较直观。
在这里插入图片描述

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小裘HUST

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值