自动求导实现与可视化

前言

micrograd为一个自动梯度引擎,其实现了反向传播算法,用于学习理解深度学习中的自动求导原理。自动求导无论再传统的机器学习中还是深度学习或是目前非常热门的大语言模型GPT中其都是非常重要基础部分。

反向传播算法可以高效计算出神经网络中损失函数关于训练权重的梯度,使得可通过快速迭代调整权重已得到损失函数最小值,从而求得最佳权重;反向传播为各类深度学习神经网络框架的数学基础无论是PyTorch还是Tensorflow等其都是必不可少的。

micrograd的核心实现在于engine.py中,Value类定义了反向传播自动求导的具体实现,由于此框架是学习用的,只实现了标量的运算并没有涉及到矩阵运算;

原理

如有函数: y = x * w + b

前向传播:通过带入数据求出y,在将所计算的值带入损失函数求得误差值。
X为数据,w为权重,b为偏置(学习率)
平均损失函数为:loss = (y_t-y) **2
通过前向传播计算完后得到了:预测值y,损失值:loss

反向传播

在正向传播遍历计算图求出每个节点的值后通过反向遍历整个图,计算出每个节点的偏导,其原理为微积分链式法则,只需要一个前向传播、一个反向传播就可以求得所有参数的导数,所以性能很高。
根据前向传播所得到的损失值loss,计算得出loss关于模型参数w、b的梯度,然后调整模型参数w、b。
参数调整为:参数减去(梯度*学习率)
需关注重点为参数的梯度如何取得,这就是偏导数、链式法则的应用。

zero_grad(w,b)
loss.backward()
step(w,brate)

反复迭代,再误差达到指定精度或epochs时停止;

具体实现

def __init__(self, data, _children=(), _op=''):self.data = dataself.grad = 0# internal variables used for autograd graph constructionself._backward = lambda: Noneself._prev = set(_children)self._op = _op # the op that produced this node, for graphviz / debugging / etc

Value初始化中最重要两个参数,data保存元素原始数据,grad保存当前元素梯度。
_backward() 方法保存反向传播的方法,用于计算反向传播得到梯度
_prev保存当前节点前置节点。通过遍历获取_prev节点,可得到完整的运算链路。

def __add__(self, other):other = other if isinstance(other, Value) else Value(other)#加法运算out = Value(self.data + other.data, (self, other), '+')#加法方向传播实现def _backward():self.grad += out.gradother.grad += out.gradout._backward = _backwardreturn out

在加法中元素其梯度为其结果的梯度。
某个元素可能涉及到多个运算链路,所以其梯度为不同链路所确定的梯度之和。所以此处为 += out.grad。

def __mul__(self, other):other = other if isinstance(other, Value) else Value(other)out = Value(self.data * other.data, (self, other), '*')def _backward():self.grad += other.data * out.gradother.grad += self.data * out.gradout._backward = _backwardreturn out
def __pow__(self, other):assert isinstance(other, (int, float)), "only supporting int/float powers for now"out = Value(self.data**other, (self,), f'**{other}')def _backward():self.grad += (other * self.data**(other-1)) * out.gradout._backward = _backwardreturn out
def backward(self):# topological order all of the children in the graphtopo = []visited = set()def build_topo(v):if v not in visited:visited.add(v)for child in v._prev:build_topo(child)topo.append(v)build_topo(self)# go one variable at a time and apply the chain rule to get its gradientself.grad = 1for v in reversed(topo):v._backward()     

乘法与次方实现也分别使用了链式法则与f’(x)=nx^{n-1}导数公式。
乘数的梯度为:被乘数乘以结果的梯度
被乘数的梯度为:乘数乘以结果的梯度

验证

a = Value(2,'a')
b = Value(3,'b')
c = a * b**2
#c =a  + b
c.backward()
draw_dot(c)∂c/∂a=9
∂c/∂b=12

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot多租户博客网站的设计-计算机毕业设计源码80600

摘 要 博客网站是当今网络的热点,博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。本文课题研究的“多租户博客网站”,网…

微服务之网关

1、什么是微服务网关? 微服务网关是一种用于管理和调度微服务的工具或服务,它在微服务架构中扮演着关键角色。以下是关于微服务网关的清晰概述: 概念定义: 微服务网关是微服务架构中的前端门户,它提供了一个统一的入…

【Git】Git 的基本操作 -- 详解

一、创建 Git 本地仓库 要提前说的是,仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制,就必须先创建一个仓库出来。 创建⼀个 Git 本地仓库对应的命令为 git init ,注意命令要在文件目录下执行,例如:…

【前端项目笔记】1 登录与登出功能实现

项目笔记 ☆☆代表面试常见题 前后端分离:后端负责写接口,前端负责调接口。 登录/退出功能 登录业务流程 登录页面:用户名密码 调用后台接口进行验证 通过验证,根据后台响应状态跳到项目主页 登录业务相关技术点&#xff1…

