多层感知机学习XOR实例

news2024/12/24 21:50:45

多层感知机学习XOR实例

  • 多层感知机介绍
  • 使用多层感知机学习XOR实例
    • 传统统计数学方法(传统机器学习)
    • 使用多层感知机学习XOR
  • 总结

多层感知机介绍

多层感知机(Multilayer Perceptron,MLP),又称为深度前馈网络(Deep Feedforward Network)。多层感知机是用来近似某个函数 f ∗ f^* f。即对于分类器,函数 y = f ∗ ( x ) y=f^*(x) y=f(x),多层感知机定义映射关系为 y = f ( x ; θ ) y=f(x;\theta) y=f(x;θ),并学习参数 θ \theta θ的值。这种网络结构被称为前向是因为信息流过 x x x的函数,流经用于定义 f f f的中间计算过程,最终到达输出 y y y。该模型的输出和模型本身之间是没有反馈连接。当前馈神经网络被扩展包含反馈连接时,它们被称为循环神经网络(RNN)。
多层感知机

前馈神经网络之所以被称为网络,是因为它们通常用许多不同函数复合在一起来表示。该模型与一个有向无环图相关联,而图描述了函数是如何复合在一起的。例如,有三个函数 f ( 1 ) f^{(1)} f(1) f ( 2 ) f^{(2)} f(2) f ( 3 ) f^{(3)} f(3)连接在一个链上以形成
f ( x ) = f ( 3 ) ( f ( 2 ) ( f ( 1 ) ) ) f(x)=f^{(3)}(f^{(2)}(f^{(1)})) f(x)=f(3)(f(2)(f(1)))。在这种情况下, f ( 1 ) f^{(1)} f(1)被称为网络的第一层, f ( 2 ) f^{(2)} f(2)被称为第二层,以此类推,链的全长称为模型的深度。前馈神经网络的最后一层被称为输出层。而学习算法使用的中间层用以更好的拟合函数的层级被称为隐藏层。这里多层感知机引入了隐藏层,因此我们还要在设计网络的时候,考虑选择这些隐藏层的激活函数。

使用多层感知机学习XOR实例

XOR函数即是异或逻辑函数。这是一个关于两个二进制值 x 1 x_1 x1 x 2 x_2 x2的运算。当两个输入值有且只有一个值为1时,函数输出为1,其余结果均为0。
因此,该学习任务就是拟合XOR函数,即是满足函数在点
X = { [ 0 , 0 ] ⊤ , [ 0 , 1 ] ⊤ , [ 1 , 0 ] ⊤ , [ 1 , 1 ] ⊤ } \mathbb{X}=\{[0,0]^\top,[0,1]^\top,[1,0]^\top,[1,1]^\top\} X={[0,0],[0,1],[1,0],[1,1]}上的取值。
我们可以先尝试使用传统的统计数学方法。

传统统计数学方法(传统机器学习)

使用传统统计数学方法,我们将该问题视为函数回归问题。以均方误差MSE作为损失函数,如下:
J ( θ ) = 1 4 ∑ x ∈ X ( f ∗ ( x ) − f ( x ; θ ) ) 2 J(\theta)=\frac{1}{4}\sum_{x\in\mathbb{X}}(f^*(x)-f(x;\theta))^2 J(θ)=41xX(f(x)f(x;θ))2
然后再定义目标函数 f ( x ; θ ) f(x;\theta) f(x;θ) θ \theta θ包含 ω \omega ω b b b,如下:
f ( x ; ω , b ) = x ⊤ ω + b f(x;\omega,b)=x^\top\omega+b f(x;ω,b)=xω+b
再使用统计数学的正规方程关于 ω \omega ω b b b最小化 J ( θ ) J(\theta) J(θ),解得 ω = 0 \omega=0 ω=0 b = 1 2 b=\frac{1}{2} b=21 请添加图片描述

