目录

 一、什么是感知机?

二、单层感知机模型

三、感知机的学习策略

四、感知机的学习算法


 一、什么是感知机?

        1958年,美国心理学家Frank Rosenblatt提出一种具有单层计算单元的神经网络,称为感知机(Perceptron)。感知机模拟人的视觉接受环境的信息,并利用神经元之间的连接进行信息传递。在感知机的研究中首次提出自组织、自学习的思想,而且对所能解决的问题存在着收敛算法,即在数学上能严格证明有效,因而对神经网络的研究起了重要的推动作用。

        由于单层感知机的结构和功能都非常的简单,以至于目前在解决实际问题时很少被采用,但是由于它在神经网络研究中具有重要的意义,是研究其他深度网络的基础,所以理解单层感知机的原理是必要的。

二、单层感知机模型

单个人工神经元模型(M-P模型):

深度学习单层感知机 单层感知机模型包括_感知机

 多输出节点的单层感知机:

深度学习单层感知机 单层感知机模型包括_机器学习_02

        单层感知机只有一层处理单元,结构如上图所示。

深度学习单层感知机 单层感知机模型包括_学习_03

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{}

深度学习单层感知机 单层感知机模型包括_感知机_04


深度学习单层感知机 单层感知机模型包括_机器学习_05

深度学习单层感知机 单层感知机模型包括_深度学习单层感知机_06


三、感知机的学习策略

深度学习单层感知机 单层感知机模型包括_感知机_07

\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

深度学习单层感知机 单层感知机模型包括_机器学习_08


四、感知机的学习算法

深度学习单层感知机 单层感知机模型包括_机器学习_09

深度学习单层感知机 单层感知机模型包括_机器学习_10

例题代码: 

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()  #画出示意图

 输出结果:

深度学习单层感知机 单层感知机模型包括_感知机_11

深度学习单层感知机 单层感知机模型包括_深度学习单层感知机_12

 


深度学习单层感知机 单层感知机模型包括_算法_13


参考

[1]刘若辰,慕彩虹,焦李成,刘芳,陈璞花.人工智能导论[M].北京:清华大学出版社,2021.8:195-200.

[2]李航.统计学习方法[M].北京:清华大学出版社,2019.5:35-41.

[3]同济大学数学系.高等数学[M].北京:高等教育出版社,2014.7:23-27.