版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darkrabbit/article/details/80740696
感知机(Perceptron)和多层感知机(Multi-Layer Perceptron)
AI-第五期-DarkRabbit
之前并未做过笔记,所以这篇文章是对以下内容回顾,对应:
- 第六周:(02)感知机
- 第六周:(03)多层感知机和反向传播
- 维基百科(en)“Backpropagation” 词条
- 《机器学习》(西瓜书):第5章 神经网络 - 5.1 神经元模型
- 《机器学习》(西瓜书):第5章 神经网络 - 5.2 感知机与多层网络
- 《机器学习》(西瓜书):第5章 神经网络 - 5.3 误差逆传播算法
依然公式比较多,CSDN的app会显示不正常(乱码),请用其它任意方式浏览。
目录
1 感知机(Perceptron)
1.1 过程
inputs(bottom) -> weights -> weighted sum -> step function -> output(top)
y=f(W⋅X+b)
step function(activation function)(激活函数):
f(x)={10x>0x≤0
1.2 前馈计算
- weighted sum:
logit=ω0x0+ω1x1+⋯+ωnxn
- 其中
ω0=b(bias,偏置),x0=1
- 记
ω=[ω0,ω1,⋯,ωn],x=[x0,x1,x2,⋯,xn]
则
logit=ω⋅x
- step function:
output=f(logit),f(x)={10x>0x≤0
1.3 逻辑运算
感知器可以进行简单的逻辑运算(不包含异或)。
可以运用真值表进行运算。
逻辑与:
真值表:
x1
|
x2
|
output |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
由真值表和 step function 得出的不等式方程组:
⎧⎩⎨⎪⎪⎪⎪1×ω1+1×ω2+b>01×ω1+0×ω2+b≤00×ω1+1×ω2+b≤00×ω1+0×ω2+b≤0⟹⎧⎩⎨⎪⎪⎪⎪b>−(ω1+ω2)b≤−ω1b≤−ω2b≤0⟹−(ω1+ω2)<b≤min(−ω1,−ω2,0)
解是一些区间,而其中最常用的解:
⎧⎩⎨ω1=2ω2=2b=−3or⎧⎩⎨ω1=1ω2=1b=−1
逻辑或
同逻辑与,最常用的解:
x1=2,x2=2,b=−1
逻辑非:
同逻辑与,最常用的解:
x1=−2,b=1
逻辑与非:
同逻辑与,最常用的解:
x1=−2,x2=−2,b=3
1.4 学习规则
感知器类似与线性分类器。具体求解方式参考损失函数(loss/cost function)与梯度下降。
需要注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron)。
若两类模式是线性可分的的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛(converge);否则学习过程将发生震荡(fluctuation)
1.5 感知器的局限
- 仅能做0-1输出
- 仅能处理线性分类问题(无法处理XOR问题)
多层感知机的出现,解决了这些问题。
2 多层感知机(Multi-Layer Perceptron)
2.1 一些区别(different)
- 多层感知机在输入层与输出层中间,还多了一层隐层(hidden layer);
- 隐层中也拥有激活函数的功能神经元;
- 每层神经元与下一层神经元全互连;
- 神经元之间不存在同层连接,也不存在跨层连接;
- 更多的激活函数。
2.2 一些激活函数(activation function)
阶跃函数(step function):
sgn(x)={10x>0x≤0
S型函数(sigmoid function),有时也称为挤压函数(squashing function):
sigmoid(x)=11+e−x
双曲正切函数(tanh function):
tanh(x)=sinhxcoshx=ex−e−xex+e−x
线性整流函数(Rectified Linear Unit, ReLU)
ReLU(x)={x0x>0x≤0
激活函数能够进行非线性的工作了。
2.3 反向传播算法(backpropagation, BP)
当权重
ω
权重需要调整时,需要进行反向传播。
反向传播的计算是从网络的输出层开始,向输入方向逐层计算梯度并更新权重,与前馈运算正好相反。
假设一个输出神经元,平方误差函数为:
E=12(t−y)2
其中, t 为训练样本输出值, y 为真值。
对于层中每个神经元
j
,它的输出
oj
为:
oj=sigmoid(netj)=sigmoid(∑k=1nωkjok+bkj)
其中,
k
为前一层神经元数目,
ok
为前一层每个神经元输出,
bkj
为偏置 bias, 如果是第一个输入层,那么
ok
就是
xk
。
寻找误差的导数:权重偏导数使用了2次链式法则。
∂E∂ωij=∂E∂oj∂oj∂netj∂netj∂ωij
其中:
∂netj∂ωij∂oj∂netj∂E∂oj===∂∂ωij(∑nk=1ωkjok)=∂∂ωijωijoi∂∂netjsigmoid(netj)∂E∂y=∂∂y(12(tj−yj)2)=oi=yj(1−yj)=yj−tj
则:
∂E∂ωij=∂E∂oj∂oj∂netj∂netj∂ωij=(yj−tj)×yj(1−yj)×oi
接下来我们定义
δj=∂E∂netj=∂E∂oj∂oj∂netj=(yj−tj)×yj(1−yj)
则:
∂E∂ωij=δj×oi
更新
ωij
使用梯度下降,还必须选择学习率(learning rate),
η>0
。
如果
∂E∂ωij>0
,增加
ωij
,增加
E
;反之增加
ωij
, 减小
E
。
新的
Δωij
被加在权重上,并乘以学习率、梯度与
−1
,来确保每次
ωij
改变都是在减少
E
。
则每层权重改变(Delta Rule)(增量规则)(德尔塔定律):
Δωij=−η∂E∂ωij=−ηδjoi
相同的,对于每层偏置量
bias
,我们有:
∂E∂bij=δi