Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Come viene calcolata l'autoattenzione | Fondamenti Dei Transformer
Transformer per l'elaborazione del linguaggio naturale

bookCome viene calcolata l'autoattenzione

Scorri per mostrare il menu

Per comprendere come viene calcolata la self-attention nei transformer, è necessario seguire una sequenza precisa di operazioni matematiche. Il meccanismo di self-attention consente a ciascuna parola in una frase di concentrarsi su altre parole durante la produzione di una rappresentazione in output. Questo viene ottenuto calcolando una somma pesata di tutti i vettori di input, dove i pesi riflettono l'importanza di ciascuna parola rispetto alla parola attualmente in elaborazione.

Supponiamo di avere una breve frase rappresentata come una matrice, in cui ogni riga è un word embedding. Questi embedding vengono prima proiettati in query, key e value utilizzando matrici di pesi apprese. Il nucleo della self-attention è quindi il calcolo degli score di attenzione e l'aggregazione dei vettori value in base a questi score.

Note
Definizione

Query, key e value sono rappresentazioni differenti dell'input, ciascuna utilizzata per uno scopo specifico nel calcolo dell'attenzione.

Calcolo della Self-Attention

La self-attention può essere suddivisa in una serie di passaggi matematici chiari per ogni parola nella sequenza:

Proiezione degli input in query, key e value: proiezione della matrice di input utilizzando matrici di pesi apprese per ottenere query, key e value.

123456789101112131415161718192021222324252627282930313233
import numpy as np # Example input: 3 words, embedding size 4 X = np.array([ [1.0, 0.0, 1.0, 0.0], # word 1 [0.0, 2.0, 0.0, 2.0], # word 2 [1.0, 1.0, 1.0, 1.0] # word 3 ]) # Weight matrices for queries, keys, values (embedding size 4 -> 4) W_q = np.array([ [0.1, 0.2, 0.0, 0.0], [0.0, 0.1, 0.3, 0.0], [0.1, 0.0, 0.0, 0.2], [0.0, 0.0, 0.2, 0.3] ]) W_k = np.array([ [0.2, 0.0, 0.1, 0.0], [0.0, 0.1, 0.0, 0.3], [0.1, 0.0, 0.2, 0.0], [0.0, 0.2, 0.0, 0.1] ]) W_v = np.array([ [0.0, 0.1, 0.0, 0.2], [0.2, 0.0, 0.2, 0.0], [0.0, 0.3, 0.1, 0.0], [0.1, 0.0, 0.0, 0.3] ]) # Compute queries, keys, values Q = X @ W_q K = X @ W_k V = X @ W_v
copy

Calcolo dei punteggi di attenzione:

  • Calcolo della similarità tra ogni query e tutte le key;
  • Questi punteggi indicano quanto ogni parola deve concentrarsi sulle altre.
1
scores = Q @ K.T
copy

Scalare i punteggi: dividere i punteggi di attenzione per la radice quadrata della dimensione delle chiavi. Questa normalizzazione aiuta a stabilizzare i gradienti durante l'addestramento.

12
d_k = Q.shape[1] scaled_scores = scores / np.sqrt(d_k)
copy

Applicare la funzione softmax: convertire i punteggi scalati in pesi di attenzione utilizzando la funzione softmax. Questo garantisce che i pesi siano positivi e che la loro somma per ogni parola sia pari a 1.

123456
# Softmax to get attention weights def softmax(x): e_x = np.exp(x - np.max(x, axis=-1, keepdims=True)) return e_x / np.sum(e_x, axis=-1, keepdims=True) attention_weights = softmax(scaled_scores)
copy

Calcolare la somma pesata dei valori: usare i pesi di attenzione per calcolare una somma pesata dei vettori valore. Questo produce l'output finale della self-attention per ogni parola.

12345
# Weighted sum of values output = attention_weights @ V print("Attention weights:\n", attention_weights) print("Self-attention output:\n", output)
copy

Questi passaggi rappresentano i calcoli essenziali alla base dell'autoattenzione nei modelli transformer.

1. Qual è il corretto ordine delle operazioni nell'autoattenzione per una parola in input?

2. Perché si scalano i punteggi di attenzione per la radice quadrata della dimensione delle chiavi?

3. Quali vettori vengono utilizzati per calcolare i punteggi di attenzione

question mark

Qual è il corretto ordine delle operazioni nell'autoattenzione per una parola in input?

Seleziona la risposta corretta

question mark

Perché si scalano i punteggi di attenzione per la radice quadrata della dimensione delle chiavi?

Seleziona la risposta corretta

question mark

Quali vettori vengono utilizzati per calcolare i punteggi di attenzione

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 1. Capitolo 5
some-alt