昇思25天学习打卡营第4天|函数式自动微分

news2024/10/6 12:30:50

学习目标:

重温高数知识,回顾导数、微分、偏导数‘全微分、方向导数、梯度;斜率、切线、切平面,法相平面、法线的知识’

  • 函数微分与导数的含义
  • 多元函数偏导数、全微分
  • 函数式自动微分应用实践

昇思大模型 ,mindspore AI框架 学习记录:
在这里插入图片描述


一、函数微分与导数的含义

1.1 一元函数的导数和微分

导数是一个函数在某一点的斜率,它描述了函数在该点的变化率。具体来说,对于函数y=f (x),如果在某一点x0处有增量Δx,那么增量之商Δy/Δx的极限值就是该点的导数,记作f’ (x0)。 而微分则是一种处理函数的方法,它表示函数在某一点处的变化量。
在这里插入图片描述
因此,导数是A,是数值;微分dy = Adx,是表示切线。
在该点(x0,y0),如果A>0,曲线递增,A<0曲线递减,A=0,曲线平稳。
偏导数,全导数,方向导数,偏微分,全微分,梯度更多详情参考:博客。
在这里插入图片描述

二、多元函数偏导数、全微分

导数本质是一种极限,实际场景中表示切线斜率;
微分本质是“以直代曲,线性逼近”,让本来对曲线进行运算的操作,转化成对直线进行操作,简化了难度。
同理,对于多元函数,
在这里插入图片描述

就有偏导数和偏微分。
偏导数仍然是增量的比值,只不过需要固定在某方向上算。
在这里插入图片描述
在这里插入图片描述
转到xoz平面来看:
在这里插入图片描述
曲面在(x0,y0)上关于x的偏导数:
在这里插入图片描述
偏导数还有一种写法:
在这里插入图片描述
先看对曲面在固定y0面,对x的偏导数A:在该点A>0,曲面沿x轴递增,A<0曲面沿x轴递减,A=0,曲面沿x轴变化平稳。
在这里插入图片描述
这个偏导数在该点(x0,y0)计算出的导数(斜率)数值,结合x方向构成的向量就是该点在x方向的梯度。
重要概念:梯度是向量,有大小,有方向。
在这里插入图片描述
图上表示,箭头的长度就是向量的模(就是A),方向就是梯度变化的方向i(也就是x方向)。

同理,在固定x=x0时,z对y的偏导数为:
在这里插入图片描述同时,x=x0,y=y0,该点z对y的偏导数值B结合方向j,也就是y轴方向,构成了曲面在该点沿y轴的变化梯度。
在这里插入图片描述
那么,曲面z在该点的总的方向梯度(总的方向导数)就是。向量合成(Ai,Bj)。
在这里插入图片描述
合成的这个方向导数,也就是梯度。就是曲面在该点的变化情况。
专业表达式如下:gradf(x0,y0) = df/dx|(x0,y0)i+df/dy|(x0,y0)
在这里插入图片描述


三、函数式自动微分应用实践

那么,问题来了,以上方向梯度对我们的AI模型或者说建模有什么意义呢。

3.1 多元函数梯度应用关联性

假如我们有一批数据X=[x1,x2,x3,x4],知道这批数据表示的是Y=[y1,y2,y3,y4],为真实值。X->Y存在某种规律w0在里面。不过,我们不清楚这个w0。又有一批数据[x11,x12,x13,x14],能不能推出这批数据表示什么?
所以,我们需要解方程。

我们想要获得的某种规律w=[参数,......],黑匣子w。它能让我们实现wX+b无限接近于Y
Y_ = wx+b 为预测值
构造损失函数:L = F(x,y) =|wx+b - y|=|Y_-Y| 趋向于0.预测结果与真实结果的差值就是损失函数(其他方式计算损失函数类似,L >=0)。
你会发现,L(x,y)就是前面的多元函数,L(x,y)趋近于0,已知X,Y,去解关于w,b的方程。

3.2 函数代码实现梯度计算

import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter

给定X,Y,然后初始化w,b为可变参数变量类型Parameter,通过计算曲线(曲平面)的梯度,来调整w,b。

x = Tensor([1,2,3,4,5],mindspore.float32)
y = Tensor([9,14,19,24,29],mindspore.float32)  # expected output
w = Parameter(Tensor(np.random.randn(5, 5), mindspore.float32), name='w') # weight
b = Parameter(Tensor(np.random.randn(5,), mindspore.float32), name='b') # bias
print(x,y,w,b)

