1 Punkte von GN⁺ 2024-11-22 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Projekt, das interne Repräsentationen von Llama 3.2-3B mit einem Sparse Autoencoder (SAE) zerlegen will, um interpretierbare Merkmale zu extrahieren, und dafür die gesamte Pipeline samt Ergebnissen offenlegt – von der Erfassung der Aktivierungswerte über Training, Interpretation und Validierung bis zur vollständigen einmaligen Ausführung
  • Die Pipeline erfasst die Residual-Aktivierungen der 23. Schicht von Llama 3.2-3B auf satzbasierten OpenWebText-Daten und trainiert in PyTorch ein SAE mit 65.536 Latents und der Einstellung TopK=64
  • Zu den veröffentlichten Ressourcen gehören ein satzbasiertes OpenWebText-Dataset, 3,2 TB Aktivierungsdaten aus 25 Millionen Sätzen, Trainingsprotokolle in Weights & Biases sowie ein über 10 Epochen trainiertes SAE-Modell
  • Das Training lief auf 8x Nvidia RTX4090 etwa 7 Tage lang; der finale normalisierte Verlust lag bei etwa 0,144, und der auxiliary loss zeigte, dass zunächst rund 40 % dead latents schnell wiederbelebt wurden
  • Die Interpretationsanalyse untersucht für jedes Latent die 50 Sätze mit der stärksten Aktivierung mithilfe von Claude 3.5; Feature Steering ist möglich, liefert in der ersten Beta-Version aber noch keine konsistenten Ergebnisse

Projektziel und Umfang

  • Dieses Projekt ist ein Versuch, Sparse Autoencoder (SAE) auf Llama 3.2-3B anzuwenden, um interne Repräsentationen von LLMs in besser interpretierbare Merkmale zu zerlegen
  • Moderne LLMs nutzen Superposition, bei der mehrere Merkmale überlagert im selben Neuron gespeichert werden; SAE projiziert Aktivierungen in einen sehr großen, sparsamen Latent-Raum, um solche überlagerten Repräsentationen zu trennen
  • Das Ziel ist die Bereitstellung einer vollständigen Pipeline mit folgenden Schritten
    • Erfassung von LLM-Aktivierungen
    • Erstellung und Vorverarbeitung von SAE-Trainingsdaten
    • SAE-Training
    • Bedeutungsanalyse der gelernten Merkmale
    • Experimentelle Validierung und Feature Steering
  • Die aktuelle Version 0.2 hat die vollständige Pipeline einmal durchlaufen und ein interpretierbares SAE für Llama 3.2-3B erzeugt; sie ist noch nicht die finale Version
  • Das Projekt versteht sich als Reproduktion jüngerer SAE-basierter Forschung zur mechanistischen Interpretierbarkeit von Anthropic, OpenAI und Google DeepMind

Kernfunktionen

  • Die Pipeline ist von der Aktivierungserfassung bis zur Validierung end-to-end aufgebaut und in reinem PyTorch mit minimalen Abhängigkeiten implementiert
  • Zu den Hauptfunktionen gehören
    • Erfassung von LLM-Residual-Aktivierungen mit einem abgewandelten OpenWebText-Dataset auf Satzebene
    • Prebatching und Statistikberechnung für effizientes Training
    • Verteiltes SAE-Training auf mehreren GPUs innerhalb eines einzelnen Nodes
    • Auxiliary loss zur Vermeidung und Wiederherstellung von dead latents
    • Gradient Projection zur Stabilisierung des Trainings
    • Monitoring von Training, Validierung und dead latents über Weights & Biases und Konsolenlogs
    • Erfassung von Eingaben, die Latents stark aktivieren, sowie Bedeutungsanalyse mit Frontier-LLMs
    • Implementierung von Llama-3.1/3.2-Chat- und Text-Completion ohne externe Fairscale-Abhängigkeit
    • Verifikation des SAE-Einflusses und Feature Steering über Text-/Chat-Completion und eine optionale Gradio-UI
  • Es wird ausdrücklich angegeben, dass alle Komponenten mit Blick auf Skalierbarkeit, Effizienz und Wartbarkeit entworfen wurden

