目录
一、什么是感知机?
二、单层感知机模型
三、感知机的学习策略
四、感知机的学习算法
一、什么是感知机?
1958年,美国心理学家Frank Rosenblatt提出一种具有单层计算单元的神经网络,称为感知机(Perceptron)。感知机模拟人的视觉接受环境的信息,并利用神经元之间的连接进行信息传递。在感知机的研究中首次提出自组织、自学习的思想,而且对所能解决的问题存在着收敛算法,即在数学上能严格证明有效,因而对神经网络的研究起了重要的推动作用。
由于单层感知机的结构和功能都非常的简单,以至于目前在解决实际问题时很少被采用,但是由于它在神经网络研究中具有重要的意义,是研究其他深度网络的基础,所以理解单层感知机的原理是必要的。
二、单层感知机模型
单个人工神经元模型(M-P模型):
多输出节点的单层感知机:
单层感知机只有一层处理单元,结构如上图所示。
W_i_j = \begin{matrix} w_1_1 & w_1_2 & \cdots & w_1_n \\ w_2_1 & w_2_2 & \cdots & w_2_n \\ \vdots &\vdots &\vdots &\vdots \\ w_m_1 & w_m_2 & \cdots & w_m_n \end{}
三、感知机的学习策略
\frac{\mid w_i_1x_1+w_i_2x_2+\cdots+w_i_nx_n-b_i \mid}{\sqrt{w_i_1^2+w_i_1^2+\cdots+w_i_n^2}}=\frac{1}{\mid\mid W^{T}_i \mid\mid}\mid W^{T}_iX-b_i \mid
四、感知机的学习算法
例题代码:
import numpy as np
import matplotlib.pyplot as plt
train = [((3,3),1),((4,3),1),((1,1),-1)]
feature = []
label = []
xpoints=[]
ypoints=[]
for data in train:
feature.append(data[0])
label.append(data[1]) #提取特征和标签数据
xpoints.append(data[0][0])
ypoints.append(data[0][1]) #提取x,y坐标用于后面的画图
feature = np.array(feature)
label = np.array(label) #将特征和标签数据转化为numpy数组
w = np.array([0,0])
b=0
eta = 1 #初始化w,b,eta学习率设为1
flag = True #设置标记用于结束迭代
num = 0 #记录迭代次数
while flag:
count = len(feature)
for i in range(len(feature)):
if -label[i]*( np.dot(w,feature[i].T) + b) >= 0: #如果数据被误分类
w = w + eta*label[i]*feature[i].T
b = b + eta*label[i]
num = num + 1
print("第{}次迭代:w={},b={}".format(num,w,b)) #迭代并输出迭代后的w和b
else:
count = count - 1 #conut循环减1,减到0时表示所有数据都分类成功
if count == 0:
flag = False #如果所有数据都分类成功。停止循环迭代
print("共迭代{}次,最终迭代结果:w={},b={}".format(num,w,b)) #输出最终结果
x = np.linspace(-5,+5,50)
y = -(w[0]*x + b)/w[1]
plt.plot(x,y)
plt.plot(xpoints,ypoints,'o',)
plt.show() #画出示意图
输出结果:
参考
[1]刘若辰,慕彩虹,焦李成,刘芳,陈璞花.人工智能导论[M].北京:清华大学出版社,2021.8:195-200.
[2]李航.统计学习方法[M].北京:清华大学出版社,2019.5:35-41.
[3]同济大学数学系.高等数学[M].北京:高等教育出版社,2014.7:23-27.