感知机的对偶形式及Gram矩阵的作用理解 通俗易懂

学习李航《统计机器学习》的时候,看到感知机的对偶形式这里不甚理解,其实主要是对其中的系数 \alpha _{i} 更新规则不是很理解。另外,只介绍了 Gram 矩阵,也没有说清楚 Gram 矩阵的作用。经过仔细的思考,写下了自己的见解。

直接切入正题

感知机模型:f(x)=sign(w\cdot x+b)

感知机的原始形式

感知机的损失函数:L(w,b)=-\sum_{x_{i}\in M}y_{i}(w\cdot x_{i}+b)

损失函数的梯度:    \mathbf{\bigtriangledown }_{w}L(w,b)=-\sum_{x_{i}\in M}y_{i} x_{i}                            

                               \mathbf{\bigtriangledown }_{b}L(w,b)=-\sum_{x_{i}\in M}y_{i}

于是更新规则为:    w\leftarrow w+\eta y_{i}x_{i}

                               b\leftarrow b+\eta y_{i}

注意上面的更新是每遇到一个分类错误的样本就对 w 和 b 进行更新,以调整分隔超平面。

感知机的对偶形式

感知机的对偶形式是从增量的角度去看到参数的更新的。即先把所有的增量求出来,最后的参数就是在原来的参数基础上加上总的增量。

于是上面的更新规则中 \eta y_{i}x_{i} 就是可以看做是 w 的一个增量,这是遇到一个错误样本的增量,那么总的增量也就是对所有错误样本的增量为:

                                                                         w=\sum_{i=1}^{N}\alpha _{i}y_{i}x_{i}

                                                                          b=\sum_{i=1}^{N}\alpha _{i}y_{i}

其中N是总的样本数,注意下标是 i 是从 1~N,也就是从第一个样本到最后一个样本遍历进行调整。这个过程中会出现原来分类错误的样本在超平面调整后分类正确,但是接着遇到其他样本又对超平面调整从而这个样本又被错误分类。注意样本是随机选择的,所以这个样本还会被选到来对超平面进行调整。也就是说,其中的每个样本都有可能被使用多次。由于下标是从 1~N 默认的是每个样本使用一次,显然不合理,所以就有 n_{i} 表示第 i 个样本被使用的次数,而每个错误样本的增量为 \eta y_{i}x_{i},这样第 i 个样本的增量就是 n_{i}\eta y_{i}x_{i}  ,其中令 \alpha _{i}=n_{i}\eta 。于是 1~N 总的样本增量就是上面那个式子。

再来看对偶形式的更新规则:                    \alpha _{i}\leftarrow\alpha _{i}+\eta

                                                               b\leftarrow b+\eta y_{i}

对 \alpha _{i} 的更新规则可以写成                        \alpha _{i}\leftarrow\alpha _{i}+\eta=n_{i}\eta +\eta =(n_{i}+1)\eta

可以看到,这本质上是对 n_{i} 的更新,是对第 i 个错误样本的计数更新。有两个角度看待这个更新,分别是 \alpha _{i}+\eta  和 (n_{i}+1)\eta。前者是在走的总步长基础上遇到新的错误样本再增加一个步长(因为每遇到一个错误样本增加一个步长 \eta )。后者是对第 i 个样本总的使用次数在它又被选为错误样本时对她的计数更新(因为每遇到一个错误样本增加的步长是固定的 \eta,所以只需要更新计数,记下样本总的使用次数)

而对 b 的更新和原始形式更新相同,也可以理解为已经更新 b,每次都直接在此基础上对 b 直接更新。理解了上面的对 \alpha _{i} 的增量更新思想,其实也可以每次不更新 b ,而是只对 \alpha _{i} 更新,最后 b 也通过 b=b+总的增量 算出最后的 b 。

每次对 \alpha _{i} 的更新,需要满足 y_{i}(\sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x_{i}+b)\leqslant 0,其中的 \sum_{j=1}^{N}\alpha _{j}y_{j}x_{j} 实际上就是在遇到第 i 个样本后计算出 w ,与 x _{i} 相乘,这与原始形式的判别误分条件 是一样的。

如书上例题:正例:x _{1}=\begin{pmatrix}3&3\end{pmatrix}^{T}x _{2}=\begin{pmatrix} 4 & 3 \end{pmatrix}^{T} ,反例:x _{3}=\begin{pmatrix}1&1\end{pmatrix}^{T} ,用感知机对偶形式求感知机模型。

(1)首先初始化 \alpha _{i}=0b=0,因为 \alpha _{i} 中的 n_{i} 是记录每个样本的使用次数,因此 \alpha _{i} 的个数为样本数 N,即\alpha =(\alpha _{1},\alpha _{1},...\alpha _{N})^{T}=0 ,\eta =1