在这里插入图片描述
为什么需要向梯度下降的方向来调整w,b。梯度下降表示函数值在减小,因为损失函数L(x,y)>=0,当函数值减小趋近于0,表示预测值和真实值趋于相同。从而达到模型参数的理想结果。

def function(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
    return loss

在这里插入图片描述
用fn表示梯度函数,这里是损失函数关于w和b的偏导数组成的偏导数。
在这里插入图片描述

grad_fn = mindspore.grad(function, (2, 3)),此处索引 (2, 3)表示(w,b)。表示函数function对w,b求导数。参数索引一次x,y,,w,b索引=0,1,2,3
在这里插入图片描述

3.2 梯度下降:随机梯度函数SDG

梯度在具体的模型训练时,会更具优化器来优化参数。
优化器作用过程:调整模型参数以减少模型误差的过程。MindSpore提供多种优化算法的实现,称之为优化器(Optimizer)。优化器内部定义了模型的参数优化过程(即梯度如何更新至模型参数),所有优化逻辑都封装在优化器对象中。在这里,我们使用SGD(Stochastic Gradient Descent)优化器。
深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降(SGD)算法的原理如下:
在这里插入图片描述

optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate)

每输入一批X,计算一个Y。
按梯度下降方向,修改一次模型参数。

optimizer(grads)

3.3允许梯度和停止梯度计算

当损失函数返回除损失值外,还有其他中间结果时。直接计算函数梯度,会将loss和z的一起计算。

