Young
东北大学数据科学硕士
导航
技术写作 - 学习笔记和总结
联系我
不论是交流,还是单纯唠嗑,都欢迎!
GitHub: @YoungZ2357
学生邮箱:zhang.q4@northeastern.edu
私人邮箱:zqy2357@outlook.com
东北大学数据科学硕士
技术写作 - 学习笔记和总结
不论是交流,还是单纯唠嗑,都欢迎!
GitHub: @YoungZ2357
学生邮箱:zhang.q4@northeastern.edu
私人邮箱:zqy2357@outlook.com
1.拉格朗日乘数法 1.1 基本定义 拉格朗日最早提出的是针对等式约束的拉格朗日乘数法 考虑如下的优化问题: $$ \begin{aligned} & \text{minimize} \quad & f_0(x)& \\\\ & \text{subject to} \quad & h_i(x) & = 0, \quad i=1, \cdots, m \end{aligned} $$则有拉格朗日函数: $$ L(x, \nu) = f(x) + \sum_{i=0}^m \mu_i h_i(x) $$其中$\mu$为对应等式约束的拉格朗日乘子(或拉格朗日乘数)。拉格朗日函数的形式化表达会在稍后介绍。 拉格朗日乘数法的一般求解步骤如下: 构造拉格朗日函数 求取拉格朗日函数对每一个变量的偏导(梯度),令其为0。这一步并不要求函数是凸的 求解2.中得到的方程组,得到最优点 具体的原理在稍后的小节介绍 由此可见,拉格朗日乘数法在一定程度上将问题转化为了无约束优化问题,整个求解步骤无需额外考虑约束方程带来的影响,其效果已经被拉格朗日函数考虑在内 1.2 最优性条件 最优性必要条件为:在局部最优解 $x^\*$ 处要满足: 1.2.1 平稳性条件 最优点一定是(拉格朗日函数的)驻点 $$ \nabla_x L(x^\*, \mu^\*) = \nabla f(x^\*) + \sum_j \mu_j^\*\nabla h_j(x^\*)=0 $$补充概念:驻点与鞍点 驻点: 对于函数$\mathbb{R}^n\rightarrow \mathbb{R}$,若在点$x^\*$处梯度为零,即: $$ \nabla f(x^\*) = 0 $$ 则称$x^*$为函数$f$的驻点 ...
该模块可作为开发物件之一 初步方案:符合语言的Seq2Seq类模型+PRCA调度逻辑微调 1 文献目标 问题 LLM参数太多,调参成本有限 调整logits输出无法适用于通过API提供服务的黑盒模型 解决方案 创建即插即用PRCA 适配器 PRCA模块和RECOMP信息压缩器处于同一生态位,都属于RAG适配器(Adapter)。具体实现上,可以只实现调度部分, 2 具体实现 2.1 训练潜在问题 PRCA模块本身也是一个生成式的模型,它与[[RECOMP(arXiv2310.04408)论文精读笔记#2.3 Abstractive Compressor| Abstractive Expressor]]相似,但是PRCA的训练信号来自于奖励值,而不是来自于LLM和自监督。 PRCA拦在LLM和文档之间的特点带来了如下问题: 文档先经过PRCA吗,才给到LLM,使得检索质量、PRCA加工质量和生成器能力耦合在一起,形成黑箱,难以判定PRCA的实际效用 LLM本身也是个黑盒,无法从中获取梯度以传递给PRCA,标准的监督学习路径被截断 这也是RECOMP可能遇到的问题 PRCA通过划分信息提取阶段和奖励驱动阶段来解耦生成能力和内容调度能力的评估 2.2 信息提取阶段(Contextual Extraction Stage) 第一阶段遵从常规的序列到序列模型微调流程,其目标为: $$ min \ L(\theta) = -\frac{1}{N}\sum_{N}^{i=1} C_{truth}^{(i)}\log(f_{PRCA}(S_{input}^{(i)}:\theta)) $$ 符号: $C_{truth}^{(i)}$: 真实标签或者期望答案。论文原文没有给出具体获取途径,需要单独设计 $f_{PRCA}$: PRCA神经网络,表达前向传播 $S_{input}^{(i)}$: 查询 原论文中,$f_{PRCA}$使用了BART-Large,此处可以用任意序列到序列模型替代,或更改预训练数据集,以适配具体需求和语种 此处,$C$和$S$都是自然语言序列,具体获取方法为用序列到序列的tokenizer来分别处理,以得到可以被计算机处理的数组数据。 信息提取阶段是PRCA训练的基础,其作用为让序列到序列模型具备文本输出能力或适应领域知识。 2.3 奖励驱动阶段(Reward-Driven Stage) 2.3.1 问题定义 第二阶段通过强化学习微调PRCA,使其生成的上下文更能帮助下游生成器产生正确答案。 具体而言,PRCA学习提取和组织信息的方式,以最大化生成器输出与真实答案的相似度。 需要注意的是,在PRCA的设计下:为保障模型的通用性,LLM被视作一个黑盒,只能输出自然语言,允许不输出如logprob,梯度等内部状态。其作用/目的如下: 适配闭源模型 - 可使用任何提供文本API的LLM作为生成器(如GPT-4、Claude、Gemini等),无需访问模型内部参数或梯度 跨模型迁移能力 训练阶段:可使用成本较低的模型(如DeepSeek)作为奖励信号来源 推理阶段:训练好的PRCA可无缝切换到其他生成器(如Claude、GPT-4) 降低训练成本(使用便宜的API训练)提升推理质量(使用更强的API推理) 规避ToS限制(某些模型禁止用输出训练,但可用于推理) 请注意检查LLM提供商的使用协议,以保障训练行为合规! 该阶段将问题建模为马尔可夫决策过程(MDP): ...
该模块可作为开发物件之一 0 概念澄清 RAG指的是一系列方法论,其概念更加抽象。检索强化语言模型(Retrieval-Augmented LM) 则是经外部知识强化后的语言模型,其概念具体到可以指定物件。 其中,在该文章语境下,RALM的检索功能被定义为语言模型的一部分,而RAG则允许检索功能被放置在任何位置,包括但不限于语言模型内部和外部挂载模块。为作区分,之后的部分将明确标注检索强化生成技术的作用位置,即模型内和模型外 1 文献目标 1.1 概览 问题 模型外的RAG技术会消耗更多token,长文本效果更明显 难以提取长文本上下文 无关文本干扰模型 解决方案: 在预置和模型之间插入信息压缩模块。该文献提出了两种信息压缩模块。 “预置”是指整合查询和文本块并准备输入LLM的步骤,它被定义在Naive RAG架构中的Generation操作开端。 2 具体实现 两个模块都可以用LoRA微调,推荐应用于编码-解码结构 2.1 问题定义 给定输入序列$x$,目标输出$y$和一组检索到的文档$D = [d_1, d_2, \cdots, d_n]$,压缩器的任务是: 生成一个摘要$s$,使得: $s$比$D$短得多 当$s$被预置到$x$前输入语言模型$M$时,模型生成$y$的概率最大化 $s$的内容应该能被$D$所蕴含 压缩器的任务与花书中定义的序列生成定义相对接近,其本身超越传统的监督学习任务框架。 该文献的方法将语言模型视为黑盒并不作更改。 2.2 Extractive Compressor 原论文模型参数量110M,考虑量化后体积还能进一步缩小 Extractive Compressor将问题定义为ranking问题,即直接将句子排序、拼接并预置。Extractive Compressor使用双编码器结构,通过嵌入句子,计算相似度来衡量语料对回答问题的有用程度。 推理过程如下: flowchart LR subgraph A [输入预处理与编码] A1[“文档集D<br>(多篇文档)”] --> A2[“分句”] A2 --> A3[“句子集合S<br>(s₁, s₂, …, sₙ)”] A4[“用户查询 x”] end subgraph B [句子评分与选择] A3 -- “句子编码器<br>enc_θ(sᵢ)” --> B1[“句子向量”] A4 -- “查询编码器<br>enc_θ(x)” --> B2[“查询向量”] B1 --> B3(“点积/余弦相似度<br>计算得分”) B2 --> B3 B3 --> B4[“按得分排序<br>选出Top K个句子”] end subgraph C [输出拼接] B4 --> C1[“压缩后的摘要 s<br>(Top K 句子的直接拼接)”] end A --> B --> C 训练流程大概如下: ...
1 文献目标 问题: LLM缺乏领域针对性知识的获取,如相关知识及专有名词 SOTA LLM通常是黑盒,缺乏透明性且成本高昂导致难以针对领域只是微调 能承担微调费用的用户有隐私暴露风险 解决方案: 通过instruction fine-tuning,在与训练阶段将指定领域的知识融入PKG模块 提问时,PKG先生成领域知识,领域知识传递给黑盒LLM辅助作答 2 具体实现 套用Generate-Read 的Modular RAG范式 2.1 内容生成 得到问题$Q$后,LLM通过最大化后验估计(MAP)来生成回应 $$ \hat{A} = argmax_{A} P(A|Q, M^{LLM}) $$ 其中$M^{LLM}$是黑盒LLM的参数。该公式含义为:在给定查询$Q$和LLM参数$M^{LLM}$的情况下,总是返回“最可能”的答案。该公式是直接使用LLM时的答案返回机制。 2.2 知识对齐 此时向问题传入PKG模块,其参数为$M^{PKG}$。该模型同样通过最大后验估计来生成回答,此处仅处理背景知识: $$ \hat{K} = argmax_KP(K|Q, M^{PKG}) $$ 即,通过已有的PKG模块$M^{PKG}$,总是返回“最可能”的背景知识。 这一步的实现具体为使用 instructions, input, response三元组的形式来控制PKG模块的输出,大概模板具体如下: <元指令,告诉模型接下来的输入数据格式是什么,让模型清楚知道自己在干啥> ### Instruction <用于PKG模块的查询> % 例如: ### Input <具体输入的指令和数据> 例如: ### Response: <期望输出> % 在此编写你希望模型回复的形式,例如具体的计算过程,要不要用某些指定框架实现,怎么呈现背景知识 以下是一个具体的例子 The following content is an instruction of how to solve a background knowledge providing problem, which contains "instruction", "input" and "expected output". You need to follow such steps for further queries and return content similar to "expected output" descriped below. ### Instruction Generate background knowledge that helps with data mining problems. ### Input What is the average salary. Table: | name | salary | | Alice | 70000 | | Bob | 80000 | ### Output To calculate average: - Sum: 70000+80000=150000 - Count: 2 employees - Average: 150000 / 2 - 75000 2.3 强化查询 将PKG模块融入到LLM中后,后验概率变更为: ...
论文链接:https://arxiv.org/abs/2312.10997 [[RAG survey.pdf|RAG综述]] 近期更新:2025.12.15,更新次数:1 1.RAG 1.1 什么是RAG 全称:检索增强生成(Retrieval-Augmented Generation)。 1.2 RAG作用阶段 RAG可作用于LLM生命周期的如下位置 预训练:需要自行训练 微调:需要本地部署 推理:这是RAG最早被应用的LLM生命阶段,也是我唯一能够执行操作的阶段 RAG技术早期注重于推理阶段应用,而后逐渐转向微调阶段和预训练阶段 1.3 RAG常见范式 Naive RAG Naive RAG只有indexing, retrieval和generation三个步骤,是一个线性的过程。 indexing: 包含数据预处理(PDF, markdown, etc. $\rightarrow$ txt),分块,获取嵌入向量 retrieval: 用相同的嵌入模型嵌入用户查询,然后检索文件块 generation: 用文件块扩充查询,让LLM生成答复 特别注意:文档嵌入是离线的,用户输入嵌入是在线的 该方法弊端: 检索部分在精确率和召回率存在不足 模型或将遭遇幻觉,导致输出不存在内容 强化存在障碍:输出不连贯、相似检索导致重复响应 Advanced RAG 该范式主要基于Naive RAG增加了预处理、后处理手段: 预强化(pre-retrieval):用于强化indexing和用户查询的效用,这是可操作的部分之一。包含如下方法 Query Routing: 要求某个查询使用指定的检索范围 Query Rewriting: 重写查询 Query Expansion: 扩展查询以具体化检索目标,防止找不到先验知识 后强化(post-retrieval):对查询进行进一步处理。这一步已经被主流RAG框架实现了,无需重新搓轮子。主要包含如下步骤 Rerank: 重排序文件块 Summary: 压缩文件块内容 Fusion: 组合多查询(包括不同的查询策略)整合文件块 Modular RAG 这是一种更优秀,更复杂的RAG范式。论文介绍了如下模块(有一部分是对Advanced RAG中改良方法的封装) 模块名 作用 Search 场景针对性、多数据源 Fusion 多查询策略,可并行 Memory 强化对话/文档上下文,无界记忆池 Routing 多数据源,更优查询路径 Predict 以LLM直接预测相关内容,降噪 Task Adapter 对下流任务定制retrieval方案 注:DeepSeek R1 使用的是全强化学习+GRPO,而非类似于Modular RAG + RL的过程 ...
1. 通用下降方法 1.1 下降方法基本形式 注:下降方法不会要求凸性,但拥有凸性会让求解得到显著保障。对凸性的定义见[[凸集与凸函数深入#2.1 凸函数定义|凸函数定义]] 我们先来回顾梯度下降的原型 - 下降方法 下降算法会产生优化点列 $x^{(k)}, k=1, \cdots$,其中 $$ x^{(k+1)} = x^{(k)} + t^{(k)}\Delta x^{(k)} $$且 $t^{(k)} > 0$(除非 $x^{(k)}$ 已经最优了)。该概念参考自[[Convex Optimization.pdf|Convex Optimization]]1 此处 $\Delta x^{(k)}$ 是一个向量,称为搜索方向,$t^{(k)}\Delta x^{(k)}$ 称为步径(实践中常为和参数同尺寸的多维数组);$k$ 代表迭代次数;标量 $t^{(k)}$ 是更新步长。 1.2 下降条件 对于所有下降方法,只要 $x^{(k)}$ 不是最优点,则都有: $$ f(x^{(k+1)}) < f(x^{(k)}) $$ 注意:下降算法默认为最小化目标函数,一切最初形式为"最大化目标函数"的问题(例如TD误差)均可被描述为如此形式 以下是下降方法的下降条件: 凸函数情况下,若选择 $d=y-x$ 方向更新,现考虑凸函数的[[凸集与凸函数深入#2.2.1 一阶条件|一阶条件]]2 $f(y) \geq f(x)+\nabla f(x)^T(y-x)$,要使函数下降,即 $f(y) < f(x)$,则必须有 $\nabla f(x)^{T}(y-x) < 0$。 此处,$\nabla f(x)^{T}(y-x)$ 即为方向导数 特征 搜索方向 步径 方向导数 数学定义 $d^{(k)}$ $\alpha^{(k)} d^{(k)}$ $\nabla f(x)^{T}(y-x)$ 几何含义 移动的方向 实际的位移向量 函数沿方向的变化率 1.3 通用下降法算法框架 通用下降方法通常有如下的步骤: ...
1.算法总体 逻辑回归通过将线性回归的输出映射到概率空间来预测事件发生给概率: $$ P(y=1|x;\theta)=h_{\theta}(x)=\frac{1}{1+e^{-\theta^Tx}} $$ 该公式表示:在模型参数为$\theta$,输入特征值为$x$的情况下,分类标签$y=1$的概率为$h_{\theta}(x)$。 该模型一次推理的伪代码大致如下: 算法:LogisticForward 输入:特征值$x$ 参数:向量$\theta$ 输出:数据为正类别的概率值$P(y=1|x;\theta)$ 计算线性组合$z = \theta^T x$ 应用Sigmoid函数:$p=\sigma(z)=1/(1+e^{-z})$ 分类决策:若$p\leq 0.5$,则$\hat{y}=1$,否则$\hat{y}=0$ 返回$\hat{y}$ 该模型通过梯度下降的训练过程伪代码大致如下: 算法:LogisticTrainWithGD 输入:训练集$(X, y)$,其中$X\in \mathbb{R}^{m\times n}$ 超参数:学习率$\alpha$,迭代次数$T$ 输出:参数向量$\theta$ 初始化参数$\theta$ # 初始化可以全0,也可以正态分布随机初始化等方法 对于$t=1$到$T$: 1. 初始化梯度$g\leftarrow 0$ 2. 对于$i=1$到$m$: 1. $p_i \leftarrow$ LogisticForward($x_i$, $\theta$) 2. $g \leftarrow g+(p_i-y_i)\cdot x_i$ # 计算新梯度 3. 更新参数:$\theta \leftarrow \theta - \frac{\alpha}{m}\cdot g$ # 梯度下降更新,详见目标函数部分 返回$\theta$ 要使用其他方法更新,用对应的公式替代计算梯度和更新参数的两个步骤即可 实践过程中通常表现为直接修改对应物理地址的值,而非返回值 2.目标函数 2.1 目标函数公式 给定训练数据$(x_i, y_i)$,目标函数为: $$ J(\theta)=-\frac{1}{m}\sum_{i=1}^m[y_ilog(h_{\theta}(x_i))+(1-y_i)log(1-h_{\theta}(x_i))] $$ 其中$h_{\theta}$是Sigmoid函数: ...
该笔记参考自如下内容:1) 教授Olga Vitek的课堂讲义;2)Pattern Recognition and Machine Learning - Christopher M. Bishop 1 预备知识 1.1 概率分布和样本 统计机器学习中,我们通常划分两个层面来讨论方法: 概率分布 层面 样本/数据 层面 “概率分布”是一个我们假设存在的一个抽象的分布,其描述了随机变量的行为规律。而样本/数据,则是“概率分布”的一次采样,或者“生成”结果。例如: 在鸢尾花数据集中,假设我们希望判定一个花朵是不是 $ \texttt{virginica} $ ,我们可以抽象地认为,每一朵花的特征向量 $ X $ 都是从某个潜在概率分布 $ p(X|Y=\texttt{virginica}) $ 中采样得到的,或者是从中生成的。 如果我们有具体的数据 $ \{(x_1, y_1), (x_2, y_2), \cdots\} $ ,我们可以使用这些数据来推断概率分布所描述的“规则”,得到一个对概率分布的参数估计 如果我们有概率分布本身,我们就可以利用它抽样或者生成更多同类型数据,也可以计算某个样本属于该分布的概率(这一点可以在数据为人为地、根据某种规则生成时达到) 需要注意的是,通过推断,我们只能得到参数估计,而永远无法获得概率分布本身。 1.2 模型的类别 若以概率论角度来理解监督学习,那么我们的最终目标就是得到一个良好的条件概率分布 $ p(y|x) $ ,即在已有随机变量 $ x $ 的前提下,得到 $ y $ 的概率。 我们通常可以直接建模 $ p(y|x) $ ,但通过贝叶斯定理,我们还可以通过更底层的信息来推导出我们的目标。 $$ p(y|x) = \frac{p(x|y)p(y)}{p(x)} $$接下来将详细介绍两种建模思路 ...