Spørgsmål:
Hvad er nøgler, forespørgsler og værdier nøjagtigt i opmærksomhedsmekanismer?
Seankala
2019-08-13 14:00:55 UTC
view on stackexchange narkive permalink

Hvordan skal man forstå de nøgler, forespørgsler og værdier, der ofte nævnes i opmærksomhedsmekanismer?

Jeg har prøvet at søge online, men alle de ressourcer, jeg finder, taler kun om dem, som om læseren allerede ved, hvad de er.

At dømme efter papiret skrevet af Bahdanau ( Neural Machine Translation af Joint Learning to Align and Translate ) ser det ud til, at værdier er kommentarvektoren $ h $ men det er ikke klart, hvad der menes med "forespørgsel" og "nøgle."

Det papir, jeg nævnte, siger, at opmærksomhed beregnes af

$$ c_i = \ sum ^ {T_x} _ {j = 1} \ alpha_ {ij} h_j $$

med

$$ \ begin {align} \ alpha_ {ij} & = \ frac {e ^ {e_ {ij}}} {\ sum ^ {T_x} _ {k = 1} e ^ {ik}} \\\\ e_ {ij} & = a (s_ {i - 1}, h_j) \ end {align} $$

Hvor får folk nøglen, forespørgslen og værdien fra disse ligninger?

Tak.

