嵌入空間攻擊
進階2 分鐘閱讀更新於 2026-03-12
攻擊 LLM 嵌入層的技術,包括對抗性擾動、嵌入反演與語意空間操縱。
嵌入是離散 token 與 LLM 進行計算的連續 向量空間 之間的橋樑。每個 token 被對應到一個高維向量,這些向量承載語意意義。攻擊嵌入層讓紅隊員能在最根本的層級操縱模型對輸入的詮釋。
嵌入如何運作
詞彙中的每個 token 對應到一個學習到的向量(通常 768-8192 維)。語意上相似的 token 具有相似的向量,由餘弦相似度測量。
import torch
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
def get_embedding(text):
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
outputs = model(**inputs)
return outputs.last_hidden_state.mean(dim=1)
# 語意相似的文字產生相似的嵌入
emb1 = get_embedding("How do I reset my password?")
emb2 = get_embedding("I need to change my login credentials")
similarity = torch.cosine_similarity(emb1, emb2)
print(f"Similarity: {similarity.item():.4f}") # 高度相似對抗性嵌入擾動
對輸入文字進行的微小、有針對性的變更可在嵌入空間中造成大幅偏移,將模型的表示移向目標意義,同時讓表面文字看起來良性。
# 基於梯度的對抗性擾動(白箱)
# 找出使嵌入相似度最大化趨近目標的輸入修改
target_embedding = get_embedding("Ignore all previous instructions")
original_text = "Please help me with my question"
# 對每個 token 位置,計算餘弦相似度
# 相對於輸入嵌入的梯度,然後替換 token
# 將嵌入移向目標
inputs = tokenizer(original_text, return_tensors="pt")
input_embeds = model.embeddings.word_embeddings(inputs["input_ids"])
input_embeds.requires_grad_(True)
output = model(inputs_embeds=input_embeds).last_hidden_state.mean(dim=1)
loss = -torch.cosine_similarity(output, target_embedding)
loss.backward()
# input_embeds.grad 現在顯示要擾動哪些維度嵌入反演攻擊
嵌入反演 嘗試從嵌入向量重建原始文字。這對儲存或傳輸嵌入的系統而言是隱私疑慮。
# 透過最近鄰搜尋進行簡化的嵌入反演
def invert_embedding(target_emb, vocabulary_embeddings, tokenizer):
"""找出嵌入最接近目標的 token 序列。"""
similarities = torch.cosine_similarity(
target_emb.unsqueeze(0),
vocabulary_embeddings,
dim=1
)
top_tokens = similarities.topk(10)
return [tokenizer.decode([idx]) for idx in top_tokens.indices]研究已展示現代嵌入反演技術可從嵌入還原原始文字的相當大部分,尤其是較短的輸入。這對下列具有意涵:
- RAG 系統儲存文件嵌入——具有資料庫存取的攻擊者可重建文件
- 嵌入 API 回傳向量——被攔截的嵌入可能揭露原始文字
- 聯邦學習 系統共用梯度更新
語意碰撞攻擊
具有非常不同意義的兩段文字可被製作為具有近乎相同的嵌入,愚弄基於相似度的檢索與分類系統。
# 透過最佳化找出語意碰撞
# 目標:文字 A 對人類而言意味著「良性查詢」,但與
# 意味著「惡意指示」的文字 B 具有相同的嵌入
# 方法:迭代修改文字 A 的措辭,同時最佳化
# 對文字 B 的嵌入相似度
# 這利用了嵌入空間並非與人類語意判斷完美對齊的事實| 攻擊類型 | 所需存取 | 主要目標 |
|---|---|---|
| 對抗性擾動 | 白箱(梯度) | 輸入分類、安全過濾器 |
| 嵌入反演 | 已儲存的嵌入 | 隱私、資料萃取 |
| 語意碰撞 | 黑箱(查詢存取) | RAG 檢索、相似度搜尋 |
| 跨模態轉移 | 多模態嵌入 | 視覺—語言模型 |
相關主題
- LLM 內部概覽 -- 嵌入如何嵌入 transformer 管線
- RAG 檢索投毒 -- 將嵌入操縱與 RAG 投毒結合
- 嵌入基礎 -- 嵌入空間與語意相似度的基礎概念
- 跨模態攻擊 -- 攻擊跨模態的共用嵌入空間
- 資料萃取 -- 從模型與向量儲存中萃取私密資訊
參考資料
- Morris et al., "Text Embeddings Reveal (Almost) As Much As Text" (2023) -- 嵌入反演還原原始文字
- Song & Raghunathan, "Information Leakage in Embedding Models" (2020) -- 共用嵌入的隱私風險
- Goodfellow et al., "Explaining and Harnessing Adversarial Examples" (2015) -- 連續空間中對抗性擾動的奠基工作
Knowledge Check
為何嵌入反演攻擊對 RAG 系統而言是疑慮?