【人工智能】TF-IDF以及BM25的计算逻辑


1 前情提要 在基于规则的词匹配算法中,首先需要做的事分词,我们先要有一个覆盖内容尽可能大的词表,然后对查询Query进行拆分,然后才能使用词袋算法计算词相关性数值。 我们假设词表为V,大小假设为26000。 2 TF-IDF Term Frequency - Inverse Document Fr

【数学】机器学习中的信息量、熵、交叉熵、KL散度


1 背景概述 在机器学习中,经常使用到交叉熵、KL散度,那么它们是如何由来、为何奏效? 在有监督学习中,通常有一个当前模型的概率分布以及目标概率分布,我们希望达到的效果是让当前的概率分布尽可能的去拟合目标概率分布,那么这个时候需要一个函数,它需要具备描述两个概率分布的差异的能力。 现在我们假设目标分

【大模型】Qwen2.5-Omni 技术报告

报告链接:Qwen2.5-Omni Technical Report 1 概述 下图为Omni的应用场景概述图,主要思想就是让多模态数据(文字、图片、视频、音频)输入模型,然后通过文字大模型(Thinker)进行理解,然后配合语音大模型(Talker)进行语音输出。 它的整体架构如下: 2 技术细节

【大模型实践】Lora微调Qwen2.5-1.5B大模型(外科问诊)


实验所用的设备是单卡4090 24GB,在验证阶段使用了KV cache所以总共需要至少21GB的显存,才推荐完成这个微调操作。 在10万左右训练数据集、使用Lora方法、半精度主干网络权重、3 Epoch的情况下,单卡微调时间大约3小时半。 0 原始数据预处理 0.1 构造指令微调数据 这一步主要

【大模型优化】利用GLU改进FFN


