Lezione 9 · Canale 1 · giovedì 8 ottobre 2026

Continuità, limiti e Perceptron

Programmazione Matematica

Continuità Lipschitz

Sia f:D⊆Rn→Rf:D\subseteq\mathbb R^n\to\mathbb R. La continuità si studia in un punto x0∈Dx_0\in D e su un insieme S⊆DS\subseteq D. La continuità Lipschitz è una condizione più forte e ha senso solo su un insieme, perché mette in gioco due punti arbitrari.

In una variabile, la retta per (xˉ,f(xˉ))(\bar x,f(\bar x)) e (x^,f(x^))(\hat x,f(\hat x)) è

y=f(x^)+R(xˉ,x^) (x−x^)R(xˉ,x^)=f(xˉ)−f(x^)xˉ−x^\begin{aligned} y&=f(\hat x)+R(\bar x,\hat x)\,(x-\hat x)\\ R(\bar x,\hat x)&=\frac{f(\bar x)-f(\hat x)}{\bar x-\hat x} \end{aligned}

Il coefficiente angolare RR dipende dalla coppia scelta. Può però accadere che ∣R(xˉ,x^)∣≤L|R(\bar x,\hat x)|\le L per ogni coppia di punti, cioè

∣f(xˉ)−f(x^)∣≤L ∣xˉ−x^∣|f(\bar x)-f(\hat x)|\le L\,|\bar x-\hat x|

In questo caso ff è Lipschitz continua. Su un dominio D⊆RnD\subseteq\mathbb R^n la definizione richiede che esista L>0L>0 tale che

∣f(x)−f(y)∣≤L ∥x−y∥∀x,y∈D|f(x)-f(y)|\le L\,\|x-y\|\qquad\forall x,y\in D

Geometricamente, il grafico sta, in ogni suo punto, dentro il cono di pendenza ±L\pm L che ha il vertice in quel punto.

Il cono e il rettangolo di Lipschitz

Cono

−2−1,5−1−0,500,511,52−1,5−1−0,500,511,5
  • pendenza
  • pendenza

Rettangolo

−2−1,5−1−0,500,511,52−1,5−1−0,500,511,5
  • rettangolo di lati e
Con il grafico di sta sempre dentro il cono di pendenza , e non dipende da ; con questo non vale più.

Lipschitz, continuità uniforme, continuità

Una funzione Lipschitz continua è continua. Si fissano x∈Dx\in D ed ε>0\varepsilon>0: per ogni yy con ∥x−y∥<ε/L\|x-y\|<\varepsilon/L

∣f(x)−f(y)∣≤L ∥x−y∥<ε|f(x)-f(y)|\le L\,\|x-y\|<\varepsilon

Il raggio è δε=ε/L\delta_\varepsilon=\varepsilon/L e non dipende da xx né da yy. Nella continuità in un punto, invece, il raggio può dipendere dal punto. Questa proprietà è la continuità uniforme: fissato ε>0\varepsilon>0, un solo raggio vale per tutte le coppie di punti.

∀ε>0  ∃ δε>0:∣f(x)−f(y)∣<ε∀x,y∈D: ∥x−y∥<δε\begin{aligned} &\forall\varepsilon>0\ \ \exists\,\delta_\varepsilon>0:\\ &|f(x)-f(y)|<\varepsilon\quad\forall x,y\in D:\ \|x-y\|<\delta_\varepsilon \end{aligned}

Con C0(D)C^0(D), CU(D)C^U(D) e CL(D)C^L(D) si indicano le funzioni continue, uniformemente continue e Lipschitz continue su DD. Le proprietà formano una catena

CL(D)⊆CU(D)⊆C0(D)C^L(D)\subseteq C^U(D)\subseteq C^0(D)

La Lipschitz continuità è la più forte delle tre. L'implicazione opposta non vale: una funzione continua può non essere Lipschitz continua.

Teorema di Heine–Cantor (senza dimostrazione). In Rn\mathbb R^n un insieme è compatto se è chiuso e limitato.

D compattof∈C0(D)} ⟹ f∈CU(D)\left.\begin{aligned} &D\text{ compatto}\\ &f\in C^0(D) \end{aligned}\right\} \ \Longrightarrow\ f\in C^U(D)

La compattezza è una condizione sufficiente per la continuità uniforme, non necessaria. Allo stesso modo, per una funzione derivabile, f′(x0)=0f'(x_0)=0 è necessaria per un minimo relativo in un punto x0x_0 interno al dominio, ma non sufficiente: la derivata può annullarsi senza che il punto sia un minimo.

La proprietà Lipschitz ricompare negli algoritmi di ottimizzazione. Se il gradiente di ff è Lipschitz continuo di costante LL, un passo α<2/L\alpha<2/L garantisce la convergenza del metodo del gradiente.

Restrizioni e limiti in più variabili

Sia A⊆DA\subseteq D. La restrizione di ff ad AA è la funzione

f∣A:A→R,f∣A(x)=f(x)∀x∈Af|_A:A\to\mathbb R,\qquad f|_A(x)=f(x)\quad\forall x\in A