(2)计算误分条件

对于 x _{1}=\begin{pmatrix}3&3\end{pmatrix}^{T}y_{1}[(n _{1}\eta y_{1}x_{1}+n _{2}\eta y_{2}x_{2}+n _{3}\eta y_{3}x_{3})\cdot x_{1}+b\left \right ]=1*\left [ 0*1*(3,3) +0*1*(4,3)+0*(-1)*(1,1)\right ](3,3)= 0,(步长为1,省掉了),结果为 0 ,说明 x _{1} 为误分类样本,于是更新 \alpha _{1}=(n_{1}+1)\eta =(0+1)=1b=(n_{1}+1)\eta y_{1}=(0+1)*1*1=1。这里可以这么更新 b,也可以按照原始形式更新形式更新 b ,当然也可以不更新 ,因为对偶形式系数更新的本质是对样本使用次数的更新,因此对 \alpha _{i} 的更新才是最重要的。

之前不理解的地方是遇到 x _{1}  判断误分条件中却要连带其他样本 x _{2},x _{3} 一起计算,总是觉得别扭。现在考虑,这其实是为了在这一步计算出 w ,确定当前的分离超平面,才能判断 x _{1} 是否误分。只碰到  x _{1} ,于是 x _{2},x _{3} 使用次数 n_{2},n_{3} 为 0 ,所确定的超平面会对 x _{1} 误分,于是使用 x _{1} ,其使用次数增加1,从而更新 α ,这就会调整这个超平面。这就是遇到样本判断误分接着调整的完整过程。

Gram 矩阵的作用

书上只是计算了 Gram 矩阵,却没有表明哪里用到了 Gram 矩阵。

在计算   \sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x_{i}=(\alpha _{1}y_{1}x_{1}+\alpha _{2}y_{2}x_{2}+\alpha _{3}y_{3}x_{3})x_{i}  ,其中  i 是从 1~N,前面的 \alpha _{j}y_{j} 是个常数,后面的 (x_{1},x_{2},x_{3},...,x_{n})x_{i} 会跟每个样本  x _{i} 做内积 ,所以就会要计算

                                                  \alpha _{1}y_{1}x_{1}\cdot x_{1}+\alpha _{2}y_{2}x_{2}\cdot x_{1}+...+\alpha _{N}y_{N}x_{N}\cdot x_{1}

                                                  \alpha _{1}y_{1}x_{1}\cdot x_{2}+\alpha _{2}y_{2}x_{2}\cdot x_{2}+...+\alpha _{N}y_{N}x_{N}\cdot x_{2}

                                                  \alpha _{1}y_{1}x_{1}\cdot x_{N}+\alpha _{2}y_{2}x_{2}\cdot x_{N}+...+\alpha _{N}y_{N}x_{N}\cdot x_{N}

将后面要做内积的  x_{1}\cdot x_{1}+x_{2}\cdot x_{1}+...+x_{N}\cdot x_{1}  提取出来,组成的矩阵就是 Gram 矩阵

                                                  G=\begin{bmatrix} x_{1}x_{1} &x_{1}x_{2} &... &x_{1}x_{N} \\ x_{2}x_{1}&x_{2}x_{2} &... &x_{2}x_{N} \\ ...& ...& ... & ...\\ x_{N}x_{1}& x_{N}x_{1} &... & x_{N}x_{N} \end{bmatrix}

将前面的常数组成行向量就是 \begin{bmatrix} \alpha _{1}y_{1} &\alpha _{2}y_{2} &... & \alpha _{N}y_{N} \end{bmatrix}

从而要计算的的所有式子就可以放在一个矩阵里面:

                                            \begin{bmatrix} \alpha _{1}y_{1} &\alpha _{2}y_{2} &... & \alpha _{N}y_{N} \end{bmatrix}\begin{bmatrix} x_{1}x_{1} &x_{1}x_{2} &... &x_{1}x_{N} \\ x_{2}x_{1}&x_{2}x_{2} &... &x_{2}x_{N} \\ ...& ...& ... & ...\\ x_{N}x_{1}& x_{N}x_{1} &... & x_{N}x_{N} \end{bmatrix}

其中第一列就是遇到 x _{1} 时候的误分判别计算式,第 i 个样本要计算的误分判别式在第 i 列。

于是说,在计算之前,我们就可以先把训练集中实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是 Gram 矩阵。

 

 

           转载:https://blog.csdn.net/qq_26826585/article/details/87967520
           有一个博客讲解例题的计算过程:https://blog.csdn.net/bingfeiqiji/article/details/82877670

你可能感兴趣的:(统计学习方法)