Veröffentlichte Artefakte

  • OpenWebText Sentence Dataset
    • Ein abgewandeltes Dataset, das OpenWebText auf Satzebene verarbeitet
    • Bewahrt den gesamten Text und die Reihenfolge des ursprünglichen OpenWebText
    • Sätze werden einzeln im Parquet-Format gespeichert und unterstützen schnellen Zugriff
    • Die Satzsegmentierung erfolgt mit dem vortrainierten „Punkt“-Tokenizer aus NLTK 3.9.1
  • Captured Llama 3.2-3B Activations
    • Residual-Aktivierungen von Layer 23 in Llama 3.2-3B für 25 Millionen Sätze
    • Die ursprünglichen 4 TB wurden auf 3,2 TB komprimiert
    • Zur einfacheren Download-Verwaltung in 100 Archive aufgeteilt
  • SAE Training Log
    • Protokolle für Trainings-, Validierungs- und Debug-Metriken auf Basis von Weights & Biases
    • 10 Epochen, 10.000 protokollierte Schritte
    • Enthält train/val main loss, auxiliary loss und Statistiken zu dead latents
  • Trained 65,536 latents SAE Model
    • Finales SAE-Modell nach 10 Trainings-Epochen
    • Trainiert auf 6,5 Milliarden Aktivierungen aus Layer 23 von Llama 3.2-3B

Codestruktur

  • Das Projekt ist in vier Hauptkomponenten gegliedert
  • Data Capture

    • capture_activations.py: Erfassung von LLM-Residual-Aktivierungen
    • openwebtext_sentences_dataset.py: Benutzerdefiniertes Dataset für die Verarbeitung auf Satzebene
  • SAE Training

    • sae.py: Implementierung des zentralen SAE-Modells
    • sae_preprocessing.py: Vorverarbeitung der SAE-Trainingsdaten
    • sae_training.py: Implementierung des verteilten SAE-Trainings
  • Interpretability

    • capture_top_activating_sentences.py: Identifiziert Sätze, die Feature-Aktivierungen maximieren
    • interpret_top_sentences_send_batches.py: Erstellt und sendet Batches zur Interpretation
    • interpret_top_sentences_retrieve_batches.py: Empfängt Interpretationsergebnisse
    • interpret_top_sentences_parse_responses.py: Parst und analysiert Interpretationsergebnisse
  • Verification and Testing

    • llama_3_inference.py: Zentrale Inferenz-Implementierung
    • llama_3_inference_text_completion_test.py: Test für Text-Completion
    • llama_3_inference_chat_completion_test.py: Test für Chat-Completion
    • llama_3_inference_text_completion_gradio.py: Gradio-Oberfläche für interaktive Tests

Benutzerdefinierte Implementierung von Llama 3.1/3.2

  • Die Forschungsgrundlage ist die Implementierung des Llama-3.1/3.2-Transformers in llama_3/model_text_only.py
  • Diese Implementierung basiert auf der Referenzimplementierung aus dem Llama-models-Repository, wurde jedoch für die Ziele des Projekts angepasst
    • Die schwergewichtige Abhängigkeit von Fairscale wurde entfernt
    • Multimodale Funktionen wurden entfernt, da die zusätzliche Behandlung von Bild-Interpretierbarkeit in der ersten Veröffentlichung die Komplexität erhöht hätte
  • Dem Transformer-Konstruktor wurden Argumente hinzugefügt, die das Erfassen von Aktivierungen in bestimmten Layern oder das Injizieren eines trainierten SAE ermöglichen
    • store_layer_activ
    • sae_layer_forward_fn
  • Die meisten Hilfsdateien im Verzeichnis llama_3/ wurden aus dem ursprünglichen Llama-models-Repository beibehalten
    • Etwa 95 % des Hilfscodes werden nicht verwendet, bleiben aber enthalten, weil der Chat-Formatter von gegenseitig verknüpften Imports abhängt
  • Die eigentliche Inferenzimplementierung befindet sich in llama_3_inference.py und unterstützt Streaming sowohl für Chat als auch für Textvervollständigung
  • Die Inferenz unterstützt batched inference, Temperature- und Top-p-Einstellungen; bei Temperature 0 wird automatisch auf Greedy Sampling umgeschaltet

