Neuroni artificiali: tipi dati ed operazioni.

Dialogo con ChatGPT.

Ciao ti chiederei delle spiegazioni sul neurone artificiale. IL dato in entrata è un n-pla in int4 o int8. Immagino che questi tipi non prevedano il segno ed un modello sià più preciso se usa gli int8. Ti chiedo se un modello può avere tipi diversi. Lo spazio quindi è lineare di dimensione n. COme puoi spiegare in modo divulgativo che si considera un iperpiano, quindi uno spazio di dimensione n-1, ritengo per semplificare… Inoltre si ricorra ad una matrice mxn immagino con m < n per semplificare il problema…

Certo. Ti propongo di separare alcuni concetti che spesso vengono mescolati: tipo numerico (INT4/INT8), spazio degli input, iperpiano, e matrice m×nm\times n. La tua intuizione è buona, ma ci sono un paio di correzioni importanti.

1. INT4 e INT8: il dato può essere con o senza segno

Un ingresso di un neurone artificiale può essere rappresentato, per esempio, come:

x=(x1,x2,…,xn)x = (x_1,x_2,\ldots,x_n)

dove ogni xix_i è un numero intero.

Ma INT4 e INT8 possono essere signed oppure unsigned.

Per esempio:

  • INT8 signed: −128,…,+127-128,\ldots,+127
  • INT8 unsigned: 0,…,2550,\ldots,255
  • INT4 signed: −8,…,+7-8,\ldots,+7
  • INT4 unsigned: 0,…,150,\ldots,15

Quindi non è corretto dire che INT4/INT8 non prevedono il segno.

Inoltre, INT8 non è necessariamente più preciso di INT4 in senso assoluto. Ha semplicemente più livelli rappresentabili:

24=162^4=16

contro

28=256.2^8=256.

Quindi INT8 consente generalmente una quantizzazione più fine, ma la precisione effettiva dipende anche da come vengono quantizzati e scalati i valori.


2. Un modello può tranquillamente usare tipi diversi

Sì, assolutamente.

Anzi, nei modelli moderni è normale avere una certa eterogeneità numerica.

Per esempio potresti avere:

xi∈INT8x_i \in INT8

per gli ingressi,

wij∈INT8w_{ij} \in INT8

per i pesi, ma utilizzare un accumulatore più grande, per esempio INT32, per il prodotto scalare:

z=∑ixiwi+b.z = \sum_i x_iw_i + b.

Poi il risultato può essere nuovamente quantizzato.

Quindi una situazione concettualmente possibile è:

INT8×INT8→INT32→INT8\boxed{INT8 \times INT8 \rightarrow INT32 \rightarrow INT8}

Questo è molto importante nelle reti quantizzate.


3. Lo spazio degli input è davvero nn-dimensionale

Qui la tua intuizione è corretta.

Se hai:

x=(x1,x2,…,xn)x=(x_1,x_2,\ldots,x_n)

hai un punto in uno spazio di dimensione nn.

Per esempio, con tre caratteristiche:

x=(x1,x2,x3)x=(x_1,x_2,x_3)

puoi immaginare un normale spazio 3D.

Con:

x=(x1,…,x100)x=(x_1,\ldots,x_{100})

hai invece uno spazio a 100 dimensioni. Non possiamo visualizzarlo, ma matematicamente il concetto è esattamente lo stesso.

Il fatto che i valori siano INT8 non cambia la dimensione dello spazio: cambia il numero di valori possibili lungo ciascuna dimensione.


4. Dove compare l’iperpiano?

Qui arriviamo al cuore del neurone artificiale.

Un neurone calcola, in forma semplificata:

z=w1x1+w2x2+⋯+wnxn+bz=w_1x_1+w_2x_2+\cdots+w_nx_n+b

oppure:

z=wTx+b.z=w^Tx+b.

Immagina ora di chiedere:

Quali sono i punti xx per cui il neurone produce esattamente zero?

Poniamo:

wTx+b=0.w^Tx+b=0.

Questa equazione descrive un iperpiano.

Ed è qui che entra in gioco la dimensione n−1n-1.

Se lo spazio degli input ha dimensione nn, l’insieme dei punti che soddisfano:

wTx+b=0w^Tx+b=0

ha generalmente dimensione:

n−1.\boxed{n-1}.

Un esempio molto intuitivo

Nel mondo 2D hai:

w1x1+w2x2+b=0.w_1x_1+w_2x_2+b=0.

