Zurück zur Startseite

PyTorch Hooks für Audio aus LLM-Aktivierungen

Der Artikel beschreibt zwei Experimente: direktes Stitching visueller Latente von SigLIP mit MusicGen über monkey patching und Ambient-Generierung aus Qwen2.5-Aktivierungen mit PyTorch forward hooks. Code zum Abfangen neuronaler Zustände und DSP-Modulation wird bereitgestellt. Geeignet zum Erstellen einzigartigen Audios ohne Text-Prompts.

Klanggenerierung aus KI-„Gedanken“ ohne Prompts
Advertisement 728x90

LLM-Aktivierungen hacken für Audio-Generierung mit PyTorch-Hooks

Im PaleoSonic-Engine-Experiment werden visuelle Patches aus SigLIP direkt in MusicGen-Audio-Latents umgewandelt. Statt des üblichen Image -> Text -> Audio-Pipelines projiziert eine lineare Schicht (nn.Linear) 196 Patches der Größe 196 in Klangvektoren. Modelle werden in bfloat16 konvertiert, um auf 16 GB RAM zu laufen.

Der entscheidende Schritt ist das Monkey-Patching des MusicGen-Text-Encoders. Der Generator erwartet 196 Text-Token, erhält aber Bildgeometrie. Eine zufällige Initialisierung der Brücke erzeugt rohes Rauschen: harter statischer Lärm, der einen Architekturkonflikt ohne Feinabstimmung simuliert.

# Den originalen "Gehirn" sichern
original_text_encoder = self.audio_decoder.text_encoder.forward

# Eine Fake-Klasse erstellen
class VisualThoughts:
    def __init__(self, hidden_states):
        self.last_hidden_state = hidden_states
    def __getitem__(self, idx):
        return [self.last_hidden_state][idx]
        
def spoofed_text_encoder(*args, **kwargs):
    # Visuelle Tensoren statt Text reinschleusen!
    return VisualThoughts(audio_conditioning)
    
# Den Generator "infizieren"
self.audio_decoder.text_encoder.forward = spoofed_text_encoder

Dieser Ansatz enthüllt eine rohe Übersetzung von Pixelgeometrie in Akustik und umgeht Textsemantik.

Google AdInline article slot

PyTorch-Hooks für Echtzeit-Extraktion von LLM-„Gedanken“

Im zweiten Experiment steuert die Neural-Analog Engine mit Qwen2.5-1.5B-Instruct einen DSP-Oszillator. Ein Forward-Hook wird auf Schicht 15 registriert – dem Zentrum abstrakter Repräsentationen. Aktivierungen werden detached, in float32 konvertiert und durch Mittelung über die Batch-Achse komprimiert.

neural_activations = []

# Spionage-Funktion zum Klauen von Gedanken
def steal_thoughts_hook(module, input, output):
    # Den aktuellen Neuronenzustand greifen
    current_thought = output[0].detach().cpu().to(torch.float32).numpy()
    compressed_thought = np.mean(current_thought, axis=1)[0] 
    neural_activations.append(compressed_thought)

# Die „Nadel“ in Qwens 15. Schicht injizieren
hook_handle = model.model.layers[15].register_forward_hook(steal_thoughts_hook)

Rohe Vektoren speisen NumPy-Oszillatoren und SciPy-Filter. Das LLM erzeugt einen Prompt wie „Stille eines gefrorenen Quantensterns“, doch der Klang wird durch Aktivierungsimpulse moduliert: Frequenzen, Phasen und Abklingzeiten gesteuert von neuronalen Werten. Das Ergebnis ist reiner dunkler Ambient ohne neuronale Audio-Generatoren.

Technische Details zum Cross-Modal-Brückenbau

  • Vision-Backbone: google/siglip-base-patch16-224 liefert nach Self-Attention 196 Patches.
  • Audio-Ziel: facebook/musicgen-small erwartet text_encoder mit hidden_state [1, 196, dim].
  • Brücke: nn.Linear(196dim_vision, 196dim_audio) mit zufälliger Init; kein Fine-Tuning, um den „Grundton“ zu erhalten.
  • Hook-Mechanik: register_forward_hook erfasst Output nach MLP in Schicht 15; detach verhindert Gradienten.
  • DSP-Pipeline: np.sin für Oszillatoren + scipy.signal.butter für Tiefpassfilter; Amplitudenmodulation aus Aktivierungen.

Klangunterschiede:

Google AdInline article slot
  • PaleoSonic — chaotisches Rauschen aus Latent-Kollisionen.
  • Neural-Analog — strukturierter Ambient aus physikalischen Wellen.

Skalierung und Optimierungen für den Produktiveinsatz

Beide Ansätze laufen in Hugging Face Spaces. Für Skalierung:

  • torch.compile für schnellere Hooks nutzen.
  • Qwen auf 4-Bit mit bitsandbytes quantisieren, um Speicher zu sparen.
  • Aktivierungen via DataParallel auf mehreren GPUs parallelisieren.

Potenzial: In Echtzeit-Audio (JACK/WASAPI) integrieren für Live-Auftritte. Mit anderen Schichten experimentieren – frühe liefern Low-Level-Features, spätere Semantik.

Wichtige Erkenntnisse

  • Monkey Patching umgeht generate() ohne Retraining, wechselt den Encoder on the fly.
  • PyTorch-Forward-Hooks sind Standard für Interpretierbarkeit; detach ist für Inference essenziell.
  • Aktivierungskompression (Mittelung axis=1) reduziert Dimensionalität ohne Dynamikverlust.
  • bfloat16 ist entscheidend für Low-RAM-Setups; float16 auf CPU vermeiden.
  • NumPy/SciPy-DSP schlägt torch.nn bei einfachen Oszillatoren.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Weiterlesen