感知器(神经网络模型)

感知器是人工神经网络中的一种典型结构, 它的主要的特点是结构简单,对所能解决的问题 存在着收敛算法,并能从数学上严格证明,从而对神经网络研究起了重要的推动作用。

感知器,也可翻译为感知机,是Frank Rosenblatt在1957年就职于Cornell航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。它可以被视为一种最简单形式的前馈式人工神经网络,是一种二元线性分类器。 Frank Rosenblatt给出了相应的感知器学习算法,常用的有感知机学习、最小二乘法和梯度下降法。譬如,感知机利用梯度下降法对损失函数进行极小化,求出可将训练数据进行线性划分的分离超平面,从而求得感知器模型。

感知器是生物神经细胞的简单抽象,如右图.神经细胞结构大致可分为:树突、突触、

图1.神经细胞示意图

神经细胞示意图

细胞体及轴突。单个神经细胞可被视为一种只有两种状态的机器——激动时为‘是’,而未激动时为‘否’。

神经细胞的状态取决于从其它的神经细胞收到的输入信号量,及突触的强度(抑制或加强)。当信号量总和超过了某个阈值时,细胞体就会激动,产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。为了模拟神经细胞行为,与之对应的感知机基础概念被提出,如权量(突触)、偏置(阈值)及激活函数(细胞体)。 在人工神经网络领域中,感知器也被指为单层的人工神经网络,以区别于较复杂的多层感知器(Multilayer Perceptron)。 作为一种线性分类器,(单层)感知器可说是最简单的前向人工神经网络形式。尽管结构简单,感知器能够学习并解决相当复杂的问题。感知器主要的本质缺陷是它不能处理线性不可分问题。

模型构建的代码实现(Python)

单层感知器模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import numpy as np
#sigmoid 激活函数
def nonlin(x, deriv = False):
if(deriv==True):
return x*(1-x)
return 1/(1+np.exp(-x))

#输入-输出
#[0,0,1]-0
#[0,1,1]-1
#[1,0,1]-1
#[1,1,1]-0

#输入矩阵
X=np.array([[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]])

# 目标矩阵
y=np.array([[0,1,0,1]]).T

#生成随机权重
np.random.seed()
weight = np.random.random((3,1))

#训练次数
times=input(How many times you want to train:\n)
times=int(times)

#训练开始
for iter in range(times):
#计算输出
L0=X
L1=nonlin(np.dot(L0,weight))
#计算误差
L1_error=y-L1
L1_delta = L1_error*nonlin(L1,True)
#更新权重

weight+=np.dot(L0.T,L1_delta)

print(Output After Training:)
print(L1)
print(The Weight After Training:)
print(weight)

测试结果:

1
2
3
4
5
6
7
8
9
10
11
How many times you want to train:
10000
Output After Training:
[[0.00966633]
[0.99359071]
[0.00786352]
[0.99211866]]
The Weight After Training:
[[-0.20823225]
. [ 9.67307298]
. [-4.6294448 ]]

感知器(神经网络模型)
https://jason-xy.github.io/2020/06/pnn/
作者
Jason Hsu
发布于
2020年6月19日
许可协议