《PyTorch面试精华》


1 前言
    1.1  PyTorch安装

    1.2  显卡驱动的困惑

    1.3  CUDA安装注意事项

    1.4  cuDNN的介绍

    1.5  Pytorch Lightning介绍

    1.6  PyTorch学习之道

    1.7  PyTorch快速入门

    1.8  PyTorch调参之道

    1.9  PyTorch调参套件

    1.10  手动创建虚拟环境

2 深度学习之数学基础
    2.1  希腊字母解读

    2.2  梯度的物理意义

    2.3  图解梯度下降法

    2.4  图解梯度上升法

    2.5  自然梯度

    2.6  泰勒公式的介绍

    2.7  信息与信息熵

    2.8  重要性采样

    2.10  欧几里得范数

    2.11  特征值和特征向量

    2.12  似然函数的理解

    2.13  矩阵秩的深刻理解

3 PyTorch入门疑难点
4 PyTorch全局设置
    4.1  全局设置当前设备

    4.2  全局设置浮点精度

5 PyTorch GPU分布式训练
    5.1  PyTorch GPU基础操作

    5.2  DataParallel用法详解

    5.3  GPU分布式训练模型

    5.4  CUDA_VISIBLE_DEVICES

    5.5  device详细说明

    5.6  to(device)和.cuda()

    5.7  CUDA设备索引

    5.8  GPU设备索引

6 向量的基础与核心
    6.1  Tensor的组成与存储

    6.2  Tensor的grad属性

    6.4  Tensor的叠加

    6.5  禁用梯度计算

    6.6  向量的保存和加载

    6.7  参数向量

    6.8  叶子节点

    6.9  detach原理

    6.10  requires_grad属性

    6.11  Tensor与Numpy互换

    6.12  张量cat操作

    6.13  零维张量

    6.15  squeeze/unsqu...函数

    6.16  argmax和max的区别

    6.17  torch.as_tensor的应用

7 神经网络基础
    7.2  PyTorch计算图

    7.3  查看网络权重参数

    7.4  保存模型

    7.5  Adam相关面试题

    7.6  Train模式和Eval模式

    7.7  线性网络

    7.8  双线性网络

    7.9  惰性线性层

    7.10  PyTorch中的自动微分

    7.12  Dropout机制

    7.13  半精度训练

    7.14  Xavier初始化

    7.15  注意力机制

    7.16  Dataset数据处理

    7.17  StepLR学习率调度器

    7.18  词嵌入的理解

    7.19  TensorDataset的使用

    7.20  模型的保存与加载

    7.21  ModuleList和Sequential

    7.22  Batch Normalization介绍

8 计算机视觉基础知识
    8.1  通道的深刻理解

    8.2  1x1卷积的作用

    8.3  特征提取和可视化

    8.4  反卷积的推导

    8.5  理解卷积

    8.7  空洞卷积

    8.8  池化层的作用

    8.9  感受野与特征图

    8.10  NMS算法

    8.11  特征图尺寸计算

9 循环神经网络基础
    9.2  RNN的介绍

10 注意力机制
    10.1  位置编码的作用

    10.2  位置编码的种类

    10.4  Embedding本质理解

    10.6  Transformer VS CNN/RNN

    10.7  ELMo介绍

11 PyTorch归一化
    11.2  层归一化技术详解

12 激活函数相关内容
    12.1  激活函数简介

    12.2  万能逼近定理

    12.3  指数函数的学习

    12.4  Sigmoid函数的介绍

    12.5  Tanh函数的介绍

    12.6  Softmax函数的实现

    12.7  ReLU函数的介绍

    12.8  Leaky Relu函数的介绍

    12.9  ReLu与非线性的理解

    12.10  Parametric ReLU函数

    12.11  ELU函数介绍

    12.12  神经元死亡的问题

13 思考题的答案
    13.1  思考题的答案解密

梯度的物理意义

创建时间:2024-09-22 更新时间:2024-09-23 阅读次数:1949 次

飞燕忠告

可以说,梯度是深度学习中最重要的术语,也是初学者最难迈过的一道门槛。我觉得,梯度和方向导数犹如一枚硬币的两面,两者缺一不可,相辅相成。也就是说,一看到或者一听见“梯度”二字,你的脑海里面应该立马想到“方向导数”。你的脑海应该浮出这样一个画面:存在一个点,它有多个方向导数,沿着其中某个方向做运动,此时点所对应的函数值的变化是最剧烈的。这个方向是由梯度来定义的,函数值变化的剧烈程度则是梯度的模。

学习路线

本文给大家说一下梯度以及梯度的物理意义。对于“梯度”这个东西,很多初学者搞不清楚,就连知乎上的大V,也是独乐乐不能与众乐乐,洋洋散散说了半天,读者也是一头雾水。

