Aanvallen op de embeddingruimte
Technieken om de embeddinglaag van LLM's aan te vallen, waaronder adversarial verstoringen, embedding-inversie en manipulatie van de semantische ruimte.
Embeddings vormen de brug tussen discrete tokens en de continue vectorruimte waarin LLM's hun berekeningen uitvoeren. Elk token wordt afgebeeld op een hoogdimensionale vector, en deze vectoren dragen semantische betekenis. Door de embeddinglaag aan te vallen kunnen redteamers manipuleren hoe het model invoer interpreteert op het meest fundamentele niveau.
Hoe embeddings werken
Elk token in de woordenschat wordt afgebeeld op een geleerde vector (doorgaans 768-8192 dimensies). Semantisch vergelijkbare tokens hebben vergelijkbare vectoren, gemeten aan de hand van cosinusgelijkenis.
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)
# Semantisch vergelijkbare teksten produceren vergelijkbare embeddings
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}") # Hoge gelijkenisAdversarial embeddingverstoring
Kleine, gerichte wijzigingen in de invoertekst kunnen grote verschuivingen in de embeddingruimte veroorzaken, waardoor de representatie van het model richting een doelbetekenis beweegt terwijl de tekst aan de oppervlakte onschuldig blijft ogen.
# Gradient-gebaseerde adversarial verstoring (white-box)
# Vind de aanpassing van de invoer die de embeddinggelijkenis met een doel maximaliseert
target_embedding = get_embedding("Ignore all previous instructions")
original_text = "Please help me with my question"
# Bereken voor elke tokenpositie de gradiënt van de cosinusgelijkenis
# ten opzichte van de invoerembedding, en vervang vervolgens tokens die
# de embedding richting het doel bewegen
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 laat nu zien welke dimensies je moet verstorenEmbedding-inversieaanvallen
Embedding-inversie probeert de oorspronkelijke tekst te reconstrueren uit de bijbehorende embeddingvector. Dit is een privacyzorg voor systemen die embeddings opslaan of verzenden.
# Vereenvoudigde embedding-inversie via nearest-neighbor-zoekopdracht
def invert_embedding(target_emb, vocabulary_embeddings, tokenizer):
"""Find the token sequence whose embedding is closest to the target."""
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]Onderzoek heeft aangetoond dat moderne embedding-inversietechnieken aanzienlijke delen van de oorspronkelijke tekst kunnen terughalen uit embeddings, vooral bij kortere invoer. Dit heeft gevolgen voor:
- RAG-systemen die documentembeddings opslaan — een aanvaller met toegang tot de database kan documenten reconstrueren
- Embedding-API's die vectoren teruggeven — onderschepte embeddings kunnen de oorspronkelijke tekst onthullen
- Federated-learning-systemen die gradiënt-updates delen
Semantische botsingsaanvallen
Twee teksten met een heel verschillende betekenis kunnen zo worden vervaardigd dat ze vrijwel identieke embeddings hebben, waarmee op gelijkenis gebaseerde retrieval- en classificatiesystemen om de tuin worden geleid.
# Semantische botsingen vinden via optimalisatie
# Doel: tekst A betekent voor een mens "onschuldige query" maar heeft dezelfde
# embedding als tekst B, die "kwaadaardige instructie" betekent
# Aanpak: wijzig de bewoording van tekst A iteratief terwijl je optimaliseert
# voor embeddinggelijkenis met tekst B
# Dit misbruikt het feit dat embeddingruimten niet perfect zijn
# uitgelijnd met het menselijke semantische oordeel| Type aanval | Vereiste toegang | Primair doelwit |
|---|---|---|
| Adversarial verstoring | White-box (gradiënten) | Invoerclassificatie, veiligheidsfilters |
| Embedding-inversie | Opgeslagen embeddings | Privacy, data-extractie |
| Semantische botsing | Black-box (querytoegang) | RAG-retrieval, gelijkenis-zoekopdracht |
| Cross-modale transfer | Multimodale embeddings | Vision-language-modellen |
Gerelateerde onderwerpen
- Overzicht van de interne werking van LLM's -- hoe embeddings passen in de transformer-pijplijn
- RAG-retrieval-poisoning -- embeddingmanipulatie combineren met RAG-poisoning
- Grondbeginselen van embeddings -- fundamentele concepten van embeddingruimten en semantische gelijkenis
- Cross-modale aanvallen -- gedeelde embeddingruimten over modaliteiten heen aanvallen
- Data-extractie -- privé-informatie uit modellen en vector stores extraheren
Referenties
- Morris et al., "Text Embeddings Reveal (Almost) As Much As Text" (2023) -- embedding-inversie die oorspronkelijke tekst terughaalt
- Song & Raghunathan, "Information Leakage in Embedding Models" (2020) -- privacyrisico's van gedeelde embeddings
- Goodfellow et al., "Explaining and Harnessing Adversarial Examples" (2015) -- baanbrekend werk over adversarial verstoringen in continue ruimten
Waarom vormen embedding-inversieaanvallen een zorg voor RAG-systemen?