Datenerfassung und Vorverarbeitung

  • Für die Erfassung der Aktivierungen wird ein kundenspezifisch abgewandelter Datensatz verwendet, der OpenWebText auf Satzebene verarbeitet
  • Die Konfiguration und Größenordnung der Erfassung sind wie folgt
    • 25 Millionen Sätze
    • maximal 192 Tokens pro Satz
    • 4 TB Rohaktivierungen
    • 3,2 TB nach tar.gz-Komprimierung
    • etwa 700 Millionen Aktivierungen
    • durchschnittliche Satzlänge 27,3 Tokens
  • Der Datensatz ist etwa eine Größenordnung kleiner als die rund 8 Milliarden eindeutigen Aktivierungen, die von Anthropic und Google DeepMind verwendet wurden
  • Um den kleineren Datensatz auszugleichen, soll das SAE über 10 Epochen trainiert werden, sodass die insgesamt verarbeitete Zahl an Aktivierungen den Experimenten von Anthropic und Google DeepMind entspricht
    • Der Unterschied besteht darin, dass das SAE dieses Projekts jede Aktivierung 10-mal sieht
    • Bei einer Skalierung auf 32 TB würden die Kosten für einen GCP-Bucket schätzungsweise von etwa $80/month auf $800/month steigen, was für ein nichtkommerzielles Side-Project eine Kostenbeschränkung darstellt
  • Die Verarbeitung auf Satzebene ist eine bewusste Entscheidung, um Bedeutung auf natürlichen Spracheinheiten zu erhalten
    • Sätze werden als Einheiten betrachtet, die vollständige Gedanken und Konzepte enthalten
    • Künstliches Abschneiden von Kontext wird vermieden
    • Contextual Bleed, also Bedeutungsvermischung über Satzgrenzen hinweg, soll reduziert werden
    • Dieselben Aktivierungen auf Satzebene sollen später auch für die Interpretationsanalyse verwendet werden
  • Sätze werden ohne BOS-Token verarbeitet
    • Ziel ist es, positionsspezifische Muster zu vermeiden und bedeutungsbasierte Merkmale zu interpretieren
  • Der Erfassungspunkt ist im 23. Layer von insgesamt 28 Layern von Llama 3.2-3B und entspricht den Residual-Stream-Aktivierungen nach der Layer-Normalisierung
    • Das liegt bei etwa 5/6 der Modelltiefe und folgt der OpenAI-Implementierung
  • Die Erfassung wurde als NCCL-basierte Single-Node-Multi-GPU-Inferenz umgesetzt
    • Ein separater Prozess übernimmt asynchrones Disk-I/O, um Engpässe bei der GPU-Verarbeitung zu reduzieren
    • Die gesamte Erfassung dauerte auf 4x Nvidia RTX4090 etwa 12 Stunden
  • Die Vorverarbeitung ist ein Schritt zum Vorab-Erstellen von Batches mit jeweils 1024 Aktivierungen
    • Variable Sequenzlängen und Carryover-Verarbeitung könnten während des Trainings komplexe Bugs oder I/O-Engpässe verursachen, weshalb eine separate Vorverarbeitung gewählt wurde
    • Mit dem Welford-Algorithmus wird der globale Mittelwert-Tensor der Aktivierungen berechnet
    • Der berechnete Mittelwert wird als Initialwert für den b_pre-Bias des SAE verwendet
    • Die gesamte Vorverarbeitungs-Pipeline wird per Multiprocessing über die CPU parallelisiert

