excel手撕神经网络(只需高中数学基础)

news2024/12/24 21:05:22

神经网络最基础部分是由神经元组成,一个神经元相当于是一个一次函数,y=ax+b
即在已知x,和y情况下,怎么使用神经网络求解a和b

如下是使用excel求解的神经网络,可以方便理解神经网络运行原理
excel玩具神经网络下载地址
百度网盘链接: https://pan.baidu.com/s/15DJ_NQS9W7A5glkVABltJQ?pwd=jwf4 提取码: jwf4

0 excel数据及任务

  • 构造了如下数据,x0,x1,x2和y_true。其中x0,x1,x2对应真实wTrue(w0,w1,w2)如表格所示(表格数据都可以修改,公式已经编辑好),
    即 y=x0 * wt0 + x1 * wt1 + x2 * wt2
  • 任务;需要使用神经网络计算出真实的w

1 神经网络求解步骤:

已知 x 和y

  • 1 随机初始化wi
    初始化w全为0, w00=0,w01=0,w02=0 (为了简化,只考虑w,不考虑b)
  • 2 将x带入 a和b参数函数,得到y的预测值y_pred
    y_pred=x0w00+x1w01+x2*w02
  • 3 将预测y_pred与真实值y进行对比,构建损失函数(刚开始,随机的w误差肯定很大)
    loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2
  • 4 对损失函数求导,使用梯度下降更新参数w.
    导数
    w00导数:dy_dw00: 2*(y_pred-y_true)x0
    w01导数:dy_dw01: 2
    (y_pred-y_true)x1
    w02导数:dy_dw02: 2
    (y_pred-y_true)*x2
    步长:lr=0.001
    新的 w00= w00-lr * dy_dw00
    新的 w01= w01-lr * dy_dw01
    新的 w02= w02-lr * dy_dw01
  • 5 循环上面2~4步,直到收敛

2 反向传播公式推导

上面第3步,损失函数为loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2
其中w00,w01,w02倒数如下。导数公式证明见2.1或者2.2小节,其中用到了 x 2 x^2 x2 的导数为2x, x 2 x^2 x2的倒数证明见第4小节。
在这里插入图片描述

2.1 根据链式法则求导

若链式法则求导无法理解见 2.2节直接求导
loss= ( y _ p r e d − y _ t r u e ) 2 (y\_pred-y\_true)^2 (y_predy_true)2 对w的导数为
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 0 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 0 \frac{\partial(y\_pred-y\_true)^2}{\partial w0}=2(y\_pred-y\_true)*x0 w0(y_predy_true)2=2(y_predy_true)x0
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 1 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 1 \frac{\partial(y\_pred-y\_true)^2}{\partial w1}=2(y\_pred-y\_true)*x1 w1(y_predy_true)2=2(y_predy_true)x1
∂ ( y _ p r e d − y _ t r u e ) 2 ∂ w 2 = 2 ( y _ p r e d − y _ t r u e ) ∗ x 2 \frac{\partial(y\_pred-y\_true)^2}{\partial w2}=2(y\_pred-y\_true)*x2 w2(y_predy_true)2=2(y_predy_true)x2

2.2 直接求导

