lecture01
零样本学习(Zero-Shot Learning, ZSL):
模型可以在没有见过某种特定任务或类别的训练样本的情况下,直接完成对应的任务
利用知识迁移
- 模型在一个任务上训练时学到的知识,能够迁移到其他任务上
- 比如,模型知道“狗”和“猫”都属于“动物”,因此,即使没见过“狐狸”的图片,也可以通过“动物”这个概念推测“狐狸”可能属于“动物”
借助语义信息
- 零样本学习通常依赖于额外的语义信息(如类标签的描述、文本嵌入、图像特征等)
- 例如,在分类任务中,类别名称的文本描述可以帮助模型理解新的类别
关键技术:
- 共享特征空间
- 模型通过将已知类别的特征和未知类别的语义描述映射到同一个特征空间来实现知识迁移
- 例如,将图片嵌入和文本嵌入映射到一个共同空间,模型可以比较图片特征和文本描述的相似性
- 使用预训练模型
- 许多预训练语言模型(如GPT、BERT)和多模态模型(如CLIP)对零样本学习效果非常好
- 这些模型在大量多任务数据上训练,可以理解广泛的语义信息
- 多模态方法
- 跨文本和图像的模型(如CLIP)在零样本任务中尤为突出,它们通过学习文本和图像的对应关系实现任务迁移
- 共享特征空间
思维链(Chain of Thought, CoT):
一种用于大语言模型(LLM)的推理策略,通过让模型生成逐步的推理步骤,从而提高复杂任务(如数学推算、逻辑推理、问答等)的准确性和解释性
传统的模型往往直接给出答案,而思维链方法引导模型像人类一样,分步骤思考问题,提高了解决复杂问题的能力
主要策略:
- 逐步推理:将一个复杂问题分解成多个小的、容易解决的步骤,模型在推理过程中不仅生成答案,还给出详细的思路
- 显式中间步骤:思维链的中间步骤提供了解题过程的可解释性,便于诊断和改进模型的推理
- 提升模型性能:对于需要深度推理或多步骤计算的问题,思维链能显著提高模型的准确性
预训练语言模型生成
使用提示(Prompting)指导模型逐步推理
eg: 问题:如果一辆车以每小时60公里的速度行驶4小时,它行驶了多少公里? 答案: 1. 每小时行驶60公里。 2. 行驶4小时。 3. 总距离是 \(60 \times 4 = 240\) 公里。 答案是:240公里。
少样本学习(Few-shot Learning)
在输入中加入几个例子,让模型学习如何分步骤回答
示例1: 问题:如果小明有2个苹果,每个苹果价值3元,他总共有多少钱? 答案: 1. 每个苹果价值3元。 2. 小明有2个苹果。 3. 总价值是 \(3 \times 2 = 6\) 元。 答案是:6元。 问题:如果一辆车每小时行驶70公里,行驶3小时,它行驶了多少公里? 答案:
微调模型:将逐步推理的标注数据用来微调模型,使其能够生成思维链
算法、硬件、数据
AI设备性能指标:
FLOPS(Floating Point Operations Per Second): 浮点计算能力;FLOPS 是衡量设备计算能力的指标,表示设备每秒能执行的浮点运算次数
浮点数运算指的是计算机处理小数或大数(比如 1.23、0.0005 或 3.14)的加减乘除等操作
AI模型需要大量计算,比如神经网络中的矩阵乘法,FLOPS越大,计算能力越强,也就是能更快、更高效地处理任务
AI 和深度学习领域,常见的位数包括 16位(FP16)、32位(FP32) 和 64位(FP64),它们代表浮点数的不同精度,位数越多:表示的数值范围越大,精度越高(更接近真实值)
- FP32(32位浮点数):单精度浮点数,每个数占用 4 字节(32 位),传统的深度学习主要使用 FP32,计算精度和速度较均衡,通用深度学习
训练和推理任务
- FP16(16位浮点数): 半精度浮点数,每个数占用 2 字节(16 位),运算速度更快,因为每次操作处理的数据量更少,
推理阶段更常用
- FLOPS 的计算能力会因为浮点数精度不同而变化:同一个GPU算力:
- FP32:10 TFLOPS(每秒 10 万亿次 FP32 运算)
- FP16:20 TFLOPS(每秒 20 万亿次 FP16 运算)
- FP64:2 TFLOPS(每秒 2 万亿次 FP64 运算)
- 混合精度训练(Mixed Precision Training):
- 如( PyTorch、TensorFlow)支持混合精度训练:
- 使用 FP16 处理大部分运算以提高速度和节省显存
- 在需要高精度的地方(如梯度累积),切换回 FP32
- 如( PyTorch、TensorFlow)支持混合精度训练:
- FP32(32位浮点数):单精度浮点数,每个数占用 4 字节(32 位),传统的深度学习主要使用 FP32,计算精度和速度较均衡,通用深度学习
FLOPS 的计算依赖于硬件架构和运行的程序,基本公式如下:
FLOPS=Number of Cores × Clock Speed (GHz) × Operations Per Clock (OPC)
Number of Cores:处理器(CPU/GPU)的计算核心数,越多并行能力越强
Clock Speed:每秒钟的时钟频率,单位是 GHz(10 亿次/秒)
Operations Per Clock:每个时钟周期能执行的浮点运算次数
eg : NVIDIA RTX 3090
- CUDA 核心数:10496 个
- 时钟频率(Boost Clock):1.70 GHz
- 每个 CUDA 核心的运算能力(FP32):1 次浮点运算/周期
- Tensor Core 性能(FP16 混合精度):每个 Tensor Core 每周期可以处理 4 次浮点运算
- FP32 FLOPS = 10496 × 1.70GHz × 1OPC = 17843.2GFLOPS = 17.8TFLOPS
- FP16 是半精度浮点运算,使用
Tensor Core 时,每周期每个核心的运算能力为 FP32 的 4 倍
:FP16 FLOPS=4×17.8=71.2TFLOPS
Tensor Core 是 NVIDIA 针对 AI 和深度学习任务特别设计的硬件加速单元
- 在 FP16(半精度浮点)模式下,Tensor Core 每个时钟周期可以执行 4 次浮点运算
- 在 TF32 和 FP32 精度下,Tensor Core 也具有加速作用,特别是在进行矩阵运算时
- Tensor Core 更像是 加速器,提升了 GPU 在特定任务(如深度学习)中的表现,ensor Core 提升了 CUDA 核心 在 深度学习 和 低精度运算 中的计算能力,尤其是处理矩阵运算时,通过并行处理提升了整体性能
**显存(VRAM 或 Memory)😗*用于存储图形数据、纹理、渲染的帧和其他与显示相关的信息。显存对于 AI 设备(如 GPU)也非常重要,尤其是在 深度学习、训练 和 推理 中
显存通常用于存储图形渲染的 纹理、帧缓冲区、几何数据、顶点信息等
在 深度学习 中,显存用来存储训练过程中的 模型参数(如权重、偏置),以及 中间结果(例如在前向传播和反向传播过程中产生的激活值和梯度)
在 推理(inference)过程中,显存用于存储需要推理的数据批量以及网络结构和模型权重
GPU 需要快速处理大量数据。显存提供了快速的数据存储和读取通道,减少了从 主内存(系统 RAM)到 GPU 的数据传输延迟,提高了整体性能
如果显存不足,GPU 可能会变得 受限,因为无法容纳足够的训练数据或模型参数。在这种情况下,GPU 的计算能力可能会受到限制,即使它的 FLOPS 很高
显存的大小和性能:更大的显存允许 GPU 同时处理更多的数据,从而提升计算效率。对于 AI 训练和推理,显存的大小对处理 大规模数据集 或 复杂模型 的能力至关重要
批量大小(Batch Size):批量大小是深度学习训练中的一个重要参数。增加批量大小通常可以提升训练效率,但也需要更多的显存。如果显存不足,批量大小必须减少
显存容量和显存带宽:
- 训练复杂的深度神经网络时,模型的大小和数据的批量大小会占用大量显存。如果显存不足,可能会导致 内存溢出(Out of Memory)
- 显存带宽 是指显存能够在单位时间内读取或写入的数据量,通常以 GB/s(GB 每秒)为单位。高带宽显存可以提供更高的数据吞吐量,尤其是在需要处理大量并行数
-
设备 显存类型 显存大小 显存带宽 AI 算力(FLOPS) Jetson Nano LPDDR4(低功耗) 4 GB 25.6 GB/s FP32: 0.5 TFLOPS, FP16: 1 TFLOPS RTX 3090 GDDR6X 24 GB 936.2 GB/s FP32: 35.6 TFLOPS, FP16: 71.2 TFLOPS RTX 4090 GDDR6X 24 GB 1,008.0 GB/s FP32: 35.6 TFLOPS, FP16: 71.2 TFLOPS A100 HBM2 40 GB 或 80 GB 1,555 GB/s (40 GB 版本) 或 2,039 GB/s (80 GB 版本) FP32: 19.5 TFLOPS, FP16: 156 TFLOPS, Tensor Core FP16: 312 TFLOPS