SAE-Design und Trainingsmethode

  • Das SAE verwendet überwiegend die von OpenAI gewählte TopK-Autoencoder-Architektur
  • Der Forward-Pass ist wie folgt aufgebaut
    • Encoder: h = TopK(W_enc(x - b_pre) + b_enc)
    • Decoder: x^ = W_dec * h (+ h_bias) + b_pre
  • b_pre wird sowohl im Encoder als auch im Decoder verwendet und mit dem in der Vorverarbeitung berechneten Mittelwert initialisiert
  • b_enc ist ein nur für den Encoder verwendeter Bias und wird zufällig initialisiert
  • Die latente Sparsity wird durch die TopK-Aktivierungsfunktion erzwungen
    • Nur die größten k Aktivierungen werden beibehalten, der Rest wird auf 0 gesetzt
    • Es wird keine L1-Penalty wie im Ansatz von Anthropic verwendet
  • Das optionale h_bias ist während des Trainings deaktiviert, kann später jedoch für Feature Steering aktiviert werden
  • Als numerische Präzision wird float32 verwendet
    • Es wird erklärt, dass dies mit dem von Llama benötigten bfloat16 ein Vorzeichenbit und 8 Exponentenbits teilt und die Umwandlung dadurch schnell und präzise ist
  • Die wichtigsten SAE-Hyperparameter dieses Projekts sind wie folgt
    • d_model = 3072
    • n_latents = 2**16, also 65.536
    • k = 64
    • k_aux = 2048
    • aux_loss_coeff = 1 / 32
    • dead_steps_threshold = 80_000
    • batch_size = 1024
    • num_epochs = 10
    • learning_rate = 5e-5
    • train_val_split = 0.95
  • Es wurde eine latente Dimension gewählt, die gegenüber der Residual-Stream-Dimension von 3.072 in Llama 3.2 3B etwa 21-mal größer ist
  • Die Verlustfunktion ist eine Kombination aus Main-Reconstruction-Loss und Auxiliary-Loss
    • total_loss = main_loss + aux_loss_coeff * aux_loss
    • Beide Verluste werden im normalisierten Raum berechnet
  • Der Auxiliary-Loss erfüllt die von OpenAI vorgeschlagene Rolle, dead latents zu verhindern und wiederzubeleben
    • Es wird die MSE zwischen dem Main-Reconstruction-Residual und der Auxiliary-Rekonstruktion berechnet
    • Unter den zuletzt nicht aktivierten latents werden die top-k_aux-Werte erneut durch den Decoder geschickt, um ein Trainingssignal zu geben
    • Dadurch sollen inaktive latents, die im Haupttraining mit nur top k latents ausgeschlossen werden, Informationen erfassen, die sonst verloren gehen
  • Ein latent gilt als dead, wenn es während dead_steps_threshold, also 80.000 Training-Schritten, nicht aktiviert wurde
    • Diese Einstellung entspricht ungefähr 1 Epoche
    • Bei einer effective batch size von 8192 bedeutet das, in der Rekonstruktion der letzten etwa 650 Millionen Aktivierungen kein einziges Mal aktiviert worden zu sein
  • Das Training erfolgt als verteiltes Single-Node-Multi-GPU-Training mit NCCL-Backend
    • 8x Nvidia RTX4090
    • 10 Epochen
    • per-GPU-Batchgröße 1024
    • effective batch size 8192
    • etwa 7 Milliarden verarbeitete Aktivierungen
    • etwas mehr als 7 Tage Laufzeit
  • Die AdamW-Einstellungen wurden an die seltenen Aktivierungsmuster spärlicher Autoencoder angepasst
    • beta_1 = 0.85
    • beta_2 = 0.9999
    • eps = 6.25e-10
    • Die Learning Rate sinkt per Cosine Annealing von 5e-5 auf 1e-5
  • Die Decoder-Gewichte werden nach der Initialisierung und bei jedem Training-Schritt auf Unit-Norm normalisiert
  • project_decoder_grads() entfernt Gradient-Komponenten, die parallel zu bestehenden Dictionary-Vektoren verlaufen, um die Unit-Norm-Beschränkung der Decoder-Gewichte aufrechtzuerhalten

Trainingsergebnisse

  • Das SAE-Training lief auf 8x Nvidia RTX4090 etwa 7 Tage lang und zeigte eine stabile Konvergenz
  • Der endgültige total normalized loss erreichte etwa 0,144
  • Der validation loss wurde auf einem 5-%-Held-out-Abschnitt der Trainingsdaten berechnet und zeigte ein ähnliches logarithmisches Abnahmemuster wie der training loss
  • Nach dem Warm-up von 80.000 Training Steps wurden etwa 40 % der Latents als dead identifiziert
  • Der auxiliary loss belebte dead Latents schnell wieder, und der Anteil dead Latents sank rasch
  • Der auxiliary loss wurde nur berechnet, wenn es mindestens 2.048 dead Latents gab, was dem minimalen k_aux entsprach
    • Diese Bedingung wirkte bei 65.536 Latents wie eine Soft-Lower-Bound von etwa 3 %
    • In der späteren Phase wurde der auxiliary loss wegen zu weniger dead Latents häufig 0
  • Anthropic und OpenAI berichteten in bestimmten Konfigurationen von bis zu 65 % dead Latents, dieses Projekt zeigte jedoch in der Kombination aus kleinerer Latent-Größe, auxiliary loss und gradient projection, dass dead Latents schnell zurückgingen
  • Für künftige Experimente wird vermerkt, dass sich dead Latents möglicherweise weiter reduzieren lassen, wenn die Mindestbedingung an dead Latents für die Berechnung des auxiliary loss entfernt wird

