遇到对偶问题呢,一定要先回归基础,不要急着去看结论:
首先,咱们了解一下【对偶】的定义是什么,简单的说,就是从一个不同的角度去解答相似问题,但是问题的解是相通的,甚至是一样一样的。ok,这个很简单,定义咱们就不深究了。
回到楼主的问题,先给出原始问题的形式:
现在先看原始问题的解法步骤:
首先,求解L(w,b)的梯度,求得如下偏导:
▽L(w,b) = -
▽ 其中M为误分类点集合
然后,由于上面的偏导数是有累计加法器,咱们尝试着去理解一下梯度算法是怎么用计算机实现的,这个对解答问题很重要,我们通过几个问答的方式来掌握:
问题一、怎么理解 A = ▽L(w,b) 这个偏导数,以及为什么偏导算出的明明是累加,但是到了算法当中就变成了与单个相加了,即变成下面的方式了?
可以这么理解:当你已经有 i 次误判的时候,如何调整(学习) w 这个参数,使得在下一次(即第 i+1 次)误判的时候 L(w,b) 可以达到最小?因为 w 是参数,所以根据微积分的知识,咱们可以很快的知道,参数 w 沿着其偏导的方向变化,可以使得 L(w,b) 变动的最剧烈(因为我们需要损失函数最小),所以我们应该在经过 i 次误判之后,将 w 调整为 w+ k▽L(w,b) ,即
k▽L(w,b) 等价于 k
此为梯度算法!
但是,要注意一点,上面 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、当第一次出现误判的时候,先将
2、当第二次出现误判的时候,由于此时已经改变了一次了,所以只需要再累计本次的微分因子就行了:
.....
i、当第i次出现误判的时候,由于此时已经改变了(i-1)次了,所以只需要再累计本次的微分因子就行了:
在书上的算法中其实就一个,我是为了让大家看到步骤才加上下标的。
PS.知道很多细致的人会有疑问:从变成不是应该再次加上累加吗,应该是(a) 即 ,为什么是(b) ? Good question,这是个思维方式的问题,还是计算机思维,当你在感知到第k次误分类的时候,为了让第 k+1 次误分类能够尽量的减少损失,即让L(w,b)更小,这个时候需要去求L(w,b)关于w的梯度即偏导,但是这个时候你别忘了,计算机是累加的,所以在这个步骤上,问题的形式不在是:
(1)
而是
(2)
其中是前面k次计算的固定值,是个常量(常量哈,就到就变成0了,不是变量,切记),请看清楚上面的式子,在计算机中得到第 k+1 个样本的时候,计算机是无法判断样本有没有输入结束的,他只能感知到本次的输入,换句话说,感知的结尾很多的时候不是依赖于x样本的数量,而是w,b,L损失的大小。所以是对(2)式求导,而不是(1)式,所以求导之后得到的不是(a)而是(b),这个一定要注意,很多人看到书上说的只是知道大概是这么个理,不敢深究,因为深究觉得有问题,其实是深究的程度不够,仅此而已!
同上,b每次迭代的调整思路是:,思路跟上面一样,不在赘述了。
问题二、是什么东东,意义何在?数据量有限的情况下如何继续学习的更好?
这个问题很重要,是回答楼主问题的关键,下面解答又不懂的地方,可能大家需要回过头来看这个问题。
首先只是学习的一个比率,例如 f(x) = ,我们求x的偏导之后得到= 2x,即沿着w=(1,2)的方向上走f(x)大小可以变动的最快,但是你是基于w还是基于2*w,3*w 这是你步伐的问题,系数越大肯定f(x)变动的越快,所以偏导只是指明你数据L(w,b)变动最快的方向,但是指明的却是你数据变动的快慢。实际上计算机每次迭代一下,就可以更换一个新的,只是为了方便才用一个的。这就是全部意义之所在。
数据有限的情况下如何学习的更好?很简单啊,将 X 样本集反复的抽查使用,所以可以将学习3次,学习6次,等等啦,我们将被学习的总次数标记为. 这个时候,我们假设学习的时候是按照 的顺序去学习样本,然后假设这个序列都是被误判的样本,这个时候很显然N=5为样本空间种类数量,记住不是误判样本的大小,而是种类,即只有着五个种类,N=5。好了,既然样本这么少,这个时候去用计算机学习 w 如何更简单?
当然是下面这种方式啦:
所以这个时候 w 下标 i+1,不再代表第几个误判样本,而代表第几类误判样本的权重,在上面的中,,
这样看着更简单嘛,省的迭代那么多次,多省力啊,是吧?(一定要理解好上面这段话的内容,否则下面还是会看不懂,重点记住代表什么意思,以及更好的w迭代方式)
ok,有了这个上面那些乱起八糟的铺垫之后,咱们再来看看对偶的问题,现在w,b每次在感知到误判的时候更好的迭代(学习)思路是:
(W)
(B)
好了,看到上面的问题,我们想办法简化一下参数的数量,所以,令
i=1,2,....N, N为样本中分类的数量
注意 N迭代的次数哦,只代表种类,即不等于原表达式M的数量。好了,重头戏来了,咱们来优化上面的问题,我们观察到,在上面的(W)和(B)两个表达式中,如果给定一个默认参数开始迭代,则有:
我们发现测试阶段是没有未知的参数的,我们在迭代几次试一下哈,别急,耐心点,我都打了这么多字了,至少比你看得更累,第二次迭代:
再看第三次,
数学归纳法吧,是吧?没问题吧?所以可以如下求得:
ok,ok,any way。现在咱们观察上面的问题,可以得出一下几点结论:
第一,显而易见、到第 c 步的时候 已知;
第二,显而易见、只要能够求解出,就一定能求出,而且是线性运算吧,时间复杂度为O(n);甚至如果有累加器的话,可以让,为O(1);
第三,显而易见、可以迭代,设置初始值,其中 i = 1,.....N,迭代的方式如下:
因为 ,所以当输入第 i 种类型的样本的时候,相应的 加1,表示第 i 种类型样本又多抽查了一次,记住,不是 第i次样本,而是第i种样本。例如:有9次抽样误判的样本,但是只有五种样本。这个很重要。
所以,每迭代一次之后的变动为: ,即如果抽到的是第i中类型的样本,在其种类抽中的数量 n 上加1就可以了,其他的不变。化成迭代模式:
即
所以,我们的对偶问题为,
b与原始一样,只是将对 的迭代,转化成了对的迭代,因为 α 要简单的多,其计算式为: ,都不需要考虑,迭代完成求出所有的 α 之后,计算也是O(1)的复杂度。而且这个问题符合我开篇提到的【对偶】的定义。