专业学习|博弈论-课程沿革

学习来源:北京大学刘霖《博弈论》MOOC公开课 备注:仅做学习分享,请勿转载,转载必究! (一)博弈论的预备知识 基本的微积分的知识和概率论的知识。简单的说会求导数,会求简单的积分&am…

AI大模型的战场:通用与垂直的较量

AI大模型的战场:通用与垂直的较量 引言:AI界的“通才”与“专家” 在AI的大千世界里,有这样两类模型:一类是像瑞士军刀一样多功能的通用大模型,另一类则是像手术刀一样精准的垂直大模型。它们在AI战场上展开了一场激…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好,已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题: 解决: sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目:直接给他注释掉就行了。

使引用作为函数参数将变量i和j的值互换

C之所以增加引用机制,主要是把它作为函数参数,以扩充函数传递数据的功能。 解题思路: 传递变量的地址。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)得到实参变…

WWDC24 快速回顾

今天凌晨,苹果公司在2024年全球开发者大会(WWDC24)上,发布了一系列的系统更新。然而,对于期待苹果带来突破性创新的消费者来说,今年的大会似乎并没有达到预期的震撼效果。 下面让我看看,苹果都带…

STM32定时器输出pwm的几种模式

目录 定时器 输出脉冲模式: PWM模式(PWM Mode) 输出比较模式(Output Compare Mode) 总结 占空比: 输出比较模式与占空比 PWM模式与占空比 输出比较模式与PWM模式的结合 输出比较模式实例&#xf…

汇凯金业:上海黄金交易所简介

上海黄金交易所(SGE)是中国唯一合法进行黄金交易的国家级市场,遵循公开、公平、公正和诚实信用的原则,在中国人民银行的领导下,于2002年10月30日正式开业。交易所不以盈利为目的,实行自律性管理。 组织形式及会员 交易所实行会员…

Java:双色球案例

文章目录 题目最终代码及运行结果过程中出现的问题判断选取的小球数字是否满足条件获奖多少没输出其他问题 学到的东西 题目 最终代码及运行结果 package com.zhang; /* 双色球案例: 投注号码由6个红球和1个蓝球号码组成。红色球号码从1——33中选择,蓝色球号码从1…

深度学习-注意力机制和分数

深度学习-注意力机制 注意力机制定义与起源原理与特点分类应用领域实现方式优点注意力机制的变体总结注意力分数定义计算方式注意力分数的作用注意力分数的设计总结 注意力机制(Attention Mechanism)是一个源自对人类视觉研究的概念,现已广泛…

jenkins 自动化任务构建案例

一新建Item 输入一个名称,点击Freestyle project 进入到配置项 选择 This project is parameterized,点击String Parameter 添加 变量值 command添加执行的命令 二构建 点击build构建触发器 三查看控制台 控制台输出信息无误

VB.NET实现上位机自动识别可用串口

在实际应用中有时会牵扯到挑选可用串口,比如上位机和从站设备使用Modbus RTU协议进行通讯时需要选择COM串口,每次启动连接前都在设备管理器查看较为麻烦,可以设置一个串口自动识别功能,如果选择了错误的串口还可以提示串口选择错误…

fdtd(时域有限差分)仿真

FDTD Solutions 是一款非常好用的微纳光学设计工具。该软件提供了丰富的设计功能,支持 CMOS 图像传感器,OLED 和液晶,表面计量,表面等离子体,石墨烯,太阳能电池,集成光子组件,超材 料…

2024年水利水电技术与能源环境国际会议(ICWRHTEE2024)

2024年水利水电技术与能源环境国际会议(ICWRHTEE2024) 会议简介 2024国际水利水电技术与能源环境大会(ICWRHTEE 2024)将在中国深圳举行。 我们主要专注于水利水电技术和能源环境研究领域,致力于为国内外不同大学、研究院所、企事业单位的专…

11_1、多态性:概念及运算符重载

多态性 多态的概念和类型多态的类型多态的实现 运算符重载运算符重载的概念和规则概念规则 运算符重载为类的成员函数双目运算符单目运算符 运算符重载为类的友元函数双目运算符重载单目运算符重载 多态的概念和类型 消息:消息在C编程中指的是对类的成员函数的调用…

[2024-06]-[大模型]-[Ollama]- WebUI

主要涉及要部署的前端webui是来源于:https://github.com/open-webui/open-webui 正常就使用: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-web…

【机器学习】基于CNN-RNN模型的验证码图片识别

1. 引言 1.1. OCR技术研究的背景 1.1.1. OCR技术能够提升互联网体验 随着互联网应用的广泛普及,用户在日常操作中频繁遇到需要输入验证码的场景,无论是在登录、注册、支付还是其他敏感操作中,验证码都扮演着重要角色来确保安全性。然而&am…