深度学习——微积分基础

news2024/9/25 1:14:31

目录

 1、导数和微分

1.1 定义函数:

1.2 趋近过程:

1.3 绘图表示:

2、偏导数

3、梯度

4、链式法则

5、学习心得


在2500年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法。为 了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形。如图下所示,内接多边形的 等长边越多,就越接近圆。这个过程也被称为逼近法

事实上,逼近法就是积分的起源。 2000多年后,微积分的另一支,微分被发明出来。 在微分学最重要的应用是优化问题,即考虑如何把事情做到最好,这种问题在深度学习中是无处不在的。

在深度学习中,我们“训练”模型,不断更新它们,使它们在看到越来越多的数据时变得越来越好。通常情 况下,变得更好意味着最小化一个损失函数(loss function),即一个衡量“模型有多糟糕”这个问题的分数。 最终,我们真正关心的是生成一个模型,它能够在从未见过的数据上表现良好。但“训练”模型只能将模型 与我们实际能看到的数据相拟合。因此,我们可以将拟合模型的任务分解为两个关键问题:

  • 优化(optimization):用模型拟合观测数据的过程;
  • 泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。

 1、导数和微分

假设我们有一个函数f : R → R,其输入和输出都是标量。如果f的导数存在,这个极限被定义为

如果f ′ (a)存在,则称f在a处是可微的。如果f在一个区间内的每个数上都是可微的,则此函数在此区间中是可微的。

1.1 定义函数:

为了更好地解释导数,让我们做一个实验。定义 u = f(x) = 3x^{2} − 4x 如下:

%matplotlib inline
import numpy as np
from matplotlib_inline import backend_inline
from d2l import torch as d2l
def f(x):
return 3 * x ** 2 - 4 * x

1.2 趋近过程:

通过令x = 1并让h接近0,(2.4.1)中(f(x+h)−f(x)) /h 的数值结果接近2。虽然这个实验不是一个数学证明,但稍后 会看到,当x = 1时,导数u ′是2。

def numerical_lim(f, x, h):
return (f(x + h) - f(x)) / h
h = 0.1
for i in range(5):
print(f'h={h:.5f}, numerical limit={numerical_lim(f, 1, h):.5f}')
h *= 0.1

输出:

h=0.10000, numerical limit=2.30000

h=0.01000, numerical limit=2.0300

h=0.00100, numerical limit=2.00300

h=0.00010, numerical limit=2.00030

h=0.00001, numerical limit=2.00003

1.3 绘图表示:

现在我们可以绘制函数u = f(x)及其在x = 1处的切线 y = 2x − 3,其中系数2是切线的斜率。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib_inline import backend_inline
from d2l import torch as d2l


def f(x):
    return 3 * x ** 2 - 4 * x


def numerical_lim(f, x, h):
    return (f(x + h) - f(x)) / h


h = 0.1
for i in range(5):
    print(f'h={h:.5f}, numerical limit={numerical_lim(f, 1, h):.5f}')
    h *= 0.1


def use_svg_display():  # @save
    """使用svg格式在Jupyter中显示绘图"""
    backend_inline.set_matplotlib_formats('svg')


def set_figsize(figsize=(3.5, 2.5)):  # @save
    """设置matplotlib的图表大小"""
    use_svg_display()
    d2l.plt.rcParams['figure.figsize'] = figsize


# @save
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):
    """设置matplotlib的轴"""
    axes.set_xlabel(xlabel)
    axes.set_ylabel(ylabel)
    axes.set_xscale(xscale)
    axes.set_yscale(yscale)
    axes.set_xlim(xlim)
    axes.set_ylim(ylim)
    if legend:
        axes.legend(legend)
    axes.grid()


# @save
def plot(X, Y=None, xlabel=None, ylabel=None, legend=None, xlim=None,ylim=None, xscale='linear', yscale='linear',fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None):
    """绘制数据点"""
    if legend is None:
        legend = []

    set_figsize(figsize)
    axes = axes if axes else d2l.plt.gca()

    # 如果X有一个轴,输出True
    def has_one_axis(X):
        return (hasattr(X, "ndim") and X.ndim == 1 or isinstance(X, list)
                and not hasattr(X[0], "__len__"))

    if has_one_axis(X):
        X = [X]
    if Y is None:
        X, Y = [[]] * len(X), X
    elif has_one_axis(Y):
        Y = [Y]
    if len(X) != len(Y):
        X = X * len(Y)
    axes.cla()
    for x, y, fmt in zip(X, Y, fmts):
        if len(x):
            axes.plot(x, y, fmt)
        else:
            axes.plot(y, fmt)
    set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)


x = np.arange(0, 3, 0.1)
plot(x, [f(x), 2 * x - 3], 'x', 'f(x)', legend=['f(x)', 'Tangent line (x=1)'])
plt.show()

2、偏导数

在深度学习中,函数通常依赖于许多变量。因此,我 们需要将微分的思想推广到多元函数上。

y = f(x1, x2, . . . , xn)是一个具有n个变量的函数。y关于第i个参数xi的偏导数为:

3、梯度

我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。具体而言,设 函数f : R n → R的输入是一个n维向量x = [x1, x2, . . . , xn] ⊤,并且输出是一个标量。函数f(x)相对于x的梯度 是一个包含n个偏导数的向量:

4、链式法则

然而,上面方法可能很难找到梯度。这是因为在深度学习中,多元函数通常是复合的,所以难以应用上述任何规则来微分这些函数。幸运的是,链式法则可以被用来微分复合函数。 让我们先考虑单变量函数。假设函数y = f(u)u = g(x)都是可微的,根据链式法则:

5、学习心得

  1. 微分和积分是微积分的两个分支,前者可以应用于深度学习中的优化问题。
  2. 导数可以被解释为函数相对于其变量的瞬时变化率,它也是函数曲线的切线的斜率。
  3. 梯度是一个向量,其分量是多变量函数相对于其所有变量的偏导数。
  4. 链式法则可以用来微分复合函数。

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

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

相关文章

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一: 方法二(推荐) 将相关资源下载下来,在对应的html文件中相对路径引入。注意:css加载放在js之前

Windows 11 鼠标右键可选择 cmd 命令行选项

** Windows 11 鼠标右键可选择 cmd 命令行选项 ** 在文件夹内打开命令行,只能使用 Windows 自带的 PowerShell , 作为一个 cmd 重度使用用户来说很是折磨,需要打开 cmd 然后切换盘符再 cd 。。。 现在咱们自己创建一个可以打开 cmd 的方法…

【C++庖丁解牛】stack的介绍和使用 | queue的介绍和使用 | priority_queue的介绍和使用

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. stack的介绍和使用1.1…

微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现)

项目介绍 自从计算机发展开始,计算机软硬件相关技术的发展速度越来越快,在信息化高速发展的今天,计算机应用技术似乎已经应用到了各个领域。 在餐饮行业,除了外卖以外就是到店里就餐,在店里就餐如果需要等待点餐的话…

VUE2 Day08智慧商城案例

