多层感知机学习XOR实例

多层感知机学习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例子中的,多层感知机的参数学习过程,下一篇我将详细进行叙述。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA并发编程之锁应用

Java并发包是Java中提供的一个用于支持多线程编程的工具包。Java并发包提供了多种机制来控制线程的执行,保证线程的安全性和可靠性。下面我们将介绍Java并发包的使用方法,并给出示例。 synchronized public class SynchronizedDemo { ​private int v;…

自学网络安全,一般人我劝你还是算了吧

学前感言: 我为什么会这样说,要一般人自学网络安全就算了,因为我不是一般人 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发 .3.有时多 google,baidu,我们往往都…

termux-x11教程

小粉丝已经求稿两个星期了,不写是不行了。 termux-x11 是Termux的一个图形化项目,官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

使用canvas给图片添加水印

上接文章“图片处理” canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候,使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…

HNU-电路与电子学-小班3

第三次讨论 1 、直接用晶体管而不是逻辑门实现异或门,并解释这个电路是如何工作的。 (6个 MOS 管构成) 2 、通信双方约定采用 7 位海明码进行数据传输。请为发送方设计海明码校验位 生成电路,采用功能块和逻辑门为接收方设计海…

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准,规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果,卡传递信息(计算结果、存储的数据)和/或修改其内容&#xff0…

路径规划算法:基于果蝇优化的路径规划算法- 附代码

路径规划算法:基于果蝇优化的路径规划算法- 附代码 文章目录 路径规划算法:基于果蝇优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法果蝇…

2023全国酒店数据

数据内容字段结构 hotel_id int(11) NOT NULL, name varchar(100) DEFAULT NULL, name_en varchar(100) DEFAULT NULL, short_name varchar(100) DEFAULT NULL, province varchar(20) DEFAULT NULL, city_id int(11) DEFAULT NULL, city varchar(20…

Android12之源码手动生成aidl对应java/cpp/ndk/rust服务(一百五十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

博客系统(ssm版本)

在前面的文章中给大家介绍过博客系统的servlet版本,但是servlet的技术非常的老旧,我们在企业中用的都是springboot相关的框架,本章内容就是讲述如何一步一步的利用ssm的技术来实现博客系统。 目录 前期配置 创建数据库 配置文件 公共文件…

【JavaSE】Java基础语法(五):数组详解

文章目录 🍸1.1 数组介绍🍸1.2 数组的动态初始化1.2.1 什么是动态初始化1.2.2 动态初始化格式🍸1.3 数组元素访问1.3.1 什么是索引1.3.2 访问数组元素格式1.3.3 示例代码 🍸1.4 内存分配1.4.1 内存概述1.4.2 java中的内存分配 &am…

【Java-10】深入浅出线程安全、死锁、状态、通讯、线程池

主要内容 线程安全线程死锁线程的状态线程间通讯线程池 1 线程安全 1.1 线程安全产生的原因 多个线程在对共享数据进行读改写的时候,可能导致的数据错乱就是线程的安全问题了 问题出现的原因 : 多个线程在对共享数据进行读改写的时候,可能导致的数据…

第五十天学习记录:C语言进阶:位段

位段 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1、位段的成员可以是int,unsigned int或signed int。 2、位段的成员名后边有一个冒号和一个数字。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>//位段-二进制位 struct A {int …

GoWeb -- gin框架的入门和使用(2)

前言 书接上回&#xff0c;在gin的框架使用中&#xff0c;还有着许多方法以及它们的作用&#xff0c;本篇博客将会接着上次的内容继续记录本人在学习gin框架时的思路和笔记。 如果还没有看过上篇博客的可以点此跳转。 map参数 请求url&#xff1a; http://localhost:8080/us…

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?

在计算机网络中&#xff0c;IPAM&#xff08;IP Address Management&#xff09;是一种用于管理IP地址和DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…

奇偶分频电路

目录 偶数分频 寄存器级联法 计数器法 奇数分频 不满足50%占空比 50%占空比 偶数分频 寄存器级联法 寄存器级联法能实现2^N的偶数分频&#xff0c;具体做法是采用寄存器结构的电路&#xff0c;每当时钟上升沿到来的时候对输出结果进行翻转&#xff0c;以此来实现偶数分…

chatgpt赋能python:Python中日期转换:从字符串到日期对象

Python中日期转换&#xff1a;从字符串到日期对象 作为一个经验丰富的Python工程师&#xff0c;日期转换在我的日常编码工作中经常遇到。Python提供了一些内置函数和模块&#xff0c;可以将字符串转换为日期对象或将日期对象格式化为特定的字符串。本篇文章将带您深入了解Pyth…

【JavaSE】Java基础语法(二十二):包装类

文章目录 1. 基本类型包装类2. Integer类3. 自动拆箱和自动装箱4. int和String类型的相互转换 1. 基本类型包装类 基本类型包装类的作用 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据常用的操作之一&#xff1a;用于基本数据类型与字符串之间的…

黑马Redis视频教程实战篇(三)

目录 一、优惠券秒杀 1.1 全局唯一ID 1.2 Redis实现全局唯一ID 1.3 添加优惠卷 1.4 实现秒杀下单 1.5 库存超卖问题分析 1.6 代码实现乐观锁解决超卖问题 1.7 优惠券秒杀-一人一单 1.8 集群环境下的并发问题 二、分布式锁 2.1 基本原理和实现方式对比 2.2 Redis分布…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套

少儿编程 蓝桥杯青少组计算思维真题及详细解析第6套 1、兰兰有一些数字卡片,从 1 到 100 的数字都有,她拿出几张数字卡片按照一定顺序摆放。想一想,第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案:C 考点分析:主要考查小朋友们的观察能力和数学推理能力,从给定的图…