1 GLU 结构 如上图所示,激活函数使用swish为例(这是可以替换的),GLU 引入了两个升维线性层,GLU线性门控单元的FFN块计算公式: \text{GLU}(x) = xV \cdot \sigma(xW + b) \quad FFN_{GLU} = (xV \cdot \sigma(xW

【大模型优化】长度外推问题


长度外推问题,就是要考虑编码的维度,又要考虑能表示的范围 这是一个在机器学习领域常见问题,包括从线性回归开始就有类似的问题,也就是如何让机器理解和表达训练数据数值范围之外的数据。 1 进制表示到直接外推 进制表示: 假设我们有一个1000以内(不包含1000)的整数N要作为条件输入到模型中,那么要以

【大模型】位置编码


1 绝对位置编码 1.1 Transformer的位置编码 加在embedding上,但是由于使用的是sin、cos 交替,可以通过线性变换矩阵得到其他位置的表示,所以可以期望他包含了相对位置的信息,而且由于三角函数有显示的生成规律,所以可以期望有外推性质 PE(Positional Encodin

【大模型预训练】数据预处理


1 数据来源 整个预训练阶段最重要的就是数据的获取和处理。预训练的数据量级在10T tokens,继续预训练则至少在100B tokens 的量级 预训练阶段涉及学习大量数据,以全面了解世界及其各种复杂性。这不仅包括基本的语言能力,还包括诸如math、code和逻辑推理等高级技能,所以需要收集大量的

【大模型优化】常见激活函数


1 Sigmoid 缺点: 输入较大或较小时候梯度接近于0,容易导致梯度消失 函数输出不是以 0 为中心的,梯度可能就会向特定方向移动,从而降低权重更新的效率 Sigmoid 函数执行指数运算,计算机运行得较慢,比较消耗计算资源 f(x) = \frac{1}{1 + e^{-x}} f'(x) =

【大模型优化】Attention计算复杂度优化


1 Sparse Attention 主要思想是认为多数情况下,长距离的注意力是少数的,所以削减远距离注意力,成为稀疏注意力机制。 如下为原本的注意力权重分布: 从注意力矩阵上看除了相对距离不超过k的、相对距离为k,2k,3k,…的注意力都设为0 ,这样一来Attention就具有“局部紧密相关和远

【大模型实践】开源项目NanoGPT实践


1 参数 n_head = 4 # 多头注意力的头数 n_layer = 4 # transformer层数 dropout = 0.0 # dropout率 context_size = 32 embd_dim = 64 batch_size = 16 lr = 1e-3 epochs =

【大模型】文本大模型的Embedding


1 介绍 关于词向量与Embedding: Embedding是以每个字在给定分布随机初始化的随机向量而组成的可学习参数矩阵,也就是一个全连接Dense层,其以onehot为输入,稠密向量为输出,即词向量,因此在实现上,用lookup查表来代替矩阵乘积以提高性能。PyTorch中常用的实现为nn.E

【大模型】文本大模型的Tokenization


1 分词粒度 1.1 词粒度 word 英文天生空格分开词汇,中文可以使用jieba分词工具 优点: 词的边界和含义得到保留 缺点: 词粒度的词表由于长尾效应可能会非常大,包含很多的稀有词,存储和训练的成本都很高,并且稀有词往往很难学好 OOV(out of vocabulary)问题,对于词表之外

【大模型】Full-FT与BitFit


1 全参数微调(Full-FT) 顾名思义,全参微调(Full-Fine-tuning)类似于预训练阶段,使用目标领域的少量语料对整个模型进行微调。这种方法虽然实现简单,但灵活性较低,且对计算资源的需求较高。 2 BitFit 原论文:[2106.10199] BitFit: Simple Para

【大模型】大模型量化


1 大模型量化基础 1.1 极大值量化(对称量化) 1.2 零点量化(非对称量化) 2 量化 2.1 动态量化 运行时量化:在模型推理阶段,动态计算激活值的量化参数,以适应不同的输入数据。 量化范围:通常仅对权重进行预量化,而激活值则在推理时实时量化。 数据依赖:

【学算法】LC 3095、3097. 或值至少 K 的最短子数组(I、II)

算法 

3095. 或值至少 K 的最短子数组 I 3097. 或值至少为 K 的最短子数组 II 题解 class Solution { public: int minimumSubarrayLength(vector<int>& nums, int k) { int ans =

【学算法】LC 729、731、732. 我的日程安排表(I、II、III)

算法 

题解 class MyCalendarTwo { public: MyCalendarTwo() { } // 更新线段树的某个区间 void update(int start, int end, int val, int l, int r, int idx) {

【大模型】Adapter系列微调方法


1. Adapter Tuning Adapter Tuning 通过在 Transformer 的 多头注意力机制 和 FFN 之后插入 瓶颈结构 的 Adapter 模块,实现了参数高效微调。其设计简单、高效且通用,适用于多种任务和模型。 2. Adapter Fusion AdapterFus

【学算法】LC 3218、3219. 切蛋糕的最小总开销(I、II)

算法 

3218. 切蛋糕的最小总开销 I 3219. 切蛋糕的最小总开销 II 题解 class Solution { public: long long minimumCost(int m, int n, vector<int>& horizontalCut, vector<int>& vert

【学算法】LC 169. 多数元素

算法 

169. 多数元素 1 题解 class Solution { public: int majorityElement(vector<int>& nums) { int ans = nums[0], count = 1; for (int i = 1; i <

【学算法】LC 283. 移动零

算法 

283. 移动零 题解 class Solution { public: void moveZeroes(vector<int>& nums) { int n = nums.size(); int i = 0, j = 0; while (j

【深度学习】损失函数的使用场景和特性


1. 均方误差(Mean Squared Error, MSE) 使用场景: 回归问题。 特性: 计算预测值与真实值之间的平方差,然后取平均。 对大误差非常敏感,因为误差被平方。 平滑且连续,易于优化。 公式: \text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i

【深度学习】广义的监督学习和N-shot


1 广义的监督学习 1.1 全监督学习(Supervised Learning) 定义 模型在标注数据(输入-输出对)上进行训练,目标是学习从输入到输出的映射关系。 训练数据包含明确的标签(即每个输入数据都有一个对应的正确输出)。 特点 数据需求:需要大量标注数据。 目标:学习输入和输出之间的精确映

【学算法】LC 52. N 皇后 II

算法 

52. N 皇后 II 题解 class Solution { public: int totalNQueens(int n) { int ans = 0; vector<int> queens(n); vector<int> col(n

【学算法】LC 3261. 统计满足 K 约束的子字符串数量 II

算法 

3261. 统计满足 K 约束的子字符串数量 II 题解 class Solution { public: vector<long long> countKConstraintSubstrings(string s, int k,

【学算法】LC 3249. 统计好节点的数目

算法 

3249. 统计好节点的数目 题解 class Solution { public: int countGoodNodes(vector<vector<int>>& edges) { int n = edges.size() + 1; vector<vecto

【学算法】LC 3251. 单调数组对的数目 II

算法 

3251. 单调数组对的数目 II - 力扣(LeetCode) 超时方案 class Solution { public: int countOfPairs(vector<int>& nums) { const int MOD = 1000000007; i

【深度学习】Decomposable Attention Model


1 整体结构 可分解注意力模型:Decomposable Attention Model 2 多层感知机 (MLP) def mlp(num_inputs, num_hiddens, flatten): net = [] net.append(nn.Dropout(0.2))

【深度学习】Bert结构以及预训练


1 Bert模型 先看看Bert做了什么: 静态词嵌入(如word2vec和GloVe): 特点:预训练的向量是固定的,同一个词在不同上下文中使用相同的向量。 局限性:无法处理一词多义或复杂语义,因为它们不考虑词的上下文信息。 上下文敏感的词表示: ELMo: 特点:使用双向编码,即考虑词的左侧和右

【学算法】LC 638. 大礼包

算法 

638. 大礼包 - 力扣(LeetCode) 题解 class Solution { public: int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs) {