感知机中的对偶形式理解

来源:互联网 发布:了不起的nodd.js 编辑:程序博客网 时间:2024/06/01 22:52
作者:陶轻松
链接:https://www.zhihu.com/question/26526858/answer/131591887
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

遇到对偶问题呢,一定要先回归基础,不要急着去看结论:
首先,咱们了解一下【对偶】的定义是什么,简单的说,就是从一个不同的角度去解答相似问题,但是问题的解是相通的,甚至是一样一样的。ok,这个很简单,定义咱们就不深究了。

回到楼主的问题,先给出原始问题的形式:
min_{w,b} L(w,b) = -\sum_{x_{i}\in M }^{}{y_{i}(w\bullet x_{i} +b ) }

现在先看原始问题的解法步骤:
首先,求解L(w,b)的梯度,求得如下偏导:
▽_{w} L(w,b) = -\sum_{x_{i} \in M}^{}{y_{i}x_{i}  }

 _{b} L(w,b) = -\sum_{x_{i} \in M}^{}{y_{i} } 其中M为误分类点集合
然后,由于上面的偏导数是有累计加法器,咱们尝试着去理解一下梯度算法是怎么用计算机实现的,这个对解答问题很重要,我们通过几个问答的方式来掌握:
问题一怎么理解 A = _{w} L(w,b)这个偏导数,以及为什么偏导算出的明明是累加\sum_{}^{}{} ,但是到了算法当中就变成了与单个{y_{i} x_{i} } 相加了,即变成下面的方式了?
w_{1}  \leftarrow w_{0} + \eta \cdot y_{1} x_{1}

可以这么理解:当你已经有 i 次误判的时候,如何调整(学习) w 这个参数,使得在下一次(即第 i+1 次)误判的时候 L(w,b) 可以达到最小?因为 w 是参数,所以根据微积分的知识,咱们可以很快的知道,参数 w 沿着其偏导的方向变化,可以使得 L(w,b) 变动的最剧烈(因为我们需要损失函数最小),所以我们应该在经过i 次误判之后,将 w 调整为 w+ k▽_{w} L(w,b) ,即
w\leftarrow w+ k▽_{w} L(w,b) 等价于w \leftarrow w+k\sum_{x_{i}\in M }^{}{y_{i} x_{i} }
此为梯度算法!
但是,要注意一点,上面 w 的变动指的是总变动,是一次性从第1次直接跳到第i次的时候w应该有的变动,也就是 1.2.3..i-1 次误判之后w没有进行过任何调整,直接在第i次的时候w的变动。但是【计算机的实现的时候】跟我们人在纸上做题的思维不一样,首先程序是串行执行的(将数据放在寄存器中,对同一个数据做加法,无法并行处理),所以我们只能在执行了1,2,3....i-1 次w调整之后才能调整才能再次执行第 i 次的w调整,用以保证下一次失误时,L(w,b)增长的最小。所以,我们将w的变动在计算机中编程成迭代的方式来进行,步骤如下:
1、当第一次出现误判的时候,先将 w_{1}  \leftarrow w_{0} + \eta \cdot y_{1} x_{1}
2、当第二次出现误判的时候,由于此时w已经改变了一次了,所以只需要再累计本次的微分因子就行了:w_{2}  \leftarrow w_{1} + \eta \cdot y_{2} x_{2}
.....
i、当第i次出现误判的时候,由于此时w已经改变了(i-1)次了,所以只需要再累计本次的微分因子就行了:w_{i}  \leftarrow w_{i-1} + \eta \cdot y_{i} x_{i}

在书上的算法中其实就一个w,我是为了让大家看到步骤才加上下标的。