Hvis [dette er papiret] (https://arxiv.org/abs/1409.0473), som du taler om, nævner det ikke nogen "nøgle", "forespørgsel" eller "værdi" for opmærksomhed, og det ser ud til atforklar symbolerne fra de ligninger, du citerer, så det ser ud til, at jeg ikke forstår, hvad præcist handler dit spørgsmål om?
Jeg var alle forvirret af Q, K, V i opmærksomhed, indtil jeg læste denne artikel: https://medium.com/@b.terryjack/deep-learning-the-transformer-9ae5e9c5a190.Det dækker alle spørgsmål fra historie til den nylige implementering.Jeg håber, det også vil være nyttigt for dig.
Jeg ser også på det.Så vidt jeg har forstået, er Query også repræsenteret som "s" nogle steder.Så det sendes fra den tidligere iteration af dekoderen.Og nøglen og værdien, som også er repræsenteret som "h" nogle steder, er ordvektoren fra koderen.Som reference kan du tjekke https://www.youtube.com/watch?v=OyFJWRnt_AY og https://www.youtube.com/watch?v=yInilk6x-OY&list=PLyqSpQzTE6M9gCgajvQbc68Hk_JKGBAYT&index=115 Igen forsøger jeg stadig at forståmere.Foretag venligst din yderligere undersøgelse, og også lemme vide, hvis du finder noget.
Den bedste forklaring på mig: https://youtu.be/XXtpJxZBa2c?t=4337
@QtRoS Jeg tror ikke, det blev forklaret der, hvad nøglerne var, kun hvad værdier og forespørgsler var.
@QtRoS Jeg så også den video på det tidspunkt, hvor jeg stillede dette spørgsmål.Helt ærligt hjalp det mig ikke så meget.Jeg forventede en intuitiv definition bag motivationen til at bruge selve terminologien, men den blev behandlet som en "given".
@Seankala der er endnu en video, desværre er den kun på russisk, men det er den bedste forklaring, jeg har set indtil videre.Illustrationer i det kan være nyttige for dig.Lad mig vide, hvis du vil prøve det.
Fem svar:
dontloo
2019-08-29 13:49:36 UTC
view on stackexchange narkive permalink

Jeg kom fra dit andet spørgsmål Originalt arbejde med selvopmærksomhed? Nøglen / værdien / forespørgslens formulering af opmærksomhed er fra papiret Opmærksomhed er alt hvad du behøver.

Hvordan skal man forstå spørgsmål, nøgler og værdier

Nøgle / værdi / forespørgselskoncepterne kommer fra hentningssystemer. For eksempel, når du skriver en forespørgsel for at søge efter en video på Youtube, vil søgemaskinen kortlægge din query mod et sæt keys (videotitel, beskrivelse osv.) Tilknyttet kandidatvideoer i databasen og derefter præsentere dig for den bedst matchede matchede videoer (values).

Opmærksomhedsoperationen viser sig, kan også betragtes som en hentningsproces, så nøgle / værdi / forespørgselskoncepter gælder også her. (BTW ovenstående eksempel er kun et legetøjssystem til illustration, i praksis søgemaskiner og anbefalingssystemer er meget mere komplekse.)

Som nævnt i det papir, du refererede til ( Neural Machine Translation by Joint Learning to Align and Translate), er opmærksomhed pr. definition bare et vægtet gennemsnit af værdier,

$$ c = \ sum_ {j} \ alpha_jh_j $$ hvor $ \ sum \ alpha_j = 1 $ .

Hvis vi begrænser $ \ alpha $ til at være en hot-vektor, bliver denne operation den samme som at hente fra et sæt af elementer $ h $ med indeks $ \ alpha $ . Med begrænsningen fjernet kan opmærksomhedsoperationen betragtes som at udføre "proportional hentning" i henhold til sandsynlighedsvektoren $ \ alpha $ .

Det skal være klart, at $ h $ i denne sammenhæng er value. Forskellen mellem de to papirer ligger i, hvordan sandsynlighedsvektoren $ \ alpha $ beregnes. Det første papir (Bahdanau et al. 2015) beregner scoren gennem et neuralt netværk $$ e_ {ij} = a (s_i, h_j), \ qquad a_ {i, j} = \ frac {\ exp (e_ {ij})} {\ sum_k \ exp (e_ {ik})} $$ hvor $ h_j $ er fra kodningssekvensen, og $ s_i $ er fra dekodersekvensen. Et problem med denne tilgang er, siger kodersekvensen er af længde $ m $ og afkodningssekvensen er af længde $ n $ , vi er nødt til at gå gennem netværket $ m * n $ gange for at få alle opmærksomhedsresultater $ e_ {ij} $ .

En mere effektiv model ville være at først projicere $ s $ og $ h $ på en fælles plads, og vælg derefter et lighedsmål (f.eks. punktprodukt) som opmærksomhedsscore, ligesom $$ e_ {ij} = f (s_i) g (h_j) ^ T $$ så vi skal kun beregne $ g (h_j) $ $ m $ gange og $ f (s_i) $ $ n $ gange for at få projiceringsvektorerne og $ e_ {ij} $ kan beregnes effektivt ved hjælp af matrixmultiplikation.

Dette er i det væsentlige den fremgangsmåde, der er foreslået af det andet papir (Vaswani et al. 2017), hvor de to projektionsvektorer kaldes query (for dekoder) og key (til koderen), som er godt tilpasset koncepterne i hentningssystemer .

Hvordan opnås forespørgsler, nøgler og værdier

Den foreslåede multihead-opmærksomhed alene siger ikke meget om, hvordan forespørgsler, nøgler og værdier opnås, så længe dimensionskravene er opfyldt.De kan komme fra forskellige kilder afhængigt af applikationsscenariet.

enter image description here

For ikke-overvåget sprogmodeluddannelse som GPT er $ Q, K, V $ normalt fra samme kilde, så en sådan handling erkaldes også selvopmærksomhed.

For maskinoversættelsesopgaven i det andet papir anvender den først selvopmærksomhed separat på kilde- og målsekvenser, og derefter anvender den en anden opmærksomhed, hvor $ Q $ span> er fra målsekvensen og $ K, V $ er fra kildesekvensen.

For anbefalingssystemer kan $ Q $ være fra målelementerne, $ K, V $ kan være fra brugerprofilen og historikken.

Hej.Tak for svaret.Desværre er mit spørgsmål, hvordan disse værdier i sig selv opnås (dvs. Q, K og V).Jeg har læst andre blogindlæg (f.eks. The Illustrated Transformer), og det er stadig uklart for mig, hvordan værdierne opnås ud fra papirets sammenhæng.For eksempel er Q simpelthen matrixproduktet for input X og nogle andre vægte?Hvis ja, hvordan opnås disse vægte?
Også dette spørgsmål i sig selv vedrører faktisk ikke beregningen af Q, K og V. Jeg er snarere forvirret over, hvorfor forfatterne brugte anden terminologi sammenlignet med den originale opmærksomhedsopgave.
@Seankala hej Jeg lavede nogle opdateringer til dine spørgsmål, håber det hjælper
Mange tak for denne forklaring!Jeg kæmper stadig med at fortolke notationen e_ij = a (s_i, h_j).Så det neurale netværk er en funktion af h_j og s_i, som er indgangssekvenser fra henholdsvis dekoder- og kodersekvenser.Men hvordan ser det neurale netværk ud?F.eks.Hvad er målvariablerne, og hvad er inputformatet?
@Emil hej, det er et delnetværk af helheden, der er ikke noget specifikt mål for det under træning, det trænes normalt sammen med hele netværket til den givne opgave, i dette tilfælde maskinoversættelse, flere detaljer i A.1.2ALIGNMENT MODEL-sektionen på papiret.
Meget nyttigt - Hvad er $ a $ i $ e_ {ij} = a (s_i, h_j) $?
@Josh det er et feedforward neuralt netværk ifølge papiret https://arxiv.org/pdf/1409.0473.pdf
Emil
2020-01-17 21:22:05 UTC
view on stackexchange narkive permalink

Se Opmærksomhed er alt hvad du behøver - masterclass, fra 15:46 og frem forklarer Lukasz Kaiser hvad q, K og V er.

Så grundlæggende:

  • q = vektoren, der repræsenterer et ord
  • K og V = din hukommelse, altså alle de ord, der er genereret før.Bemærk, at K og V kan være de samme (men behøver ikke).

Så hvad du gør med opmærksomhed er, at du tager din aktuelle forespørgsel (ord i de fleste tilfælde) og ser i din hukommelse efter lignende taster.For at komme med en fordeling af relevante ord bruges softmax-funktionen.

Sean Kernitsman
2020-05-16 01:00:20 UTC
view on stackexchange narkive permalink

Tensorflow og Keras udvidede netop deres dokumentation til lagene Attention og AdditiveAttention. Her er et luskent kig fra dokumenterne:

Betydningen af ​​forespørgsel, værdi og nøgle afhænger af applikationen. I tilfælde af tekstlighed er forespørgsel f.eks. Sekvensindlejring af det første stykke tekst, og værdien er sekvensindlejring af det andet stykke tekst. nøgle er normalt den samme tensor som værdi.

Men for min egen forklaring prøver forskellige opmærksomhedslag at udføre den samme opgave med at kortlægge en funktion $ f: \ Bbb {R} ^ {T \ times D} \ mapsto \ Bbb {R} ^ {T \ gange D} $ hvor T er den skjulte sekvenslængde og D er funktionsvektorens størrelse. I tilfælde af global selvopmærksomhed, som er den mest almindelige anvendelse, skal du først have sekvensdata i form af $ B \ gange T \ gange D $ , hvor $ B $ er batchstørrelsen. Hver fremadgående udbredelse (især efter en indkoder som et Bi-LSTM-, GRU- eller LSTM-lag med return_state og return_sequences = True for TF) forsøger den at kortlægge den valgte skjulte tilstand (Query) til den mest lignende andre skjulte stater (nøgler). Efter at have gentaget det for hver skjult tilstand og softmax resultaterne, skal du gange med tasterne igen (som også er værdierne) for at få den vektor, der angiver, hvor meget opmærksomhed du skal give for hver skjult tilstand. Jeg håber, dette hjælper nogen, da det tog mig dage at finde ud af det.

The flow of any attention layer

Sam Tseng
2020-04-28 23:05:49 UTC
view on stackexchange narkive permalink

Jeg blev også forvirret af nøgler, forespørgsler og værdier i opmærksomhedsmekanismerne et stykke tid. Efter at have søgt på Internettet og fordøjet relevant information, har jeg et klart billede af, hvordan nøgler, forespørgsler og værdier fungerer, og hvorfor de ville fungere!

Lad os se, hvordan de fungerer, efterfulgt af hvorfor de arbejder.

I en seq2seq-model koder vi indgangssekvensen til en kontekstvektor og føder derefter denne kontekstvektor til dekoderen for at give forventet god output.

Hvis indgangssekvensen er lang, bliver det kun mindre effektivt at stole på én kontekstvektor. Vi har brug for al information fra de skjulte tilstande i indgangssekvensen (koderen) for bedre afkodning (opmærksomhedsmekanismen).

En måde at bruge de skjulte inputtilstande er vist nedenfor: Image source: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3 Billedkilde: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3

Med andre ord, i denne opmærksomhedsmekanisme beregnes kontekstvektoren som en vægtet sum af værdierne, hvor den vægt, der er tildelt hver værdi, beregnes ved hjælp af en kompatibilitetsfunktion af forespørgslen med den tilsvarende nøgle (dette er en ændret sætning fra [Opmærksomhed er alt hvad du behøver] https://arxiv.org/pdf/1706.03762.pdf).

Her er forespørgslen fra dekoderens skjulte tilstand, nøglen og værdien kommer fra koderen skjulte tilstande (nøgle og værdi er den samme i denne figur). Poengsummen er kompatibiliteten mellem forespørgslen og nøglen, som kan være et punktprodukt mellem forespørgslen og nøglen (eller anden form for kompatibilitet). Scorerne går derefter gennem softmax-funktionen for at give et sæt vægte, hvis sum er lig med 1. Hver vægt multiplicerer de tilsvarende værdier for at give kontekstvektoren, der bruger alle de skjulte inputtilstande.

Bemærk, at hvis vi manuelt indstiller vægten af ​​det sidste input til 1 og alle dets forudgående forhold til 0s, reducerer vi opmærksomhedsmekanismen til den oprindelige seq2seq kontekstvektormekanisme. Det vil sige, der er ingen opmærksomhed mod de tidligere indgangskodertilstande.

Lad os nu overveje mekanismen for selvopmærksomhed som vist i nedenstående figur:

enter image description here Billedkilde: https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a

Forskellen fra ovenstående figur er, at forespørgsler, nøgler og værdier er transformationer af de tilsvarende inputtilstandsvektorer. De andre forbliver de samme.

Bemærk, at vi stadig kunne bruge de oprindelige kodertilstandsvektorer som forespørgsler, nøgler og værdier. Så hvorfor har vi brug for transformation? Transformationen er simpelthen en matrixmultiplikation som denne:

Forespørgsel = I x B (Q)

Nøgle = I x B (K)

Værdi = I x B (V)

hvor I er indgangsvektoren (encoder), og W (Q), W (K) og W (V) er de tilsvarende matricer til at transformere I-vektoren til forespørgsels-, nøgle-, værdivektorerne.

Hvad er fordelene ved denne matrixmultiplikation (vektortransformation)?

Husk effekten af ​​SVD (Singular Value Decomposition) som i følgende figur:

Application of SVD

Billedkilde: https://youtu.be/K38wVcdNuFc?t=10

Ved at multiplicere en inputvektor med en matrix V (fra SVD) opnår vi en bedre repræsentation til beregning af kompatibiliteten mellem to vektorer, hvis disse to vektorer er ens i emnerummet som vist i eksemplet i figuren.

Og disse matricer til transformation kan læres i et neuralt netværk!

Kort fortalt, ved at multiplicere inputvektoren med en matrix, fik vi:

1) bedre (latent) repræsentation af inputvektoren;

2) konvertering af inputvektoren til et rum med en ønsket dimension, f.eks. fra dimension 5 til 2, eller fra n til m osv. (hvilket er praktisk nyttigt);

