ccc-pytorch-感知机算法(3)

news2024/9/28 9:29:57

文章目录

      • 单一输出感知机
      • 多输出感知机
      • MLP反向传播

单一输出感知机

image-20230225200515392
内容解释:

  • w 00 1 w^1_{00} w001:输入标号1连接标号0(第一层)
  • x 0 0 x_0^0 x00:第0层的标号为0的值
  • O 1 1 O_1^1 O11:第一层的标号为0的输出值
  • t:真实值
  • σ \sigma σ:激活函数

公式推导:
E = 1 2 ( O 0 1 − t )   \begin{aligned} E=\frac{1}{2}(O_0^1-t)^\ \end{aligned} E=21(O01t) 
添加常数便于求导,不影响单调性
∂ E ∂ w j 0 = ( O 0 − t ) ∂ O 0 ∂ w j 0 = ( O 0 − t ) ∂ σ ( x 0 ) ∂ w j 0 = ( O 0 − t ) O 0 ( 1 − O 0 ) ∂ x 0 1 ∂ w j 0 注: [ σ ( x 0 ) = O 0 ] = ( O 0 − t ) O 0 ( 1 − O 0 ) x j 0 \begin{aligned} \frac{\partial E}{\partial w_{j0}} &=(O_0-t)\frac{\partial O_0}{\partial w_{j0}}\\ &=(O_0-t)\frac{\partial \sigma(x_0)}{\partial w_{j0}}\\ &=(O_0-t) O_0(1- O_0)\frac{\partial x_0^1}{\partial w_{j0}} 注:[\sigma(x_0)=O_0]\\ &=(O_0-t) O_0(1- O_0)x_j^0 \end{aligned} wj0E=(O0t)wj0O0=(O0t)wj0σ(x0)=(O0t)O0(1O0)wj0x01注:[σ(x0)=O0]=(O0t)O0(1O0)xj0
简单实践代码:

x = torch.randn(1,10)
w = torch.randn(1,10,requires_grad=True)
o = torch.sigmoid(x@w.t())
loss = F.mse_loss(torch.ones(1,1),o)
loss.shape
loss.backward()
w.grad

image-20230225203507955

多输出感知机

image-20230225204020850
内容解释:
和单层的一摸一样,只是多了几个输出,注意下标即可
公式推导:
E = 1 2 ∑ ( O i k − t k )   \begin{aligned} E=\frac{1}{2}\sum(O_i^k-t_k)^\ \end{aligned} E=21(Oiktk) 
添加常数便于求导,不影响单调性
∂ E ∂ w j k = ( O k − t k ) ∂ O k ∂ w j k 注: [ 下标对上才有值 ] = ( O k − t k ) ∂ σ ( x k ) ∂ w j k = ( O k − t k ) O k ( 1 − O k ) ∂ x k 1 ∂ w j k = ( O k − t k ) O k ( 1 − O k ) x j 1 \begin{aligned} \frac{\partial E}{\partial w_{jk}} &=(O_k-t_k)\frac{\partial O_k}{\partial w_{jk}}注:[下标对上才有值]\\ &=(O_k-t_k)\frac{\partial \sigma(x_k)}{\partial w_{jk}}\\ &=(O_k-t_k) O_k(1- O_k)\frac{\partial x_k^1}{\partial w_{jk}} \\ &=(O_k-t_k) O_k(1- O_k)x_j^1 \end{aligned} wjkE=(Oktk)wjkOk注:[下标对上才有值]=(Oktk)wjkσ(xk)=(Oktk)Ok(1Ok)wjkxk1=(Oktk)Ok(1Ok)xj1
即只需要输出和对应输入即可计算

简单实践代码:

x = torch.randn(1,10)
w = torch.randn(2,10,requires_grad=True)
o = torch.sigmoid(x@w.t())
loss = F.mse_loss(torch.ones(1,2),o)
loss.shape
loss.backward()
w.grad

image-20230225204805104

MLP反向传播

