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.

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

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.