The Input Gate is a linear layer which has two inputs:

  • that is the current data input
  • that is the previous hidden state vector

Ruolo dello stato nascosto precedente

Poiché lo stato nascosto precedente viene utilizzato come input in tutte le porte del layer LSTM (forget gate, input gate, output gate e candidata allo stato della cella), esso deve contenere una rappresentazione compatta ma semanticamente ricca dell’informazione accumulata fino al tempo .

In altre parole, funge da riassunto informativo dell’intera sequenza osservata fino a quel momento: è una codifica compressa che mantiene gli aspetti rilevanti del contesto passato, necessari per guidare le decisioni sui meccanismi di memoria della LSTM.

✅ Questa codifica è essenziale affinché la rete sia in grado di decidere quali informazioni dimenticare, aggiornare o trasmettere, in modo coerente con la dinamica sequenziale del dato in input.

Sigmoide come funzione vettoriale

La funzione è una funzione vettoriale a valori vettoriali, applicata element-wise:

dove:

è un vettore (uno per ciascuna unità della LSTM), e la sigmoide viene applicata a ciascun elemento di questo vettore, restituendo un nuovo vettore

In questo contesto la sigmoide applicata all’input dato dalla trasformazione affine () (dove è il vettore di dati di input corrente ​ e è il vettore dello stato nascosto all’iterazione precedente e contenente l’informazioen degli step precedenti) ​, fornisce in output un valore nel range per ciascuna componente.

Inoltre viene calcolato the new candidate vector :

Perché si usa la funzione tanh qui?

La funzione tanh viene applicata al termine lineare per produrre il vettore candidato .

Rispetto alla funzione sigmoide, la tanh ha un range di output compreso tra , il che la rende adatta a generare nuovi contenuti informativi con segno:

  • Valori positivi indicano nuove informazioni da aggiungere alla memoria.
  • Valori negativi indicano informazioni da sottrarre o inibire.

In questo modo, la rete può decidere dinamicamente non solo quanto aggiornare ogni componente del vettore di stato della cella, ma anche in quale direzione (positiva o negativa).

Significato di e nel contesto dell’aggiornamento di

  • La componente rappresenta un vettore di possibili aggiornamenti per lo stato della cella : ciascun elemento di , , compreso nell’intervallo , propone un nuovo contenuto da scrivere potenzialmente nella corrispondente posizione del vettore .

  • Il vettore , generato dalla funzione sigmoide, fornisce invece i pesi di aggiornamento per ciascuna componente: ogni valore controlla quanto del corrispondente candidato verrà effettivamente scritto nella posizione -esima dello stato della cella.

In sintesi:

  • propone cosa scrivere in ciascuna componente del nuovo stato della cella;
  • decide se e quanto scriverlo, per ogni singola componente.
  • “decide” quali aggiornamenti accettare e con quale peso ciascun valore del vettore candidato andrà a modificare la corrispondente componente dello stato della cella.

✅ Nella formula finale:

Il vettore rappresenta il nuovo stato della cella ed è ottenuto combinando due contributi:

  • , corrisponde allo stato della cella precedente modulato elemento per elemento dal vettore , cioè dall’output della forget gate. Ogni componente di indica quanto della corrispondente informazione passata deve essere mantenuta (valori vicini a 1) o dimenticata (valori vicini a 0).

  • rappresenta quindi il contributo dell’informazione nuova, selezionata e modulata componente per componente da . Il vettore propone, per ciascuna componente, un possibile aggiornamento con valori compresi nell’intervallo , mentre , ottenuto tramite una funzione sigmoide, determina quali aggiornamenti accettare e con quale peso ciascun valore candidato debba contribuire allo stato della cella.
    In particolare, ciascun valore di modula quanto del candidato viene effettivamente scritto nella componente corrispondente dello stato .
    Dunque, agisce da filtro selettivo, regolando componente per componente il contributo informativo di al nuovo stato della cella.

In sintesi, integra il passato filtrato attraverso e il nuovo contenuto attentamente selezionato da .

Riprendendo l’esempio del language model, suppose that we have captured a new gender so now the

Forma esplicita del input gate:

dove:

  • sono le matrici dei pesi
  • è l’input al tempo
  • è lo stato nascosto precedente
🚀 Estensione al Minibatch: Input Gate e Candidate State

L’elaborazione di un’istanza alla volta è inefficiente. Per questo, le implementazioni moderne delle reti neurali operano su minibatch di dati, processando più input simultaneamente. Estendiamo le formule dell’input gate () e del candidate state () a questo scenario più realistico e performante.

Il principio chiave è semplice: i vettori di input, di stato e di output diventano matrici, dove ogni colonna rappresenta un’istanza del batch. I parametri (pesi e bias) rimangono invece condivisi.

📦 Dati in Formato Batch
  • Matrice di Input : Invece di un singolo vettore, ora abbiamo una matrice che contiene l’intero batch di input. La sua dimensione è .
  • Matrice dello Stato Nascosto : Allo stesso modo, questa matrice raggruppa gli stati nascosti di ogni istanza nel batch. La sua dimensione è .
🧠 Pesi Condivisi e Broadcasting
  • Matrici dei Pesi: Le matrici non cambiano dimensione. Sono parametri condivisi che vengono applicati a ogni esempio del batch tramite la moltiplicazione di matrici.
  • Vettori di Bias: Anche i bias rimangono vettori. Vengono sommati a ogni colonna della matrice intermedia risultante tramite un’operazione chiamata broadcasting.
⚙️ Le Formule Vettorizzate per il Minibatch

Le formule mantengono una struttura quasi identica, ma ora operano su matrici. Usiamo lettere maiuscole per le matrici di dati per chiarezza.

Dove le dimensioni aggiornate sono:

  • : La matrice che contiene l’intero batch di input.
  • : La matrice degli stati nascosti precedenti per il batch.
  • : Matrici dei pesi (invariate).
  • : Matrici dei pesi (invariate).
  • : Vettori di bias (invariati, applicati con broadcasting).
  • : Le matrici di output per l’intero batch.