第2章 单层感知器
创始人
2024-06-02 08:55:08
0

神经网络是模拟人类神经系统的,深度学习是神经网络的又一个名词。首先我们先来了解什么是人工神经元。

1.1 人工神经元

人工神经元是从人类神经元中抽象出来的数学模型。如下图:

该模型是1943年由心理学家Warren McCulloch和数学家Walter Pitts合作提出人工神经元,称为M-P模型。

其表达式如下:

计算过程的理解:

(1)求和:s = w1*x1+w2*x2+...+w3*x3;

(2) 如果 s > 阈值 输出1,否则输出0;

(3)变换 s-阈值>0,定义bias = -阈值,称为偏置。

 最初的研究是用来算法来理解逻辑运算:与门、或门、非门。

如下与或非运算真值表:

 把其值表达在坐标上:

 按照二分类的理解,圈是0类,三角形是1类。正好通过一条分割线分割:

 其实M-P模型人为的设定好w和b参数,就可以解决简单的线性分类问题(与门、或门)。

局限性: 权值w和偏置b都是人为给定的,此模型没有"自我学习"能力。

下面我们来学习具有自我学习的模型 --- 单层感知器。

1.2 单层感知器

1.2.1 提出问题

M-P模型的参数w和b是通过手动设置的,显得有些不智能。

问题:如图,那么计算机能否自己计算找到合适的参数(w,b)?

或者说  如何找到一个合适的直线分割两类点(找到参数w,b)?

 1.2.2 感知器模型

1958年美国心理学家Rosenblatt(弗兰克.罗森布拉)提出一种能够自我学习,具有单层计算单元的神经网络模型,叫感知器(perceptron)。 结构如下:

 表达式:

 其中,W是权重,b是偏置(上图w0);注意:W,X是向量形式。

激活函数f是一个阶跃函数(结果是简单的二分类0/1),其表达式:

 1.2.3 感知器学习过程

感知器找到合适的w,b的过程如下:

(1)首先权重初始化,对权重w0(就是b),w1, w2 进行随机初始化;

(2)前向传播:输入样本对{X, Y},通过 Y=f(WX+b) 计算节点的实际输出(其中X={{x11,x12}, {x21,x22}, {x31,x32}...} 为输入信号矩阵,Y={y1,y2,y3...}为期望目标值 );

(3)计算误差:使用损失函数计算误差;

(4)反向传播:计算传递梯度,更新权重w和偏置b ;

按照 2-4步进行迭代,直到在训练集合达到期望的要求(例如:期望误差很小)。

1.2.4 损失函数

感知器学习的过程中,计算误差的函数称为损失函数。

损失函数模型训练中,表示随机事件的“风险”或“损失”的函数,即衡量误差大小的函数。

感知器使用均方误差MSE作为损失函数:

其中,n是个数,yi是当前值(真实),^yi是期望值(标签、预测); 1/2没有特殊意义,是为了求导后能约掉2系数。 

曲线图:

 损失函数(二次方)曲线

在误差很小的时候,通常就是我们所期望的结果。

在二次方曲线中,导数等于0的地方就是误差最小的地方,那么问题是如何寻找这个地方?

感知器中,使用梯度下降法找到该处。

1.2.5 梯度下降法:理解

梯度下降法的基本思想可以类比为一个下山的过程

假设场景:一个人被困在山上,需要从山上下来(找到山的最低点,山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到最快下山的路。

利用梯度下降算法来帮助自己下山:首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着这个方向走一步(一段距离),然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处。

 1.2.6 梯度下降法:梯度

梯度:函数在该点的方向导数(偏导数)。

梯度一个向量,表示函数在该点处沿着该方向(梯度的方向)变化最快,变化率最大(梯度的模)。

如果损失函数代表着一座山,目标是找到这个函数的最小值(山底), 最快的下山的方式是沿着当前位置最陡峭的方向(梯度相反的方向)走,函数值下降最快,不断的反复直到走到函数的最小值。

 1.2.7 权重更新

更新公式:新的参数 = 旧的参数 - 学习率*梯度

通过学习率(Learning rate)来定义每次参数更新的幅度,也叫学习步长。 学习率是一个超参数,可以预习设定,也可以通过超参数调优选择。

 其中    是学习率,控制更新步长,训练人为设定0-1的值;负号表示梯度的反方向,变化率表示梯度的模。

1.3 感知器训练与门代码

与门真值表为训练集。

import numpy as npdef get_xy_data():""" 与门的训练集 -- 真值表 """x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])y = np.array([0, 0, 0, 1])return x,y

感知器与门模型:

import numpy as np""" 定义感知器模型结构 """
class AndGateModel():def __init__(self):""" 初始化权重、偏置 """self.w = np.random.normal(size=2)    # 与门有2个权重self.b = np.random.normal(size=1)    # 1个偏置[0.5]self.lr = 0.1                        # 学习率(超参数)def forward(self, x):"""前向计算x -- [x1, x2]1. y=wx + b2. 激活函数计算"""y = x[0]*self.w[0] + x[1]*self.w[1] + self.b[0]if y >= 0:return 1else:return 0def train(self, X, Y):"""X,Y -- 训练集"""for i in range(1000):   # 迭代j = 0C = 0for xi in X:yi = self.forward(xi)  # 前向计算# 计算误差Ci = np.power((Y[j] - yi), 2) / 2C += Ci# 更新权重跟偏置if Ci > 0:self.w[0] = self.w[0] + self.lr * (Y[j] - yi) * xi[0]self.w[1] = self.w[1] + self.lr * (Y[j] - yi) * xi[1]self.b[0] = self.b[0] + self.lr * (Y[j] - yi)j += 1print("epoch{} 误差:{} 权重:{} 偏置:{}".format(i, C, self.w, self.b))# 什么时候退出?if C <= 0:print("=== 与门的4数据都正确了, 退出迭代")break

