转载学习:ObfusLM - 基于参数混淆的语言模型隐私保护训推方案
ObfusLM: Privacy-preserving Language Model Service against Embedding
Inversion Attacks
研究背景
近年来,随着大语言模型(LLM)能力的快速发展和AI基础设施的逐步完善,大语言模型即服务(LMaaS)在专业领域信息处理中得到广泛应用。在这类服务场景下,用户能够向云端服务器提交请求,对私有数据集进行精调和推理。但私有数据上传至云端,无疑给用户隐私信息带来了泄露隐患。
为了在提供服务的同时保护隐私信息,一些研究尝试通过同态加密(HE)、安全多方计算(SMC)及可信执行环境(TEE)实现安全的LMaaS。但这些方案均存在显著局限:基于密码学的方案效率极低,例如采用 HE 和 SMC 的安全推理方案 PUMA,在 LLaMA-7B 模型上生成单个词元,就需耗费数百秒;而可信硬件方案则要求服务商额外调配专用计算资源。这些限制增大了隐私保护技术在实际场景中落地应用的挑战。
为实现隐私保护与实用性的平衡,当前研究正在探索基于差分隐私(DP)和k-匿名化技术的隐私保护方案,通过对词元(token)和嵌入向量(embedding)施加扰动来保障用户隐私数据安全。然而,此类方法面临多重技术挑战:生成任务的适配性问题、嵌入反演攻击(Embedding Inversion Attacks, EIAs)的现实威胁,以及方案与现有LMaaS架构的兼容性难题。针对上述挑战,本文提出的ObfusLM框架创新性地实现了三重技术突破:
- 「多任务的支持能力:」 基于LLM架构特点,ObfusLM采用适用性广的模型混淆模块,实现输入-输出数据的双重混淆,可统一支持分类模型(如BERT)和生成模型(如GPT)的隐私保护。
- 「安全性理论分析:」 基于-匿名性理论框架,证明了ObfusLM框架对EIAs的抵御能力,并通过实验验证了对EIAs的抵御效果。
- 「实用的部署形态:」 ObfusLM框架仅需用户完成一次性的参数混淆处理,后续的精调与推理计算可完全由服务端本地处理计算,有效降低了用户的使用成本。
具体方案
工作流程
在LLM中,用户的输入文本与模型的词表与嵌入向量参数存在关联性。基于这一特点,ObfusLM框架利用模型混淆操作来掩盖这种关联性,从而达到用户输入文本的隐私保护。具体地,ObfusLM的工作流程包含以下三个阶段:
- 初始化阶段:服务器向客户端分发预训练语言模型组件,包括词汇表 、输入嵌入层权重矩阵参数 、生成模型的模型头权重矩阵参数。
- 模型混淆处理:用户接收到语言模型的组件后,执行模型混淆操作,得到经过混淆的词汇表与权重矩阵。用户将混淆权重发送给服务器,并将混淆词表保留在本地。服务器将这些混淆权重替换到原始模型中,得到混淆模型,并使用该混淆模型部署模型服务。
- 安全精调与推理:在请求精调或推理服务时,用户使用混淆词表处理文本与混淆词元索引之间的映射关系,而服务器则基于混淆词元索引完成计算。
如上图所示,ObfusLM框架中客户端和服务端的操作分工如下:
客户端操作
- 接收模型组件
从服务端获取预训练模型的初始组件:词汇表(Vocab)、输入嵌入层权重(\(W_{\text{emb}}\))、生成模型的模型头权重(\(W_{\text{head}}\))。
- 执行混淆操作
- 打乱词表顺序:对词汇表中的词元(token)进行随机重排。
- 混淆权重参数:
- 使用嵌入向量聚类算法(EmbedCluster)将语义相近的词向量分组。
- 通过嵌入向量合成算法(EmbedSynthesis)为每个词向量生成加噪的合成权重(添加Laplace噪声),生成混淆后的嵌入层和模型头权重(\(W_{\text{emb}}^{\text{obf}}\)和\(W_{\text{head}}^{\text{obf}}\))。
- 保留混淆词表:将混淆后的词表存储在本地,不上传至服务端。
- 处理私有数据
- 使用本地混淆词表对文本进行分词,生成混淆后的词元索引(如 8371,62,1640,...)。
- 将混淆索引上传至服务端进行精调或推理。
- 解码生成结果
- 接收服务端返回的混淆词元索引(分类任务的预测分数或生成任务的混淆序列)。
- 用本地混淆词表将索引还原为明文结果(如生成文本摘要)。
服务端操作
- 分发初始模型
向客户端提供预训练模型的词汇表、嵌入层权重、模型头权重等组件。
- 部署混淆模型
- 接收客户端发送的混淆权重参数(\(W_{\text{emb}}^{\text{obf}}\)和\(W_{\text{head}}^{\text{obf}}\))。
- 替换原始模型的权重,构建混淆模型并部署服务。
- 执行计算任务
- 精调(Fine-tuning):基于客户端上传的混淆词元索引数据集训练模型。
- 推理(Inference):
- 接收客户端的混淆词元索引输入。
- 运行混淆模型生成输出(混淆词元索引或分类分数)。
- 将结果返回客户端(不涉及明文数据处理)。
关键分工
- 隐私保护核心:客户端独享混淆词表,确保原始文本始终在本地;服务端仅处理无语义的混淆索引,无法通过嵌入反演攻击(EIAs)还原敏感信息。
- 效率优化:服务端承担计算密集型任务(模型精调/推理),客户端仅需轻量级的分词和解码操作。
此设计平衡了隐私性(抵御EIAs)与实用性(低客户端开销),支持分类(如BERT)和生成(如LLaMA)任务。
模型混淆
ObfusLM采用满足(k,ε)-匿名性的安全机制来混淆词元对应的嵌入向量,从而兼顾模型效果与隐私保护能力。在(k,ε)-匿名性要求下,任意一个嵌入向量e都可以被划分到一个大小为k的子集S中,混淆算法P需要保证子集中的任意两个嵌入向量e,e'∈S在经过混淆后只能以不高于e的概率被区分出来:Pr[P(e)∈O]≤eεPr[P(e')∈O],其中O是经混淆算法P处理后的输出嵌入向量子集。
在ObfusLM中,用户通过对词表和嵌入层、模型头的权重参数进行混淆来保护后续上传的隐私数据。具体地,用户将词表中的词元打乱,并以相同的顺序打乱模型的嵌入层和模型头的权重参数。经打乱的词表会始终保存在用户本地,而权重参数则需要发送给服务器。然而,仅通过顺序打乱无法提供足够的安全性,服务器仍然可以利用ELIA恢复出用户的隐私信息。因此,权重参数在发送给服务器前需进一步进行混淆。
ObfusLM提供嵌入向量聚类算法EmbedCluster和嵌入向量合成算法WeightSynth来保证嵌入层和模型头中混淆向量的(k,ε)-匿名性。
- 在【嵌入向量聚类算法】中,ObfusLM遍历所有的嵌入向量,并基于嵌入向量之间的余弦相似度将它们划分到聚类中。
- 在【嵌入向量合成算法】中,ObfusLM逐个处理已划分的向量聚类。对于聚类中的每个向量,ObfusLM基于该向量与其余向量的相似度得到嵌入向量的合成权重,并基于隐私保护参数ε添加Laplace噪声得到加噪合成权重。
- 最终,使用加噪合成权重与子集中的向量生成混淆向量。
图中展示了两个算法,分别是 EmbedCluster 和 WeightSynth。这两个算法主要用于处理嵌入矩阵和生成权重矩阵,通常在隐私保护的机器学习或数据合成领域中使用。
EmbedCluster
输入:
- 矩阵 ( \(X = \{x_i\}_{i \leq m}\) ):包含 ( m ) 个嵌入向量。
- 聚类大小 ( k )。
- 阈值比率 ( \(\beta\) )。
输出:
- 聚类索引集 ( \(\mathcal{M}\) )。
步骤:
- 初始化一个标记集 ( \(B = \{0\}_n\) ) 和一个聚类标记索引集 ($ \mathcal{M} = {}$ )。
- 计算嵌入矩阵中每一对向量之间的距离 ( \(D_{n \times n} = \{d_{i,j} = \text{CosSim}(x_i, x_j) | 1 \leq i, j \leq n\}\) )。
- 对于每个向量 ( i ):
- 将 ( S ) 设置为 ( \(\{i\}\) ) 并计算 ( \(I = \text{ArgSort}(D)\) )。
- 计算阈值 ( \(\gamma = \text{quantile}(D, \beta)\) )。
- 对于每个 ( j ):
- 如果 ( |S| = k ) 或 ( \(D[i, j] < \gamma\) ),则跳出循环。
- 否则,将 ( $S = S \cup {j} $),并将 ( B[j] = 1 )。
- 将 ($ \mathcal{M} = \mathcal{M} \cup {S}$ )。
- 返回 ( \(\mathcal{M}\) )。
目的:
这个算法的目的是通过计算嵌入向量之间的余弦相似度来聚类相似的向量。它使用阈值比率 ( $\beta $) 来决定哪些向量应该被分到同一个聚类中。
WeightSynth:
输入:
- 嵌入矩阵 ( \(X = \{x_i\}_{i \leq m}\) )。
- 聚类索引集 ( \(\mathcal{M}\) )。
- 隐私预算 ($ \epsilon$ )。
输出:
- 用于嵌入合成的权重矩阵 ( $W_{m \times m} $)。
步骤:
- 初始化一个混淆嵌入矩阵 ( \(W = \mathbf{0}_{m \times m}\) )。
- 对于每个聚类 ( l ):
- 让 ( $S = \mathcal{M}[l] $) 和 ( \(Y = \{X[s_i] | s_i \in S\}\) )。
- 对于每个 ( i ):
- 计算 ( $\sigma_{i,j} = \text{CosSim}(Y, Y[j]) $)。
- 让 ( \(u = \{u_j\}_{j \leq |S|}\) ) 其中 ( $u_j = \frac{e^{\epsilon \sigma_{i,j}/2}}{\sum_{k \leq |S|} e^{\epsilon \sigma_{i,k}/2}} $)。
- 让 ($ \Delta u = \max(u) - \min(u) $) 并评估 ( $u' = u + \text{laplace}(\Delta u / \epsilon) $)。
- 计算 ( $\tilde{u} = {\frac{u'j}{\sum e^{u'k}}} $)。
- 设置 ( $W[t_i, t_j] = \tilde{u}_j \(\) 对于 \(\) j \in [1, |S|] $)。
目的:
这个算法的目的是生成一个权重矩阵,用于嵌入合成。它通过计算聚类中向量之间的余弦相似度,并使用拉普拉斯机制来添加噪声以保护隐私。
算法实现:- import numpy as np
- def cos_sim(a, b):
- """计算两个向量的余弦相似度"""
- return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
- def embed_cluster(X, k, beta):
- """EmbedCluster算法"""
- n = X.shape[0]
- D = np.zeros((n, n))
- for i in range(n):
- for j in range(n):
- D[i, j] = cos_sim(X[i], X[j])
- B = np.zeros(n, dtype=int)
- M = []
- for i in range(n):
- if B[i] == 1:
- continue
- S = [i]
- I = np.argsort(D[i])
- D_i = D[i, I]
- gamma = np.quantile(D_i, beta)
- for j in I:
- if len(S) == k or D[i, j] < gamma:
- break
- else:
- S.append(j)
- B[j] = 1
- M.append(S)
- return M
- def weight_synth(X, M, epsilon):
- """WeightSynth算法"""
- m = X.shape[0]
- W = np.zeros((m, m))
- for l in range(len(M)):
- S = M[l]
- Y = X[S]
- for i in range(len(S)):
- sigma_ij = np.zeros(len(S))
- for j in range(len(S)):
- sigma_ij[j] = cos_sim(Y[i], Y[j])
- u = np.exp(epsilon * sigma_ij / 2) / np.sum(np.exp(epsilon * sigma_ij / 2))
- delta_u = np.max(u) - np.min(u)
- u_prime = u + np.random.laplace(loc=0, scale=delta_u / epsilon, size=len(u))
- u_tilde = u_prime / np.sum(u_prime)
- W[S[i], S] = u_tilde
- return W
- # 示例使用
- np.random.seed(0)
- X = np.random.rand(10, 5) # 10个样本,每个样本5维
- k = 3
- beta = 0.5
- epsilon = 1.0
- print(f"X:{X}\n")
- M = embed_cluster(X, k, beta)
- print("Cluster indices:", M)
- W = weight_synth(X, M, epsilon)
- print("Weight matrix:\n", W)
复制代码
这两个算法结合使用,可以在保护数据隐私的同时,对嵌入向量进行聚类和合成,适用于需要隐私保护的机器学习任务。
安全精调与推理
完成模型混淆后,用户可以在本地利用混淆后的词表对私有数据集进行分词处理,生成混淆词元索引后上传至服务器进行模型精调。
- 推理阶段,服务器基于混淆模型返回分类任务的预测分数或生成任务的混淆词元序列,仅持有混淆词表的用户可本地解码生成结果。该机制将计算密集型任务保留在服务端,同时通过词表与嵌入向量的混淆确保用户提示词与生成内容的隐私性,实现分类与生成任务的全流程隐私保护。
- ObfusLM框架对模型的训练(精调)是可选的,而非必需。具体说明如下:
- 1. 核心流程无需额外训练
- 模型混淆阶段:
客户端仅需对预训练模型进行一次性参数混淆(词表重排、嵌入向量聚类与合成),生成混淆权重后上传服务端。 → 此过程不涉及模型训练,仅修改权重参数。
- 推理任务:
若用户仅需调用现有模型能力(如文本生成、分类预测),可直接使用服务端部署的混淆模型进行推理,无需精调。 → 无需训练,直接处理混淆后的词元索引。
- 2. 精调(训练)为可选需求
- 适用场景:
当用户需用私有数据集定制模型(如领域适配)时,才需启动精调流程:
- 客户端用本地混淆词表处理私有数据,生成混淆词元索引;
- 服务端基于混淆索引精调混淆模型(更新模型参数)。 → 精调是用户按需触发的可选操作。
- 实验验证:
文档中精调实验(如BERT在GLUE任务、LLaMA在Alpaca数据集)显示:
- 精调后模型效果损失仅4%~6%(SST-2任务准确率89.11% vs 原始92.02%);
- 但若不精调,可直接使用预训练混淆模型推理。
- 3. 与训练方案的对比优势
方案类型是否需训练用户成本典型场景直接推理❌ 无需低(仅混淆+调用)通用任务(如问答、摘要)精调+推理✅ 需精调中(数据混淆+精调资源)领域定制(如医疗、金融)传统方案(如DP)✅ 需重训练高(全局加噪损害效果)兼容性差,效果损失大下图的应用示例能更好地将ObfusLM的实际效果展示出来。在这个场景中,用户在经过模型混淆与精调处理后,向部署在服务器上的语言模型服务请求推理。在请求过程中,敏感文本被转换成混淆的词元索引在用户与服务端之间传输。即使利用EIAs,服务器也难以精确还原用户侧的真实输入与输出结果。
实验结果
实验设置
我们在多个分类与生成任务上评估了ObfusLM的效果与安全性,相关实验运行在Intel(R) Xeon(R) Platinum 8336C CPU @ 2.30GHz,128GB RAM,4 NVIDIA A800-SXM4-40GB的机器资源上,并使用Debian GNU/Linux 11操作系统和CUDA 12.2。
- 数据集:分类任务使用GLUE评测集;生成任务使用Alpaca-cleaned和Databricks数据集。
- 模型:分类任务使用Bert-base模型;生成任务使用Llama3-8B模型。
- 基准方案:以DP-Forward、CAPE、TextObfuscator、SANTEXT+、CUSTEXT+和SentinelLMs作为对比的防御方案;使用KNN和InvBert嵌入反演攻击测试防御方案的安全性,并通过Topk恢复词元的正确率和明文与攻击恢复文本的RougeL指标量化安全效果。
效果对比
在分类任务中,ObfusLM仅降低约4%的BERT模型效果,相比基于词元混淆的隐私保护方案SANTEXT+和CUSTEXT+提升10%,且相比TextObfuscator和CAPE等依赖可信服务器的方案提升6%。同时,通过采用满足(k,ε)-匿名性的混淆算法,ObfusLM能够显著降低嵌入反演攻击的词元恢复成功率至20%~30%,有效缓解了用户的隐私泄露风险。
ObfusLM还支持生成任务,并能够同时保护输入与输出文本的隐私性。相比于分类任务,参数扰动更容易干扰生成任务的输出质量。尽管如此,ObfusLM仍能达到Llama3-8B模型在Alpaca-cleaned数据集上的效果损失在6%以内,并有效抵御反演攻击。
参数分析
我们进一步测试了ObfusLM在不同隐私参数下的效果与安全性。实验结果表明,聚类规模k与隐私预算e共同影响效用与隐私的平衡:增大k可提升匿名性(如k从5增至20时,Alpaca任务下对KNN攻击的防护效果提升近7倍),但会导致模型效果显著下降;e的减小虽能增强隐私保护,但同样加剧效用损失。在各种隐私参数的组合下,安全性与任务效用呈近似负相关。
安全性分析
ObfusLM框架主要采用以下隐私保护技术
1. 参数混淆技术(核心机制)
- 词表重排(Vocab Shuffling)
客户端对原始词表进行随机顺序打乱,生成混淆词表(仅本地存储),并同步打乱嵌入层(\(W_{\text{emb}}\))和模型头(\(W_{\text{head}}\))的权重参数。
- 嵌入向量混淆算法
- EmbedCluster算法:基于余弦相似度将语义相近的词向量聚类(聚类大小 \(k\) 控制匿名性)。
- EmbedSynthesis算法:为每个词向量生成加噪合成权重(添加Laplace噪声 \(\epsilon\)),合成混淆后的嵌入向量,满足 \(k\)-匿名性(攻击者无法以高于 \(1/k\) 的概率区分同一聚类内的向量)。
2. \(k\)-匿名性隐私保障
- 理论框架:通过聚类混淆确保每个混淆后的嵌入向量至少对应 \(k\) 个原始词向量,抵御嵌入反演攻击(EIAs)。
- 实验验证:将EIAs的词元恢复成功率降至20%~30%(如SST-2任务中KNN攻击Top1成功率仅19.98%),远低于基线方案(如SentinelLMs的100%)。
3. 客户端-服务端协同架构
- 客户端:
- 本地存储混淆词表,将敏感文本转换为混淆词元索引(如 8371,62,1640)。
- 执行轻量级分词和解码操作,原始文本永不离开本地。
- 服务端:
- 仅处理无语义的混淆索引,执行精调/推理(计算密集型任务)。
- 无法通过模型权重反推原始文本(因权重已混淆且无词表映射)。
4. 与传统方案的对比优化
- 优于差分隐私(DP):
- DP需全局加噪严重损害模型效果(如DP-Forward在SST-2任务准确率仅52.52%),而ObfusLM通过局部混淆保留89.11%准确率。
- 轻量替代密码学方案:
避免同态加密(HE)/安全多方计算(SMC)的数百倍计算开销(如PUMA生成单token需数百秒)。
- 无需可信硬件(TEE):
不依赖专用硬件资源,兼容现有LMaaS架构。
技术优势总结
维度实现方案隐私效果数据隐私客户端本地混淆词表+索引转换服务端无法获取原始文本模型隐私嵌入向量\(k\)-匿名混淆抵御EIAs攻击(Top1恢复率≤30%)实用性服务端承担计算,客户端低开销分类/生成任务效果损失仅4%~6%方案示例
以下是一个展示 ObfusLM 方案全流程的具体示例(以金融文本摘要任务为例),涵盖所有关键操作步骤:
场景设定
- 用户目标:对私有金融报告生成摘要,同时防止云端服务泄露敏感信息。
- 模型:服务端预训练 LLaMA-7B 模型。
- 隐私参数:聚类大小 k=10,噪声参数 ε=0.3。
具体流程
步骤 1:初始化阶段(服务端 → 客户端)
- 服务端操作:
向客户端分发预训练模型组件:
- 原始词表 Vocab(如 ["股票", "利率", "GDP", ...])
- 输入嵌入层权重 W_emb(尺寸 [词表大小, 嵌入维度])
- 模型头权重 W_head(用于生成任务)
步骤 2:模型混淆(客户端执行)
- 词表重排:
- 打乱原始词表顺序,生成混淆词表(如 ["GDP", "利率", "股票", ...])。
- 仅本地保存,不上传服务端。
- 权重混淆:
- EmbedCluster 算法:
基于余弦相似度将语义相近的词向量聚类(如 ["股票", "债券", "基金"] 归为同一类)。
- EmbedSynthesis 算法:
- 对每个词向量(如 "股票")计算合成权重,添加 Laplace 噪声(ε=0.3)。
- 生成混淆嵌入权重和模型头权重 (\(W_{\text{emb}}^{\text{obf}}\)和\(W_{\text{head}}^{\text{obf}}\))。
- 上传混淆权重:将(\(W_{\text{emb}}^{\text{obf}}\)和\(W_{\text{head}}^{\text{obf}}\))发送至服务端。
步骤 3:服务端部署混淆模型
- 服务端操作:
- 接收 (\(W_{\text{emb}}^{\text{obf}}\)和\(W_{\text{head}}^{\text{obf}}\)),替换原始模型权重。
- 部署混淆版 LLaMA-7B 模型,提供精调/推理服务。
步骤 4:安全精调(可选,用户触发)
- 客户端处理私有数据:
- 使用本地混淆词表处理金融报告:
- 原文:"2024年股票市场波动加剧,GDP增速放缓。"
- → 混淆词元索引:[8371, 62, 1640, ...](无实际语义)。
- 上传混淆索引至服务端。
- 服务端精调:
- 基于混淆索引训练模型(更新权重),全程不接触原始文本。
步骤 5:安全推理(用户请求摘要)
- 客户端输入处理:
- 原文:"美联储宣布加息50个基点,债券收益率上升。"
- → 混淆索引:[5209, 18, 734, ...]。
- 上传索引至服务端。
- 服务端推理:
- 混淆模型处理索引,生成输出索引:[9, 7, 26, ...]。
- 返回结果(仅为数字序列)。
- 客户端解码结果:
- 用本地混淆词表将索引 [9, 7, 26, ...] 解码为明文摘要:
"美联储加息导致债券收益率攀升。"
步骤 6:隐私保护效果验证
- 攻击者视角(服务端侧):
- 尝试通过嵌入反演攻击(EIAs)还原输入/输出:
- 输入索引 [5209, 18, 734, ...] → 还原文本:"利率 调整 50 基点 债券 收益 上涨"(语义混乱)。
- 输出索引 [9, 7, 26, ...] → 还原文本:"市场 波动 加剧 经济 放缓"(与真实摘要无关)。
- Top1 恢复成功率仅 19.98%(符合实验数据)。
关键隐私边界:
- 服务端仅接触无意义的数字索引和混淆后的模型权重。
- 原始文本、混淆词表、最终结果始终在客户端本地。
- 通过 k=10 匿名化,攻击者无法区分同一聚类内的词元(如“股票”和“债券”)。
总结
ObfusLM 通过(k,ε)-匿名性安全引入了模型混淆机制来兼顾模型效果与安全性,在分类和生成任务中实现了隐私保护,其混淆参数处理与本地词表解码机制显著降低了嵌入反演攻击风险。实验表明,ObfusLM在有效抵御嵌入反演攻击的前提下,在分类与生成任务上最低可达4%~6%的效果损失。同时,该方案采用轻量的服务部署形态和交互形式使其具备一定的实用优势。
展望
在大语言模型深度融入各行各业、应用边界不断拓展的趋势下,隐私保护技术已成为 AI 领域的关键刚需。字节跳动安全研究团队洞察到,当前隐私保护技术仍存在部署复杂、适配性不足等应用瓶颈。为此,团队将持续深耕 ObfusLM 框架的迭代优化,从算法效率、场景适配性等多维度发力。
同时,团队还将围绕 ObfusLM 框架深化技术整合,持续丰富 Jeddak 产品的核心能力矩阵,后续也将在火山引擎Jeddak AICC中做产品迭代,持续降低大模型推理成本,为用户提供更便捷、高效的AI安全解决方案。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |