【初学人工智能原理】【1】一元一次函数:感知器如何描述直觉

news2024/11/25 16:26:49

前言

本文教程均来自b站【小白也能听懂的人工智能原理】,感兴趣的可自行到b站观看。

本文【原文】章节来自课程的对白,由于缺少图片可能无法理解,故放到了最后,建议直接看代码(代码放到了前面)。

代码实现

dataset.py内容如下

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts)
	xs = np.sort(xs)
	ys = [1.2*x+np.random.rand()/10 for x in xs]
	return xs,ys


Rosenblatt感知器代码如下

import utils.dataset as dataset
from matplotlib import pyplot as plt

## Create a dataset
n=100
xs,ys=dataset.get_beans(n)
plt.title('Size-Toxicity Function',fontsize=12)
plt.xlabel('Bean Size',fontsize=12)
plt.ylabel('Toxicity')
plt.scatter(xs,ys)


## Roseblatt
w=0.5
alpha=0.05
for _ in range(100):
    for i in range(n):
        x=xs[i]
        y=ys[i]
        y_pre=w*x
        e=y-y_pre
        w=w+alpha*e*xs

## Visualization
y_pre=w*xs
plt.scatter(xs,ys)
plt.plot(xs,y_pre,'r')
plt.show()

实验结果

在这里插入图片描述

原文

有人说我们是上帝的作品,也有人说我们自己就是上帝,但我认为把人作为中心讨论却大可不必,因为地球上有那么多的生物,智能又何必是人,不如让我们看看那些更加原始和简单的生物遇到的问题和它们具有的智能。

在很深很深很深的海底住着一个简简单单的生物小蓝,他的世界很简单,去寻找周围能够吃到了一种叫做豆豆的植物,并靠此生存。但是这些豆豆在漫长的演化历史中,通过和小蓝的反复博弈,为了保护自己逐渐进化出了毒性,毒性的强弱和豆豆的大小有关系,而小蓝也进化出了一个能够检测豆豆大小的器官,那么问题来了,小蓝如何根据豆豆的大小判断它到底有多毒呢?​

没错,它还缺一个思考的器官,也就是我们常说的脑子,但我们又如何去描述思考或者说认知?**认知以前当然就是一无所知,这种情况下认知事物唯一的方法就是依靠直觉。那我们又该如何去描述直觉呢?很明显是函数。**为什么是函数?仔细想想,我们本来一直就在用函数认识这个世界,在物理中一个质量为m的物体,在不同的受力f下产生加速度a,这是一个以f为自变量,m为产生a为因变量的函数。在经济学中我们把消费投资、政府购买和进出口作为自变量,也可以形成一个关于GDP的函数。

实际上除了这些严格的领域,在很多不那么严格的事情上,如果你愿意,其实也可以用函数去描述认知,比如气温对人心情的影响可能是这样的一个函数,一只小狗的眼睛大小和它可爱程度的关系,可能是这样的一个函数,而后者这种不严格人类更加擅长的问题,也就是我们人工智能要解决的问题,找到一个恰当的函数去描述它。

如此这般把智能体对世界认知的过程看作是在脑中不断形成各种函数,似乎也就好有道理,既然是直觉,那么就不需要太多的理由,豆豆的毒性和它的大小有关系,所以这里的直觉自然是一个一元一次函数,豆豆的大小x是自变量,毒性y是因变量,而w是一个确定的参数。就是我们常说的直线的斜率,一个简单的一元一次函数就可以描述一个直觉,建立一种思考的模型。当我们去类比生物神经元的时候,你就会发现用一个一元一次函数去描述认知,可不是乱用的,完全是有备而来。

