AI学习奠基笔记
现在还在准备期末,七月实习的时候慢慢更新,下面只是简略的目录
基础知识
- 数学知识,包括但不限于基本的高数、线代、概率论等
- LLM是什么
Pytorch
简单使用
1 | import torch |
输出
1 | tensor([[0.4385, 0.2989, 0.1078], |
这里就是输出了一个随机的5x3tensor(张量)。借助torch还可以生成指定大小的全0全1矩阵,并且可以指定dtype(数据类型),例如float32、bfloat16、long等等
张量是基于向量和矩阵的推广,我们可以将标量视为零阶张量,矢量视为一阶张量,矩阵就是二阶张量。而一张图片的RGB信息可以视为3维张量,图片集合就是4维张量,给图片带上时间序列,即视频则可视为5维张量
张量与矩阵类似,可以进行加减法,同时和多维数组类似可以做索引/切片等操作
广播机制:如果两个张量形状不同,按元素运算时,可能会触发广播机制,先适当复制元素使这两个 tensor 形状相同后再按元素运算
device
用于指定张量或神经网路模型所分配到的底层运算设备(CPU或GPU)
通常利用torch.cuda.is_available()动态检测GPU是否可用,并将对象通过.to(device)转移到显存中以发挥硬件加速优势
自动求导
PyTorch核心组件autograd提供了计算图上的自动梯度推导
创建张量时设置requires_grad=True即开始追踪作用于其上的所有运算
通过调用最终输出的.backward()自动完成反向传播链式求导
计算出的梯度会累加在各个参数的.grad属性中
并行计算
针对单卡显存不足或算力瓶颈时利用多GPU分担训练压力
最基础的实现方式为torch.nn.DataParallel,它在每个批次自动将数据切分至多张可用显卡
当前主推工业级方案为DistributedDataParallel(DDP),通过多进程方式运行,通信与同步效率显著更优
数据读入
主要依托Dataset与DataLoader这两个核心类实现数据集格式化与批量迭代
自定义数据集需继承torch.utils.data.Dataset并重写__len__和__getitem__以定义样本抓取逻辑
用DataLoader包裹数据集实例,从而便捷获得批次化(batching)、数据打乱(shuffle)及多进程预加载功能
模型构建
构建自定义神经网络的核心是将类继承自torch.nn.Module
在__init__构造函数中声明包含可学习参数的网络层(如线性层、卷积层)
在forward方法中通过组合上述定义的层与各类激活函数来精确描述数据的前向传递路径
损失函数
位于torch.nn模块下,用于定量评估模型前向预测结果与真实标签间的误差幅度
针对特定任务选择特定标准,例如回归任务常取nn.MSELoss,而多分类任务通配nn.CrossEntropyLoss
损失函数的计算结果将作为网络参数自动求导的起点标量
训练与评估
训练循环中每次迭代严格遵循前向传播、计算损失、反向传播与参数更新的流程
需通过model.train()与model.eval()进行状态切换,以保证Dropout等层在不同阶段表现出正确的行为
在验证阶段外层应套路被with torch.no_grad():上下文管理器包裹,借此关闭自动求导引擎以节约显存开销
优化器
torch.optim包含众多主流梯度下降衍生算法如SGD与Adam
初始化时需传入待优化的模型参数及其可迭代对象,并指定学习率等超参
单次更新的标准模式为调用optimizer.zero_grad()清空梯度、进行反向传播计算新梯度后调用optimizer.step()刷新参数
可视化
ResNet
transformer & attention & QKV
Transformer论文解读
这个会另开一篇文章