学习得到得到的线性模型是任意点都输出均为1/2。原因是这个非线性的函数均匀分布,使用线性回归就会将函数拟合到中值线上。
显然,这种方案是不符合我们的预期的。XOR函数是非线性的,通过解线性目标函数的正规方程来拟合是不合理的做法,同样,对于二进制输入问题建模使用MSE作为损失函数也是有欠妥当。然而,求解线性问题永远都要比直接求解非线性问题要简单的多。有一种解决该问题的思路是学习一个特征空间,然后在这个空间中,我们可以使用线性的函数进行表示这个非线性的解。这里就是要通过空间的非线性来割裂函数的线性。
这里我们就可以引入多层感知机

使用多层感知机学习XOR

因为XOR是二进制数据输入,且输出状态仅为二进制的两种情况。所以,这里可以采用一个简单的网络结构。
在这里插入图片描述
上图中的网络结构由两个函数连接: h = f ( 1 ) ( x ; W , c ) h=f^{(1)}(x;W,c) h=f(1)(x;W,c) y = f ( 2 ) ( h ; ω , b ) y=f^{(2)}(h;\omega,b) y=f(2)(h;ω,b)。完整的输入到输出就是 y = f ( x ; W , c , ω , b ) = f ( 2 ) ( f ( 1 ) ( x ) ) y=f(x;W,c,\omega,b)=f^{(2)}(f^{(1)}(x)) y=f(x;W,c,ω,b)=f(2)(f(1)(x))
一般地,神经网络通过仿射变换后,使用特定的非线性函数作为激活函数来实现非线性的描述。 因此,这里选用激活函数 g g g后,函数 f ( 1 ) f^{(1)} f(1)为: h = g ( W ⊤ x + c ) h=g(W^\top x+c) h=g(Wx+c),这里W是线性变换的权重矩阵,c为偏置量。而对于激活函数 g g g的选择,这里使用比较普遍的整流线性单元(ReLU)。如下式:
g ( z ) = m a x { 0 , z } g(z) = max \{0,z\} g(z)=max{0,z}
在这里插入图片描述
因此,整个网络的函数式为:

f ( x ; W , c , ω , b ) = ω ⊤ m a x { 0 , W ⊤ + c } + b f(x;W,c,\omega,b)=\omega^\top max\{0 , W^\top+c\}+b f(x;W,c,ω,b)=ωmax{0,W+c}+b
然后,我们就可以通过梯度优化的方法求得XOR问题的解。
W = [ 1 1 1 1 ] W = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} W=[1111]
c = [ 0 − 1 ] c = \begin{bmatrix} 0 \\ -1 \end{bmatrix} c=[01]
ω = [ 1 − 2 ] \omega = \begin{bmatrix} 1 \\ -2 \end{bmatrix} ω=[12]
b = 0 b=0 b=0
然后,我们可以把XOR函数的输入带入进行验证, X = { [ 0 , 0 ] ⊤ , [ 0 , 1 ] ⊤ , [ 1 , 0 ] ⊤ , [ 1 , 1 ] ⊤ } \mathbb{X}=\{[0,0]^\top,[0,1]^\top,[1,0]^\top,[1,1]^\top\} X={[0,0],[0,1],[1,0],[1,1]},写作矩阵:
X = [ 0 0 0 1 1 0 1 1 ] X = \begin{bmatrix} 0&0 \\ 0&1\\ 1&0\\ 1&1 \end{bmatrix} X= 00110101
神经网络第一步将输入矩阵乘以第一层权重矩阵:
X W = [ 0 0 1 1 1 1 2 2 ] XW=\begin{bmatrix} 0&0 \\ 1&1\\ 1&1\\ 2&2 \end{bmatrix} XW= 01120112
加上偏置向量c,得:
[ 0 − 1 1 0 1 0 2 1 ] \begin{bmatrix} 0&-1 \\ 1&0\\ 1&0\\ 2&1 \end{bmatrix} 01121001
再通过整流线性单元变换:
[ 0 0 1 0 1 0 2 1 ] \begin{bmatrix} 0&0 \\ 1&0\\ 1&0\\ 2&1 \end{bmatrix} 01120001
然后,再乘以权重向量 ω \omega ω
ω = [ 1 − 2 ] \omega=\begin{bmatrix} 1\\ -2 \end{bmatrix} ω=[12]
得到输出:
y = [ 0 1 1 0 ] y = \begin{bmatrix} 0 \\ 1\\ 1\\ 0 \end{bmatrix} y= 0110