这实际上就是早在1943年由神经学家McCulloch和数学家Pitts在他们合作的论文中提出了一种神经元模型,McCulloch-Pitts模型。这个模型是对生物神经元一种相当简化的模仿,通过树突进入神经元,再通过轴突输出结果,它们分别对应着函数中的自变量和因变量输出,一般来说有很多个输入端,如果只有一个输入,也就是一元函数。如果是两个,那就是二元函数,比如豆豆的毒性不仅和它的大小有关,也和颜色有关,三个输入就是三元函数等等。而至于参数w它实际上起着控制输出上输入信号的作用,换句话说控制着不同输入对输出的影响,我们也称之为权值。因为我们在判断一个东西的时候,不同因素对结果的重要性都不太一样,也正因为如此,我们会发现McCulloch-Pitts选择用一次函数,而不是其他函数来模仿神经元是一件很自然的事情,树突输入x被权值参数w扩大或缩小,然后轴突输出简单且有效。

当然完整的 McCulloch-Pitts 模型中还有一个偏置项b而在一次函数后还会加上一个激活函数用来激活行进元的输出,我们会在后面讨论这些东西,简单起见暂且不表,还是回到这个树突,只有一个输入端的神经元上面来,为了理解方便,我们用简化的图形来表示,那么小蓝靠这个神经元可以存活下去吗?看得出来随着w取不同的值,这个值距函数往往会产生很多的错误,当然也不排除小蓝的直觉很准,就像这样,那么我们现在面临的问题就是这个一元一次直线函数中的参数w设置为多少,小蓝才能很好的进行预测。

也就是说如何从偏离现实的直觉过渡到符合现实的认知,比如小蓝,大脑中神经元的权重值w一开始是0.1,看见一个大小为0.59的豆豆,经过神经元的计算认为毒性是0.059,于是一口吃进去。糟糕,其实它的毒性是0.68,具有极高的毒性,很明显小蓝现在的神经元很草率,作为早已具有智能的人类,我们知道把w调大一点再大一点这样就好了。但是机器又怎么知道呢

最开始McCulloch-Pitts模型中的权重值确实需要手工调整,并没有自动的学习方法,这未免有点太不智能了,于是在1958年一名叫做Rosenblatt​的心理学家在麦卡罗和皮斯模型上指出了,Rosenblatt​感知器模型,他让神经元有了自己调整参数的能力。​

Rosenblatt感知器是第一个从算法上完整描述的神经元,在此之后受到他的启发,工程界、物理学界、数学界就开始纷纷投入神经网络的研究,人工智能也开始了蓬勃的发展。我们来看一下Rosenblatt感知器是怎么做到让神经元能够改的。当然本着“如无必要,勿增新知”的理念,我们还是考虑只有一个输入的情况,其实很简单也很直观,输入通过McCulloch-Pitts神经元模型之后输出一个结果,用标准答案减去这个结果,这意味着预测和标准之间的误差,然后自然是根据这个误差去调整参数。

比如我们让w直接加上这个误差,再让结果作为新的w。看这样就做到了,预测过小的时候误差为正数,w加上误差之后向大调整,下次预测的时候结果就提升了,反过来当预测过大误差是负数的时候,w向小调整。

这就是罗森布拉特感知器的学习过程,通过误差修正参数。当然在Rosenblatt感知器模型中误差还有乘以输入x,这是为何呢?我们知道豆豆的大小只能是一个正值,小于0的豆豆,可谓让人匪夷所思,但是以后我们一定会遇到输入值是负数的情况,当输入数据是负数的时候,你会发现事情正好相反,预测过大的时候需要增加w而不是减少,而预测过小的时候需要减小w而不是增加。​​

所以我们让输入x乘以误差,事情就被巧妙的解决了:当x为正数的时候预测过大,误差为负数乘以x之后还是负数,w减小;预测过小,误差为正数乘以x之后还是正数,w增大;而当x为负数的时候,预测过大误差为负数乘以x之后变成正数,w增大,预测过小误差为正数乘以x之后变为负数,w减小。

当然误差除了乘以输入x之外,Rosenblatt感知器模型还让误差乘以了一个系数alpha,比如0.05,这意味着我们每次修正的时候幅度都降低了20倍,这个alpha也就是所谓的学习率,这又是为何呢根据奥卡姆的剃刀原理,我们不妨先拿掉这个学习率参数,看看会怎么样?

