机器学习之实现简单的神经网络
机器学习的本质是模拟人的神经元对信息的处理方法。可以将神经元看成是一个简单的带有二进制输出功能的逻辑电路门,多种电信号可以从神经元的树突部分传入,然后对多个传入的电信号进行结合,统一地运算,得到的唯一的电信号会通过神经元的轴突–>神经末梢传递给其他神经元的树突。
在机器学习中对数据的分类算法有两种:
- 感知器
- 适应性线性神经元
1、神经元的数学表示
设:
则神经元会进行以下算法步骤:
第一步,将神经元将接收到的信号
z=w1x1+⋯+wmxm
第二步,用**函数对
ϕ(z)={1−1if z≥θif > otherwise
2、感知器
我们把
感知器数据分类的算法步骤如下:
- 把
w 初始化为 0,或者把w 的每个分量初始化为[0, 1]之间的任意小数; - 把训练样本
x 输入感知器,得到分类结果ϕ(z) (-1或1); - 根据分类结果更新权重向量。
接下来我们对每个步骤进行详细的解说。
步调函数和阈值的概念:
感知器中的算法如下:
andz=w0x0+w1x1+⋯+wmxm ϕ(z)={1−1if z≥θif otherwise
其中
这时,我们令
权重更新算法:
wj=wj+∇wj ∇wj=η∗(y−y′)∗xj
-
η 表示学习率,是一个 [0, 1] 之间的小数; - y 是输入样本的正确分类,y’ 是感知器计算出来的分类。
下面我们通过一个例子来更清楚的了解权重更新算法以及感知器的运行机理:
设:
则根据上面的算法:
同理,计算其他分量:
最后,更新后的权重向量为
阈值的更新:
阈值并不是一成不变的,初次的阈值可以人为制定,以后会不断的自动更新。
阈值更新如下:
w0=0 ,∇w0=η∗(y−y′)
y=1 ,y′=−1
w0=w0+∇w0=0+0.3∗(1−(−1))=0.6
最后,我们对感知器的算法做一下总结,如下图:
3、适应性线性神经元
如图,适应性线性神经元与感知器的区别有二:
适应性线性神经元会将计算结果与给定的标准结果进行比较,如果出现Error,则会根据两者的差距进行动态的调整神经元的参数
wi ,使得与给定的标准结果的差距越来越小。两者的**函数(Activation function)不一样;感知器的**函数是一个步调函数,而自适应性先行神经元使用的**函数是将
x 与w 的点积z 直接当作最终结果,即:ϕ(z)=z 。
那么适应线性神经元是如何动态的调整神经元的参数
适应线性神经元会使用一种渐进下降的算法来不断的缩短计算结果与标准结果之间的距离。
这里我们要引进一下“距离”的定义:
J(w)=12∑i(y(i)−ϕ(z(i)))2
其中
(
上面是一个和方差公式,和方差的数学函数图像如下:
根据上图,我们目的是求当距离最小时的状态,即
和方差求导如下:
∂J∂wj=∂∂wj12∑i(y(i)−ϕ(z(i)))2
=12∂∂wj∑i(y(i)−ϕ(z(i)))2
=12∑i2(y(i)−ϕ(z(i)))∂∂wj(y(i)−ϕ(z(i))
=∑i(y(i)−ϕ(z(i)))∂∂wj[(y(i)−∑iw(i)jx(i)j]
=∑i(y(i)−ϕ(z(i)))(−x(i)j)
=−∑i(y(i)−ϕ(z(i)))x(i)j
有了导数之后,我们就要对神经元的参数
w:=w+Δw
其中Δwj=−η∂J∂wj=μ∑i(y(i)−ϕ(z(i)))x(i)j
我们通过这种方式不断的调整神经元的每一个参数,这样会使得整体神元上的和方差的值不断地趋于最小,这样一来,神经网络的计算误差就会越来越小,计算结果就会越来越精确,神经网络对数据的预测的准确率就会越来越高。
学习课程来自:慕课网【机器学习-实现简单神经网络】