随笔分类 -  PyTorch

摘要:总览 比起从零训练或是全量微调,使用 peft 库对预训练模型进行微调是更经济的做法。adapter 是 peft 独有的概念,可向预训练模型添加的额外的少量可学习参数。 peft 库是支持对同一基础模型附上多个 adapters 的,但文档写得不是很明了。本文针对需要对多个 adapters 的情 阅读全文
posted @ 2024-07-12 12:15 倒地 阅读(1572) 评论(0) 推荐(0)
摘要:使用 .numel() 方法可以统计模型的参数量。 以下代码摘自 In-context Autoencoder (ICAE) 的代码仓库。输入 nn.Module,统计该模型的参数量和可训练参数量: def print_trainable_parameters(model): trainable_p 阅读全文
posted @ 2024-06-28 10:48 倒地 阅读(291) 评论(0) 推荐(0)
摘要:总览 一般的机器学任务是,给定一个输入,预测其对应的的标签、值或一组值。这样的任务使用像是交叉熵损失 Cross-Entropy Loss 和均方误差损失 Mean Square Error Loss 就行。度量学习 Metric Learning 则不一样,它的目标是预测不同输入的相对距离。例如, 阅读全文
posted @ 2024-06-04 17:51 倒地 阅读(369) 评论(0) 推荐(0)
摘要:总览 度量学习 Metric Learning 的目标是预测不同输入的相对距离。例如衡量两张人脸的相似程度,或是推理两句话表达含义的相似度。通常做法是,让模型使用各种输入 生成代表特征的 embedding 向量,然后用向量间的距离衡量这些输入的相似度。 至于如何计算 embedding 向量间的距 阅读全文
posted @ 2024-06-04 11:42 倒地 阅读(300) 评论(0) 推荐(0)
摘要:总览 Gradient Boosting 梯度提升,是一种强大的 ML 技术,用于回归和分类问题。 弱学习算法通常更易发现、更易训练。Boosting 系列算法的基本思想是将弱基础模型组合为一个强大的集成。 Gradient Boosting 的基本思想是:不断重复生成弱学习器,每次生成弱学习器的目 阅读全文
posted @ 2024-05-12 20:09 倒地 阅读(465) 评论(0) 推荐(0)
摘要:总览 HuggingFace 的这篇文章总结了一系列节约显存的方法,非常全面。 训练时显存占用的组成: 模型参数 优化器状态 输入张量和其他临时张量 激活值 梯度 通信缓冲 “激活值” 可能有点难理解。这是指像是 dropout 的 mask、LayerNorm 的 \(\mu\ \sigma^2\ 阅读全文
posted @ 2024-04-21 00:05 倒地 阅读(545) 评论(0) 推荐(0)
摘要:空洞卷积 Dilated Convolution 通常的卷积操作,除了需要指定输入输出通道数,还需要确定卷积核大小 kernei_size、步长 stride、填充大小 padding。 Conv1d(384, 48, kernel_size=3, stride=1, padding=1) 空洞卷积 阅读全文
posted @ 2024-04-08 11:47 倒地 阅读(196) 评论(0) 推荐(0)
摘要:本文总结 Transformer 和 attention 机制相关的 trick。留下学习痕迹。 Multi Query Attention (MQA) 早在 2019 年就被提出,但最近才被重视。 相比 Multi Head Attention,MQA 让多头注意力层的各个 head 共享同一份 阅读全文
posted @ 2024-04-06 22:30 倒地 阅读(222) 评论(0) 推荐(0)
摘要:归一化Normalization BatchNorm 的初衷是解决 Internal Covariate Shift 问题。尽可能将 mini-batch 归一化到标准正态分布,使得网络层的输出分布趋于稳定。 Internal Covariate Shift 问题简单来说,是网络学习更新权重后可能会 阅读全文
posted @ 2024-04-02 23:50 倒地 阅读(992) 评论(0) 推荐(1)
摘要:概述 长短期记忆 LSTM(Long Short Term Memory),该类型的神经网络可以利用上输入数据的时序信息。对于需要处理与顺序或时间强相关数据的领域(自然语言处理、天气预测等)相当合适。 GRU(Gate Recurrent Unit)可以视为 LSTM 的简化版本。运算量更小,却能达 阅读全文
posted @ 2024-03-27 23:27 倒地 阅读(250) 评论(0) 推荐(0)
摘要:概述 变分自编码器(Variational Auto-Encoders,VAE)是自编码器 AE 的变体,由 Kingma 等人于 2014 年提出的生成式网络结构。以概率的方式描述潜在空间,在数据生成方面潜力巨大。 自编码器 AE 自编码器(Auto-Encoder,AE),是一种无监督式学习模型 阅读全文
posted @ 2024-03-25 23:27 倒地 阅读(1750) 评论(0) 推荐(1)
摘要:参考这个问答,有两种方法。 第一种,在定义 nn.Sequential 时传入 OrderedDict 类型变量。 import collections import torch model = torch.nn.Sequential( collections.OrderedDict( [ ("co 阅读全文
posted @ 2024-03-18 21:26 倒地 阅读(260) 评论(0) 推荐(0)
摘要:概述 激活函数(Activation functions)能令神经网络产生非线性变化,增强网络表达能力,在设计网络时必不可少。 各种激活函数 激活函数 表达式 第一印象 Sigmoid \(\frac{1}{1+e^{-x}}\) 最早使用的激活函数之一 Tanh \(\frac{e^{2x}-1} 阅读全文
posted @ 2024-03-16 22:49 倒地 阅读(240) 评论(0) 推荐(0)
摘要:自定义 Dataset 类 PyTorch 允许自定义 Dataset 类,并由此获得 DataLoader,能方便训练时获得 batch: from torch.utils.data import DataLoader, Dataset import h5py import os class Ra 阅读全文
posted @ 2024-03-01 21:22 倒地 阅读(35) 评论(0) 推荐(0)
摘要:在用 PyTorch 训练不同模型时,需要编写很多重复的逻辑。一个工程的代码无可避免地变得越来越长,难以管理。PyTorch Lightning 作为一个对 PyTorch 二次封装的框架,能让训练逻辑的编写像堆积木一样秩序井然。 虽然叫做 lightning,这个库的学习成本并不低。好在一但熟悉, 阅读全文
posted @ 2024-01-14 20:05 倒地 阅读(1077) 评论(0) 推荐(1)
摘要:F1 score 与 平均精度 mAP 可以衡量分类模型的性能。 首先先看精确率与召回率的概念。 精确率与召回率 对于某方概率极低的逻辑回归(例如某种罕见病症的确诊),单纯的准度(是否能正确判断病人是否得病)并不足够。毕竟,若算法只会给出 negative 的判断也能拥有高准度。 真阳性(TP),假 阅读全文
posted @ 2024-01-14 13:57 倒地 阅读(378) 评论(0) 推荐(0)
摘要:开端 若在网络的 forward 过程中使用 clamp 函数对数据进行截断,可能会阻断梯度传播。即,梯度变成零。 不妨先做一个实验。定义一个全连接网络 fc,通过输入 input_t 获得结果 pred,其值为 \(0.02\): from torch.nn import functional a 阅读全文
posted @ 2024-01-10 17:29 倒地 阅读(1291) 评论(0) 推荐(0)
摘要:BatchNorm 层 为了实现输入特征标准化,batch norm 层会维护一个全局均值 running_mean 和全局方差 running_var。网络 train() 时进行统计,eval() 时使用统计值。 除此之外,可选 weight 权重和 bias 权重,这两个权重是会持续参与到网络 阅读全文
posted @ 2024-01-07 23:10 倒地 阅读(55) 评论(0) 推荐(0)
摘要:使用混合精度的代码示例 以非常基础的训练代码片段为例: for epoch in range(epochs): model.train() for i, (images, labels) in enumerate(loader_train): images = images.to(device) l 阅读全文
posted @ 2023-12-29 01:05 倒地 阅读(122) 评论(0) 推荐(0)