2022年6月

Rosenblatt感知器,感知器也叫预测机

那么感知器有什么用呢?感知器可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。

使用python实现Rosenblatt感知器

pass:此次python实验的预测函数不含偏置项系数,所以函数图像过原点,只能拟合因果是成正比的数据或只能完成可被过原点的直线分类的数据

算法图

Rosenblatt_predictor_flow_chart

线性回归问题

  1. 首先先引入需要用到的库

    import numpy
    from matplotlib import pypolt 

    引入numpy数学库以方便我们的数学计算

    引入matplotlib中的pyplot模块进行画图操作

    numpy使用手册:https://www.numpy.org.cn/

    matplotlib使用手册:https://www.matplotlib.org.cn/

  2. 获取数据以便进行训练

    def getdata(count):
        """获取指定数量的数据"""
        x = np.random.rand(count)#生成区间[0,1)的随机数
        x = np.sort(x)#进行从小到大排序
        y = [1.5*xx+np.random.rand()/3 for xx in x]#使用列表推导式生成对应的值
        return x,y

    创建一个名为getdata的函数随机生成有共同特征的数据,有一个参数count来接收获取数据的数量

  3. 获取100个数据

    xs,ys = getdata(100)#获取100个数据
  4. 编写预测函数

    w = float("%.2f"%np.random.uniform(0,1))#随机生成权重参数
    alpha = 0.05#设置学习率
    y_predict =  w*xs#简单的预测函数
  5. 绘制图像以便我们观察

    plt.scatter(xs,ys)#绘制散点图
    plt.plot(xs,y_predict)#绘制预测函数的图像
    plt.show()#显示图像

    initial_predict

  6. 算法的实现

    for i in range(100):#对每个数据进行一次权重调整
            x = xs[i]
            y = ys[i]
            #取出一个数据
            y_predict =  w*x#计算相应数据的预测值
            e = y - y_predict#计算相应数据的预测值与实际值的误差(使用差值评估误差)
            w = w + alpha*e*xs#根据误差调整权重参数
            y_predict = w * xs#重新配置预测函数
  7. 多次训练

    why:因为学习率的存在,我们的预测函数只进行了一次在总体上的调整,无法完美的拟合。但是如果学习率设置太大会造成预测曲线不能收敛

    for _ in range(100):#进行100次训练
        for i in range(100):#对每个数据进行一次权重调整
            x = xs[i]
            y = ys[i]
            #取出一个数据
            y_predict =  w*x#计算相应数据的预测值
            e = y - y_predict#计算相应数据的预测值与实际值的误差(使用差值评估误差)
            w = w + alpha*e*xs#根据误差调整权重参数
            y_predict = w * xs#重新配置预测函数
  8. 再次画出预测曲线

    plt.plot(xs,y_predict)#绘制预测函数的图像
    plt.show()#显示图像

    simple_predictor

    可以看到完美的拟合了数据

线性回归问题代码

import numpy as np#引入numpy数学计算库
from matplotlib import pyplot as plt#引入matplotlib画图库

def getdata(count):
    """获取指定数量的数据"""
    x = np.random.rand(count)
    x = np.sort(x)
    y = [1.5*xx+np.random.rand()/3 for xx in x]
    return x,y

xs,ys = getdata(100)#获取100个数据

w = float("%.2f"%np.random.uniform(0,1))#随机生成权重参数
alpha = 0.05#设置学习率
y_predict =  w*xs#简单的预测函数

plt.scatter(xs,ys)#绘制散点图
plt.plot(xs,y_predict)#绘制预测函数的图像
plt.show()

for _ in range(100):#进行100次训练
    for i in range(100):#对每个数据进行一次权重调整
        x = xs[i]
        y = ys[i]
        #取出一个数据
        y_predict =  w*x#计算相应数据的预测值
        e = y - y_predict#计算相应数据的预测值与实际值的误差(使用差值评估误差)
        w = w + alpha*e*xs#根据误差调整权重参数
        y_predict = w * xs#重新配置预测函数
    #画图
    plt.clf()
    plt.xlim(0,1.1)
    plt.ylim(0,1.85)
    plt.scatter(xs,ys)
    plt.plot(xs,y_predict)
    plt.pause(0.01)
   
plt.show()

“人工” “智能”,人工究竟如何创造智能。

人工神经元

在1943年麦卡洛克和皮茨(McCullouch and Pitts)提出了“人工神经元”模型(麦卡洛克-皮茨神经元模型简称MP模型),是第一次模仿生物体的神经元进行设计的模型。

MP_model

MP_model_surface

麦卡洛克是当时非常著名的生物学家它和当时的数学家皮茨一起工作,模仿生物神经元的树突、轴突、细胞核制作出了人工神经元模型。生物获取多个电信号经过树突的正确处理后来到细胞核,大量电信号经整合电信号发生总和达到阈值时输出,通过轴突传导下一个神经元;人工神经元获取多个数据(x1、x2、x3....xn)经过权重参数(w11、w12、w13.....w1n)来到求和函数,通过激活书函数激活达到阈值后输出。可以看这是非常的相似的。

Rosenblatt感知器

可是MP模型的权重参数w需要手动调整,在处理相应的问题的时候需要我们人自己去根据事物的特征去寻找w,如果不调整神经元的权重参数将会输出错误的信号,这未免太不智能了吧。

在1958年,心理学家弗兰克·罗森布拉特(Flank Rosenblatt)提出了感知机模型(Rosenblatt感知器),Rosenblatt感知器是根据MP模型的单层“神经网络”,是历史上首个根据样本数据来学习到正确的权重参数的模型。Rosenblatt_predictor_flow_chart

对于线性可分为两类的数据,按照Rosenblatt感知机的误差修正算法,可以根据样本数据经过多次迭代运算,最终实现运算收敛,确定每个输入x对应的权重W。我们把迭代运算的过程称为“神经网络的训练”,最终训练好的神经网络可以对新的数据作分类预测。这就是最简单的“机器学习”的过程。

Rosenblatt感知器为之后的人工智能的研究提供了灵感,人工智能也就开始了蓬勃发展。

参考文献

https://www.51cto.com/article/656216.html

https://baike.sogou.com/kexue/d10261.htm?ch=fromsearch