Kuinka Toteuttaa Monipäinen Huomio
Pyyhkäise näyttääksesi valikon
12345678910111213141516171819202122232425262728293031323334353637383940import 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)
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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme