深度学习——微积分基础

目录

 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. 链式法则可以用来微分复合函数。

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

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

相关文章

Vue3:标签的ref属性用法

一、情景说明 我们在写前端页面的时候,肯定会遇到获取DOM内容的情况。 以往,我们是用原生的js方法去获取,如document.getXxxx 但是,这中方法会有个问题,如果父组件和子组件的id相同,则会出错。 在Vue3中&…

Unity游戏项目接广告

Unity游戏项目中接入GoogleAdMob 先看效果图 接入测试横幅广告,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; using System;public class GoogleAdMobManager : MonoBehavi…

观察者模式的理解和引用

1.前言 在之前的H5小游戏中,对于长连接发送的不同类型数据包的处理,是通过switch语句进行处理的,于是在自己的代码中出现了大量的case分支,不方便进行维护和后期的版本迭代。于是在老师的指导下,开始寻求使用观察者模…

【深度学习】滴滴出行-交通场景目标检测

案例5:滴滴出行-交通场景目标检测 相关知识点:目标检测、开源框架的配置和使用(mmdetection, mmcv) 1 任务目标 1.1 任务和数据简介 本次案例将使用深度学习技术来完成城市交通场景下的目标检测任务,案例所使用的数…

CentOS7 安装ErLang语言环境

在线搜索适合当前linux系统的epel在线安装。 yum -y install epel-release下载erlang-solutions安装包。 wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm离线安装erlang-solutions安装包。 rpm -Uvh erlang-solutions-1.0-1.noarch.rpm在线…

项目性能优化—使用JMeter压测SpringBoot项目

项目性能优化—使用JMeter压测SpringBoot项目 我们的压力测试架构图如下: 配置JMeter 在JMeter的bin目录,双击jmeter.bat 新建一个测试计划,并右键添加线程组: 进行配置 一共会发生4万次请求。 ctrl s保存; 添加h…

Aigtek电压放大器的作用及优点是什么

电压放大器是电子技术领域中重要的设备,其作用是将输入信号的电压放大到所需的输出电压水平。电压放大器具有多种优点,下面安泰电子将详细介绍其作用及主要优点。 电压放大器的主要作用是增加信号的电压幅值。通过放大信号的电压,可以增强信号…

网络架构层_服务器上下行宽带

网络架构层_服务器上下行宽带 解释一 云服务器ECS网络带宽的概念、计费、安全及使用限制_云服务器 ECS(ECS)-阿里云帮助中心 网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量,带宽数值越大表示传输能力越强,即在单位…

就业班 2401--3.13 走进网络

走进网络 长风破浪会有时,直挂云帆济沧海。 1.认识计算机 1.计算机网络是由计算机和通讯构成的,网络研究的是“通信”。 ------1946 世界上第一台计算机 2.终端:只有输入和输出功能,没有计算和处理功能。 3.数据:一串…

深入浅出Go的`encoding/xml`库:实战开发指南

深入浅出Go的encoding/xml库:实战开发指南 引言基本概念XML简介Go语言中的XML处理结构体标签(Struct Tags) 解析XML数据使用xml.Unmarshal解析XML结构体标签详解处理常见解析问题 生成XML数据使用xml.Marshal生成XML使用xml.MarshalIndent优化…

Linux服务器磁盘更改挂载目录

linux服务器磁盘弹性扩容时,会出现没有挂载到理想的目录下,这时候就需要通过命令从新挂载目录,以下示例是把默认挂载目录/home更改为/data 1,df -lh ####查看现有挂载信息 2.lsblk ###查看文件形式,确保原有数据盘文件结构。 3.…

团队如何限制合适的在制品(WIP)数量?

看板之父David Anderson曾说过“看板的本质是一个很朴素的思想:在制品必须被限制。”但对于团队来说,确定一个合适的在制品限制可能是件棘手的事。 在《看板快速启动指南》一文中,我们已经初步了解如何打造一个看板,今天我们来一…

java学习之路-方法讲解

目录 1.方法概念及使用 1.1什么是方法 1.2方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系(重要) 1.5 没有返回值的方法 2.方法重载 3.方法递归 3.1递归概念 3.2递归执行过程分析 3.3递归练习 代码示例1 代码示例2 1.方法概念及使用 1.1什么是方法 方法就是…

jetson nano——编译一些包的网址导航,pyside2,qt(持续更新)

目录 1.PySide2下载地址2.tesserocr下载地址3.Qt下载地址4.OpenSSL官网5.latex编译器下载地址5.1MikTex5.2TeX Live 1.PySide2下载地址 https://download.qt.io/official_releases/QtForPython/pyside2/ 如下图: 2.tesserocr下载地址 https://github.com/simonflue…

python网络编程:通过socket实现TCP客户端和服务端

目录 写在开头 socket服务端(基础) socket客户端(基础) 服务端实现(可连接多个客户端) 客户端实现 数据收发效果 写在开头 近期可能会用python实现一些网络安全工具,涉及到许多关于网络…

PythonWeb——Django框架

框架介绍 1.什么是框架? 框架就是程序的骨架,主体结构,也是个半成品。 2.框架的优缺点 可重用、成熟,稳健、易扩展、易维护 3.Python中常见的框架 大包大揽 Django被官方称之为完美主义者的Web框架。力求精简web.py和Tornado新生代微框架Flask和B…

hadoop分布式环境ssh设置免密登陆之后目标主机更换无法连接解决

在进行hadoop分布式环境搭建时(三台机,master,slave1,slave2),后期slave2系统出现问题,更换新机后,master与slave2文件传输失败: 以为是秘钥过期的问题,更换…

【Linux】一文解决如何在终端查看 python解释器 的位置

【Linux】一文解决如何在终端查看 python解释器 的位置 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅…

Github主页设置贪吃蛇详细教程

先看最终实现结果: 有条贪吃蛇放在主页还是蛮酷的哈哈哈。接下来我来讲一讲怎么在Github主页添加一条贪吃蛇。 首先要修改自己的Github的主页,我们得有一个特殊的仓库——这个仓库必须与你的Github用户名保持一致,并且需要公开&#xff0c…

静默快速安装oracle 19c

静默快速安装oracle 19c 1.配置yum源 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息rpm -qa|grep yum|xargs rpm -e --nodeps 不检查依赖,直接删除rpm包 1232.自行下载所需要的软件包。包名会…