Strati di Perceptron
Perceptron è la rete neurale più semplice—solo un neurone. Per compiti più complessi, si utilizza un percettrone multistrato (MLP), che contiene uno o più strati nascosti che permettono alla rete di apprendere schemi più complessi.
Un MLP è composto da:
- Strato di input — riceve i dati;
- Strati nascosti — estraggono schemi;
- Strato di output — produce le predizioni.
Ogni strato contiene più neuroni; l'output di uno strato diventa l'input del successivo.
Pesi e Bias degli Strati
In precedenza, un neurone memorizzava i propri pesi come un vettore e il bias come uno scalare. Tuttavia, uno strato contiene molti neuroni, quindi i suoi pesi diventano una matrice, dove ogni riga memorizza i pesi di un neurone. I bias di tutti i neuroni formano un vettore.
Per uno strato con 3 input e 2 neuroni:
W=[W11W21W12W22W13W23],b=[b1b2]Qui, Wij è il peso dall'input j al neurone i; bi è il bias del neurone i.
Propagazione in Avanti
La propagazione in avanti attiva ciascun neurone calcolando una somma pesata, aggiungendo il bias e applicando la funzione di attivazione.
In precedenza, un singolo neurone utilizzava:
[ z = W \cdot x + b ]
Ora, poiché ogni riga di (W) è il vettore dei pesi di un neurone, eseguire la moltiplicazione tra matrice e vettore tra la matrice dei pesi e il vettore di input calcola automaticamente tutte le somme pesate dei neuroni contemporaneamente.
Per aggiungere i bias agli output dei rispettivi neuroni, deve essere aggiunto anche un vettore di bias:
Infine, la funzione di attivazione viene applicata al risultato — sigmoid o ReLU, nel nostro caso. La formula risultante per la propagazione in avanti nello strato è la seguente:
a=activation(Wx+b)dove a è il vettore delle attivazioni (output) dei neuroni.
Classe Layer
Poiché gli MLP sono composti da strati, definiamo una classe dedicata Layer. I suoi attributi:
inputs: vettore di input (elementin_inputs);outputs: output grezzi dei neuroni (elementin_neurons);weights: matrice dei pesi;biases: vettore dei bias;activation_function: funzione di attivazione utilizzata nello strato.
I pesi e i bias sono inizializzati con valori casuali da una distribuzione uniforme in ([-1, 1]). inputs e outputs sono inizializzati come array NumPy riempiti di zeri per garantire forme coerenti durante la retropropagazione.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
Inizializzare inputs e outputs con zeri previene errori di forma e garantisce che i layer rimangano coerenti sia durante la propagazione in avanti che all'indietro.
Metodo Forward
La propagazione in avanti per un layer calcola le uscite grezze e applica l'attivazione:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
La trasformazione dell'input in un vettore colonna garantisce la corretta moltiplicazione con la matrice dei pesi e il rispetto delle dimensioni attese in tutta la rete.
Se desideri, posso anche abbreviare ulteriormente, produrre un diagramma della struttura del layer o generare il codice completo funzionante per la classe Layer.
1. Cosa rende un perceptrone multistrato (MLP) più potente di un perceptrone semplice?
2. Perché è necessario applicare questo codice prima di moltiplicare inputs per la matrice dei pesi?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 4
Strati di Perceptron
Scorri per mostrare il menu
Perceptron è la rete neurale più semplice—solo un neurone. Per compiti più complessi, si utilizza un percettrone multistrato (MLP), che contiene uno o più strati nascosti che permettono alla rete di apprendere schemi più complessi.
Un MLP è composto da:
- Strato di input — riceve i dati;
- Strati nascosti — estraggono schemi;
- Strato di output — produce le predizioni.
Ogni strato contiene più neuroni; l'output di uno strato diventa l'input del successivo.
Pesi e Bias degli Strati
In precedenza, un neurone memorizzava i propri pesi come un vettore e il bias come uno scalare. Tuttavia, uno strato contiene molti neuroni, quindi i suoi pesi diventano una matrice, dove ogni riga memorizza i pesi di un neurone. I bias di tutti i neuroni formano un vettore.
Per uno strato con 3 input e 2 neuroni:
W=[W11W21W12W22W13W23],b=[b1b2]Qui, Wij è il peso dall'input j al neurone i; bi è il bias del neurone i.
Propagazione in Avanti
La propagazione in avanti attiva ciascun neurone calcolando una somma pesata, aggiungendo il bias e applicando la funzione di attivazione.
In precedenza, un singolo neurone utilizzava:
[ z = W \cdot x + b ]
Ora, poiché ogni riga di (W) è il vettore dei pesi di un neurone, eseguire la moltiplicazione tra matrice e vettore tra la matrice dei pesi e il vettore di input calcola automaticamente tutte le somme pesate dei neuroni contemporaneamente.
Per aggiungere i bias agli output dei rispettivi neuroni, deve essere aggiunto anche un vettore di bias:
Infine, la funzione di attivazione viene applicata al risultato — sigmoid o ReLU, nel nostro caso. La formula risultante per la propagazione in avanti nello strato è la seguente:
a=activation(Wx+b)dove a è il vettore delle attivazioni (output) dei neuroni.
Classe Layer
Poiché gli MLP sono composti da strati, definiamo una classe dedicata Layer. I suoi attributi:
inputs: vettore di input (elementin_inputs);outputs: output grezzi dei neuroni (elementin_neurons);weights: matrice dei pesi;biases: vettore dei bias;activation_function: funzione di attivazione utilizzata nello strato.
I pesi e i bias sono inizializzati con valori casuali da una distribuzione uniforme in ([-1, 1]). inputs e outputs sono inizializzati come array NumPy riempiti di zeri per garantire forme coerenti durante la retropropagazione.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
Inizializzare inputs e outputs con zeri previene errori di forma e garantisce che i layer rimangano coerenti sia durante la propagazione in avanti che all'indietro.
Metodo Forward
La propagazione in avanti per un layer calcola le uscite grezze e applica l'attivazione:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
La trasformazione dell'input in un vettore colonna garantisce la corretta moltiplicazione con la matrice dei pesi e il rispetto delle dimensioni attese in tutta la rete.
Se desideri, posso anche abbreviare ulteriormente, produrre un diagramma della struttura del layer o generare il codice completo funzionante per la classe Layer.
1. Cosa rende un perceptrone multistrato (MLP) più potente di un perceptrone semplice?
2. Perché è necessario applicare questo codice prima di moltiplicare inputs per la matrice dei pesi?
Grazie per i tuoi commenti!