感知机与神经网络
什么是感知机
- 感知机(Perrceptron)又称神经元(Neuron)是神经网络(深度学习)的起源算法,1958年由康奈尔大学心理学教授弗兰克.罗森布拉特提出,它可以接受多个输入信号,产生一个输出信号。
其中,X1和X2称为输入,w1和w2为权重,+表示运算的规则,Θ为阈值,y为输出
运算规则只有w1x1+w2x2,若结果小于等于Θ得到输出为0,大于Θ则输出1。
感知机的功能
- 实现逻辑运算,包括逻辑和(And)、逻辑或(Or)**感知机无法处理”异或“问题,多层感知机可以处理异或问题
- 实现自我学习
学习:反复执行某一个过程,提升机器的能力
在感知机表达式中x1x2和y值是已知的,w1,w2和0是未知的,当具有一定量样本时,将样本喂给感知机得到一个y值,反复循环迭代,迭代式不断调整w1,w2和0,就可以使得输入x1,x2输出结果为y,此过程称为感知机的学习 - 组成神经网络
代码实现逻辑运算
逻辑和
#自定义感知机
#实现逻辑和
def AND(x1,x2):
w1,w2 = 0.5,0.5 #两个权重
theta = 0.7 #阈值
tmp = x1*w1+x2*w2
if tmp <=theta: return 0
else:return 1
if __name__ == '__main__':
print(AND(1,1))
逻辑或
def OR(x1,x2):
w1,w2 = 0.5,0.5 #两个权重
theta = 0.2 #阈值
tmp = x1*w1+x2*w2
if tmp <=theta: return 0
else:return 1
if __name__ == '__main__':
print(OR(1,1))#1
print(OR(1,0))#1
print(OR(0,0))#0
异或
#自定义感知机
#实现逻辑和
def AND(x1,x2):
w1,w2 = 0.5,0.5 #两个权重
theta = 0.7 #阈值
tmp = x1*w1+x2*w2
if tmp <=theta: return 0
else:return 1
# 实现逻辑或
def OR(x1,x2):
w1,w2 = 0.5,0.5 #两个权重
theta = 0.2 #阈值
tmp = x1*w1+x2*w2
if tmp <=theta: return 0
else:return 1
#实现异或
def XOR(x1,x2):
s1 = not AND(x1,x2) #对x1,x2做逻辑和计算再去非
s2 =OR(x1,x2) #直接对x1.x2做逻辑和运算
y = AND(s1,s2)
return y
if __name__ == '__main__':
print(XOR(1,1)) #0
print(XOR(1,0)) #1
print(XOR(0,1)) #1
print(XOR(0,0)) #0
神经网络
感知机由于结构简单,完成的功能十分有限。可将若干个感知机连在一起,形成一个级联网络结构,这个结构称为”多层前馈神经网络“。所谓”前馈“是指将前一层的输出作为后一层的输入的逻辑结构。每一层神经元仅与下一层的神经元全连接。但在同一层之内的神经元彼此不连接,而且跨层之间的神经元,彼此也不相连。
神经网络的功能
通用近似定理
对于任意复杂度的连续波莱尔可测函数f,仅仅需要一个隐含层,只要这个隐含层包含足够多的神经元,前馈神经网络使用挤压函数作为激活函数,就可以任意精度来近似模拟f若想增加f的近似精度,单纯依靠增加神经元的数目即可实现。
该定理表明,前馈神经网在理论上可近似解决任何问题
神经网络的优点
增加网络的层数会显著提升神经网络系统的学习性能。
激活函数
- 在神经网络中,将输入信号的总和转换为输出信号的函数被称为激活函数(activation function)
为什么使用激活函数
- 激活函数将多层感知机输出转换为非线性,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
- 若一个多层网络,使用连续函数作为激活函数的多层网络,称之为“神经网络”,否则称为“多层感知机”。激活函数是区分多层感知机和神经网络的依据
常用激活函数
阶跃函数
阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,函数形式与图像如下:
sigmoid函数
sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为(0,1)它可以将一个实数映射到(0,1)的区间,可以用来做二分类
- 优点:平滑、易于引导
- 缺点:激活函数计算量大,反向传播求误差梯度是,求导涉及除法;反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练,(应避免发生梯度消失的情况)
tanh(双曲正切)
- 优点:平滑、易于求导;输出均值为0,收敛速度要比sigmoid快,从而可以减少迭代次数
- 缺点:梯度消失
Relu(修正线性单元)
- 优点:
1.更加有效率的梯度下降以及反向传播,避免了梯度爆炸和梯度小时问题
2.计算过程简单
Softmax
Softmax函数定义如下
其中Vi是分类器前级输出单元的输出。i表示类别索引,总的类别个数为C。Si表示的是当前元素的指数与所有元素指数和的比值。通过Softmax函数可将多类的输出数值转换为相对概率,而这些值得累和为1.
Softmax函数常用在最后一层输出层
小结
- 多层前馈网络:若干个感知机组合成若干层网络,上一层输出作为下一层输入
- 激活函数:将计算结果转换为输出的值,包括阶跃函数,sigmod、tanh、Relu