Questa equazione descrive una retta.

Lo spazio è 2D:

       x2
        ↑
        |
    ----+---------  ← retta
        |
        |
        +----------→ x1

Una retta ha dimensione 1:

2−1=1.2-1=1.

Nel mondo 3D:

w1x1+w2x2+w3x3+b=0w_1x_1+w_2x_2+w_3x_3+b=0

descrive un piano.

Lo spazio è 3D, mentre il piano è 2D:

3−1=2.3-1=2.

E in nn dimensioni abbiamo:

spazio degli input=n\boxed{\text{spazio degli input}=n}

iperpiano=n−1.\boxed{\text{iperpiano}=n-1}.


5. Ma perché un neurone “ha bisogno” dell’iperpiano?

Perché l’iperpiano rappresenta una sorta di confine decisionale.

Supponiamo di avere una funzione di attivazione molto semplice:

y={1se wTx+b>00se wTx+b≤0y= \begin{cases} 1 & \text{se }w^Tx+b>0\\ 0 & \text{se }w^Tx+b\leq0 \end{cases}

Il neurone divide quindi lo spazio in due regioni:

wTx+b>0w^Tx+b>0

e

wTx+b<0.w^Tx+b<0.

L’iperpiano

wTx+b=0w^Tx+b=0

è il confine tra le due.

Questa è probabilmente la maniera più divulgativa per pensare al neurone:

Un neurone prende uno spazio nn-dimensionale e, attraverso i suoi pesi, definisce un confine n−1n-1-dimensionale che separa lo spazio in due regioni.

Naturalmente una rete neurale con funzioni di attivazione non lineari può creare confini molto più complessi.


6. E la matrice m×nm\times n?

Qui bisogna fare una piccola distinzione.

Supponiamo di avere un solo neurone:

w=(w1,…,wn).w=(w_1,\ldots,w_n).

I pesi sono un vettore di dimensione nn:

w∈Rn.w\in\mathbb R^n.

Se invece abbiamo m neuroni, ciascuno dei quali riceve gli stessi nn ingressi, possiamo mettere tutti i pesi in una matrice:

W=[w11w12⋯w1nw21w22⋯w2n⋮⋮⋱⋮wm1wm2⋯wmn].W= \begin{bmatrix} w_{11}&w_{12}&\cdots&w_{1n}\\ w_{21}&w_{22}&\cdots&w_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ w_{m1}&w_{m2}&\cdots&w_{mn} \end{bmatrix}.

Questa è una matrice:

m×n.\boxed{m\times n}.

E possiamo scrivere:

y=Wx+b.y=Wx+b.

Se:

x∈Rnx\in\mathbb R^n

e

W∈Rm×n,W\in\mathbb R^{m\times n},

allora:

y∈Rm.y\in\mathbb R^m.

Quindi abbiamo trasformato:

Rn→Rm.\boxed{\mathbb R^n\rightarrow\mathbb R^m}.


7. Però m<nm<n non è necessario

Questo è un punto importante rispetto alla tua ipotesi.

Non è necessario che:

m<n.m<n.

Può essere:

m<nm<n

oppure

m=nm=n

oppure

m>n.m>n.

Dipende da quello che deve fare il layer.

Per esempio:

R1000→R100\mathbb R^{1000}\rightarrow\mathbb R^{100}

è una riduzione dimensionale.

Ma puoi anche avere:

R100→R500.\mathbb R^{100}\rightarrow\mathbb R^{500}.

In questo caso hai un’espansione dello spazio.


8. Una maniera intuitiva di vedere la matrice

Puoi pensare alla matrice WW come a m neuroni messi insieme.

Hai:

                    neurone 1
                   /
x1 ---------------/
x2 --------------/
x3 -------------/
...
xn ------------/

                    neurone 2
                   /
x1 ---------------/
x2 --------------/
...
xn ------------/

                    ...
                    
                    neurone m

Ogni neurone ha il proprio vettore di pesi:

w1,w2,…,wm.w_1,w_2,\ldots,w_m.

Quindi hai m diversi iperpiani, o meglio mm diverse direzioni/decision boundaries associate ai neuroni.

La matrice semplicemente li raccoglie tutti:

W=[— w1 —— w2 —⋮— wm —].W= \begin{bmatrix} \text{— }w_1\text{ —}\\ \text{— }w_2\text{ —}\\ \vdots\\ \text{— }w_m\text{ —} \end{bmatrix}.


9. Dove entra la “semplificazione” m<nm<n?

Qui farei attenzione alla terminologia.

Se scegli:

m<n,m<n,

stai effettivamente facendo una compressione/riduzione della dimensionalità:

Rn→Rm.\mathbb R^n\rightarrow\mathbb R^m.

Per esempio:

1000 caratteristiche→100 caratteristiche.1000\text{ caratteristiche} \rightarrow 100\text{ caratteristiche}.

Questo può essere utile perché una rappresentazione di 100 dimensioni può essere sufficiente per conservare l’informazione rilevante.

Ma non è il motivo per cui si usa una matrice m×nm\times n.

La matrice m×nm\times n deriva semplicemente dal fatto che hai m neuroni, ognuno con n pesi.


Un’ultima precisazione molto importante

C’è un passaggio concettuale che secondo me vale la pena approfondire perché probabilmente è proprio quello che stai cercando di capire:

x∈Rn\boxed{x\in\mathbb R^n}

↓\downarrow

W∈Rm×n\boxed{W\in\mathbb R^{m\times n}}

↓\downarrow

Wx∈Rm\boxed{Wx\in\mathbb R^m}

non significa semplicemente che “riduciamo lo spazio perché m<nm<n“.

La moltiplicazione per WW è una trasformazione dello spazio. Se m<nm<n, in generale stai proiettando/comprimendo nn dimensioni in mm dimensioni e inevitabilmente alcune informazioni possono andare perse.

E qui si apre il collegamento molto interessante con rango della matrice, kernel/null space, proiezioni, PCA e perché una rete neurale può comprimere un’enorme quantità di dati mantenendo le informazioni utili.

Ma cosa intendi per proiezioni? Certamente non della geometrai proiettiva …

Esatto: non sto parlando di geometria proiettiva. 😊

Uso “proiezione” nel senso di algebra lineare, cioè di una trasformazione che rappresenta un oggetto di uno spazio mediante un numero minore di coordinate.

Un esempio molto concreto

Immagina un punto nello spazio 3D:

x=(x,y,z).x=(x,y,z).

Se costruisco:

W=[100010]W= \begin{bmatrix} 1&0&0\\ 0&1&0 \end{bmatrix}

e calcolo:

Wx=[100010][xyz]=[xy]Wx= \begin{bmatrix} 1&0&0\\ 0&1&0 \end{bmatrix} \begin{bmatrix} x\\y\\z \end{bmatrix} = \begin{bmatrix} x\\y \end{bmatrix}

ho trasformato:

(x,y,z)⟶(x,y).(x,y,z)\quad\longrightarrow\quad(x,y).

In pratica ho eliminato la coordinata z.

Geometricamente puoi immaginare di guardare lo spazio 3D “dall’alto”: punti che hanno xx e yy uguali, ma zz diverso, finiscono nello stesso punto del piano.

Questa è una proiezione nel senso dell’algebra lineare.


Ma con una matrice generica è più interessante

Considera:

W=[101011].W= \begin{bmatrix} 1&0&1\\ 0&1&1 \end{bmatrix}.

Ora:

(x,y,z)→(x+z,y+z).(x,y,z) \rightarrow (x+z,y+z).

Non stiamo semplicemente buttando via zz. Stiamo combinando le tre coordinate per costruire due nuove coordinate.

Questo è molto più vicino a quello che succede in una rete neurale.

Infatti ogni riga di WW è un neurone:

y1=x+zy_1=x+z

y2=y+z.y_2=y+z.

Quindi:

[y1y2]=W[xyz].\begin{bmatrix} y_1\\y_2 \end{bmatrix} = W \begin{bmatrix} x\\y\\z \end{bmatrix}.

Abbiamo trasformato uno spazio a 3 dimensioni in uno a 2 dimensioni:

R3→R2.\mathbb R^3\rightarrow\mathbb R^2.


E qui c’è una sottigliezza importante

Quando ho detto prima “proiettando/comprimendo”, “proiettando” era un po’ troppo informale.

Una generica trasformazione

W:Rn→RmW:\mathbb R^n\rightarrow\mathbb R^m

con m<nm<n non è necessariamente una proiezione geometrica nel senso stretto.

È più corretto dire:

una trasformazione lineare da uno spazio di dimensione nn a uno spazio di dimensione mm.

Se WW ha rango mm, questa trasformazione porta nn dimensioni in mm dimensioni, ma inevitabilmente diversi punti dello spazio originale possono produrre lo stesso risultato.

Ed è proprio questo il concetto che diventa fondamentale per capire le reti neurali.

Per esempio, se:

W=[101011],W= \begin{bmatrix} 1&0&1\\ 0&1&1 \end{bmatrix},

i punti

(1,2,3)(1,2,3)

e

(2,3,2)(2,3,2)

producono entrambi:

(4,5).(4,5).

Quindi la trasformazione ha perso informazione: partendo da (4,5)(4,5) non puoi sapere quale dei due punti originali avevi.

Questo è il significato profondo di una trasformazione

Rn→Rm,m<n.\mathbb R^n\rightarrow\mathbb R^m,\qquad m<n.

E il concetto matematico che descrive quale informazione viene persa è il kernel (o nucleo) della matrice. È probabilmente il prossimo concetto più utile da introdurre, perché si collega direttamente a ciò che stavi chiedendo sulla matrice m×nm\times n.

Ma dal punto di vista strettamente matematico non si può parlare di trasformazione che richiede la biunivocità e quindi una matrice invertibile ovvero quadrata..

Sì, hai colto una distinzione matematica importante, ma c’è da precisare il termine “trasformazione”.

In algebra lineare si parla tranquillamente di trasformazione lineare anche quando non è biiettiva. La biiettività non è richiesta per essere una trasformazione lineare.

Data una matrice

W∈Rm×n,W\in\mathbb R^{m\times n},

la funzione

T:Rn→Rm,T(x)=WxT:\mathbb R^n\rightarrow\mathbb R^m,\qquad T(x)=Wx

è una trasformazione lineare per qualsiasi m,nm,n.

Dove entra la biiettività?

Se vuoi che TT sia invertibile, allora sì: deve essere biiettiva.

E affinché una trasformazione lineare

T:Rn→RmT:\mathbb R^n\rightarrow\mathbb R^m

sia biiettiva, necessariamente deve essere:

m=n\boxed{m=n}

e la matrice deve avere rango pieno:

det⁡(W)≠0.\det(W)\neq0.

Quindi, nel caso quadrato:

W∈Rn×nW\in\mathbb R^{n\times n}

puoi avere:

x→Wyx\xrightarrow{W}y

e poi recuperare univocamente:

x=W−1y.x=W^{-1}y.


Se m<nm<n, cosa succede?

Supponiamo:

T:Rn→Rm,m<n.T:\mathbb R^n\rightarrow\mathbb R^m, \qquad m<n.

Non può essere iniettiva.

Questo segue direttamente dal teorema rango-nullità:

dim⁡(ker⁡W)+rank⁡(W)=n.\dim(\ker W)+\operatorname{rank}(W)=n.

Dato che:

rank⁡(W)≤m<n,\operatorname{rank}(W)\leq m<n,

necessariamente:

dim⁡(ker⁡W)>0.\dim(\ker W)>0.

Quindi esiste almeno un vettore non nullo vv tale che:

Wv=0.Wv=0.

E allora, per qualunque xx:

W(x+v)=Wx+Wv=Wx.W(x+v)=Wx+Wv=Wx.

Quindi x e x+v diventano indistinguibili dopo la trasformazione.

Ed è precisamente per questo che dicevo che c’è perdita di informazione.


Quindi correggerei la mia formulazione precedente

Quando parlavo di “proiezione” riferendomi a

W:Rn→Rm,m<n,W:\mathbb R^n\rightarrow\mathbb R^m,\quad m<n,

avrei dovuto dire più precisamente:

una trasformazione lineare non invertibile che riduce la dimensionalità.

“Proiezione” è un termine che si può usare in particolari circostanze, ma non è sinonimo generale di matrice rettangolare.

E questa distinzione è molto utile per capire le reti neurali: un layer m×n con m<n non sta semplicemente “cambiando coordinate”. Sta effettuando una funzione non invertibile e, in generale, sta eliminando alcune direzioni dello spazio degli input.

C’è poi un punto ancora più interessante: il neurone singolo con

wTx+bw^Tx+b

non sta nemmeno facendo principalmente una riduzione da nn a n−1n-1. Sta producendo uno scalare, quindi la trasformazione lineare associata è

Rn→R.\mathbb R^n\rightarrow\mathbb R.

L’iperpiano n−1-dimensionale compare invece come insieme di punti che hanno la stessa uscita (per esempio wTx+b=0w^Tx+b=0). Questa è una distinzione concettuale fondamentale.

Per “produrre uno scalare” forse intendi applicare il prodotto scalare che rende un numero.

Esattamente. È proprio il prodotto scalare il punto di partenza.

Se l’ingresso è

x=(x1,x2,…,xn)x=(x_1,x_2,\ldots,x_n)

e i pesi del neurone sono

w=(w1,w2,…,wn),w=(w_1,w_2,\ldots,w_n),

il neurone calcola:

w⋅x=∑i=1nwixiw\cdot x = \sum_{i=1}^{n}w_i x_i

che è uno scalare, cioè un singolo numero.

Poi normalmente aggiunge il bias:

z=w⋅x+b.z=w\cdot x+b.

Quindi possiamo rappresentare il neurone come:

Rn→  w⋅x+b  R\boxed{\mathbb R^n\xrightarrow{\;w\cdot x+b\;}\mathbb R}

e, se poi applichiamo una funzione di attivazione ff:

y=f(w⋅x+b).y=f(w\cdot x+b).

E qui torna l’iperpiano

Il prodotto scalare ha una proprietà geometrica interessante.

Consideriamo tutti i punti xx per cui:

w⋅x+b=0.w\cdot x+b=0.

Questi punti formano un iperpiano di dimensione n−1n-1.

Per esempio, in 3D:

w1x1+w2x2+w3x3+b=0w_1x_1+w_2x_2+w_3x_3+b=0

è un piano 2D dentro lo spazio 3D.

Quindi abbiamo tre oggetti distinti, che è bene non confondere:

  1. Lo spazio degli ingressi
    x∈Rnx\in\mathbb R^n
  2. Il prodotto scalare
    w⋅x∈Rw\cdot x\in\mathbb R
    che trasforma il vettore in uno scalare.
  3. L’iperpiano
    {x∈Rn:w⋅x+b=0}\{x\in\mathbb R^n:w\cdot x+b=0\}
    che è un sottoinsieme dello spazio degli ingressi e, genericamente, ha dimensione n−1n-1.

Ed è proprio questa terza cosa che può generare confusione: l’iperpiano non è il risultato del prodotto scalare. È l’insieme degli ingressi che producono un particolare risultato, in questo caso zero.

Anzi, possiamo fare un passo ulteriore: il vettore ww è ortogonale all’iperpiano. Questa proprietà permette di capire geometricamente perché i pesi del neurone determinano l’orientamento della “separazione” tra le due regioni dello spazio.

Ed i pesi cosa rappresentano?

Sì. E qui arriviamo probabilmente al concetto più importante per capire cosa “impara” un neurone.

I pesi

w=(w1,w2,…,wn)w=(w_1,w_2,\ldots,w_n)

sono, matematicamente, i coefficienti con cui il neurone pesa ciascuna componente dell’ingresso.

Il neurone calcola:

z=w1x1+w2x2+⋯+wnxn+b.z=w_1x_1+w_2x_2+\cdots+w_nx_n+b.

Un’interpretazione molto intuitiva

Supponiamo che xx descriva una persona attraverso tre caratteristiche:

x=(altezza,peso,etaˋ).x=(\text{altezza},\text{peso},\text{età}).

Il neurone potrebbe avere:

w=(0.2,  0.7,  −0.1).w=(0.2,\;0.7,\;-0.1).

Allora calcola:

z=0.2 x1+0.7 x2−0.1 x3+b.z=0.2\,x_1+0.7\,x_2-0.1\,x_3+b.

Significa che, per quel neurone, le tre caratteristiche contribuiscono in maniera diversa al risultato:

  • w1=0.2w_1=0.2: contributo relativamente piccolo e positivo di x1x_1;
  • w2=0.7w_2=0.7: contributo positivo maggiore di x2x_2;
  • w3=−0.1w_3=-0.1: contributo negativo di x3x_3.

Naturalmente questa interpretazione va fatta con cautela se le variabili hanno scale diverse: normalmente gli input vengono opportunamente normalizzati/quantizzati.


Ma geometricamente i pesi sono ancora più interessanti

Il vettore

w=(w1,…,wn)\boxed{w=(w_1,\ldots,w_n)}

non è soltanto un insieme di coefficienti.

È anche un vettore nello stesso spazio degli input.

E questo vettore ha una proprietà fondamentale:

w⊥iperpiano\boxed{w\perp\text{iperpiano}}

dove l’iperpiano è:

w⋅x+b=0.w\cdot x+b=0.

Quindi, se immaginiamo lo spazio degli input come un enorme spazio nn-dimensionale, il vettore dei pesi stabilisce l’orientamento del confine.

Per esempio, in 2D:

w=(w1,w2)w=(w_1,w_2)

determina la retta:

w1x1+w2x2+b=0.w_1x_1+w_2x_2+b=0.

Il vettore ww è perpendicolare alla retta:

                 ↑ w
                 |
                 |
        ---------+---------  ← iperpiano
                 |
                 |

Quindi:

I pesi determinano l’orientamento dell’iperpiano.

Mentre il bias bb determina sostanzialmente dove questo iperpiano si trova.


E cosa significa che il neurone “impara”?

Questa è forse la parte più bella.

All’inizio i pesi sono, semplificando, valori iniziali:

w1,w2,…,wn.w_1,w_2,\ldots,w_n.

Durante l’addestramento la rete li modifica.

Quindi sta cercando valori di:

w1,…,wn,b\boxed{w_1,\ldots,w_n,b}

che producano le risposte desiderate sugli esempi di addestramento.

In termini geometrici, puoi pensare che il neurone stia cercando l’orientamento e la posizione dell’iperpiano che separano meglio determinate regioni dello spazio degli input.

E qui c’è una precisazione importante rispetto a quanto dicevamo prima: un singolo neurone fa una cosa molto semplice. Una rete con molti neuroni e molti layer combina moltissimi di questi semplici elementi, e le funzioni di attivazione introducono la non linearità necessaria per costruire separazioni molto più complesse.

In altre parole, il peso wiw_i dice al neurone quanto la componente xi conta nel prodotto scalare, mentre l’intero vettore ww definisce una direzione geometrica nello spazio degli input.

Il bias è una traslazione?

Sì come effetto geometrico, ma farei una precisazione importante: il bias non è una somma tra vettori nel calcolo del neurone. È uno scalare che viene sommato allo scalare prodotto dal prodotto scalare.

Il neurone calcola:

z=wTx+bz=w^Tx+b

dove:

wTx∈R,b∈R.w^Tx\in\mathbb R,\qquad b\in\mathbb R.

Quindi:

scalare+scalare=scalare\boxed{\text{scalare}+\text{scalare}=\text{scalare}}

Però geometricamente il bias produce una traslazione

Consideriamo l’iperpiano:

wTx+b=0.w^Tx+b=0.

Senza bias avremmo:

wTx=0.w^Tx=0.

Quest’ultimo iperpiano passa necessariamente per l’origine.

Introducendo bb:

wTx=−b,w^Tx=-b,

l’iperpiano viene spostato rispetto all’origine.

Per esempio, in 2D:

x+y=0x+y=0

è una retta che passa per l’origine.

Se mettiamo:

x+y−3=0x+y-3=0

otteniamo:

x+y=3,x+y=3,

che è una retta parallela alla precedente, ma traslata.

Quindi:

  • w determina l’orientamento dell’iperpiano;
  • b ne determina lo spostamento;
  • w^Tx+b è comunque uno scalare.

E perché non è una “somma tra vettori”?

Perché potremmo però riscrivere il bias in una forma geometrica interessante.

Se w≠0w\neq0, possiamo trovare un vettore x0x_0 tale che:

wTx0=−b.w^Tx_0=-b.

Allora l’iperpiano può essere scritto come:

x=x0+v,v∈ker⁡(wT)\boxed{x=x_0+v,\qquad v\in\ker(w^T)}

dove

ker⁡(wT)={v:wTv=0}.\ker(w^T)=\{v:w^Tv=0\}.

Qui sì che compare una vera somma vettoriale: x0+vx_0+v.

In sostanza, l’iperpiano con bias è una traslazione dell’iperpiano passante per l’origine.

Questa formulazione, secondo me, è molto utile perché collega perfettamente i tre concetti che stiamo costruendo:

w⏟normale+b⏟traslazione⟹wTx+b=0⏟iperpiano.\underbrace{w}_{\text{normale}} \quad+\quad \underbrace{b}_{\text{traslazione}} \quad\Longrightarrow\quad \underbrace{w^Tx+b=0}_{\text{iperpiano}}.

E c’è un piccolo dettaglio elegante: la distanza dell’iperpiano dall’origine è

∣b∣∥w∥.\boxed{\frac{|b|}{\|w\|}}.

Quindi bb determina lo spostamento, ma non da solo: lo spostamento effettivo dipende anche dalla lunghezza di ww.