hvor matrixen kan læres (uden manuel indstilling).

Jeg håber dette hjælper dig med at forstå forespørgsler, nøgler og værdier i (selv-) opmærksomhedsmekanismen i dybe neurale netværk.

Python-koden til at træne matrixen ser sådan ud: ` x_Train = np.array ([ [1, 1, 1, 0, 0], [3, 3, 3, 0, 0], ... [0, 1, 0, 2, 2]]) y_Train = np.array ([[1], [1], ..., [-1]]) x_Test = np.array ([ [5, 0, 0, 0, 0], [0, 4, 5, 0, 0]]) y_Test = np.array ([[1], [1]]) model = sekventiel () model.add (tæt (enheder = 2, input_dim = 5, aktivering = 'tanh')) model.add (tæt (enheder = 1, aktivering = 'tanh')) model.compile (loss = 'mean_squared_error', optimizer = 'sgd', metrics = ['mse']) model.fit (x = x_Train, y = y_Train, epoker = 100) forudsigelser = model.predict (x_Test) `
Tim
2019-09-02 15:03:10 UTC
view on stackexchange narkive permalink

Hvor får folk nøglen, forespørgslen og værdien fra disse ligninger?

Det papir, du henviser til bruger ikke sådan terminologi som "nøgle", "forespørgsel" eller "værdi", så det er ikke klart, hvad du mener i her. Der er ingen enkelt definition af "opmærksomhed" for neurale netværk, så jeg gætter på, at du forvekslede to definitioner fra forskellige papirer.

