4.感知机

news2024/9/19 11:04:36

感知机

​ 给定输入 x x x,权重 w w w,和偏移 b b b,感知机输出:
KaTeX parse error: Unknown column alignment: o at position 16: \begin{array} o̲ =\sigma(<w,x>+…
在这里插入图片描述

或者是二分类:-1或1
Expected node of symbol group type, but got node of type cr

伪代码

在这里插入图片描述

y i y_i yi表示真实类,与预测类相乘小于等于0,则说明不相等,预测错了,则更新模型。

​ 等价于使用批量大小为1的梯度下降

使用的损失函数

l ( y , x , w ) = m a x ( 0 , − y < w , x > ) l(y,x,w)=max(0,-y<w,x>) l(y,x,w)=max(0,y<w,x>)

​ 如果分类正确,则 − y < w , x > -y<w,x> y<w,x>小于0,则损失为0,即if语句不成立。

​ 如果分类错误,则有梯度,需要计算梯度,这里的 w , x w,x w,x是增广过的,含有b,未增广应该为 < w , x > + b <w,x>+b <w,x>+b

在这里插入图片描述

​ 每出现一只狗(红色),则朝下推一些,每出现一只猫(蓝色),则朝上推一些

收敛定理

​ 感知机是一个很简单的

假设

  • 数据在半径 r r r

  • 存在余量 ρ \rho ρ分类两类

    y ( x T w + b ) ≥ ρ y(x^Tw+b)\ge\rho y(xTw+b)ρ

对于 ∣ ∣ w ∣ ∣ 2 + b 2 ≤ 1 , ||w||^2+b^2\le 1, ∣∣w2+b21,感知机保证在 r 2 + 1 ρ 2 \frac{r^2+1}{\rho^2} ρ2r2+1步后收敛

XOR问题

​ 感知机不能拟合XOR函数,它只能产生线性分割面,导致第一次AI寒冬

在这里插入图片描述

多层感知机

XOR问题

在这里插入图片描述

​ 使用两个感知机,做两次,则变为了多层

单隐藏层

在这里插入图片描述

单分类

输入 x ∈ R n x\in \R^n xRn

隐藏层 W 1 ∈ R m × n , b 1 ∈ R m W_1\in \R^{m\times n},b_1\in\R ^m W1Rm×n,b1Rm

输出层 w 2 ∈ R m , b 2 ∈ R w_2\in \R^m,b_2\in \R w2Rm,b2R(单分类,只输出一个)

假设有m个隐藏层,
h = σ ( W 1 x + b 1 ) o = w 2 T h + b 2 h=\sigma(W_1x+b_1)\\ o=w_2^Th+b_2 h=σ(W1x+b1)o=w2Th+b2
σ \sigma σ是按元素的激活函数(非线性的)

如果激活函数是线性的,假设是本身,即 σ ( x ) = x \sigma(x)=x σ(x)=x


h = W 1 x + b 1 o = w 2 T W 1 x + b ′ h=W_1x+b_1\\ o=w_2^TW_1x+b' h=W1x+b1o=w2TW1x+b
输出仍然是一个线性函数,依旧等价于一个单层的感知机

Sigmoid激活函数

将输入投影到(0,1),速率变化比较好,非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(BiasShift,并进一步使得梯度下降的收敛速度变慢.
s i g m o i d ( x ) = 1 1 + e x p ( − x ) sigmoid(x)=\frac{1}{1+exp(-x)} sigmoid(x)=1+exp(x)1

Tanh激活函数

将输入投影到(-1,1),
t a n h ( x ) = e x − e − x e x + e − x = 2 × s i g m o i d ( 2 x ) − 1 tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=2\times sigmoid(2x)-1 tanh(x)=ex+exexex=2×sigmoid(2x)1
在这里插入图片描述

ReLU激活函数

ReLU:rectified linear unit
R e L U ( x ) = m a x ( x , 0 ) ReLU(x)=max(x,0) ReLU(x)=max(x,0)
在这里插入图片描述

多类分类


y 1 , y 2 , ⋯   , y k = s o f t m a x ( o 1 , o 2 , ⋯   , o k ) y_1,y_2,\cdots,y_k=softmax(o_1,o_2,\cdots,o_k) y1,y2,,yk=softmax(o1,o2,,ok)
输入 x ∈ R n x\in \R^n xRn

隐藏层 W 1 ∈ R m × n , b 1 ∈ R m W_1\in \R^{m\times n},b_1\in\R ^m W1Rm×n,b1Rm

输出层 w 2 ∈ R m × k , b 2 ∈ R k w_2\in \R^{m\times k},b_2\in \R^k w2Rm×k,b2Rk(k分类,输出k个)

假设有m个隐藏层,
h = σ ( W 1 x + b 1 ) o = w 2 T h + b 2 y = s o f t m a x ( o ) h=\sigma(W_1x+b_1)\\ o=w_2^Th+b_2\\ y=softmax(o) h=σ(W1x+b1)o=w2Th+b2y=softmax(o)
σ \sigma σ是按元素的激活函数(非线性的)

多隐藏层

h 1 = σ ( W 1 x + b 1 ) h 2 = σ ( W 2 x + b 2 ) h 3 = σ ( W 3 x + b 3 ) o = W 4 h 3 + b 4 h_1=\sigma(W_1x+b_1)\\ h_2=\sigma(W_2x+b_2)\\ h_3=\sigma(W_3x+b_3)\\ o = W_4h_3+b_4 h1=σ(W1x+b1)h2=σ(W2x+b2)h3=σ(W3x+b3)o=W4h3+b4

超参数:

  • 隐藏层数
  • 每层隐藏层的大小

在这里插入图片描述

代码实现

import torch
from torch import nn
from d2l import torch as d2l
import util

d2l.use_svg_display()  # 使用svg来显示图片
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

# 输入的维度,输出的维度,隐藏层的个数在输入和输出的维度之间
num_inputs, num_outputs, num_hiddens = 784, 10, 256

# randn初始为随机的(输入维度,输出维度,需要更新,则需要梯度)
W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad=True))
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))

