《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-24 更新时间:2025-01-30 阅读次数:1826 次

什么是自然梯度?

理解自然梯度之前,我们必须理解传统梯度下降。

假设我们有一个神经网络,然后调整这个网络的参数,最后网络的输出在某种程度上发生了变化。在大多数情况下,我们会有一个损失函数来衡量和指导网络的输出应该如何变化。利用反向传播,我们计算每个网络参数对损失函数的导数,利用这些导数我们可以更新网络参数目的是让损失函数变得最小,我们称这些导数为梯度。

衡量损失函数变小或变大的指标是距离。我们如何定义距离呢?在传统梯度下降法中,距离是指参数空间中的欧氏距离。然而,根据调整参数的多少来定义“距离”并不总是正确的。为了形象化,我们来看两对高斯分布:

两个分布中,均值都从-1变化到1,距离都是2。然而,很明显,第一个分布的变化比第二个大得多。

自然梯度的作用是重新定义我们更新参数的“距离”指标。实际上,并非所有参数都相等,与其平等地对待每个参数的变化,我们需要根据每个参数的变化对网络的输出分布的影响程度来调整它。

自然梯度与传统梯度的区别是什么?

在传统梯度下降中,参数更新方向由损失函数的梯度决定,但未考虑参数空间的几何特性。在自然梯度中引入了Fisher信息矩阵,它衡量了概率分布对参数变化的敏感度,用于描述参数空间的曲率。自然梯度通过Fisher信息矩阵调整梯度方向,使其在概率分布的几何空间中更合理。

自然梯度的计算步骤

第一步:计算传统梯度。计算损失函数对参数的梯度。

第二步:计算Fisher信息矩阵。根据当前参数估计Fisher信息矩阵。

第三步:调整梯度方向。用Fisher信息矩阵的逆矩阵乘以传统梯度,得到自然梯度。

第四步:参数更新。按自然梯度方向更新参数。

自然梯度的计算公式

$$\tilde{\nabla} L(\theta) = F^{-1}(\theta) \nabla L(\theta)$$

$\tilde{\nabla} L(\theta)$是自然梯度

$F(\theta) \nabla$是Fisher信息矩阵

$L(\theta)$是传统梯度

自然梯度的优点

(1)更快的收敛。考虑参数空间的几何特性,通常收敛更快。

(2)更好的优化性能。在高维或复杂模型中表现更优。

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