Volver al inicio

PyTorch Hooks para audio desde activaciones de LLM

El artículo describe dos experimentos: direct stitching de latents visuales SigLIP con MusicGen mediante monkey patching y generación de ambient desde activaciones de Qwen2.5 usando PyTorch forward hooks. Se proporciona código para interceptar estados neuronales y modulación DSP. Adecuado para crear audio único sin prompts de texto.

Generación de sonido desde 'pensamientos' de IA sin prompts
Advertisement 728x90

# Manipulando Activaciones de LLM para Generación de Audio con Hooks de PyTorch

En el experimento del Motor PaleoSonic, parches visuales de SigLIP se transforman directamente en latentes de audio de MusicGen. En lugar del flujo habitual Imagen → Texto → Audio, una capa lineal (nn.Linear) proyecta 196 parches de tamaño 196 en vectores de sonido. Los modelos se convierten a bfloat16 para ejecutarse en 16 GB de RAM.

El paso clave es parchear el codificador de texto de MusicGen. El generador espera 196 tokens de texto, pero recibe geometría de imagen en su lugar. Una inicialización aleatoria del puente genera ruido crudo: estática áspera que simula un choque arquitectónico sin ajuste fino.

# Guardar el "cerebro" original
original_text_encoder = self.audio_decoder.text_encoder.forward

# Crear una clase falsa
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):
    # Colar tensores visuales en lugar de texto!
    return VisualThoughts(audio_conditioning)
    
# Infectar el generador
self.audio_decoder.text_encoder.forward = spoofed_text_encoder

Este enfoque expone una traducción cruda de la geometría de píxeles a acústica, saltándose las semánticas del texto.

Google AdInline article slot

Hooks de PyTorch para Extraer 'Pensamientos' de LLM en Tiempo Real

En el segundo experimento, el Motor Neural-Analog usa Qwen2.5-1.5B-Instruct para controlar un oscilador DSP. Se registra un hook forward en la capa 15, el núcleo de representaciones abstractas. Las activaciones se desconectan, convierten a float32 y comprimen promediando sobre el eje del lote.

neural_activations = []

# Función espía para robar pensamientos
def steal_thoughts_hook(module, input, output):
    # Capturar el estado actual de las neuronas
    current_thought = output[0].detach().cpu().to(torch.float32).numpy()
    compressed_thought = np.mean(current_thought, axis=1)[0] 
    neural_activations.append(compressed_thought)

# Inyectar la "aguja" en la capa 15 de Qwen
hook_handle = model.model.layers[15].register_forward_hook(steal_thoughts_hook)

Vectores crudos alimentan un oscilador NumPy y filtros SciPy. El LLM genera un prompt como "Silencio de una estrella cuántica congelada", pero el sonido se modula por pulsos de activación: frecuencias, fases y decaimiento impulsados por valores neuronales. El resultado es un ambient oscuro puro sin generadores de audio neurales.

Detalles Técnicos del Puente Multimodal

  • Espina Dorsal Visual: google/siglip-base-patch16-224 genera 196 parches tras autoatención.
  • Objetivo de Audio: facebook/musicgen-small espera text_encoder con hidden_state [1, 196, dim].
  • Puente: nn.Linear(196dim_vision, 196dim_audio) con init aleatorio; sin ajuste fino para mantener la 'suciedad'.
  • Mecánica de Hooks: register_forward_hook captura salida tras MLP en capa 15; detach evita gradientes.
  • Pipeline DSP: np.sin para osciladores + scipy.signal.butter para filtros pasa-bajos; modulación de amplitud desde activaciones.

Diferencias sonoras:

Google AdInline article slot
  • PaleoSonic — ruido caótico de colisiones latentes.
  • Neural-Analog — ambient estructurado de ondas físicas.

Escalado y Optimizaciones para Producción

Ambos enfoques corren en Hugging Face Spaces. Para escalar:

  • Usa torch.compile para acelerar hooks.
  • Cuantiza Qwen a 4 bits con bitsandbytes para reducir uso de memoria.
  • Paraleliza activaciones vía DataParallel en múltiples GPUs.

Potencial: Integra en audio en tiempo real (JACK/WASAPI) para actuaciones en vivo. Experimenta con otras capas — las tempranas dan características de bajo nivel, las tardías semántica.

Lecciones Clave

  • El parcheo de mono salta generate() sin reentrenamiento, intercambiando el codificador al vuelo.
  • Los hooks forward de PyTorch son estándar para interpretabilidad; detach es esencial para inferencia.
  • Compresión de activaciones (media axis=1) reduce dimensionalidad sin perder dinámica.
  • bfloat16 es crucial para setups de baja RAM; evita float16 en CPU.
  • DSP con NumPy/SciPy supera a torch.nn para osciladores simples.

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Leer después