这时候参数调整的过程是这样子,不对劲,我们让阿尔法等于0.5,是这样的。还是不对劲,我们这样阿尔法等于0.1,是这样的。唉我们好像发现问题了,事实上阿尔法等于0.0935。好像卡bug了,当我们继续把阿尔法向小调整,我们终于发现参数调整的过程震荡越来越小。没错,让误差乘以学习率是为了防止调整幅度过大,错过最佳点,就好像一个人如果他每走一步得出固定的一米,而他一开始在距离远点0.5米的位置,那么不论他怎样都到达不了原点,当然学习率也不是越小越好,太小的学习率会让这个调整的过程磨磨唧唧让人心酸了。

这就是Rosenblatt感知器的全部工作原理了。

当然机器学习的本质是数学,一切设计必须有数学的支撑,比如这里通过误差修正参数,误差还乘以了输入和学习率,这个看起来就很玄乎的公式,虽然直观上很符合我们的感受,但是又能保证客观上通过这种方式就一定能够调整出一个合适的参数,而不是越来越远离正确值,也就是说如何从数学上证明这个模型中的w调整方法最后就一地收敛了。Rosenblatt感知器之所以拥有如此重要的历史地位,就像我们说的那样,他第一次完整的从算法上描述了一个神经元,这种描述当然也包括数学证明,但这个感知器收敛定理的证明过程有点冗长且繁琐,我们就不逐个解释了,有兴趣的同学可以自行推导,当然证明的事情只是一颗定心丸而已,让我们相信他在数学上是合理的,如果同学们去证明有困难,也不会影响后续内容的理解。

你只要相信这个感知器模型在数据上确实可以被证明w一定会收敛于某个值。在现代机器学习神经网络应用中,古老的Rosenblatt感知器的学习方法已经很少采用。接下来我们将看到一种目前比较常用的学习方式梯度下降和反向传播。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业管理中,如何组建数据团队

数字化已经成为了当前时代的标志,也变为人们对未来社会发展的共识,一时间数字化相关技术、理念、应用都开始向各行各业普及。此时人工智能、云计算、大数据、互联网、物联网等的发展也越来越快,给人们的生活和企业的经营管理模式带来了深刻改…

设计模式 -- 原型模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

【问题解决】RabbitMQ启动出现epmd error for host xx.xx: nxdomain (non-existing domain)

问题描述 【k8s】或【普通容器】或【Linux】部署的RabbitMQ启动时出现了 epmd error for host xx.xx: nxdomain (non-existing domain) 错误,MQ无法启动成功。 其中 xx.xx 为无法解析的域名。 RabbitMQ官方还提到报错 Error during startup: {error,no_epmd_port}…

回归区间预测 | Matlab基于分位数随机森林算法(QRF)的回归预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 Matlab基于分位数随机森林算法(QRF)的回归预测,matlab代码。 基于分位数随机森林算法(QRF)回归预测,matiab代码,单变量输入模型。 评价指标包括:R2、MAE、MSE、RMSE和区间覆盖率和区间平均宽度百分比等,代码质…

【软件测试】自动化测试日志问题该怎么解决?测试老鸟总结方案...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

Leetcode力扣秋招刷题路-0801

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中,我们可以交换 nums1[i] 和 nums2[i]的元素。 例如,如果 …

为什么越来越多的人开始学习大数据了?

现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python大数据开发相关人才也备受青睐! 大数据从业领域很宽广,不管是科技领域还是食品产业,零售业等都…

大数据行业就业前景怎么样呢

就目前的前景来看,大数据的发展的确的非常不错的~ 既然回答大数据的问题,那就让我们到用数据的方式来回答一下。大数据需求越来越多,只有技术在手不愁找不到工作。 先来看几个招聘网站的报告数据:Boss直聘发布的,今年…

Zynq-7000、FMQL45T900的GPIO控制(七)---linux驱动层配置GPIO中断输入