image-20230225205542551
内容解释:
MLP即Multi-Layer Perceptron,多层感知机
公式推导:
∂ E ∂ W i j = ∂ ∂ W i j 1 2 ∑ k ∈ K ( O k − t k ) 2 = ∑ k ∈ K ( O k − t k ) ∂ ∂ W i j O k = ∑ k ∈ K ( O k − t k ) ∂ ∂ W i j σ ( x k ) = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) ∂ x k ∂ w i j = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) ∂ x k ∂ O j ⋅ ∂ O j ∂ w i j = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k ∂ O j ∂ w i j = O j ( 1 − O j ) ∂ x j ∂ W i j ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k = O j ( 1 − O j ) O i ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k 注: [ 层数从左到右为 i , j , k ] \begin{aligned} \frac{\partial E}{\partial W_{ij}} &=\frac{\partial }{\partial W_{ij}}\frac{1}{2}\sum_{k\in K}(O_k-t_k)^2\\ &=\sum_{k\in K}(O_k-t_k)\frac{\partial }{\partial W_{ij}}O_k\\ &=\sum_{k\in K}(O_k-t_k)\frac{\partial }{\partial W_{ij}}\sigma(x_k)\\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)\frac{\partial x_k}{\partial w_{ij}} \\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)\frac{\partial x_k}{\partial O_j}\cdot\frac{\partial O_j}{\partial w_{ij}}\\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\frac{\partial O_j}{\partial w_{ij}}\\ &=O_j(1-O_j)\frac{\partial x_j}{\partial W_{ij}}\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\\ &=O_j(1-O_j)O_i\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\\ &注:[层数从左到右为 i ,j,k] \end{aligned} WijE=Wij21kK(Oktk)2=kK(Oktk)WijOk=kK(Oktk)Wijσ(xk)=kK(Oktk)Ok(1Ok)wijxk=kK(Oktk)Ok(1Ok)OjxkwijOj=kK(Oktk)Ok(1Ok)WjkwijOj=Oj(1Oj)WijxjkK(Oktk)Ok(1Ok)Wjk=Oj(1Oj)OikK(Oktk)Ok(1Ok)Wjk注:[层数从左到右为ijk]
如果将仅与第k层相关的信息作为一个函数可以写作:
∂ E ∂ W i j = O i O j ( 1 − O j ) ∑ k ∈ K δ k W j k \begin{aligned} \frac{\partial E}{\partial W_{ij}}=O_iO_j(1-O_j)\sum_{k\in K}\delta _kW_{jk} \end{aligned} WijE=OiOj(1Oj)kKδkWjk

所以一个前面层的值依赖后面层的信息,需要倒着计算才行哦

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

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

相关文章

【Linux】孤儿进程 | 环境变量 | 命令行参数 | 进程优先级

文章目录1. 孤儿进程2. 环境变量1. PATH环境变量证明ls是系统指令修改自己写的可执行程序对应路径2. env——查看系统环境变量3. 获取环境变量envpenvirongetenv 函数获取 (主流)4. 总结3 . 命令行参数理解命令行参数4. 进程优先级优先级与权限的区分为什么会有优先级&#xff…

Android 动态切换应用图标方案

经常听到大家讨论类似的需求,怀疑大厂是不是用了此方案,据我个人了解,多数头部 app 其实都是发版来更新节假日的 icon。当然本方案也是一种可选的方案,以前我也调研过,存在问题和作者所述差不多,此外原文链…

使用Pyparsing为嵌入式开发定义自己的脚本语言

Python在嵌入式开发中也很流行生成实用脚本。Pyparsing还允许你轻松地定义在Python上下文中运行的定制脚本语言。Python实现的系统旨在能够独立执行用户传递的一系列命令。你希望系统以脚本的形式接收命令。用户应该能够定义条件。这种对通信中逻辑元素的最初简单的声音要求&am…

【Hello Linux】初识操作系统

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下操作系统的概念 操作系统 操作系统是什么? 操作系统是管理软硬件资源的软件 为什么要设计操作系统 为什么要设…

认识html

1.html的特点先看一段简单的html代码<html><head></head><body>hello world</body> </html>如果将这段带有这段代码的.html文件拉进浏览器中,就会出现一个页面,内容就是hello world,如下图:由上面的代码,我们可以了解到一些html代码的特点…

Java - 数据结构,队列