shift alt f 格式化代码快捷键 vant组件库的安装 安装出错在指令后面加 --force 安装出错在指令后面加 --force **封装api模块的好处: 请求与页面逻辑分离相同的请求可以直接复用请求进行了统一管理** ![在这里插入图片描述](https://img-blog.…

c语言扫雷改进版

目录 文章目录 主体 整体架构流程 技术名词解释 技术细节 测试情况 文章目录 概要整体架构流程技术名词解释技术细节测试情况 主体 主体包括菜单,游戏规则简绍,选择进行与否 int main() {int input;srand((unsigned int)time(NULL));do{ menu()…

Linux--gdb调试

一.安装gdb sudo apt install gdb 二.使用gdb 三.gdb的相关操作 gdb 可执行文件名 显示代码: l 加断点: b 行号 启动程序:r(运行之前一定要加断点) 查看断点信息: info break/info b 删除断点信息:delete 断点编号 单步执行:n 打印 :p 显示:display 变量名: 退出:q …

Vue字符串里的中文数字转换为阿拉伯数字

js字符串里的汉字数字转化为数字 <template><view><view><view class"inpbox" ><textarea v-model"voiceMane" input"convert" ></textarea></view></view></view> </template> &…

清华大模型ChatGLM3部署初体验

正文共&#xff1a;1555 字 17 图&#xff0c;预估阅读时间&#xff1a;2 分钟 ChatGLM3是智谱AI和清华大学KEG实验室联合发布的对话预训练模型。该项目在GitHub的工程链接为&#xff1a; https://github.com/THUDM/ChatGLM3 在人工智能领域中&#xff0c;类似“3B”、“6B”、…

Springboot+Vue前后端分离的个人博客系统

项目介绍 进入二十一世纪&#xff0c;以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用&#xff0c;各种网络交流互动工具也应运而生。其中以论坛、博客、社区、空间最为受广大网民朋友的欢迎&#xff0c;也是目前为止发展的比较成熟的信息交流工具…

【RAG实践】基于 LlamaIndex 和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”&#xff0c;依赖的信息可能过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented G…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”&#xff0c;创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

el-table树形数据序号排序处理

1&#xff0c;用下面这个代码可以实现基本表格的序号排序 <el-table-column label"序号" width"50px" align"center"><template slot-scope"scope">{{ scope.$index 1 }}</template></el-table-column>2&…

Linux-线程同步

文章目录 前言一、为什么要线程同步&#xff1f;二、线程同步pthread_cond_initpthread_cond_destroypthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast 三、示例代码 前言 上节课学习了线程互斥&#xff0c;这节课针对线程互斥内容在做进一步的补充和完善&am…

Java小项目--满汉楼

Java小项目–满汉楼 项目需求 项目实现 1.实现对工具包的编写 先创建libs包完成对jar包的拷贝和添加入库 德鲁伊工具包 package com.wantian.mhl.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.FileInputStream…

惟客数据CTO 钱勇:数据资产运营创新和实践

​企业如何做好数据资产运营&#xff0c;有效挖掘和利用数据资产&#xff1f; 近日&#xff0c;在由华东江苏大数据交易中心主办的“第四届数字经济科技大会”上&#xff0c;WakeData惟客数据CTO、星光数智CEO 钱勇 给出了自己的观点。 在演讲环节&#xff0c;钱勇以《数据资…

vulnhub打靶记录——Mycmsms

文章目录 一、环境布置主机发现 二、端口扫描nikto基本探测目录扫描CMS EXP搜索探查mysql数据库CMS代码审计CMS后台权限提升 一、环境布置 靶机在virtualbox中搭建&#xff0c;攻击机使用vmware中安装的kali&#xff0c;主要是解决kali能ping通靶机&#xff0c;同时能访问外网…

比较10个数值的最大值(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int arr[10] { 0 };int i 1;int n 1;int t 0;int max 0;//提示用户&#xff1b;printf("请输入10个整数&…

java系统部署到Linux

1、安装java 1.8JDK 卸载Open JDK 首先&#xff0c;我们先检查系统是否自带了 JDK。输入命令 java -verison批量删除 rpm -qa | grep java | xargs rpm -e --nodeps下载并安装JDK 我们在 user 目录下建立一个新的 java文件夹&#xff0c;用来存放 JDK文件。 jdk下载地址 …

操作系统——处理机管理(2)

四、作业的基本概念 8、作业的定义 是指用户在一次计算过程或一次事务处理的过程中要求计算机系统所做的工作的总称。 通常把一次事务计算中从输入开始到输出结束&#xff0c;用户要求计算机所做的全部工作称为一个作业。 用户的角度&#xff1a;作业就是用户要求计算机完…