江寒越写越顺,下笔如飞。
“……
我们定义损失函数如下:L(w,b)=?(1/||w||)∑yi(w?xi+b),根据预设的学习率η,不断调整权重w和偏置b,直到损失函数到达极小点,即可得到可用的函数模型。
综上所述,学习算法如下:
首先选定训练数据集T=(x1,y1),(x2,y2),...,(xN,yN),yi∈{?1,+1}并指定一个学习率η(0<η<1);
1、任意选定权重w和偏置b;
2、读入数据点(xi,yi);
3、判断该数据点是否为误分类点,如果yi(w?xi+b)≤0则更新w=w+ηyixi;b=b+ηyi;
4、重复进行2、3步,直到没有误分类点。
此时,我们就获得了最佳的w和b,把它们代入y=wx+b,就得到了一个数学模型。”
感知机的学习过程,有个非常形象的比喻。
假设在一个棋盘上,有一堆黑子,和一堆白子,它们不相混合。
下面,拿一根细棍放上去。
我们希望这根棍子,能恰好将黑子和白子分开,棍子的一边全是黑子,另一边全是白子。
先把棍子随机扔到棋盘上,如果恰好将黑子和白子分开了,那就皆大欢喜,否则的话,就平移和调整棍子的角度,直到所有白子和黑子恰好分开……
那根棍子就是感知机,而挪动棍子的过程,就是感知机在学习。
棍子的角度和平移量,就是要寻找的参数w和b,也就是直线(棍子)在平面直角坐标系(棋盘)里的函数解析式。
瞧,够通俗易懂吧?
可惜写论文就不能这么写了。
感知机是人工神经网络的雏形,其中有个关键概念,叫激活函数,它决定了一个神经元是否有输出。
江寒在这里,用一个阶跃函数sign(x)作为激活函数,其定义为:x<0时函数取值-1;x≥0时函数值为1。
只要将sign换成sigmoid或者其他非线性函数,就是真正的单层前馈神经网络了。
但江寒并没有着急将sign之外的函数抛出去。
在第一篇论文里,最重要的是提出概念,其他东西完全可以在下一篇论文中再讨论。
能多水几篇,岂不更加美滋滋?
搞定了输入空间是1维的情况,接下来,就可以扩展到N维。
“对于一般情况,当有n个输入信号时,假设输入空间是x∈Rn,输出空间是y∈{+1,-1}。输入x∈X表示实例的特征向量,对应于输入空间的点;输出y属于Y表示实例的类别。
由输入空间到输出空间的如下函数:Ψ(x)=rsign(w1x1+w2x2+……+wnxn+b)=rsign(wTx+b),就可以称之为感知机,其中w∈Rn,b∈R为感知机算法的参数……”
在讨论完n个输入信号的情况后,江寒指出:
“模型建立之后,经过训练,就可以得到一组权重和偏置,这些参数确定了一个分离超平面(定义为n维空间上的一个n-1维子空间),此超平面可以将训练集中的数据,完全正确地分成两份,一份为正,一份为负(或者0,可以自己定义)。”
取得了模型的参数后,就可以把测试数据放进去,根据模型函数运算的结果,就能对数据进行分类。
感知器用处很广泛,几乎所有二分类问题,都可以用它来试一试。
当然,必须是线性可分的问题,线性不可分的问题,是不能用单层感知器解决的。
例如年龄和有没有生活经验,就不存在线性关系;长得帅不帅和学习好不好,也没有线性关系……
关于如何高效地判断数据是否线性可分,江寒还真研究过,只是这个题目比较大,三言两语说不清楚。
嗯……好像又能多水一篇或几篇SCI?