总结

这里以XOR为例,我们比较两种解决方案,对于非线性的模型处理中,单纯的线性模型的回归是难以应付的,我们通常使用神经网络才能比较好的描述其模型的非线性,而神经网络的非线性就会导致代价函数大多非凸,以至于使得常规的线性回归、线性方程求解或是支持向量机都难以收敛到一个点,并且,理论上凸优化从人一个初始参数出发都最终达成收敛,但是非凸的损失函数的随机梯度下降是不会有这种收敛保证,对于初始的参数值也异常敏感(直接关系到下降的最低点是局部的最低还是全局的最低)。因此我们采用基于梯度的方式进行优化。而对于如何计算神经网络的下降梯度,以及上述的XOR例子中的,多层感知机的参数学习过程,下一篇我将详细进行叙述。

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

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

相关文章

Compose 二三事:绘制原理

setContent做了什么 我们基于一个最简单的例子进行分析 class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text(text "Hello World!")}} }这里setContent做了什么…

【Jmeter入门】使用Jmeter做接口测试

目录 一、Jmeter简介 二、Jmeter相关插件安装: 三、Jmeter运行模式及参数 四、Jmeter函数 五、Jmeter属性与变量 六、Jmeter如何做接口测试 【1】、Jmeter 的使用步骤 【2】、接口请求实例 1. “用户定义的变量” 的应用 3. 建立接口间的关联 4…

Gaussian量子化学计算、LAMMPS分子动力学模拟

Gaussian是做半经验计算和从头计算使用最广泛的量子化学软件,可研究诸如分子轨道,结构优化,过渡态搜索,热力学性质,偶极矩和多极矩,电子密度和电势,极化率和超极化率,红外和拉曼光谱…

超越竞争的获客之道:DTC品牌出海策略全面解析

随着全球数字化的快速发展,DTC品牌正迎来一个全新的时代。然而,随着越来越多的DTC品牌进入国际市场,如何在激烈的竞争中脱颖而出,并获得新客户成为一个关键的挑战。本文Nox聚星将和大家深入探讨DTC品牌在出海时代如何破解获客困局…

外包干了五年,废了...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的测试点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的点工…

10年开发,浅谈eolink 、aifox、apipost 横向对比

功能对比 在实际工作中,eolink 、apifox、apipost 三个工具,我个人都有使用。接下来,我会对三款功能对比,于是我拉了个功能对比的清单。 特别说明:以下的对比,不吹不黑,只列功能,纯客观比对,不带有任何商业带货的意义。 eolink 、aifox、apipost 三款工具有很多功能模块,本次仅…

acwing提高——DFS之连通性问题+搜索顺序

1 连通性问题&#xff08;内部搜索&#xff09; 内部搜索一般不用恢复现场 1.迷宫 题目http://ybt.ssoier.cn:8088/problem_show.php?pid1215 #include<bits/stdc.h> using namespace std; const int N110; bool st[N][N]; char g[N][N]; int n; int sx,sy,ex,ey; …

95后字节八年测开晒出工资单:狠补了这个,真香···

最近一哥们跟我聊天装逼&#xff0c;说他最近从字节跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

2022年深圳杯数学建模B题基于用电可靠性的配电网规划解题全过程文档及程序

2022年深圳杯数学建模 B题 基于用电可靠性的配电网规划 原题再现&#xff1a; 如果一批用户变压器&#xff08;下面简称用户&#xff09;仅由一个电源变电站&#xff08;下面简称电源&#xff09;供电&#xff0c;称为单供。这时配电网由电线和开关联接成以电源为根节点的树状…