训练与门模型并保存参数:

if __name__ == "__main__":# 训练import data_managerX, Y = data_manager.get_xy_data()  # 读取数据集model = AndGateModel()            # 实例化类对象model.train(X, Y)               # 执行训练# 验证训练结果是否正确for xi in X:print("验证  输入:{}   模型的前向计算结果:{}".format(xi, model.forward(xi)))# 保存模型参数np.savez("./params", model.w, model.b)

读取模型参数并预测数据:

import numpy as npif __name__ == "__main__":# 加载参数r = np.load("./params.npz")print("权重", r["arr_0"])print("偏置", r["arr_1"])# 设置参数到网络结构import modeland_model = model.AndGateModel()and_model.w = r["arr_0"]and_model.b = r["arr_1"]# 预测X = [[0,0], [0, 1], [1, 0], [1, 1]]for xi in X:print("预测  输入:{}  结果:{}".format(xi, and_model.forward(xi)))

结果如下:

python .\model.py

python .\predict_demo.py:

 完整代码:https://download.csdn.net/download/qq_21386397/87567242

有帮助,一键三连哦~~~~~~~~~~~~~~~~~~~~~~~~~~~~

相关内容

热门资讯

编程安卓系统和鸿蒙主题,跨平台... 你有没有想过,手机的世界里,除了苹果的iOS和安卓的操作系统,还有个神秘的鸿蒙系统?今天,咱们就来聊...
哪个安卓机系统好用,探索安卓系... 你有没有想过,手机里的安卓系统就像是个大厨,不同的系统就像不同的烹饪手法,有的让你吃得津津有味,有的...
安卓如何控制苹果系统,从安卓到... 你知道吗?在这个科技飞速发展的时代,安卓和苹果两大操作系统之间的较量从未停歇。虽然它们各自有着忠实的...
安卓原生系统文件夹,安卓原生系... 你有没有发现,每次打开安卓手机,里面那些文件夹就像是一个个神秘的宝箱,里面藏着各种各样的宝贝?今天,...
基于安卓系统的游戏开发,从入门... 你有没有想过,为什么安卓手机上的游戏总是那么吸引人?是不是因为它们就像是你身边的好朋友,随时随地都能...
安卓系统怎样装驱动精灵,安卓系... 你那安卓设备是不是突然间有点儿不给力了?别急,今天就来手把手教你如何给安卓系统装上驱动精灵,让你的设...
如何本地安装安卓系统包,详细步... 你有没有想过,把安卓系统装在你的电脑上,是不是就像给电脑穿上了时尚的新衣?想象你可以在电脑上直接玩手...
安卓12卡刷系统教程,体验全新... 你有没有发现,你的安卓手机最近有点儿不给力了?运行速度慢得像蜗牛,是不是也想给它来个“换血大法”,让...
安卓系统无法打开swf文件,安... 最近是不是发现你的安卓手机有点儿不给力?打开SWF文件时,是不是总是出现“无法打开”的尴尬局面?别急...
鸿蒙系统依赖于安卓系统吗,独立... 你有没有想过,我们手机里的那个鸿蒙系统,它是不是真的完全独立于安卓系统呢?这个问题,估计不少手机控都...
适合安卓系统的图片软件,精选图... 手机里堆满了各种美美的照片,是不是觉得找起来有点头疼呢?别急,今天就来给你安利几款超级适合安卓系统的...
阴阳师安卓系统典藏,探寻阴阳师... 亲爱的阴阳师们,你是否在安卓系统上玩得如痴如醉,对那些精美的典藏式神们垂涎欲滴?今天,就让我带你深入...
安卓系统有碎片化缺点,系统优化... 你知道吗?在手机江湖里,安卓系统可是个响当当的大侠。它那开放、自由的个性,让无数手机厂商和开发者都为...
安卓4系统手机微信,功能解析与... 你有没有发现,现在市面上还有很多安卓4系统的手机在使用呢?尤其是那些喜欢微信的朋友们,这款手机简直就...
鸿蒙系统是安卓的盗版,从安卓“... 你知道吗?最近在科技圈里,关于鸿蒙系统的讨论可是热闹非凡呢!有人说是安卓的盗版,有人则认为这是华为的...
安卓系统怎么剪辑音乐,轻松打造... 你是不是也和我一样,手机里存了超多好听的歌,但是有时候想给它们来个变身,变成一段专属的旋律呢?别急,...
怎么把安卓手机系统变为pc系统... 你有没有想过,把你的安卓手机变成一台PC呢?听起来是不是有点酷炫?想象你可以在手机上玩电脑游戏,或者...
手机怎么装安卓11系统,手机安... 你有没有想过,让你的手机也来个“青春焕发”,升级一下系统呢?没错,就是安卓11系统!这个新系统不仅带...
安卓系统如何拼网络,构建高效连... 你有没有想过,你的安卓手机是怎么和网络“谈恋爱”的呢?没错,就是拼网络!今天,就让我带你一探究竟,看...
安卓系统怎么看小说,轻松畅享电... 你有没有发现,手机里装了那么多应用,最离不开的竟然是那个小小的小说阅读器?没错,就是安卓系统上的小说...