W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad=True))
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

params = [W1, b1, W2, b2]  # 两层


def relu(X):
    a = torch.zeros_like(X)
    return torch.max(X, a)


def net(X):
    X = X.reshape((-1, num_inputs))
    H = relu(X @ W1 + b1)  # @是矩阵乘法
    return (H @ W2 + b2)


loss = nn.CrossEntropyLoss()

num_epochs, lr = 10, 0.1
updater = torch.optim.SGD(params, lr=lr)
util.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
d2l.plt.show()

'''简洁实现'''
net = nn.Sequential(nn.Flatten(), nn.Linear(num_inputs, 256), nn.ReLU(), nn.Linear(256, num_outputs))


def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)


net.apply(init_weights)

batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=lr)

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
util.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

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

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

相关文章

全网最适合入门的面向对象编程教程:14 类和对象的 Python 实现-类的静态方法和类方法,你分得清吗?

全网最适合入门的面向对象编程教程&#xff1a;14 类和对象的 Python 实现-类的静态方法和类方法&#xff0c;你分得清吗&#xff1f; 摘要&#xff1a; 本文主要介绍了Python中类和对象中的类方法和静态方法&#xff0c;以及类方法和静态方法的定义、特点、应用场景和使用方…

机器学习(五) -- 监督学习(7) --SVM2

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;7&#xff09; --SVM1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被“文…

Spring支持人工智能应用框架-SpringAi

简介 人工智能技术和日益成熟&#xff0c;开发企业级人工智能的应用已成为一个热门的趋势。Spring AI 是一个用于 AI 工程的应用框架&#xff0c;目的是为了简化AI应用的对接、部署、维护和扩展。 SpringAi的灵感来自LangChain和LlamaIndex&#xff0c;但是SpringAi并不是直接…

RK3568平台(显示篇)主屏副屏配置

一.主屏副屏配置 目前在RK3568平台上有两路HDMIOUT输出&#xff0c;分别输出到两个屏幕上&#xff0c;一路配置为主屏&#xff0c;一路配置为副屏。 硬件原理图&#xff1a; &hdmi0_in_vp2 {status "okay"; };&hdmi1_in_vp0 {status "okay"; }…

断电的固态硬盘数据能放多久?

近日收到一个网友的提问&#xff0c;在这里粗浅表达一下见解&#xff1a; “网传固态硬盘断电后数据只能放一年&#xff0c;一年之后就会损坏。但是我有一个固态硬盘已经放了五六年了&#xff08;上次通电还是在2018年左右&#xff0c;我读初中的时候&#xff09;&#xff0c;…

css实现渐进中嵌套渐进的方法

这是我们想要的实现效果&#xff1a; 思路&#xff1a; 1.有一个底色的背景渐变 2.需要几个小的块级元素做绝对定位通过渐变filter模糊来实现 注意&#xff1a;这里的采用的定位方法&#xff0c;所以在内部的元素一律要使用绝对定位&#xff0c;否则会出现层级的问题&…

HCIP.ppp协议(点到点)认证阶段

ppp协议 ppp是点到点的协议 1.兼容性很好 2.可以进行认证和授权 3.可移植性强 三个阶段 1.链路协商阶段 LCP协商------去协商ppp链路会话 2.认证&#xff08;可选&#xff09; 3.NCP协商------网络层协商阶段&#xff08;根据网络层的不同NCP协议就会存在一个对应的NC…