k8s使用ECK形式部署elasticsearch+kibana

文章目录 前言一、ECK是什么&#xff1f;二、安装ECK1.crd.yaml2.operator.yaml 三、安装es&#xff0c;elasticsearch-cluster.yaml四、安装kibana总结 前言 在k8s上基于ECK&#xff08;2.4&#xff09;部署elasticsearch&#xff0c;简单记录一下&#xff0c;主要是quicksta…

《程序员面试金典(第6版)》面试题 02.03. 删除中间节点(特殊的删除节点操作)

题目描述 若链表中的某个节点&#xff0c;既不是链表头节点&#xff0c;也不是链表尾节点&#xff0c;则称其为该链表的「中间节点」。 题目传送门&#xff1a;面试题 02.03. 删除中间节点 假定已知链表的某一个中间节点&#xff0c;请实现一种算法&#xff0c;将该节点从链表中…

服务(第二十九篇)zabbix

zabbix 是什么&#xff1f; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbi…

太阳升起和落下(长文警告)

今天分享一个太阳升起落下的动画场景。 有朋友问我为什么只发代码不做说明&#xff0c;今天我们尝试下对代码进行注解说明一下。 首先这个场景大致的可拆分为4个部分&#xff1a;太阳/月亮&#xff0c;右下角的按钮&#xff0c;天上的云和最显眼的建筑。 我们先做一个按钮&am…

stable diffusion AI绘图工具的安装和使用centos7.8系统

stable diffusion 作图工具本地部署 重要【AI作画】stable diffusion webui Linux虚拟机 Centos 详细部署教程 服务器CentOS 7 安装 Stable Diffusion WebUI &#xff0c;并映射到本地浏览器 CentOs7 Stable Diffusion Novel AI实现AI绘画 stable diffusion webui安装部署…

二、数据仓库详细介绍

基础概念 架构与框架&#xff0c;架构是结构&#xff0c;框架是规范 模块与组件&#xff0c;模块是逻辑概念&#xff0c;通过分解使复杂问题简单化&#xff0c;组件是物理概念&#xff0c;将具体的模块落地&#xff0c;且各个组件间保持松散耦合 定义&#xff1a;架构&#x…

分布式全局唯一id实现总结

前言&#xff1a;本文意在对借助db和程序生成分布式id进行一些总结&#xff0c;以及对其特性进行比较分析&#xff1b; 1 实现方式&#xff1a; Db 通过配置步长和初始值的方式&#xff0c;使得每个db库生成id 的不同性&#xff0c;如 3个db 实例情况下&#xff1a;其步长均设…

我3年前写的博客,又被别人抄去发论文了,该论文整个正文部分几乎直接照抄我的博客

我想说每一篇原创博客都是作者的心血&#xff0c;有时候写一篇博客也许会花一天&#xff0c;甚至好几天的时间&#xff0c;尊重原创&#xff0c;营造好的环境&#xff0c;才有可能出现更多优质的博文&#xff0c;而不是到处都是抄来抄去的低质量水文。 前几天接到来自粉丝的私信…

加密解密软件VMProtect教程(八)许可制度之集成到应用程序

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

全网最快PCB打样| 急速小批量打样的秘密在这里

对于广大爱好者以及电子工程师来说&#xff0c;电子行业的快速发展&#xff0c;导致电子产品的多样化和个性化&#xff0c;电路设计的复杂度和难度提高&#xff0c;需要更多的PCB打样来验证和测试&#xff0c;满足细分市场的客户需求。 随着PCB打样厂家的服务优化和价格降低&am…

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务&#xff0c;如果操作系统或者第三方软件没有及时升级打补丁&#xff0c;攻击者就有可能直接通过服务器上运行的服务进行攻击。 服务器需要收集的信息包含三个方面&#xff1a; 操作系统信息等识别waf&#xff08;Web应用程…