本文使用的驱动代码 (1条消息) FMQL45T900linux驱动外部中断输入ZYNQ-7000linux驱动外部中断输入资源-CSDN文库 在Zynq-7000、FMQL45T900驱动层也时常会用到对GPIO的控制,这里就针对实际使用的情况进行说明,首先根据之前的帖子确实使用GPIO编号 这里采…

从不均匀性角度浅析AB实验 | 京东云技术团队

作者:京东零售 路卫强 本篇的目的是从三个不均匀性的角度,对AB实验进行一个认知的普及,最终着重讲述AB实验的一个普遍的问题,即实验准确度问题。 一、AB实验场景 在首页中,我们是用红色基调还是绿色基调,是采用门店小列表外商品…

C++ 探索程序 详细解读程序在运行过程中都发生了什么

目录 头文件-源代码 头文件重复包含 问题 解决方案 程序生成过程 预处理Preprocessi 编译Compilation 汇编Assembly 链接Linking 编译期-运行期 编译期确定 运行期确定 编译期错误 运行期错误 类和对象 宏 宏的其他用法 头文件-源代码 头文件(.h&am…

Baklib分享:关于FAQ页面的一些制作技巧

FAQ页面(Frequently Asked Questions)是企业网站中常见的一种页面,主要用于解答客户常见的问题。一个优秀的FAQ页面不仅能够提高客户的满意度,还能够减轻客服部门的工作量。下面将介绍一些制作FAQ页面的技巧,并推荐使用…

Mysql使用函数后不走索引怎么优化?

网上很多人说mysql一旦使用函数就不走函数,但是事实真的是如此吗?我先说明,并不是如此的,本篇文章会通过DAYOFWEEK()和substr()两个函数作为条件查询,看看究竟是否会走索引(其他函数同理)&#…

15.基于主从博弈的智能小区代理商定价策略及电动汽车充电管理

说明书 MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台&#…

【ChatGPT】如何修复access denied you do not have access to chat.openai.com

文章目录 一、前言二、是什么导致 ChatGPT 访问被拒绝错误?三、如何修复 OpenAI 上的访问被拒绝?3.1 清除 Cookies 和缓存3.2 检查账户登录凭证3.3 允许请求的权限3.4 从其他浏览器登录OpenAI3.5 联系 OpenAI 客户支持 四、ChatGPT 支持的国家和地区 一、…

delphi使用Edge Browser浏览器组件

RAD Studio 10.4在VCL Web浏览器上具有一项新功能。它是Edge Browser,它具有新功能,并且比以前的Web浏览器更具兼容性。 这是在C Builder和Delphi中使用Edge浏览器的快速帮助。 在Windows上安装“ Edge ”版本从RAD Studio的GetIt菜单下载“ Edge SDK…

JMeter的使用(二)

九、直连数据库 通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。 获取某条学院的名字,放在百度搜索: JMeter 不具备直连数据库功能,必须整合第三方(jar包)实现配置数据库的连接通过JDBC Re…

token 登录流程

客户端用账号密码请求登录服务端收到请求,验证账号密码验证成功后,服务端签发token,发送给客户端客户端收到token,保存下来客户端每次向服务器发送请求资源,都携带token服务器验证token验证成功,返回资源

LINUX文件管理与编辑命令2

文章目录 一、LINUX文件管理与编辑命令总结 一、LINUX文件管理与编辑命令 Linux wc命令:统计字节数、字数、行数 Linux echo命令:输出字符串或提取Shell变量的值 Linux chmod命令:权限管理 Linux chown命令:修改文件或目录的所有者或所属组 Linux whereis命令:查找文件 Linux …

揭秘长尾关键词的力量:如何在搜索引擎上挤掉竞争对手?

现在,你已经掌握了SEO 的流程,知晓了网站优化的各种方法,也清楚了站外优化的技巧,但问题又来了:你知道优化网站,竞争对手也知道;你懂得站外优化,竞争对手也懂。在这种情况下&#xf…