之所以大家对“梯度”一头雾水,这是因为大家没有一个明确的学习路线,本文制定出一条关于梯度的学习路线:导数->偏导数->方向导数->方向->方向导数的表示方法->方向导数的最值->梯度的物理意义

本文希望通过这个系统化的学习路线,让大家能深刻地理解和掌握“梯度”这个机器学习和深度学习核心数学技术。再退一步来说,即便你读完了本文依然没有吃透梯度的含义,那么按照本文所倡导的“路线学习法”,也必能让自己对“梯度”的理解迈入一个新的台阶。

1、什么是导数?

导数反映的是函数沿坐标轴方向的变化率。

大家要明白一点:导数是个标量。

2、什么是偏导数?

所谓偏导数,简单来说是对于一个多元函数,选定一个自变量并让其他自变量保持不变,只考察因变量与选定自变量的变化关系。数学上说,是指对于多元函数$y=f(x_1,x_2,...x_n)$,假设其偏导数都存在,则该函数共有$n$个偏导数,可以表示为:

$$f_{x_1} = \frac{ \partial y }{\partial x_1}, f_{x_1} = \frac{ \partial y }{\partial x_2}, ..., f_{x_n} = \frac{ \partial y }{\partial x_n}$$

需要强调一点:偏导数只能表示多元函数沿某个坐标轴方向的导数。

3、什么是方向导数?

除了沿坐标轴方向上的导数,多元函数在非坐标轴方向上也可以求导数,这种导数称为方向导数。很容易发现,多元函数在特定点的方向导数有无穷多个,表示函数值在各个方向上的增长速度。

再次要强调一下:导数是个标量。方向导数是依然是标量。

4、方向导数如何表示?

4.1、什么是方向?

说到“方向”,估计很多读者此时一头雾水了,大家有方向感啊,出门都知道东南西北啊。不,我说的方向指的是坐标系中的方向,用角度表示,如下图所示:

4.2、方向导数的表示方法

若有一个二元函数$z=f(x, y)$,当它由点A移动到点B时(设移动的距离为$l$),此时函数值有一个增量$\partial f$。当$l$趋于无限小时,若$\frac{ \partial d }{\partial l}$有一个极限值,那么这个极限值就叫做函数在方向$AB$上的方向导数。除了向$B$方向移动外,经过点$A$函数可以朝任意方向移动,函数就有任意多个方向导数。根据上文我们已经知道方向用角度来表示,此处用$\phi$表示,则函数的方向导数表示为:

$$\frac{ \partial f }{\partial l} = \frac{ \partial f }{\partial x}cos\phi + \frac{ \partial f }{\partial y}sin\phi$$

说明:$\phi$表示从$x$轴转动到方向$l$的夹角。

5、方向导数的最值是什么?

方向导数是个标量,标量只有大小这一个属性。而一个点有多个方向导数,这些方向导数之中必定存在最大值和最小值。如何求方向导数的最值呢?请看下文的推导:

$$\frac{ \partial f }{\partial l} = \frac{ \partial f }{\partial x}cos\phi + \frac{ \partial f }{\partial y}sin\phi = [\frac{ \partial f }{\partial x},\frac{ \partial f }{\partial y}] \cdot [cos\phi,sin\phi]$$

上式中$[\frac{ \partial f }{\partial x},\frac{ \partial f }{\partial y}]$表示偏导$gradf(x)$,而$[cos\phi,sin\phi]$则表示单位向量$e$,所以可以进一步变形为:

$$gradf(x) \cdot e$$

此时,方向导数的定义变成了偏导数和单位向量的内积。关于内积的计算,如果大家不清楚,可以看看这个:

$$A \cdot B = |A||B|cos(\alpha)$$

A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1,那么就变成了:

$$A \cdot B = |A|cos(\alpha)$$

综上所示,

$$gradf(x) \cdot e = |gradf(x)|cos(gradf(x)^\Delta,e)$$

$(gradf(x)^\Delta,e)$表示向量$gradf(x)$和向量$e$的夹角,当向量$e$与梯度$gradf(x)$方向一致的时候,$\frac{ \partial f }{\partial l}$有最大值。也就是说,沿着梯度方向的函数$z=f(x, y)$增长的最快。与之对应,方向导数正好与梯度反向,是函数值减小的最快方向。通常我们称之为负梯度。

最后,我们可以得知:方向导数要想取得最大值,其方向必须是梯度的方向,其最大值就是梯度的模。

6、梯度的物理意义是什么?

梯度值是一个向量值,它在坐标轴上表示一个箭头,即指向,方向导数按照它的指向才能取得最大值。

方向导数是标量,表示在不同方向中函数增长的快慢,朝着最大方向导数所指的方向,函数增长的才是最快的。

本教程共117节,当前为第12节!
本教程最新修订时间为:2026-05-08 11:10:53