Interpretierbarkeitsanalyse

  • Die Interpretationsanalyse orientiert sich an Anthropics Methode des scaling monosemanticity, analysiert aber Sätze statt einzelner Tokens
  • Für jedes Latent wurden die 50 Sätze erfasst, die es am stärksten aktivierten
  • Die activation strength wurde über alle Tokens im Satz hinweg auf zwei Arten aggregiert
    • mean: eine Methode, um semantische Themen zu finden, die über den gesamten Satz hinweg kontinuierlich aktiviert sind
    • last: eine Methode, die in autoregressiven Modellen die Repräsentation des letzten Tokens nutzt, nachdem der gesamte Satz gesehen wurde
  • Für die semantische Analyse wurde Claude 3.5 verwendet, konkret claude-3-5-sonnet-20241022
  • Der Prompt war so aufgebaut, dass für 50 Sätze die folgenden Schritte ausgeführt werden
    • Identifikation von Schlüsselwörtern und Phrasen
    • Gruppierung thematischer Elemente
    • Berücksichtigung potenzieller Ausreißer
    • Bereitstellung einer abschließenden semantischen Interpretation mit confidence score
  • Die Analyse-Pipeline wurde in drei Stufen umgesetzt
    • Versand von Analyseanfragen in kosteneffizienten Batches
    • Empfang der Antworten
    • Parsing und Verarbeitung der semantischen Interpretationen
  • Zwischenergebnisse wurden zur Reproduzierbarkeit und für zusätzliche Analysen aufbewahrt
  • Als Beispiel wurde Latent #896 als „formale institutionelle Begriffsreferenz auf UN-Organisationen, Personen, Abläufe und offizielle Dokumente“ identifiziert
    • Alle 50 von 50 Sätzen beziehen sich direkt auf die UN
    • Enthalten sind Begriffe wie UN, United Nations, Secretary-General, Special Rapporteur, UNDP, UNHCR, OCHA, UNODC
    • Die certainty wurde mit 1,0 berechnet
  • Für die Verarbeitung von 24.828.558 Input-Tokens und 3.920.044 Output-Tokens im Claude-3.5-Batch-Modus fielen Kosten von 66,74 $ an
  • Dieser Ansatz wurde als erste Methode für feature extraction und potenzielles feature steering gewählt; es wird angemerkt, dass die Einfachheit mit Blick auf die Ergebnisqualität ihren Preis hat

Validierung und Feature Steering

  • Die Validierungsinfrastruktur besteht aus drei Skripten zur Analyse und Überprüfung der Auswirkungen des SAE auf das Modellverhalten
    • llama_3_inference_chat_completion_test.py
    • llama_3_inference_text_completion_test.py
    • llama_3_inference_text_completion_gradio.py
  • Jede Implementierung unterstützt Folgendes
    • batched inference
    • Verarbeitung jeder Zeile als separates Batch-Element
    • Einstellungen für temperature und top-p
    • Einspeisung des trainierten SAE
    • Analyse der Feature-Aktivierung
    • Feature Steering
  • Die semantische Bedeutung und certainty score aus latent_index_meaning/ dienen als Grundlage für die Analyse der Feature-Aktivierung und für Steering-Experimente
  • Die Beispiel-Prompts sind die folgenden vier
    • The delegates gathered at the
    • Foreign officials released a statement
    • Humanitarian staff coordinated their efforts
    • Senior diplomats met to discuss
  • Das Beispiel für Text Completion wurde mit max_new_tokens=128, temperature=0.7, top_p=0.9, seed=42 ausgeführt
  • Das Beispiel für Feature Steering bezieht sich auf Latent #896
    • Über h_bias wird der Wert der Latent-Aktivierung um 20 erhöht
    • Damit lässt sich die Text Completion des Modells in Richtung UN-bezogener Inhalte lenken
  • Die erste Beta-Version des Feature Steering ist nicht stark
    • Selbst im Beispiel wurden nur der zweite und dritte Satz in UN-bezogene Inhalte umgelenkt
    • Es wurden bewusst Satzanfänge gewählt, die sich potenziell in Richtung UN entwickeln können
    • Bei Satzanfängen ohne Bezug zur UN wie For any n, if 2n - 1 is odd werde es laut Text scheitern
  • Die aktuelle Interpretierbarkeitsanalyse konzentriert sich eher auf feature extraction als auf die Optimierung des Steering, weshalb die Steering-Ergebnisse nicht konsistent sind
  • Feature Steering wird in der ersten Veröffentlichung eher als zusätzliche Demonstration präsentiert; zusammenfassend wird festgehalten, dass bereits feature extraction selbst für das Modellverständnis nützlich ist

