参考文章:
一看就懂的感知机算法PLA(基础概念)
感知机 PLA(Perceptron Learning Algorithm)(加深理解)
基本原理如下图:
由McCulloch和Pitts于1943年发表,简单模拟了神经元的反应流程,包括:
根据以上信息我们可以得到一个基本的神经元表示(也即是分类公式):
线 性 求 和 : h = ∑ x = i n w i x i 阈 值 比 较 : y = g ( h ) { 1 i f h ≥ θ 0 i f h < θ \begin{array}{l}线性求和:h=\sum_{x=i}^nw_ix_i\\\\阈值比较:y=g(h)\;\left\{\begin{array}{l}1\;\;\;\;if\;h\geq\theta\\0\;\;\;\;if\;h<\theta\end{array}\right.\end{array} 线性求和:h=∑x=inwixi阈值比较:y=g(h){1ifh≥θ0ifh<θ
由线性相加和阈值比较两个过程组成,最后根据比较结果将样本划分为正负两类。
即使是单层感知机,也可以可以由多个相互独立的MP神经元组成(对于每个神经元,只有输入值是相同的,其他都不同,包括输入值对应的各个权重 w i w_i wi)
训练公式:
w i j ( n e w ) = w i j ( o l d ) − η ( y j − t j ) × x i w_{ij}(new)=w_{ij}(old)-\eta(y_j-t_j)×x_i wij(new)=wij(old)−η(yj−tj)×xi
公式的推导过程:
初始化所有权重 w i j w_{ij} wij为较小的随机数(包括正负),给定一个 x 0 x_0 x0的值(比如 − 1 -1 −1)
训练 Training
计算每一个神经元的输出值 y j y_j yj,最终得到一个输出集合 y y y
y = g ( ∑ x = 0 m w i x i ) = { 1 , i f ∑ x = 0 m w i j x i > 0 0 , i f ∑ x = 0 m w i j x i ≤ 0 \begin{array}{l}y=g(\sum_{x=0}^mw_ix_i)\;=\left\{\begin{array}{l}1,\;\;\;\;if\;\;\;\sum_{x=0}^mw_{ij}x_i>0\\0,\;\;\;\;if\;\;\;\sum_{x=0}^mw_{ij}x_i\leq0\end{array}\right.\end{array} y=g(∑x=0mwixi)={1,if∑x=0mwijxi>00,if∑x=0mwijxi≤0
更新每一个错误的权重值 w i j w_{ij} wij
w i j ( n e w ) = w i j ( o l d ) − η ( y j − k j ) × x i w_{ij}(new)=w_{ij}(old)-\eta(y_j-k_j)×x_i wij(new)=wij(old)−η(yj−kj)×xi
引用:
机器学习(一)-感知机
机器学习之感知机与梯度下降法认知
最终公式:
w t + 1 = w t − η 1 N ∑ x n ∈ X x n ( y n − t n ) w_{t+1}=w_t-\eta\frac{1}{N}\sum_{x_n\in X}x_n(y_n-t_n) wt+1=wt−ηN1xn∈X∑xn(yn−tn)
其中 η \eta η是步长, N N N是错误样本总数,此时表示为批量梯度下降算法。如果 N N N取1时,则为随机梯度下降算法
在实际问题中,并不是所有的数据都能线性可分,而我们要做到的是力求寻找到最优的超平面 S 使数据误分类点尽量最少,即损失函数最小化。
又因为误分类点个数与感知机的w和b参数均其不可导,为了引入梯度下降法求取损失函数极小值,损失函数是误分类点到超平面的总距离。
首先,根据平面外任意点 X 0 X_0 X0到超平面的距离公式 d = ∣ W X 0 + b ∣ ∣ ∣ W ∣ ∣ 2 d=\frac{|WX_0+b|}{||W||_2} d=∣∣W∣∣2∣WX0+b∣,每个划分错误的点到超平面的距离:
d e r r = ∣ W X + b ∣ ∣ ∣ w ∣ ∣ = ∣ ( y − t ) ( w x ) ∣ ∣ ∣ w ∣ ∣ d_{err}=\frac{|WX+b|}{||w||}=\frac{|(y-t)(wx)|}{||w||} derr=∣∣w∣∣∣WX+b∣=∣∣w∣∣∣(y−t)(wx)∣
其中 y y y是输出, t t t是正确结果。
对于所有错误的点,如果 w x > 0 wx>0 wx>0,则输出值 y = 1 y=1 y=1,因为是错误点,正确的结果与输出值不一致,因此 t = 0 t=0 t=0,相减得到 y − t > 0 y-t>0 y−t>0。所以 ( y − t ) ( w x ) > 0 (y-t)(wx)>0 (y−t)(wx)>0;反之, w x < 0 wx<0 wx<0, y − t < 0 y-t<0 y−t<0,所以 ( y − t ) ( w x ) > 0 (y-t)(wx)>0 (y−t)(wx)>0同样成立。
又因为 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣不存在方向,不影响后续使用梯度下降法求最优解,因此省去,以便计算
根据以上前提,可以进一步得到所有错误点到超平面的比例距离(非实际距离,而是省去了 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣)公式:
E p ( X ) = ∑ d e r r = ∑ x n ∈ X w x n ( y n − t n ) E_p(X)=\sum d_{err}=\sum_{x_n\in X}wx_n(y_n-t_n) Ep(X)=∑derr=xn∈X∑wxn(yn−tn)
这里 E p ( X ) E_p(X) Ep(X)表示:p=perceptron, E=error points, X=all points
下一步,通过梯度下降对该函数求最优解,即求该函数关于 w w w的偏导数(因为 x x x是固定值,要得到的是下一个 w w w,使得总体错误距离最更小),将上公式求偏导 ∇ E p ( X ) = ∑ x n ∈ X x n ( y n − t n ) \nabla E_p(X)=\sum_{x_n\in X}x_n(y_n-t_n) ∇Ep(X)=xn∈X∑xn(yn−tn)然后代入梯度下降公式:
x t + 1 = x t − η ∇ f ( x t ) x_{t+1}=x_t-\eta\nabla f(x_t) xt+1=xt−η∇f(xt)
其中, x t x_t xt是自变量参数向量,即当前坐标, η η η是学习因子,即下山每次前进的一小步(步进长度), x t + 1 x_{t+1} xt+1是下一步,即下山移动一小步之后的位置。
∇ f ( x ) \nabla f(x) ∇f(x)则代表着梯度,也就是函数的偏导数集合构成的向量
最后得到: w t + 1 = w t − η ∑ x n ∈ X x n ( y n − t n ) w_{t+1}=w_t-\eta\sum_{x_n\in X}x_n(y_n-t_n) wt+1=wt−ηxn∈X∑xn(yn−tn)也就是感知机训练公式,可用于无法直接进行线性二分的数据集
梯度即函数在某一点最大的方向导数,函数沿梯度方向函数有最大的变化率。
x t + 1 = x t − η ⋅ ∇ f ( x t ) x_{t+1}=x_t-\eta⋅\nabla f(x_t) xt+1=xt−η⋅∇f(xt)
其中, x t x_t xt是自变量参数向量,即当前坐标, η η η是学习因子,即下山每次前进的一小步(步进长度), x t + 1 x_{t+1} xt+1是下一步,即下山移动一小步之后的位置。
∇ f ( x ) \nabla f(x) ∇f(x)则代表着梯度,也就是函数的偏导数集合构成的向量
参考文章