自动求导实现与可视化

前言

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 = data
    self.grad = 0
    # internal variables used for autograd graph construction
    self._backward = lambda: None
    self._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.grad
        other.grad += out.grad
    out._backward = _backward
    return 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.grad
        other.grad += self.data * out.grad
    out._backward = _backward

    return 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.grad
    out._backward = _backward
    return out
def backward(self):
    # topological order all of the children in the graph
    topo = []
    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 gradient
    self.grad = 1
    for 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%免费

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

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

相关文章

护眼灯到底有没有用?警惕商家的四大智商税套路!

随着科技进步与大众健康意识的普遍提高,智能小家电逐渐成为了我们日常生活的一部分。在这些小家电中,一款被称为护眼台灯因其出色的护眼效果而备受瞩目。许多人好奇,护眼灯到底有没有用?是真的能够起到护眼效果的吗?而…

【设计模式深度剖析】【6】【行为型】【中介者模式】

文章目录 中介者模式定义英文原文直译如何理解? 中介者模式的角色1. 中介者(Mediator)2. 具体中介者(ConcreteMediator)3. 同事(Colleague)类图代码示例 中介者模式的应用优点缺点使用场景 中介…

【区块链】解码拜占庭将军问题:区块链共识机制的哲学基石

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 解码拜占庭将军问题:区块链共识机制的哲学基石引言一、拜占庭将军问…

微软云计算[2]之微软云关系数据库SQL Azure

微软云关系数据库SQL Azure SQL Azure概述SQL Azure关键技术SQL Azure数据库SQL Azure报表服务SQL Azure数据同步 SQL Azure和SQL Server对比 SQL Azure概述 SQL Azure是微软的云中关系型数据库。 SQL Azure数据库简化了多数据库的供应和部署。 SQL Azure还为用户提供内置的高…

meilisearch的Managing API keys,自己趟过的坑

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

graphpad加截断线 更改图表类型

1. 双击图表进入 2.设置最大值和最小值 设置的时候先设置bottom再设置top,否则改变不成功!! 3.设置坐标轴间隔 4. 更改图表类型

金融上云及信创改造过程中的新老设备兼容性、虚拟化多池管理简化、提升故障恢复能力等问题及解决方案|金融行业数字化QA合集②

Q:金融机构如何解决新老设备间的兼容性问题? 我行在虚拟化资源池扩容时,新采购的服务器与原有的服务器存在代差,容易出现新服务器的CPU架构与原有服务器不同,可能导致虚拟机迁移或运行时的性能问题或不兼容&#xff1…

AutoKG:为语言模型打造高效自动化知识图谱

在人工智能领域,大型语言模型(LLMs)如BERT、RoBERTa、T5和PaLM等,以其在自然语言处理(NLP)任务中的卓越性能而著称。然而,这些模型在提供信息时可能会产生“幻觉”,即提供看似合理但…

【UE数字孪生学习笔记】 虚幻日志系统

声明:部分内容来自于b站,知乎,慕课,公开课等的课件,仅供学习使用。如有问题,请联系删除。 部分内容来自UE官方文档,博客等 虚幻日志系统 1. 日志是一种非常实用的调试工具,可以详细…

国内首家!悦数图数据库全项完成中国信通院图数据库性能测试

大数据时代,随着各种社交网络、系统推荐等业务需求的不断发展,数据间的依赖和复杂度的逐渐增加,传统关系型数据库对这些需求捉襟见肘,图数据库应运而生。图数据库在金融风控、知识图谱、关系分析等应用场景的关联查询上有着明显优…

自带红外码库可使用蓝牙小程序控制的离线语音万能红外遥控器

离线语音蓝牙红外模块简介 此蓝牙红外模块是一种低成本的离线语音单麦应用方案,主芯片是一颗专用于语音处理的人工智能芯片,可广泛应用于家电,家居,音箱,玩具,穿戴设备,汽车等产品领域&#xf…

餐饮行业可燃气体报警器计量校准,惠州博罗引领安全新趋势

在惠州博罗这片繁荣的土地上,餐饮行业作为城市经济的重要组成部分,其安全问题一直备受关注。 可燃气体报警器作为餐饮场所预防火灾和爆炸事故的关键设备,其准确性和可靠性至关重要。 在这篇文章中,佰德将通过实际案例和数据&…

基本元器件 - 光电耦合器

光耦是将发光二极管(LED)和光电探测器集成于一个封装中的器件。 光耦的作用 在光耦中,一次侧(LED 侧)和二次侧(受光器件侧)是电绝缘的。因此,即使一次侧和二次侧的电位(…

epy - 终端电子书阅读器(epub2、epub3、fb2、mobi)

文章目录 一、关于 epy二、安装epy manual 三、用法四、颜色配置文件五、使用Epy的阅读技巧六、配置文件七、网址支持八、使用鼠标九、文字转语音十、字典十一、Double Spread 一、关于 epy 终端 电子书(epub2、epub3、fb2、mobi)阅读器 github : http…

力扣每日一题 6/12 + 随机一题

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2806.取整够买后的账户余额【简单】 题目: 一开始,你…

算法课程笔记——蓝桥第17次直播云课

算法课程笔记——蓝桥第17次直播云课 递归 改成signed,把所有int 改成longlong 100会越界

Linux - 信号阻塞 信号捕捉

Linux - 信号阻塞 & 信号捕捉 信号阻塞信号集操作信号集sigporcmasksigpendingsigaction 信号捕捉用户态与内核态信号捕捉的时机 在博客[Linux - 信号概念 & 信号产生]中,我讲解了信号的基本概念,以及信号是如何产生的,本博客将继续讲…

IPTV,OTT,DVB有线数字电视

当我们买了一台电视回家,满心欢喜的打开,准备收看最新节目的时候,却发现没办法看直播,这个时候去广电办理业务,IPTV,OTT,DTV有线数字电视等这种词语整的眼花缭乱,那么今天我们来解释…

计算机网络 期末复习(谢希仁版本)第4章

路由器:查找转发表,转发分组。 IP网的意义:当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就…

【FreeRTOS】源码概述

FreeRTOS源码概述 参考《FreeRTOS入门与工程实践(基于DshanMCU-103)》里《第7章 FreeRTOS源码概述》 相关文章:http://t.csdnimg.cn/QK0aO 1 FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工程中, FreeRTOS 相关的源码如下: 主要设计两个目录 C…