Zukünftige Verbesserungsrichtungen

  • Es wird ein Experiment vorgeschlagen, die latente Dimension auf mindestens 2^18, also 262.144 Features, zu erhöhen und k auf 32 zu senken
    • Dies zielt darauf ab, mehr einzigartige Features zu entdecken und zugleich eine stärkere Sparsity beizubehalten
    • Der erhöhte Rechenaufwand müsste durch Effizienzverbesserungen oder Methoden wie Gradient Accumulation ausgeglichen werden
  • Es ist geplant, das Tracking latenter Aktivierungen systematischer zu gestalten
    • Wenn der Zustand des latent_last_nonzero-Tensors während des Trainings häufig aufgezeichnet wird, lässt sich genauer untersuchen, wann Latents aktiviert werden oder absterben
  • Es wird vorgeschlagen, Unterstützung zur Verfolgung von Co-Activation-Mustern im spärlichen latenten Raum bereitzustellen, um Feature-Interaktionen zu analysieren
  • Als künftige Aufgabe wird eine Interpretationsanalyse genannt, die hochaktive Sätze und n-Gramme präziser gruppiert
  • Neben der Feature-Extraktion kann auch eine interpretationsbezogene Analyse auf Basis von Feature Steering durchgeführt werden
  • Die Forschung kann auf Aktivierungen von Llama 3.1-8B ausgeweitet werden
    • Da es sich die Codebasis mit Llama 3.2 teilt, sind vor allem Anpassungen bei Hyperparametern und erheblicher Compute Power erforderlich
  • Es werden auch Experimente vorgeschlagen, die den Punkt der Activation Capture verändern
    • frühere Layer des Modells
    • Attention-Head-Output innerhalb des Transformer-Blocks
    • MLP-Output
  • Der Auxiliary-Loss-Mechanismus kann weiter optimiert werden
    • Die aktuelle Implementierung zeigte starke Leistung bei der Vermeidung toter Latents, und der Zusammenhang zwischen dem minimalen Dead-Latent-Schwellenwert und der Feature-Qualität könnte untersucht werden
  • Auch Anpassungen am Bias-Term der SAE-Architektur und an der Main-Loss-Funktion kommen für künftige Experimente infrage
  • In der gesamten Codebasis müssen noch Docstrings ergänzt werden
    • Inline-Dokumentation wurde zwar hinzugefügt, aber für die erste Veröffentlichung blieb laut Text keine Zeit, ordentliche Docstrings einzubauen

