Rete neurale da zero in Cython

Una piccola libreria di reti neurali scritta senza PyTorch né TensorFlow, in Cython con parti in C++, che si usa da Python con array numpy. L'ho fatta da solo per l'esame di Machine Learning all'Università di Pisa.

Volevo capire la backpropagation dall'interno, senza una libreria che la nasconda, e allo stesso tempo scendere sotto Python: tipi C, memoria allocata a mano, memoryview. Non è pensata per la produzione: è un esercizio d'esame, il motore del progetto per il corso.

Cosa contiene

  1. 01

    Perceptron multistrato

    Una classe con struttura a strati arbitraria, funzione di attivazione per strato, learning rate, momentum e regolarizzazione. Addestramento con backpropagation, set di validazione opzionale, train e predict.

  2. 02

    Una variante incrementale

    Una Cascade Correlation: parte da soli ingressi e uscite e aggiunge neuroni nascosti uno alla volta, scegliendo il candidato più correlato con l'errore residuo e congelandone i pesi. Rimasta incompleta nel 2022, l'ho completata nel 2026 con l'aiuto di Claude Code.

  3. 03

    Prove

    Uno script di prova con il problema XOR, con la curva dell'errore e la mappa della decisione, il dataset MONK-1 e quello del corso (i dati sono del docente, non miei).

Animazione: la rete cresce di un neurone nascosto alla volta, la previsione si raffina fino a separare le due spirali e l'errore scende
Cascade Correlation sulle due spirali (200 punti): 8 neuroni nascosti aggiunti uno alla volta, errore finale 0,003, 100% dei punti classificati. Codice Cython completato nel 2026.
  • Cosa ho fatto io

    Tutto il codice, da solo: circa 940 righe tra Cython e script di prova. Ottimizzatore: discesa del gradiente con momentum, nient'altro. Solo strati completamente connessi.

  • Limiti

    Il README è di due righe, non ci sono test automatici (solo uno script dimostrativo) e non ho confrontato la velocità con altre librerie, quindi non dichiaro vantaggi. Fermo da febbraio 2022.

Stack: Python, Cython (C++), numpy, matplotlib, Makefile e setup.py.