若不知道x^2的倒数,见第4小节

  • loss展开
    y_pred=x0w00+x1w01+x2*w02
    ( y _ p r e d − y _ t r u e ) 2 = ( x 0 ∗ w 00 + x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2 (y\_pred-y\_true)^2=(x0*w00+x1*w01+x2*w02-y\_true)^2 (y_predy_true)2=(x0w00+x1w01+x2w02y_true)2
  • 如上,如果对w00求导,则其他项可以看成常数
    ( y _ p r e d − y _ t r u e ) 2 = ( x 0 ∗ w 00 ) 2 + 2 ( x 0 ∗ w 00 ) ∗ ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) + ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2 (y\_pred-y\_true)^2=(x0*w00)^2+2(x0*w00)*(x1*w01+x2*w02-y\_true)+(x1*w01+x2*w02-y\_true)^2 (y_predy_true)2=(x0w00)2+2(x0w00)(x1w01+x2w02y_true)+(x1w01+x2w02y_true)2
  • 则对w00的倒数为
    2 ∗ x 0 2 ∗ w 00 + 2 x 0 ∗ ( x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2*x0^2*w00+2x0*(x1*w01+x2*w02-y\_true) 2x02w00+2x0(x1w01+x2w02y_true)
    = 2 ∗ x 0 ∗ ( x 0 ∗ w 00 + x 1 ∗ w 01 + x 2 ∗ w 02 − y _ t r u e ) 2*x0*(x0*w00+x1*w01+x2*w02-y\_true) 2x0(x0w00+x1w01+x2w02y_true)
    = 2 ∗ x 0 ∗ ( y _ p r e d − y _ t r u e ) 2*x0*(y\_pred-y\_true) 2x0(y_predy_true)
  • 同理w01,w02的倒数都可以求出
    分别为
    2 ∗ x 1 ∗ ( y _ p r e d − y _ t r u e ) 2*x1*(y\_pred-y\_true) 2x1(y_predy_true)
    2 ∗ x 2 ∗ ( y _ p r e d − y _ t r u e ) 2*x2*(y\_pred-y\_true) 2x2(y_predy_true)

直接求导与链式求导结果一样

3 结果展示

如下所示,数据在进行了两轮更新(共计20步)后,已从初始值0,0,0逐步收敛到真实值wTrue.
excel下载地址
百度网盘链接: https://pan.baidu.com/s/15DJ_NQS9W7A5glkVABltJQ?pwd=jwf4 提取码: jwf4

在这里插入图片描述

4 x^2导数公式推导

  • x^2倒数证明如下
    在这里插入图片描述

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

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

相关文章

swing快速入门(十五)

注释很详细,直接上代码 上一篇 新增内容 1.文件对话框(保存文件) 2.文件对话框(打开文件) import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class swing_tes…

软实力篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、HR 最喜欢问程序员的 20 个问题二、面试中的礼仪与举止前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、HR 最喜欢…

tomcat启动异常:子容器启动失败(a child container failed during start)

最近在使用eclipse启动Tomcat时,发现一个问题,启动以前的项目突然报子容器启动异常。 异常信息如下: 严重: 子容器启动失败 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法启动组件[org.apache.…

运维对数据库的一些要求(安装,部署,权限,mysqldump,xtrabackup的备份和还原)

目录 一、安装部署二、数据库的权限分配1.密码策略2.MySQL中授权(grant)和撤销授权(revoke) 三、数据库的备份还原1、mysqldump备份数据库2、Percona XtraBackup备份数据库1、Percona XtraBackup的介绍2、Percona XtraBackup安装3、Percona XtraBackup8.0的使用1.全…

低代码是什么?可能取代人工吗?

低代码开发是近年来迅速崛起的软件开发方法,让编写应用程序变得更快、更简单。有人说它是美味的膳食,让开发过程高效而满足,但也有人质疑它是垃圾食品,缺乏定制性与深度。你认为低代码到底是美味的膳食还是垃圾食品呢,…

PyCharm控制台异常堆栈乱码问题解决

目录 1、问题描述2、问题原因3、问题解决 1、问题描述 PyCharm环境都已经配置成了UTF-8编码,控制台打印中文也不会出现乱码,但异常堆栈信息中如果有中文会出现中文乱码: 这种该怎么解决呢? 2、问题原因 未将PyCharm编码环境与项目…

如何使用ycsb工具对mongodb进行性能测试过程

测试环境: linux系统:Centos 7.2 ,版本:Red Hat 4.8.5-44) YCSB简介 ycsb是一款性能测试工具,用Java写的,并且什么都可以压,像是mongodb,redis,mysql,hbase,等…

Leetcode的AC指南 —— 链表:19.删除链表的倒数第N个节点

摘要: Leetcode的AC指南 —— 链表:19.删除链表的倒数第N个节点。题目介绍:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 文章目录 一、题目二、解析1、滑动窗口/快慢指针(傻傻分不清&…

探索灵活性与可维护性的利器:策略(Strategy)模式详解

目录 ​编辑 1. 策略模式概述: 2. 主要角色: 3. 实例场景: 4. 具体实现步骤: 步骤一:定义策略接口 5. 使用策略模式的客户端代码: 总结: 我的其他博客 1. 策略模式概述: 策…

【Jmeter】Jmeter基础6-Jmeter元件介绍之前置处理器

前置处理器主要用于处理请求前的准备工作,如:参数、环境变量的设置等。 2.6.1、JSR223预处理程序 作用:请求前的准备工作。 参数说明: 语言:开发脚本所使用的语言,可通过下拉列表选择。参数:传…

Vue3快速上手笔记

Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…

DC-2靶场

DC-2 下载地址:DC and Five86 Series Challenges - Downloads​编辑https://www.five86.com/downloads.html DC-2环境配置:解压后在vm虚拟机点击左上方文件-->打开-->选择解压后的DC-2。把kali和DC-2的网路适配器都改成NAT模式 flag1 首先进行主…

vue-element-admin如何把mock换成使用真实后台接口

1)修改vue.config.js文件 use strict const path require(path) const defaultSettings require(./src/settings.js)function resolve(dir) {return path.join(__dirname, dir) }const name defaultSettings.title || vue Element Admin // page title// If you…

数据结构面试题和题目解析

以下是一些数据结构的面试题和解析: 1. 什么是链表? 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。链表的主要优点是插入和删除操作比较方便,但访问链表中的元素不如访问数组…

Windows7下双网卡绑定(双网络冗余)

1.首先需要电脑主机里至少有两张网卡。 2.打开计算机管理,点击左侧的设备管理器: 3.点击展开右侧的 网络适配器: 4.如下是我们即将需要进行绑定的两张网卡: 5.右键点击第一张网卡,选择属性: 6.选择 分组 栏…

Angular中使用Intersection Observer API实现无限滚动

背景&#xff1a; 实现原理为 在data下面加一个loading元素 如果此元素进入视窗 则调用api获取新的数据加到原来的数据里面&#xff0c;这时loading就会被新数据顶下去&#xff0c;如此循环。 <div id"dataContainer"></div> <div id"loadingCo…

linux添加环境变量

一、查看当前环境变量 echo $PATH 二、将工作空间添加到环境变量&#xff0c;vim是编辑器&#xff0c;可以换成别的编辑器&#xff0c;vim编辑器的使用法可以百度一下 vim ~/.bashrc编辑器添加&#xff1a; source ~/scan_ws/devel/setup.bash

【Linux】介绍:进程退出、进程等待、进程程序替换

目录 一、进程退出 _exit函数 exit函数 _exit()与exit比较 return退出 二、进程等待 wait方法 waitpid方法 三、进程程序替换 替换函数 函数解释 命名理解 使用举例 一、进程退出 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff09;&#xff1a;1.…

爬虫工作量由小到大的思维转变---<第十一章 Scrapy之sqlalchemy模版和改造(番外)>

前言: 正常的pymysql当然问题不大,但是我个人还是建议:sqlalchemy! 因为他更能让我们把精力放在表单设计上,而不执着于代码本身了. (-----版权所有。未经作者书面同意&#xff0c;不得转载或用于任何商业用途!----) 正文: 先提供一个基础模版: 表图: 创建表的sql: CREA…

【漏洞复现】捷诚管理信息系统 SQL注入漏洞

漏洞描述 捷诚管理信息系统是一款功能全面,可以支持自营、联营到外柜租赁的管理,其自身带工作流管理工具,能够帮助企业有效的开展内部审批工作。 该系统CWSFinanceCommon.asmx接口存在SQL注入漏洞。未经身份认证的攻击者可以通过该漏洞获取数据库敏感信息,深入利用可获取…