def function_with_logits(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
    return loss, z

在这里插入图片描述
规避方式1ops.stop_gradient(z)

def function_stop_gradient(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
    return loss, ops.stop_gradient(z)

规避方式2

grad_fn = mindspore.grad(function_with_logits, (2, 3), has_aux=True)

执行结果:只计算了是函数的梯度
在这里插入图片描述

四、神经网络训练实践-手写数字识别

Mnist手写数字识别-第三节模型训练实践,有梯度计算,优化的详细使用细节。
在这里插入图片描述

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

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

相关文章

STM32第十三课:DMA多通道采集光照烟雾

文章目录 需求一、DMA&#xff08;直接存储器存取&#xff09;二、实现流程1.时钟使能2.设置外设寄存器地址3.设置存储器地址4.设置要传输的数据量5.设置通道优先级6.设置传输方向7.使通道和ADC转换 三、数据处理四、需求实现总结 需求 通过DMA实现光照强度和烟雾浓度的多通道…

JAVA期末速成库(12)第十三章

一、习题介绍 第十三章 Check Point&#xff1a;P501 13.3&#xff0c;13.17&#xff0c;13.28&#xff0c;13.29 Programming Exercise&#xff1a;13.1&#xff0c;13.6&#xff0c;13.11 二、习题及答案 Check Point&#xff1a; 13.3 True or false? a. An abst…

【做一道算一道】太平洋大西洋水流问题

太平洋大西洋水流问题 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &…

零基础开始学习鸿蒙开发-读书app简单的设计与开发

目录 1.首页设计 2.发现页面的设计 3.设置页面的设计 4.导航页设计 5.总结&#xff1a; 6.最终的效果 1.首页设计 Entry Component export struct home {State message: string 首页build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

Golang-map理解

golang-map语雀笔记整理 map的底层实现hmapbmap map是如何做到O(1)的复杂度的&#xff1f;map扩容策略 师兄问题回答 map的底层实现 hmap hmap的结构体核心字段有&#xff1a;buckets 桶数组地址&#xff0c; B 定位值&#xff0c;桶的数目是2^B个&#xff0c; count 当前map的…

Java基础(三)——类和对象、构造方法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

Vue-cli项目及Element UI 环境搭建 保姆级教程

一、Vue-cli介绍及其作用 什么是Vue-cli手脚架 vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个 vue 的项目模板&#xff1b;预先定义 好的目录结构及基础代码&#xff0c;就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目&#xff0c;这个骨架项目就是脚…

环回接口处理 IP 数据报的过程及 Loopback 接口的主要作用

环回接口处理 IP 数据报的过程 IPv4 中 传给环回地址&#xff08;127.0.0.1&#xff09;的任何数据均作为 IP 输入&#xff0c;直接送到环回接口&#xff08;环回&#xff1a;IP 输入队列&#xff09;。 传给广播地址或多播地址的数据报&#xff0c;会复制一份传给环回接口&…

MySQL高阶:事务和并发

事务和并发 1. 事务创建事务 2. 并发和锁定并发问题 3. 事务隔离等级3.1 读取未提交隔离级别3.2 读取已提交隔离级别3.3 重复读取隔离级别3.4 序列化隔离级别 4. 死锁 1. 事务 事务&#xff08;trasaction&#xff09;是完成一个完整事件的一系列SQL语句。这一组SQL语句是一条…

昇思25天学习打卡营第02天 | 快速入门

昇思25天学习打卡营第02天 | 快速入门 文章目录 昇思25天学习打卡营第02天 | 快速入门数据准备网络构建模型训练模型测试迭代数据集模型保存加载模型总结打卡 数据准备 MindSpore通过Dataset和Transforms实现高效的数据预处理 使用download下载数据&#xff0c;并创建数据集对…

Qt项目天气预报(8) - 绘制温度曲线 + 回车搜索(最终篇)

全部内容在专栏&#xff1a; Qt项目 天气预报_mx_jun的博客-CSDN博客 目录 绘制温度曲线 事件过滤器在子控件上绘图 子控件下载事件过滤器 事件过滤器进行绘图 - eventFilter 画初步高温曲线 画初步低温曲线 效果演示 画低温曲线 画高温曲线 效果演示 按下回车搜索: …

LDM论文解读

论文名称&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models 发表时间&#xff1a;CVPR2022 作者及组织&#xff1a;Robin Rombach, Andreas Blattmann, Dominik Lorenz,Patrick Esser和 Bjorn Ommer, 来自Ludwig Maximilian University of Munich &a…

AI奏响未来乐章:音乐界的革命性变革

AI在创造还是毁掉音乐 引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正在逐渐渗透到我们生活的每一个角落&#xff0c;音乐领域也不例外。AI技术的引入&#xff0c;不仅为音乐创作、教育、体验带来了革命性的变革&#xff0c;更为整个音乐产业注入了…

顺序表应用——通讯录

在本篇之前的顺序表专题我们已经学习的顺序表的实现&#xff0c;了解了如何实现顺序表的插入和删除等功能&#xff0c;那么在本篇当中就要学习基于顺序表来实现通讯录&#xff0c;在通讯录当中能实现联系人的增、删、查改等功能&#xff0c;接下来就让我们一起来实现通讯录吧&a…

民用无人机企业招标投标需要资质证书详解

一、基础资质 在民用无人机企业的招标投标过程中&#xff0c;基础资质是首要考虑的因素。这些资质通常包括企业注册资质、税务登记证、组织机构代码证等。 1.1 企业注册资质 企业应具备合法的注册资质&#xff0c;即营业执照。该执照应包含企业名称、注册地址、法定代表人、…

Java [数据结构] Deque与Queue

&#x1f93a;深入理解 Java 中的 Deque 和 Queue&#x1f93a; 在现代软件开发中&#xff0c;数据结构是构建高效、可维护代码的基础。 Java 作为一门广泛应用的编程语言&#xff0c;其丰富的集合框架&#xff08;Collections Framework&#xff09;为开发者提供了多种强大的…

Zabbix 排坑版 Centos7

systemctl stop firewalld;systemctl disable firewalld;setenforce 0sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configzabbix源地址,可以自己选版本&#xff0c;安装都大差不差 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5…

【车载开发系列】S32 Design Studio工具安装步骤

【车载开发系列】S32 Design Studio工具安装步骤 S32 Design Studio工具安装步骤 【车载开发系列】S32 Design Studio工具安装步骤※关键字提炼※一. 准备工作二. 下载安装包三. 获取License许可四. 开始预安装五. 开始正式安装六. 启动软件七. 安装插件八. 卸载插件九. 确认安…

【操作系统】进程管理——进程控制和进程通信(个人笔记)

学习日期&#xff1a;2024.6.30 内容摘要&#xff1a;进程控制的概念&#xff0c;进程控制相关的“原语”&#xff0c;进程通信 进程控制 原语 进程控制用“原语”实现。原语是一种特殊的程序&#xff0c;它的执行具有原子性&#xff0c;也就是说&#xff0c;这段程序的执行…

vs code python开发笔记

目录 选择python 解析器 安装插件 不全&#xff1a; 调试启动目录问题&#xff1a; 2.选择python解释器 选择python 解析器 ctrl shift P select interpreter 安装插件 不全&#xff1a; remote ssh python debuger 左下角&#xff0c;点击左右左右箭头&#xff0c;远程…