链接:https://www.zhihu.com/question/26526858/answer/131591887
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
遇到对偶问题呢,一定要先回归基础,不要急着去看结论:
首先,咱们了解一下【对偶】的定义是什么,简单的说,就是从一个不同的角度去解答相似问题,但是问题的解是相通的,甚至是一样一样的。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 步的时候
![y_{c} x_{c}](https://i-blog.csdnimg.cn/blog_migrate/31058ebcacbfb20c98415f711a29e3ac.png)
第二,显而易见、只要能够求解出
![\alpha_{1},\alpha_{2},......,\alpha_{c}](https://i-blog.csdnimg.cn/blog_migrate/67a15f61e3698a45440c0a8f88b07178.png)
第三,显而易见、
![\alpha_{i}](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png)
![\alpha_{i}=0](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png%3D0)
因为
![\alpha_{i} = \eta \cdot n_{i}](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png++%3D+%5Ceta+%5Ccdot+n_%7Bi%7D+)
![n_{i}](https://i-blog.csdnimg.cn/blog_migrate/d5ea18b3af75047f6b648b5e00937f2d.png)
![x_{1},x_{1},x_{2},x_{3},x_{3},x_{3},x_{4},x_{5},x_{5}](https://i-blog.csdnimg.cn/blog_migrate/1dfca9172dd9d744af4ddf57d310a253.png)
![x_{1},x_{2},x_{3},x_{4},x_{5}](https://i-blog.csdnimg.cn/blog_migrate/5939c48a6441798723379b12d8e0af6a.png)
所以,每迭代一次之后
![\alpha_{i}](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png+)
![\alpha_{i} \leftarrow \eta (n_{i}+1)](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png+%5Cleftarrow+%5Ceta+%28n_%7Bi%7D%2B1%29+)
![\alpha_{i} \leftarrow \eta (n_{i}+1) = \eta n_{i}+ \eta =\alpha_{i}+\eta](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png+%5Cleftarrow+%5Ceta+%28n_%7Bi%7D%2B1%29+%3D+%5Ceta+n_%7Bi%7D%2B+%5Ceta+%3D%5Calpha_%7Bi%7D%2B%5Ceta+)
![\alpha_{i} \leftarrow \alpha_{i}+\eta](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png+%5Cleftarrow+%5Calpha_%7Bi%7D%2B%5Ceta+)
所以,我们的对偶问题为,
![\alpha_{i} \leftarrow \alpha_{i}+\eta](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png+%5Cleftarrow+%5Calpha_%7Bi%7D%2B%5Ceta+)
b与原始一样,只是将对
![w](https://i-blog.csdnimg.cn/blog_migrate/1c7a330b82678d6b033d9748f5120af9.png)
![\alpha](https://i-blog.csdnimg.cn/blog_migrate/489ce052064e7956a21f27efdd0ed72c.png)
![\alpha_{i} = \eta \cdot n_{i}](https://i-blog.csdnimg.cn/blog_migrate/749670704f38257aa991dfa5d853aebe.png++%3D+%5Ceta+%5Ccdot+n_%7Bi%7D+)
![w](https://i-blog.csdnimg.cn/blog_migrate/1c7a330b82678d6b033d9748f5120af9.png)