Los grandes modelos de lenguaje pueden recordar hechos obscuros de cada rincón del mundo, pero ¿cómo recuerdan tanto? Esta publicación explora mapas lineales, MLP y atención propia como diferentes tipos de almacenamiento de memoria.
La clave de un buen almacenamiento de memoria es su capacidad para recordar lo que almacenó. Cuantos más recuerdos almacenemos, más se interferirán entre sí cuando intentemos recordar uno. La razón interferencia-señal mide cuánto otras memorias entorpecen el recuerdo de uno. El número de recuerdos que un almacén puede almacenar antes de que la interferencia crezca tanto como la señal es su capacidad. Mostraremos cómo pasar de una capa lineal a algo mejor, un MLP, que mejora tanto la capacidad como el recuerdo, y luego todo el camino a la atención propia, que tiene un excelente recuerdo y puede almacenar potencialmente un número ilimitado de recuerdos. Con claves de 64 dimensiones, eso es un salto de aproximadamente 64 recuerdos a aproximadamente 2.700, a más de un millón.
Un almacén de memoria es una función f que mantiene M recuerdos, para i = 1, ..., M. Cada recuerdo es un par clave-valor: una clave k_i ∈ ℝ^{d_k}, utilizada para búsqueda basada en similitud, y un valor v_i ∈ ℝ^{d_v}, que es lo que queremos recuperar. Para usar f, lo consultamos con una entrada x, y recuerda una salida f(x). Un buen almacén de memoria recuerda v_i cuando lo consultamos con k_i, o con otro vector similar a k_i. En la literatura, un almacén de memoria que recuerda por similitud se llama memoria asociativa. El almacén de memoria de producto externo es el tipo de almacén de memoria más básico: simplemente acumula recuerdos mediante productos externos, W = ∑_{i=1}^{M} v_i k_i^T = V^T K, donde las filas de K ∈ ℝ^{M×d_k} y V ∈ ℝ^{M×d_v} son las transpuestas de las claves k_i y los valores v_i^T. Para almacenar un nuevo recuerdo (k, v), simplemente agregamos vk^T a los pesos existentes. Para consultar el almacén de memoria con una entrada x, multiplicamos la entrada por la matriz: f(x) = V^T K x = ∑_{i=1}^{M} v_i (k_i^T x). Así, el recuerdo es una búsqueda por similitud a las claves almacenadas: comparamos la consulta con cada clave y devolvemos la suma de los valores ponderados por esas similitudes. El recuerdo captura interferencia: almacenar recuerdos容易,但当我们尝试回忆其中一条时会发生什么?假设简单起见,我们假设每个键都归一化为长度 1,即 k_j^T k_j = 1。那么 f(k_j) = v_j + ∑_{i≠j} v_i (k_i^T k_j). La primera término es la señal que queremos, y el segundo término es la interferencia de otras memorias.
Fuente: Hacker News · Resumido por HeadlinesBriefing