【电子通识】无源元件与有源元件的定义和区别是什么?

当提到构成电路的电子器件时,许多人可能会想到晶体管、电容器、电感器和电阻器等器件。一般情况下,我们使用的电子器件分为两大类,即“有源元件”和“无源元件”。 有源元件是主动影响(如放大、整流、转换等)所供给电能的元件。 无源元件是对所供给的电能执行被动…

代码随想录算法训练营Day62|冗余连接、冗余连接II

冗余连接 108. 冗余连接 (kamacoder.com) 考虑使用并查集&#xff0c;逐次将s、t加入并查集中&#xff0c;当发现并查集中find(u)和find(v)相同时&#xff0c;输出u和v&#xff0c;表示删除的边即可。 #include <iostream> #include <vector> using namespace s…

Android高级——Logger日志系统

Logger日志系统 Logger日志系统是基于内核中的Logger日志驱动程序实现将日志记录保存在内核空间中使用一个环形缓冲区来保存日志&#xff0c;满了之后&#xff0c;新的日志就会覆盖旧的日志 日志类型 main&#xff0c;记录应用程序级别system&#xff0c;记录系统级别radio&…

7月11日学习打卡,数据结构栈

大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不足之…

光伏电站逆变器选型方法

前言&#xff1a;光伏逆变器是光伏发电系统两大主要部件之一&#xff0c;光伏逆变器的核心任务是跟踪光伏阵列的最大输出功率&#xff0c;并将其能量以最小的变换损耗、最佳的电能质量馈入电网。由于逆变器是串联在光伏方阵和电网之间&#xff0c;逆变器的选择将成为光伏电站能…

SAP 物料批量执行MD02代码分享

通常我们在运行MRP的时候要么就是跑MD01整个工厂层级的,要么就是单个物料层级的MRP用MD02去单个物料去执行。 HANA后有了MRPLIVE,可以支持多物料的运行MRP,但是无法控制MRP的运行参数,根据采购类型跑出对应的单据,F跑出的采购申请,E跑出的是计划订单。 需求是要可以批量运…

JavaSE 面向对象程序设计进阶 IO 练习读取多个对象

练习读取多个对象 用序列化流将对象写入文件 import java.io.*; import java.nio.charset.Charset;public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {//序列化多个对象Person p1new Person("多多", 男,20)…

用户对生活的需求,是三翼鸟创新的起点

这两天又长知识了&#xff0c;学到了一个网络新梗&#xff1a;City不City。 它源自于一种新的打卡方式&#xff0c;用于表达对某个城市的态度或感受。比如你跟朋友在城市游荡时&#xff0c;就可以随口问句City不City啊&#xff1f;通常被释义为“洋不洋气”“ 时髦不时髦”。 …

医院同步时钟系统提供可靠的时间支持

在医院这个充满紧张与忙碌的环境中&#xff0c;每一分每一秒都关乎着患者的生命与健康。为了确保医疗服务的高效、精准和安全&#xff0c;医院同步时钟系统应运而生&#xff0c;成为了医院可靠的时间支持。 医院同步时钟系统犹如一座精准的时间堡垒&#xff0c;为医院的各个角落…

阿里云GPU服务器安装ComfyUI

连接到GPU服务器: 使用SSH客户端(如PuTTY或终端)连接到你的服务器。命令通常是: ssh usernameserver_ip安装依赖: 确保Python和Git已安装。在大多数Linux系统上,可以这样安装: sudo apt update sudo apt install python3 python3-pip git克隆ComfyUI仓库: 这步骤会下载ComfyUI的…

elasticSearch快速了解

elasticSearch&#xff1a;经常用于搜索引擎&#xff0c;我们用的百度搜索和github上的搜索都是用的搜索引擎&#xff0c;它是对输入内容进行分析&#xff0c;然后查询&#xff0c;不像数据库模糊搜索的like一样必须含用你输入的全部内容。 elasticSearch优势&#xff1a;支持…

内网安全:域内信息探测

1.域内基本信息收集 2.NET命令详解 3.内网主要使用的域收集方法 4.查找域控制器的方法 5.查询域内用户的基本信息 6.定位域管 7.powershell命令和定位敏感信息 1.域内基本信息收集&#xff1a; 四种情况&#xff1a; 1.本地用户&#xff1a;user 2.本地管理员用户&#x…

智慧营区人员考勤管理系统|DW-S406系统实现无感考勤

智慧营区人员管理系统&#xff08;DW-S406系统&#xff09;通过建设人员基本信息管理功能&#xff0c;实现人力资源可视化、规范化管理&#xff0c;使人力资源管理工作决策的高效化、制度化得到有力保障&#xff0c;真正达到集中管理、集权管理的目标。主要实现营区人员管理、访…