Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kuinka Toteuttaa Monipäinen Huomio | Transformer-komponenttien Rakentaminen
Transformerit Luonnollisen Kielen Käsittelyssä

bookKuinka Toteuttaa Monipäinen Huomio

Pyyhkäise näyttääksesi valikon

12345678910111213141516171819202122232425262728293031323334353637383940
import numpy as np # Toy input: 3 tokens, embedding size 6 x = np.array([ [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], [0.6, 0.5, 0.4, 0.3, 0.2, 0.1], [0.2, 0.1, 0.4, 0.3, 0.6, 0.5], ]) # Multi-head attention parameters num_heads = 2 embed_size = x.shape[1] head_dim = embed_size // num_heads # Random weights for queries, keys, and values for each head np.random.seed(42) W_q = np.random.randn(num_heads, embed_size, head_dim) W_k = np.random.randn(num_heads, embed_size, head_dim) W_v = np.random.randn(num_heads, embed_size, head_dim) attention_outputs = [] for head in range(num_heads): # Linear projections Q = x @ W_q[head] K = x @ W_k[head] V = x @ W_v[head] # Scaled dot-product attention scores = Q @ K.T / np.sqrt(head_dim) attention_weights = np.exp(scores) / np.sum(np.exp(scores), axis=-1, keepdims=True) head_output = attention_weights @ V attention_outputs.append(head_output) # Concatenate outputs from all heads multi_head_output = np.concatenate(attention_outputs, axis=-1) print("Output from head 0:\n", attention_outputs[0]) print("Output from head 1:\n", attention_outputs[1]) print("Concatenated multi-head output:\n", multi_head_output)
copy

Monipäähuomio toimii soveltamalla samaa itsehuomiomekanismia itsenäisesti useissa päissä rinnakkain. Jokaisella päällä on omat painomatriisit kyselyille, avaimille ja arvoille (W_q, W_k ja W_v), jotka projisoivat syötteen matalamman ulottuvuuden aliavaruuksiin. Tässä esimerkissä syöte x sisältää kolme tokenia, joilla jokaisella on upotuskoko 6, ja se jaetaan kahteen päähän.

Jokaisessa päässä koodi toistaa tavanomaiset itsehuomion vaiheet: se laskee kysely (Q), avain (K) ja arvo (V) -matriisit, muodostaa huomiopisteet ottamalla pistetulon Q ja K.T välillä (skaalattuna asianmukaisesti) ja käyttää softmax-funktiota huomiopainojen saamiseksi. Näitä painoja käytetään arvo-vektoreiden yhdistämiseen, jolloin saadaan kunkin pään tulos.

Uutta mekanismia ei ole, vaan monipäähuomio on yksinkertaisesti itsehuomioprosessi, joka suoritetaan rinnakkain jokaiselle päälle. Kun kaikki päät on käsitelty, niiden tulokset yhdistetään viimeisen ulottuvuuden suuntaisesti. Tämä lähestymistapa mahdollistaa mallin havaita monipuolisia suhteita datassa, sillä jokainen pää voi keskittyä eri näkökulmiin syötteessä. Tulostetut tulokset havainnollistavat, kuinka saman itsehuomiomekanismin suorittaminen useita kertoja ja tulosten yhdistäminen tuottaa rikkaamman esityksen jokaiselle tokenille.

question mark

Miten eri huomio-päiden tulokset yhdistetään monipäähuomiossa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 2. Luku 2
some-alt