Per esempio, f(x,y)=x−yx+yf(x,y)=\dfrac{x-y}{x+y} ha dominio D={(x,y)∈R2:x+y≠0}D=\{(x,y)\in\mathbb R^2:x+y\ne 0\}. Su A={(x,y)∈D:y=2x}A=\{(x,y)\in D:y=2x\}, dove x≠0x\ne0,

f∣A(x,y)=x−2xx+2x=−x3x=−13f|_A(x,y)=\frac{x-2x}{x+2x}=\frac{-x}{3x}=-\frac13

Teorema (senza dimostrazione, analogo del teorema ponte per le successioni). Sia x0x_0 un punto di accumulazione per DD. Con ℓ∈R∗\ell\in\mathbb R^*, cioè finito, +∞+\infty o −∞-\infty,

lim⁡x→x0f(x)=ℓ  ⟺   ∀A⊆D con x0 di accumulazione per A:lim⁡x→x0f∣A(x)=ℓ\begin{aligned} &\lim_{x\to x_0}f(x)=\ell\\ &\iff\ \forall A\subseteq D\text{ con }x_0\text{ di accumulazione per }A:\\ &\qquad\lim_{x\to x_0}f|_A(x)=\ell \end{aligned}

Poiché la condizione vale per ogni AA, basta trovare due restrizioni con limiti diversi per concludere che il limite non esiste.

Esempio. Sia f(x,y)=sin⁡(xy)x2+y2f(x,y)=\dfrac{\sin(xy)}{x^2+y^2} su D=R2∖{(0,0)}D=\mathbb R^2\setminus\{(0,0)\}. L'origine non sta in DD ma è punto di accumulazione, quindi il limite ha senso.

  • Su A={(x,y)∈D:x=0}A=\{(x,y)\in D:x=0\} il numeratore è identicamente nullo, non solo infinitesimo: f∣A=0/y2=0f|_A=0/y^2=0 e il limite è 00.
  • Su B={(x,y)∈D:y=x}B=\{(x,y)\in D:y=x\} si ha f∣B=sin⁡(x2)2x2f|_B=\dfrac{\sin(x^2)}{2x^2}, che tende a 12\dfrac12 perché sin⁡u/u→1\sin u/u\to 1.

I due limiti sono diversi, quindi il limite in (0,0)(0,0) non esiste.

Il Perceptron

Il Perceptron è un modello di neurone artificiale, ispirato al neurone biologico. Il neurone riceve segnali dagli altri neuroni, ognuno pesato da un peso sinaptico, e si attiva se la somma pesata supera una soglia. Ogni neurone è un'unità molto semplice: la forza sta nel metterne insieme moltissimi.

Gli ingressi sono x1,…,xnx_1,\dots,x_n, i pesi sinaptici v1,…,vnv_1,\dots,v_n e la soglia è θ\theta. L'uscita è

y=G(∑i=1nvixi−θ)=G(vTx−θ)\begin{aligned} y&=G\Bigl(\sum_{i=1}^n v_ix_i-\theta\Bigr)\\ &=G(v^T x-\theta) \end{aligned}

dove GG è la funzione di attivazione, il gradino:

G(t)={1t≥00t<0G(t)=\begin{cases}1&t\ge 0\\0&t<0\end{cases}

Il neurone si attiva quando ∑ivixi≥θ\sum_i v_ix_i\ge\theta e resta spento altrimenti.

Ogni ingresso entra moltiplicato per il suo peso . Il nodo somma gli ingressi pesati e toglie la soglia ; il gradino dà se il risultato è almeno , altrimenti .

Con n=2n=2 l'insieme dei punti con v1x1+v2x2=θv_1x_1+v_2x_2=\theta è una retta. Divide il piano in due semipiani: nel primo l'uscita è 11, nell'altro 00. Un neurone è quindi un classificatore lineare: ha una superficie di separazione lineare.

Addestrare un neurone

Ogni paziente è descritto da due caratteristiche cliniche, la pressione arteriosa e la fluidità del sangue. Dopo cinque anni si verifica chi ha avuto un evento ischemico: etichetta 11 a chi l'ha avuto, 00 agli altri. Con questi dati storici si vuole prevedere il rischio dei nuovi pazienti.

In generale il training set è

T={(x(p),y(p))}p=1P,y(p)∈{0,1}\mathcal T=\{(x^{(p)},y^{(p)})\}_{p=1}^{P},\qquad y^{(p)}\in\{0,1\}

dove x(p)∈Rnx^{(p)}\in\mathbb R^n è il vettore delle caratteristiche e y(p)y^{(p)} l'etichetta nota. Si indica con F(x;W,θ)=G(WTx−θ)F(x;W,\theta)=G(W^T x-\theta) l'uscita del neurone, con W=(v1,…,vn)W=(v_1,\dots,v_n) il vettore dei pesi. I dati sono noti, le incognite sono WW e θ\theta: vanno scelti in modo che il neurone classifichi correttamente i dati, F(x(p);W,θ)=y(p)F(x^{(p)};W,\theta)=y^{(p)} per p=1,…,Pp=1,\dots,P. Si misura l'errore sul campione pp e si minimizza la somma:

ep(W,θ)=∣F(x(p);W,θ)−y(p)∣min⁡W,θ∑p=1Pep(W,θ)\begin{gathered} e_p(W,\theta)=|F(x^{(p)};W,\theta)-y^{(p)}|\\ \min_{W,\theta}\sum_{p=1}^{P}e_p(W,\theta) \end{gathered}

Un algoritmo di minimizzazione richiede che la funzione sia continua e derivabile, e qui non lo è per due motivi.

Il gradino non è continuo. Quindi neppure FF e l'errore lo sono rispetto a WW e θ\theta. Lo si sostituisce con la funzione logistica, che ha andamento simile al gradino ma è continua e derivabile, e l'uscita diventa F=σ(WTx−θ)F=\sigma(W^T x-\theta):

σ(t)=11+e−t\sigma(t)=\frac{1}{1+e^{-t}}

Il valore assoluto non è derivabile in 00. Lo si sostituisce con il quadrato, che misura ancora lo scarto fra uscita ed etichetta:

min⁡W,θ∑p=1P(F(x(p);W,θ)−y(p))2\min_{W,\theta}\sum_{p=1}^{P}\bigl(F(x^{(p)};W,\theta)-y^{(p)}\bigr)^2

Ora esistono le derivate rispetto ai pesi e alla soglia, e il problema si può trattare con un algoritmo.

Lo XOR e le reti di neuroni

Il problema XOR assegna le etichette

(0,0)↦0,(0,1)↦1(1,0)↦1,(1,1)↦0\begin{gathered} (0,0)\mapsto 0,\quad (0,1)\mapsto 1\\ (1,0)\mapsto 1,\quad (1,1)\mapsto 0 \end{gathered}

Un singolo neurone non può classificarli: non esiste una retta con (0,1)(0,1) e (1,0)(1,0) da una parte e (0,0)(0,0) e (1,1)(1,1) dall'altra.

Un neurone sui punti dello XOR

−0,4−0,200,20,40,60,811,21,4−0,4−0,200,20,40,60,811,21,4
  • retta di separazione
  • verso l'uscita
Una retta separa i punti dello XOR solo se le croci stanno da un lato e i cerchi dall'altro: muovendo , , non ci si riesce mai.

Si collegano allora più neuroni in una rete. Due neuroni N1N_1 e N2N_2 ricevono gli ingressi x1x_1 e x2x_2 con i loro pesi sinaptici, e le loro uscite sono gli ingressi di un terzo neurone N3N_3. Con pesi e soglie adatti questa rete di tre neuroni realizza la classificazione dello XOR: lo si verifica provando i quattro ingressi.

Pesi e soglie non si possono assegnare dall'alto: li sceglie un algoritmo, a partire dai dati storici. In questa rete le variabili sono nove, sei pesi e tre soglie, e l'algoritmo minimizza l'errore, una funzione di nove variabili: è l'estensione del metodo del gradiente alle reti neurali, che richiede le derivate parziali e la differenziazione in Rn\mathbb R^n.

Formulario

Continuità Lipschitz

∣f(x)−f(y)∣≤L∥x−y∥|f(x)-f(y)|\le L\|x-y\| ∀x,y∈D,L>0\forall x,y\in D,\quad L>0

Raggio uniforme

δε=εL\delta_\varepsilon=\frac{\varepsilon}{L}

Catena delle classi

CL(D)⊆CU(D)C^L(D)\subseteq C^U(D) CU(D)⊆C0(D)C^U(D)\subseteq C^0(D)

Heine–Cantor

D compatto, f∈C0(D)D\text{ compatto},\ f\in C^0(D) ⇒ f∈CU(D)\Rightarrow\ f\in C^U(D)

Restrizione

f∣A(x)=f(x)∀x∈Af|_A(x)=f(x)\quad\forall x\in A

Limite e restrizioni

lim⁡x→x0f(x)=ℓ\lim_{x\to x_0}f(x)=\ell   ⟺   lim⁡x→x0f∣A(x)=ℓ\iff\ \lim_{x\to x_0}f|_A(x)=\ell

per ogni A⊆DA\subseteq D con x0x_0 di accumulazione per AA

Perceptron

y=G(vTx−θ)y=G(v^T x-\theta) G(t)={1t≥00t<0G(t)=\begin{cases}1&t\ge 0\\0&t<0\end{cases}

Frontiera con n=2n=2

v1x1+v2x2=θv_1x_1+v_2x_2=\theta

Errore da minimizzare

min⁡W,θ∑p=1P(F(x(p);W,θ)−y(p))2\begin{aligned} \min_{W,\theta}&\sum_{p=1}^{P}\\ &\bigl(F(x^{(p)};W,\theta)-y^{(p)}\bigr)^2 \end{aligned}

Logistica

σ(t)=11+e−t\sigma(t)=\frac{1}{1+e^{-t}}