一、什么是队列 普通队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(FirstIn First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列&#xf…

【华为OD机试模拟题】用 C++ 实现 - 对称美学(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明对称美学题目输入输出示例一输入输出说明示例二输入输出说明备注Code使用说明 参加华为od机试,一定要注意不要完全背诵代码࿰

五、DeepWalk、Node2Vec论文精读与代码实战【CS224W】(Datawhale组队学习)

开源内容&#xff1a;https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频&#xff1a;https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页&#xff1a;https://web.stanford.edu/class/cs224w 文章目录D…

拿下域控后,我还是对大佬的操作念念不忘

历来攻防演练中&#xff0c;我都笃信一个道理——吃饱了才有力气干活。所以&#xff0c;在清晨的客户现场&#xff0c;当看到大佬满意地吃完了我带来的煎饺&#xff0c;我知道这一战&#xff0c;我们作为攻击队&#xff0c;基本已经拿下了。 虽然说的每一句话都带着一股醋味儿…

Android 高工分享一波性能优化的总结~

随着 Android 开发越来越规范&#xff0c;国内工程师的素质&#xff0c;以及用户对产品的要求也越来越高。这也间接导致我们对研发项目的质量要求到了近乎苛刻的地步&#xff0c;**内存优化、UI 卡顿优化、App 崩溃监控等性能调优也逐渐成了人手必备的技能。**工作之余&#xf…

Boost资料整理备忘

Boost资料整理备忘 网络资源 书籍: The Boost C Libraries官方文档 Boost Library Documentation random boost.randomBoost随机库的简单使用&#xff1a;Boost.Random(STL通用)tutorialstd::random boost::asio Boost.Asio 网络编程 - 基本原理Boost.Asio DocBoost定时器 网…

理光M2701复印机载体初始化方法

理光M2701基本参数&#xff1a; 产品类型&#xff1a;数码复合机 颜色类型&#xff1a;黑白 复印速度&#xff1a;单面&#xff1a;27cpm 双面&#xff1a;16cpm 涵盖功能&#xff1a;复印、打印、扫描 网络功能&#xff1a;支持无线、有线网络打印 接口类型&#xff1a;USB2.0…

如何建立项目标准化评价体系?【锦狸】

PMO团队面临着管理多个项目&#xff0c;甚至是多个项目集&#xff0c;多个产品集的问题&#xff0c;那么如何对项目们进行标准化评价体系的建设&#xff0c;就是PMO需要首先思考的问题。 首先我们要关注项目的背景&#xff0c;了解了项目背景之后&#xff0c;我们才可以明确项…

CPython解释器性能分析与优化

原文来自微信公众号“编程语言Lab”&#xff1a;CPython 解释器性能分析与优化 搜索关注 “编程语言Lab”公众号&#xff08;HW-PLLab&#xff09;获取更多技术内容&#xff01; 欢迎加入 编程语言社区 SIG-元编程 参与交流讨论&#xff08;加入方式&#xff1a;添加文末小助手…

【Linux】使用U盘自动化安装Linux(VMware虚拟机)

文章目录前言一、准备二、新建虚拟机2.1 创建虚拟机2.2 新增硬盘2.3 系统启动项三、加电运行四、EFI方式五、总结前言 一、准备 基于之前的基础【Linux】Kickstart 配置U盘自动化安装Linux系统&#xff0c;现在我们可以在虚拟机中尝试自动化安装Linux系统。 二、新建虚拟机 …

POI导入导出、EasyExcel批量导入和分页导出

文件导入导出POI、EasyExcel POI&#xff1a;消耗内存非常大&#xff0c;在线上发生过堆内存溢出OOM&#xff1b;在导出大数据量的记录的时候也会造成堆溢出甚至宕机&#xff0c;如果导入导出数据量小的话还是考虑的&#xff0c;下面简单介绍POI怎么使用 POI导入 首先拿到文…

Java:如何选择一个Java API框架

Java编程语言是一种高级的、面向对象的语言&#xff0c;它使开发人员能够创建健壮的、可重用的代码。Java以其可移植性和平台独立性而闻名&#xff0c;这意味着Java代码可以在任何支持Java运行时环境(JRE)的系统上运行。Java和Node js一样&#xff0c;是一种功能强大的通用编程…

机试指南

文章目录零、绪论和IDE安装int取值范围常犯的编程小错误一、枚举和模拟 (暴力求解)(一) 枚举1.Reverse函数 求 反序数2.程序出错的原因1.编译错误 (compile)&#xff1a;基本语法错误2.链接错误 (link)&#xff1a;函数名写错了3.运行错误 (run)&#xff1a;结果与预期不符&…

前后端分离开发Springboot+VUE学习笔记

学习内容来源&#xff1a;传送门 目录前后端分离实现技术创建vue项目在idea中打开新建页面创建SpringBoot应用创建实体对象与数据库表元素绑定创建实体类接口前端调用数据跨域传输在springboot中解决总结前后端分离 前后端分离就是将一个应用的前端和后端代码分开写&#xff0…

前端:分享JS中7个高频的工具函数

目录 ◆1、将数字转换为货币 ◆2、将 HTML 字符串转换为 DOM 对象 ◆3、防抖 ◆4、日期验证 ◆5、将 FormData&#xff08;表单数据&#xff09;转换为 JSON ◆6、衡量一个函数的性能 ◆7、从数组中删除重复项 JavaScript 实用函数是有用的、可重复使用的片段&#xff0…