Una rapida lettura del nuovo documento di Deepseek sulle Hyper-Connections a Manifold-Constrained: - Vuoi aumentare la dimensione del residuo da 1×C a n×C (n flussi invece di 1). Aggiornamento del residuo precedente: x' = x + layer(x). Fai in modo che x sia n×C e usa x' = Ax + B layer(Cx) invece. A, B, C dipendono tutti da x e sono piccole matrici (n×n, n×1, n×1). A sembra essere la più impattante. Questa è la Hyper-Connections (HC). - HC ha lo stesso problema di altri schemi di modifica del residuo: alla fine il prodotto delle matrici A apprese (lungo il percorso identità) esplode/vanisce. - Per risolvere questo, proiettano le matrici A sul poliedro di Birkhoff (parole più semplici: trasformalo, dopo l'esponenziale per rendere gli elementi positivi, in una matrice i cui totali di riga e colonna diventano 1 - chiamata matrice doppiamente stocastica). Questo ha belle proprietà: i prodotti di questi tipi di matrici hanno ancora la somma di riga e colonna pari a 1 (grazie alla chiusura), quindi le cose non esplodono (limite spettrale), e l'invariante è che la somma dei pesi attraverso i flussi è 1. Per n = 1, questo diventa il flusso residuo standard, il che è bello. Il loro metodo di trasformazione è semplice: dividere alternativamente righe e colonne per i totali di riga e colonna rispettivamente per 20 iterazioni (converge alla nostra matrice desiderata man mano che le iterazioni tendono all'infinito). Scoprono che 20 è sufficiente sia per il passaggio in avanti che per quello all'indietro (attraverso 60 strati, il guadagno massimo all'indietro è 1.6 rispetto ai 3000 dell'HC usuale, e 1.6 non è molto lontano da 1). - Comporre queste matrici (involucro convesso di tutte le matrici di permutazione) porta a una mescolanza di informazioni man mano che l'indice dello strato aumenta, il che è un bel pezzo di intuizione ed è anche mostrato molto chiaramente nella loro matrice composita per 60 strati. Credo che complessivamente otteniamo una somma pesata dei percorsi residui (pensando ai gradienti), dove i percorsi logicamente raggruppabili hanno pesi che sommano a 1. Un approccio piuttosto principled IMO, che rende anche i guadagni (in avanti e all'indietro) molto stabili. - Una cosa interessante da notare: molta mescolanza "simile al pooling" nella prima metà rispetto alla seconda metà degli strati. La seconda metà degli strati tratta i diversi canali in modo più preciso/netto rispetto alla prima metà, piuttosto intuitivo. - Cambiano anche la parametrizzazione di B e C (sigmoide invece di tanh, probabilmente per evitare di cambiare segno, e un fattore di 2 davanti a B, credo per conservare il moltiplicatore residuo medio, C non ha bisogno di questo perché l'input è comunque pre-normato). - Ottimizzazioni di sistema interessanti per rendere questa operazione veloce: fanno fusione di kernel, ricalcolo nel passaggio all'indietro dell'mHC, e persino modificano DualPipe (la loro implementazione della parallelizzazione della pipeline). - Solo il 6.7% di sovraccarico nell'addestramento quando n = 4, la perdita scende di 0.02 e ci sono miglioramenti attraverso i benchmark.