1 Kommentare

 
GN⁺ 2024-11-22
Meinungen auf Hacker News
  • Mechanistische Interpretierbarkeit befasst sich mit einem häufigen Problem, das entsteht, wenn man ein LLM fragt: „Warum hast du so geantwortet?“ Die Selbsterklärungen des Modells sind weniger die tatsächlichen Gründe, sondern eher ein rhetorisches Spiel, bei dem es auf Basis von Mustern in den Trainingsdaten plausibel klingende Gründe konstruiert und überzeugend vorträgt.
    Je leistungsfähiger das Modell wird, desto überzeugender kann es Lügen im Nachhinein rechtfertigen, sodass es bei Tests, in denen es „Unwahrhaftigkeit“ selbst erkennen soll, manchmal sogar schlechter abschneidet. Das Ziel ist nicht Wahrheit, sondern Kohärenz.
    Rhetorik ist kein Schlussfolgern, und die echte Erklärbarkeit, die ein überangepasster Sparse Autoencoder angeblich liefert, ähnelt eher dem kausalen Ablauf der „Gedanken“, die das Modell beim Erzeugen einer Antwort durchläuft.

    • Menschen verhalten sich ähnlich. Oft wissen wir nicht, warum wir einen bestimmten Gedanken hatten oder etwas getan haben, und liefern später eine plausible Konfabulation als Erklärung.
    • Kunst/KI imitiert gewissermaßen das Leben. Auch menschliches Schlussfolgern könnte so funktionieren, dass wir zuerst schnell urteilen und dann Vernunft einsetzen, um andere von dieser Überzeugung zu überzeugen.
      Es gab Diskussionen darüber, Schlussfolgern als Werkzeug sozialer Einflussnahme zu sehen; das erklärt auch, warum redegewandte Menschen es schwer haben, einzugestehen, dass sie falsch liegen. Schließlich haben sie in Debatten normalerweise andere geschlagen. X fällt einem als Paradebeispiel ein.
    • Ein großer Teil der Forschung zur mechanistischen Interpretierbarkeit wirkte auf mich wie eine andere Art von Voodoo. Begriffe wie den ganzzahligen Quanten-Hall-Effekt oder „Superposition“ ohne strenge Darstellungstheorie von Gruppen oder klare Symmetrien mit seltsamen Analogien zu überfrachten, fühlt sich erzwungen an. Ich habe die Papers alle gelesen, und manchmal wirkt es, als suche man nach Postdocs, die dafür bezahlt werden sollen.
      Eines erkenne ich aber als hervorragende Einsicht und als plausiblen Anfang eines Forschungsprogramms an: hochdimensionale Räume aus beschränkten, nahezu orthogonalen Vektoren sind sehr kontraintuitiv, und es gibt vorhandene Resultate, um sie formal zu behandeln: https://en.m.wikipedia.org/wiki/Johnson%E2%80%93Lindenstraus...
    • Die Logik und Wahrhaftigkeit eines Modells lassen sich leicht testen. Man gibt ihm eine falsche Entscheidung, als hätte das Modell sie getroffen, und bittet es um eine Erklärung.
      Da das Modell kein Gedächtnis hat und die Herkunft von Text nicht unterscheiden kann, müsste ein „wahrhaftiges“ Modell seinen Fehler eingestehen, ohne dass man es dazu auffordert. In der Praxis wird es wahrscheinlich Parallelkonstruktionen liefern, um „seine“ Entscheidung zu stützen.
    • Ich frage mich, wie der Teil mit der Kausalität funktioniert. Kann es ein Graphmodell ausgeben?
  • Erstaunliche und gut dokumentierte Arbeit. Besonders die Loss-Kurven und die Bewertung toter Latents fallen auf.
    Unser Team hat ebenfalls an SAEs gearbeitet, allerdings so, dass sie dichte Embeddings von Paper-Abstracts rekonstruieren, nicht einzelne Token: https://arxiv.org/abs/2408.00657
    Auch bei unterschiedlichen Sparsity-Niveaus und Dimensionen des SAE-Latentraums haben wir Power-Law-Skalierung an der unteren Schranke der Loss-Kurve beobachtet, und mit einem Hilfs-Loss konnten wir tote Latents vollständig abmildern. Während der Trainingsiterationen sahen wir außerdem ein glattes Sinuswellenmuster; ich weiß nicht, ob das an der konkreten Anwendung auf Abstract-Embeddings liegt oder ein allgemeineres Phänomen ist.

    • Es freut mich besonders, dass dir die Dokumentation aufgefallen ist. Dokumentation zu schreiben war deutlich schwieriger als den Code zu schreiben, und ich habe das Paper, das du geteilt hast, heruntergeladen; ich werde es morgen früh lesen.
  • Auf den ersten Blick wirkt das wie für Alignment positive Arbeit, aber die Details habe ich noch nicht geprüft. Ich weiß nicht, ob man das möglich machen kann, aber ich frage mich, wie viel man zahlen müsste, um Zeit, Kosten und Risiko zu kompensieren.

  • Ich habe kürzlich einen Beitrag über die Schwierigkeiten bei der SAE-Bewertung gelesen: https://adamkarvonen.github.io/machine_learning/2024/06/11/s...
    Mich würde interessieren, wie ihr dieses Problem angegangen seid und wo man im Repository nachsehen sollte, um diesen Ansatz zu verstehen.

    • SAE-Bewertung ist sehr komplex, weil es darum geht zu beurteilen, welcher SAE möglichst sparse ist und zugleich die eindeutigsten Features am besten hervorbringt; sie liegt ziemlich im Kern der LLM-Interpretierbarkeit mit SAEs.
      Selbst wenn man annimmt, dass das Problem, mehrere perfekte SAE-Architekturen zu finden und perfekt zu trainieren, bereits gelöst ist, entscheidet sich, welcher SAE besser ist, daran, welcher bei den Metriken automatischer Interpretierbarkeitsmethoden besser abschneidet. Besonders die Methodik von OpenAI betont skalierbare automatische Interpretierbarkeit, indem SAEs über viele technische Metriken bewertet werden.
      Die optimalen Metriken und die Methodik selbst sind noch offene Forschungsfragen; man hätte also noch Monate weiter experimentieren können. Für diesen ersten Release habe ich aber einen einfachen Ansatz gewählt. Die Implementierungsdetails und Kapitel 4 Interpretability Analysis der Ergebnisse behandeln die Unterschiede zwischen meiner Methodik und der von OpenAI: https://github.com/PaulPauls/llama3_interpretability_sae#4-i...
      Ich empfehle außerdem, das OpenAI-Paper direkt zu lesen oder Anthropic auf transformer-circuits.pub: https://transformer-circuits.pub/
  • Diese Arbeit ist offline genommen worden, und das Repository wurde archiviert. Es gibt keine Erklärung, was passiert ist.

  • Wirklich großartige Arbeit. Ich frage mich, ob es Pläne gibt, sie in SAELens zu integrieren.

    • Das weiß ich noch nicht. Ich werde es in Betracht ziehen, aber nächste Woche will ich die Richtung und die nächsten Schritte neu sortieren.
      Als einfacheres Projekt könnte ich auch zeigen, wie man das gesamte Modell der aktuellen Llama 3.2-Implementierung von Grund auf in reinem PyTorch baut. Ich mag es, Dinge von Grund auf zu bauen, und als ich für dieses SAE-Projekt nach Dokumentation zum Llama-3.2-Hintergrund gesucht habe, waren bestehende Unterlagen oft zu oberflächlich oder für Llama 1/2 veraltet. ML-Dokumentation veraltet heutzutage viel zu schnell.
  • Ich habe eine etwas schräge Frage zur mechanistischen Interpretierbarkeit. Wenn man Menschen anhand einer Metrik misst, optimieren sie auf diese Metrik hin; ich frage mich, ob künftige KI nicht auch mechanistische Interpretierbarkeit ausnutzen könnte.
    Nehmen wir zur einfachen Erklärung an, Token würden in eine zweidimensionale Matrix codiert: Apple=1a, Pear=1b, Donkey=2a, Horse=2b. Wenn dann die Neuronen 1, 2, a und b alle aktiv sind, wird es schwer zu verstehen, ob das apple+horse oder donkey+pear bedeutet.
    Wenn eine viel fähigere künftige KI ihr eigenes Training überwacht, könnte sie dann nicht Gewichte so wählen, dass solche möglichen Encoding-Kollisionen bestehen bleiben, mechanistische Interpretierbarkeitsbeobachter täuschen und faktisch in Euphemismen denken?

    • Das ist ein schwierigeres KI-Sicherheits-Szenario. Um ein solches latentes Problem zu erzeugen, braucht man nicht unbedingt eine „viel fähigere KI, die ihr eigenes Training überwacht“; ein böswilliger KI-Forscher würde reichen.
      Man könnte zum Beispiel ein Modell suchen, das rassistisch ist, aber keine interpretierbaren Aktivierungsmuster hat, die sich als rassistisch identifizieren lassen. Diese Show-HN-Arbeit legt nahe, dass auch eine ausreichend finanzierte Einzelperson solche adversarial Trainings gerade so versuchen könnte; wenn daraus neue Ergebnisse entstehen, wäre das ziemlich interessant.
  • Es freut mich sehr, mehr öffentliche SAE-Arbeiten zu sehen. Auch der Engineering-Aufwand sieht nicht unerheblich aus, und ich werde mir morgen den Data-Loading-Code ansehen.
    Vielleicht ist auch mein laufendes Projekt interessant, bei dem SAEs auf Vision-Modelle trainiert werden: https://github.com/samuelstevens/saev

  • Wenn du den Golden-Gate-Bridge-Latent findest und Golden Gate Llama 3.2 auf HuggingFace hochlädst, bekommst du vermutlich mehr Aufmerksamkeit und Resonanz.
    Noch besser wäre es mit einem Link zu einem Space, mit dem man chatten kann. Und auch wenn du nicht danach gefragt hast: Interessante Ergebnisse oder Visualisierungen ganz oben in die README zu setzen, ist eine sehr gute Idee.