I papiret har opmærksomhedsmodulet vægte $ \ alpha $ og de værdier, der skal vægtes $ h $ , hvor vægtene stammer fra de tilbagevendende neurale netværksudgange, som beskrevet af de ligninger, du citerede, og på figuren fra papiret gengivet nedenfor.

![enter image description here

Lignende ting sker i Transformer-modellen fra Opmærksomheden er alt hvad du behøver papir af Vaswani et al, hvor de bruger "nøgler", "forespørgsler" og "værdier" ( $ Q $ , $ K $ , $ V $ ). Vaswani et al. Definerer opmærksomhedscellen forskelligt:

$$ \ mathrm {Attention} (Q, K, V) = \ mathrm {softmax} \ Big (\ frac {QK ^ T} {\ sqrt {d_k}} \ Big) V $$

Hvad de også bruger er multi-head opmærksomhed, hvor i stedet for en enkelt værdi for hver $ Q $ , $ K $ , $ V $ , de giver flere sådanne værdier.

enter image description here

Hvor i Transformer-modellen, $ Q $ , $ K $ , $ V $ -værdier kan enten komme fra de samme indgange i koderen (nederste del af nedenstående figur) eller fra forskellige kilder i dekoderen (øverste højre del af figuren). Denne del er afgørende for at bruge denne model i oversættelsesopgaver.

enter image description here

I begge papirer, som beskrevet, beregnes værdierne, der kommer som input til opmærksomhedslagene, ud fra output fra de foregående lag af netværket.Begge papirer definerer forskellige måder at opnå disse værdier på, da de bruger forskellige definitioner af opmærksomhedslag.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 4.0-licens, den distribueres under.
Loading...