PS.知道很多细致的人会有疑问:从w_{1} 变成w_{2} 不是应该再次加上累加吗,应该是w_{2}  \leftarrow w_{0} + \eta \cdot y_{1} x_{1} + \eta \cdot y_{2} x_{2} (a)w_{2} \leftarrow  w_{1} +\sum_{x_{1},x_{2}}^{}{\eta y_{i} x_{i} } ,为什么是w_{2}  \leftarrow w_{1} + \eta \cdot y_{1} x_{1}(b) ? Good question,这是个思维方式的问题,还是计算机思维,当你在感知到第k次误分类的时候,为了让第 k+1 次误分类能够尽量的减少损失,即让L(w,b)更小,这个时候需要去求L(w,b)关于w的梯度即偏导,但是这个时候你别忘了,计算机是累加的,所以在这个步骤上,问题的形式不在是

min_{w,b} L(w,b) = -\sum_{x_{i}\in M }^{}{y_{i}(w\bullet x_{i} +b ) } (1)
而是
min_{w,b} L(w,b) = L_{1,2...k} (w,b)   -{y_{k+1}(w\bullet x_{k+1} +b ) } (2)

其中L_{1,2...k} (w,b) 是前面k次计算的固定值,是个常量(常量哈,就到就变成0了,不是变量,切记),请看清楚上面的式子,在计算机中得到第 k+1 个样本的时候,计算机是无法判断样本有没有输入结束的,他只能感知到本次的输入,换句话说,感知的结尾很多的时候不是依赖于x样本的数量,而是w,b,L损失的大小。所以是对(2)式求导,而不是(1)式,所以求导之后得到的不是(a)而是(b),这个一定要注意,很多人看到书上说的只是知道大概是这么个理,不敢深究,因为深究觉得有问题,其实是深究的程度不够,仅此而已!

同上,b每次迭代的调整思路是:b\leftarrow b+\eta y_{i} ,思路跟上面一样,不在赘述了。

问题二、\eta 是什么东东,意义何在?数据量有限的情况下如何继续学习的更好?
这个问题很重要,是回答楼主问题的关键,下面解答又不懂的地方,可能大家需要回过头来看这个问题。
首先\eta 只是学习的一个比率,例如 f(x) =x^{2} ,我们求x的偏导之后得到f(x)^{'} = 2x,即沿着w=(1,2)的方向上走f(x)大小可以变动的最快,但是你是基于w还是基于2*w,3*w这是你步伐的问题,系数越大肯定f(x)变动的越快,所以偏导只是指明你数据L(w,b)变动最快的方向,但是\eta 指明的却是你数据变动的快慢。实际上计算机每次迭代一下,就可以更换一个新的\eta ,只是为了方便才用一个的。这就是\eta 全部意义之所在。
数据有限的情况下如何学习的更好?很简单啊,将 X 样本集反复的抽查使用,所以可以将x_{1} 学习3次,x_{2} 学习6次,等等啦,我们将x_{i} 被学习的总次数标记为n_{i} . 这个时候,我们假设学习的时候是按照x_{1},x_{1},x_{2},x_{3},x_{3},x_{3},x_{4},x_{5},x_{5} 的顺序去学习样本,然后假设这个序列都是被误判的样本,这个时候很显然N=5为样本空间种类数量,记住不是误判样本的大小,而是种类,即只有x_{1},x_{2},x_{3},x_{4},x_{5} 着五个种类,N=5。好了,既然样本这么少,这个时候去用计算机学习 w 如何更简单?
当然是下面这种方式啦:
w_{i+1}  \leftarrow w_{i} + \eta \cdot n_{i}\cdot y_{i} x_{i}
所以这个时候 w 下标 i+1,不再代表第几个误判样本,而代表第几类误判样本的权重,在上面的x_{1},x_{1},x_{2},x_{3},x_{3},x_{3},x_{4},x_{5},x_{5} 中,n_{1}=2,n_{2}=1,n_{3}=3,n_{4}=1,n_{5}=2,
这样看着更简单嘛,省的迭代那么多次,多省力啊,是吧?(一定要理解好上面这段话的内容,否则下面还是会看不懂,重点记住n_{i} 代表什么意思,以及更好的w迭代方式

ok,有了这个上面那些乱起八糟的铺垫之后,咱们再来看看对偶的问题,现在w,b每次在感知到误判的时候更好的迭代(学习)思路是:
w_{i+1}  \leftarrow w_{i} + \eta \cdot n_{i}\cdot y_{i} x_{i} (W)
b\leftarrow b+\eta y_{i} (B)

好了,看到上面的问题,我们想办法简化一下参数的数量,所以,令
\alpha_{i}  = \eta \cdot n_{i} i=1,2,....N, N为样本中分类的数量
注意 N\ne 迭代的次数哦,只代表种类,即不等于原表达式M的数量。好了,重头戏来了,咱们来优化上面的问题,我们观察到,在上面的(W)和(B)两个表达式中,如果给定一个默认参数w_{0}=0开始迭代,则有:
w_{1}=w_{0} + \eta \cdot n_{1}   \cdot y_{1} x_{1}  = 0 + \eta \cdot n_{1}   \cdot y_{1} x_{1} = \alpha_{1}  \cdot y_{1} x_{1}
我们发现测试阶段是没有未知的参数的,我们在迭代几次试一下哈,别急,耐心点,我都打了这么多字了,至少比你看得更累,第二次迭代w_{2}=w_{1} + \eta \cdot n_{2}   \cdot y_{2} x_{2}  =\alpha_{1}  \cdot y_{1} x_{1}  + \eta \cdot n_{2}   \cdot y_{2} x_{2} = \alpha_{1}  \cdot y_{1} x_{1}  +  \alpha_{2}  \cdot y_{2} x_{2}
再看第三次,
w_{3}=w_{2} + \eta \cdot n_{3}   \cdot y_{3} x_{3}  = w_{2} + \alpha_{3}   \cdot y_{3} x_{3} = \alpha_{1}   \cdot y_{1} x_{1}+ \alpha_{2}  \cdot y_{2} x_{2}  + \alpha_{3}   \cdot y_{3} x_{3}

数学归纳法吧,是吧?没问题吧?所以w_{i}可以如下求得:
w_{i}=\sum_{c}^{i}{\alpha_{c}  \cdot y_{c} x_{c}}
ok,ok,any way。现在咱们观察上面的问题,可以得出一下几点结论:
第一,显而易见、到第 c 步的时候 y_{c} x_{c}已知;
第二,显而易见、只要能够求解出\alpha_{1},\alpha_{2},......,\alpha_{c} ,就一定能求出w_{c},而且是线性运算吧,时间复杂度为O(n);甚至如果有累加器的话,可以让w_{c}=w_{c-1}+\alpha_{c} \cdot y_{c-1} x_{c-1},为O(1);
第三,显而易见\alpha_{i}可以迭代,设置初始值\alpha_{i}=0,其中 i = 1,.....N,迭代的方式如下:
因为 \alpha_{i}  = \eta \cdot n_{i} ,所以当输入第 i 种类型的样本的时候,相应的n_{i} 加1,表示第 i 种类型样本又多抽查了一次,记住,不是第i次样本,而是第i种样本。例如:x_{1},x_{1},x_{2},x_{3},x_{3},x_{3},x_{4},x_{5},x_{5} 有9次抽样误判的样本,但是只有x_{1},x_{2},x_{3},x_{4},x_{5} 五种样本。这个很重要。
所以,每迭代一次之后\alpha_{i} 的变动为:\alpha_{i} \leftarrow \eta (n_{i}+1) ,即如果抽到的是第i中类型的样本,在其种类抽中的数量 n 上加1就可以了,其他的不变。化成迭代模式:
\alpha_{i} \leftarrow \eta (n_{i}+1) = \eta n_{i}+ \eta =\alpha_{i}+\eta

\alpha_{i} \leftarrow \alpha_{i}+\eta

所以,我们的对偶问题为,
\alpha_{i} \leftarrow \alpha_{i}+\eta
b\leftarrow b+\eta y_{i}

b与原始一样,只是将对 w 的迭代,转化成了对\alpha 的迭代,因为
α 要简单的多,其计算式为:\alpha_{i}  = \eta \cdot n_{i} ,都不需要考虑y_{i} x_{i} ,迭代完成求出所有的 α 之后,计算w也是O(1)的复杂度。而且这个问题符合我开篇提到的【对偶】的定义。6
原创粉丝点击