Pytanie:
Czym dokładnie są klucze, zapytania i wartości w mechanizmach uwagi?
Seankala
2019-08-13 14:00:55 UTC
view on stackexchange narkive permalink

Jak należy rozumieć klucze, zapytania i wartości, które są często wymieniane w mechanizmach uwagi?

Próbowałem wyszukiwać online, ale wszystkie znalezione zasoby mówią o nich tylko tak, jakby czytelnik już wiedział, czym one są.

Sądząc po artykule napisanym przez Bahdanau ( Neural Machine Translation by Jointly Learning to Align and Translate ), wydaje się, że wartości są wektorem adnotacji $ h $ , ale nie jest jasne, co oznacza „zapytanie” i „klucz”.

Artykuł, o którym wspomniałem, stwierdza, że uwaga jest obliczana przez

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

z

$$ \ 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} $$

Skąd ludzie biorą klucz, zapytanie i wartość z tych równań?

Dziękuję.

Jeśli [to jest artykuł] (https://arxiv.org/abs/1409.0473), o którym mówisz, nie wspomina się w nim o żadnym „kluczu”, „zapytaniu” ani „wartości” wymagającej uwagi i wydaje się, żewyjaśnij symbole z równań, które cytujesz, więc nie wydaje mi się, aby rozumieć, o co właściwie chodzi?
Byłem zdezorientowany przez Q, K, V, dopóki nie przeczytałem tego artykułu: https://medium.com/@b.terryjack/deep-learning-the-transformer-9ae5e9c5a190.Obejmuje wszystkie pytania, od historii po niedawne wdrożenie.Mam nadzieję, że Tobie też się przyda.
Patrzę też na to.O ile zrozumiałem, w niektórych miejscach Query jest również przedstawiane jako „s”.Jest więc wyjściem z poprzedniej iteracji dekodera.Kluczem i wartością, które w niektórych miejscach są również reprezentowane jako „h”, jest wektor słowa z kodera.Dla odniesienia możesz sprawdzić https://www.youtube.com/watch?v=OyFJWRnt_AY i https://www.youtube.com/watch?v=yInilk6x-OY&list=PLyqSpQzTE6M9gCgajvQbc68Hk_JKGBAYT&index=115 Znowu wciąż próbuję zrozumiećwięcej.Proszę przeprowadzić dalsze badania i dać mi znać, jeśli coś znajdziesz.
Najlepsze wyjaśnienie dla mnie: https://youtu.be/XXtpJxZBa2c?t=4337
@QtRoS Nie sądzę, żeby było tam wyjaśnione, jakie były klucze, tylko jakie były wartości i zapytania.
@QtRoS Oglądałem również ten film w czasie, gdy publikowałem to pytanie.Szczerze mówiąc, nie pomogło mi to zbytnio.Spodziewałem się intuicyjnej definicji motywacji do posługiwania się samą terminologią, ale to było traktowane jako „dane”.
@Seankala jest jeszcze jeden film, niestety tylko po rosyjsku, ale jest to najlepsze wyjaśnienie, jakie do tej pory widziałem.Ilustracje w nim mogą być pomocne dla Ciebie.Daj mi znać, jeśli chcesz tego spróbować.
Pięć odpowiedzi:
dontloo
2019-08-29 13:49:36 UTC
view on stackexchange narkive permalink

Przyszedłem z twojego innego pytania Oryginalna praca dotycząca skupienia uwagi? Sformułowanie klucza / wartości / zapytania dotyczącego uwagi pochodzi z artykułu Attention Is All You Need.

Jak należy rozumieć zapytania, klucze i wartości

Pojęcia dotyczące klucza / wartości / zapytania pochodzą z systemów pobierania. Na przykład, gdy wpiszesz zapytanie w celu wyszukania jakiegoś filmu na Youtube, wyszukiwarka zmapuje Twój query na zestaw keys (tytuł wideo, opis itp.) Powiązany z kandydatami wideo w bazie danych, a następnie przedstawi Ci najlepiej dopasowane filmy (values).

Okazuje się, że operacja uwagi może być również potraktowana jako proces pobierania, więc pojęcia klucza / wartości / zapytania mają również zastosowanie w tym przypadku. (Swoją drogą, powyższy przykład to tylko zabawkowy system dla ilustracji, w praktyce wyszukiwarki a systemy rekomendacji są znacznie bardziej złożone.)

Jak wspomniano w cytowanym artykule ( Neural Machine Translation by Jointly Learning to Align and Translate), uwaga z definicji jest tylko średnią ważoną wartości,

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

Jeśli ograniczymy $ \ alpha $ do jednego gorącego wektora, ta operacja stanie się taka sama, jak pobieranie ze zbioru elementów $ h $ z indeksem $ \ alpha $ . Po usunięciu tego ograniczenia operacja uwagi może być traktowana jako „pobieranie proporcjonalne” zgodnie z wektorem prawdopodobieństwa $ \ alpha $ .

Powinno być jasne, że $ h $ w tym kontekście to value. Różnica między tymi dwoma artykułami polega na tym, jak obliczany jest wektor prawdopodobieństwa $ \ alpha $ . W pierwszym artykule (Bahdanau i in. 2015) obliczono wynik za pomocą sieci neuronowej $$ e_ {ij} = a (s_i, h_j), \ qquad a_ {i, j} = \ frac {\ exp (e_ {ij})} {\ sum_k \ exp (e_ {ik})} $$ gdzie $ h_j $ pochodzi z sekwencji kodera, a $ s_i $ pochodzi z sekwencji dekodera. Jednym z problemów tego podejścia jest to, że sekwencja kodera ma długość $ m $ , a sekwencja dekodowania ma długość $ n $ , musimy przejść przez sieć $ m * n $ razy, aby uzyskać wszystkie wyniki uwagi $ e_ {ij} $ .

Bardziej wydajnym modelem byłoby pierwsze zaprojektowanie $ s $ i $ h $ do wspólnego przestrzeń, a następnie wybierz miarę podobieństwa (np. iloczyn skalarny) jako punktację uwagi, na przykład $$ e_ {ij} = f (s_i) g (h_j) ^ T $$ więc musimy tylko obliczyć $ g (h_j) $ $ m $ razy i $ f (s_i) $ $ n $ razy, aby uzyskać wektory projekcji i $ e_ {ij} $ można skutecznie obliczyć przez mnożenie macierzy.

Zasadniczo jest to podejście zaproponowane w drugim artykule (Vaswani et al. 2017), w którym dwa wektory projekcji nazywane są query (dla dekodera) i key (dla enkodera), co jest dobrze dopasowane do koncepcji w systemach wyszukiwania .

W jaki sposób uzyskuje się zapytania, klucze i wartości

Sama proponowana uwaga dotycząca wielu głowic nie mówi wiele o tym, jak zapytania, klucze i wartości są uzyskiwane, o ile spełnione są wymagania dotyczące wymiaru.Mogą pochodzić z różnych źródeł w zależności od scenariusza aplikacji.

enter image description here

W przypadku uczenia modelu języka bez nadzoru, takiego jak GPT, $ Q, K, V $ pochodzą zwykle z tego samego źródła, więc taka operacja jestzwane także samokontrolą.

W przypadku zadania tłumaczenia maszynowego w drugim artykule najpierw stosuje się osobno samokontrolę do sekwencji źródłowej i docelowej, a następnie zwraca uwagę, gdzie $ Q $ span> pochodzi z sekwencji docelowej, a $ K, V $ pochodzi z sekwencji źródłowej.

W przypadku systemów rekomendacji $ Q $ może pochodzić z elementów docelowych, $ K, V $ może pochodzić z profilu użytkownika i historii.

Dzień dobry.Dziękuję za odpowiedź.Niestety, moje pytanie brzmi, jak te wartości są uzyskiwane (tj. Q, K i V).Czytałem inne posty na blogu (np.The Illustrated Transformer) i nadal nie jest dla mnie jasne, w jaki sposób wartości są uzyskiwane z kontekstu pracy.Na przykład, czy Q jest po prostu iloczynem macierzy wejścia X i kilku innych wag?Jeśli tak, to w jaki sposób uzyskuje się te wagi?
Również samo to pytanie nie odnosi się w rzeczywistości do obliczania Q, K i V. Raczej jestem zdezorientowany, dlaczego autorzy używali innej terminologii w porównaniu z oryginalną pracą.
@Seankala cześć Zaktualizowałem Twoje pytania, mam nadzieję, że to pomoże
Wielkie dzięki za to wyjaśnienie!Wciąż staram się zinterpretować notację e_ij = a (s_i, h_j).Zatem sieć neuronowa jest funkcją h_j i s_i, które są sekwencjami wejściowymi odpowiednio z sekwencji dekodera i kodera.Ale jak wygląda sieć neuronowa?Na przykład.Jakie są zmienne docelowe i jaki jest format danych wejściowych?
@Emil cześć, jest to podsieć całości, nie ma dla niej konkretnego celu w szkoleniu, zwykle jest trenowana wspólnie z całą siecią w ramach danego zadania, w tym przypadku tłumaczenie maszynowe, więcej szczegółów w A.1.2W artykule poświęcono modelowi wyrównania.
Bardzo przydatne - ile wynosi $ a $ w $ e_ {ij} = a (s_i, h_j) $?
@Josh jest to sprzężona sieć neuronowa zgodnie z artykułem https://arxiv.org/pdf/1409.0473.pdf
Emil
2020-01-17 21:22:05 UTC
view on stackexchange narkive permalink

Zobacz Tylko uwaga - masterclass, od 15:46 Łukasz Kaiser wyjaśnia, czym są q, K i V .

Zasadniczo:

  • q = wektor reprezentujący słowo
  • K i V = twoja pamięć, a więc wszystkie słowa, które zostały wygenerowane wcześniej.Zauważ, że K i V mogą być takie same (ale nie muszą).

Więc to, co robisz z uwagą, polega na tym, że bierzesz bieżące zapytanie (w większości przypadków słowo) i szukasz w pamięci podobnych kluczy.Aby uzyskać rozkład odpowiednich słów, używa się następnie funkcji softmax.

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

Tensorflow i Keras właśnie rozszerzyli swoją dokumentację dotyczącą warstw Attention i AdditiveAttention. Oto podstępny rzut oka z dokumentów:

Znaczenie zapytania, wartości i klucza zależy od aplikacji. Na przykład w przypadku podobieństwa tekstu zapytanie to osadzenie sekwencji pierwszego fragmentu tekstu, a wartość to osadzenie sekwencji drugiego fragmentu tekstu. klucz jest zwykle tym samym tensorem co wartość.

Ale dla mojego własnego wyjaśnienia, różne warstwy uwagi próbują wykonać to samo zadanie, mapując funkcję $ f: \ Bbb {R} ^ {T \ times D} \ mapsto \ Bbb {R} ^ {T \ times D} $ , gdzie T to długość ukrytej sekwencji, a D to rozmiar wektora cech. W przypadku globalnej samokontroli, która jest najpowszechniejszą aplikacją, najpierw potrzebujesz danych sekwencji w kształcie $ B \ times T \ times D $ , gdzie $ B $ to rozmiar partii. Każda propagacja w przód (szczególnie po koderze, takim jak warstwa Bi-LSTM, GRU lub LSTM z return_state i return_sequences = True dla TF), próbuje zmapować wybrany stan ukryty (zapytanie) do najbardziej podobne inne stany ukryte (klucze). Po powtórzeniu tego dla każdego stanu ukrytego i wynikach softmax pomnóż ponownie za pomocą klawiszy (które również są wartościami), aby uzyskać wektor wskazujący, ile uwagi należy poświęcić każdemu ze stanów ukrytych. Mam nadzieję, że to pomoże komukolwiek, ponieważ zajęło mi to kilka dni.

The flow of any attention layer

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

Przez chwilę byłem również zaskoczony kluczami, zapytaniami i wartościami w mechanizmach uwagi. Po przeszukaniu sieci i przeanalizowaniu odpowiednich informacji mam jasny obraz tego, jak działają klucze, zapytania i wartości oraz dlaczego mają działać!

Zobaczmy, jak działają i dlaczego działają

W modelu seq2seq kodujemy sekwencję wejściową do wektora kontekstu, a następnie przekazujemy ten wektor kontekstu do dekodera, aby uzyskać oczekiwany dobry wynik.

Jeśli jednak sekwencja wejściowa jest długa, opieranie się tylko na jednym wektorze kontekstu staje się mniej efektywne. Potrzebujemy wszystkich informacji ze stanów ukrytych w sekwencji wejściowej (koder) dla lepszego dekodowania (mechanizm uwagi).

Poniżej pokazano jeden ze sposobów wykorzystania wejściowych stanów ukrytych: Image source: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3 Źródło obrazu: https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3

Innymi słowy, w tym mechanizmie uwagi wektor kontekstu jest obliczany jako ważona suma wartości, gdzie waga przypisana do każdej wartości jest obliczana przez funkcję zgodności zapytania z odpowiednim kluczem (jest to nieco zmodyfikowane zdanie z [Attention Is All You Need] https://arxiv.org/pdf/1706.03762.pdf).

Tutaj zapytanie pochodzi ze stanu ukrytego dekodera, klucz i wartość pochodzą ze stanów ukrytych kodera (klucz i wartość są takie same na tym rysunku). Wynik to zgodność między zapytaniem a kluczem, która może być iloczynem skalarnym między zapytaniem a kluczem (lub inną formą zgodności). Wyniki przechodzą następnie przez funkcję softmax, aby uzyskać zestaw wag, których suma jest równa 1. Każda waga mnoży odpowiadające jej wartości, aby uzyskać wektor kontekstu, który wykorzystuje wszystkie wejściowe stany ukryte.

Zauważ, że jeśli ręcznie ustawimy wagę ostatniego wejścia na 1 i wszystkie jego pierwszeństwa na 0, zredukujemy mechanizm uwagi do oryginalnego mechanizmu wektora kontekstu seq2seq. Oznacza to, że nie zwraca się uwagi na wcześniejsze stany kodera wejściowego.

Rozważmy teraz mechanizm samokontroli, jak pokazano na poniższym rysunku:

enter image description here Źródło obrazu: https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a

Różnica w stosunku do powyższego rysunku polega na tym, że zapytania, klucze i wartości są transformacjami odpowiednich wektorów stanu wejściowego. Pozostałe pozostają takie same.

Zauważ, że nadal możemy używać oryginalnych wektorów stanu kodera jako zapytań, kluczy i wartości. Dlaczego więc potrzebujemy transformacji? Przekształcenie to po prostu mnożenie macierzy, takie jak to:

Zapytanie = I x W (Q)

Klucz = I x W (K)

Wartość = I x W (V)

gdzie I jest wektorem stanu wejściowego (kodera), a W (Q), W (K) i W (V) są odpowiednimi macierzami do przekształcenia wektora I w wektory Query, Key, Value.

Jakie są zalety tego mnożenia macierzy (transformacji wektorowej)?

Przypomnij sobie efekt rozkładu na wartości osobliwe (SVD), jak na poniższym rysunku:

Application of SVD

Źródło obrazu: https://youtu.be/K38wVcdNuFc?t=10

Mnożąc wektor wejściowy przez macierz V (z SVD), uzyskujemy lepszą reprezentację do obliczenia zgodności między dwoma wektorami, jeśli te dwa wektory są podobne w przestrzeni tematów, jak pokazano na przykładzie na rysunku.

A tych macierzy do transformacji można się nauczyć w sieci neuronowej!

Krótko mówiąc, mnożąc wektor wejściowy przez macierz, otrzymaliśmy:

1) lepsza (utajona) reprezentacja wektora wejściowego;

2) konwersja wektora wejściowego na przestrzeń o pożądanym wymiarze, powiedzmy, z wymiaru 5 do 2, lub z n na m itd. (co jest praktycznie przydatne);

gdzie macierzy można się nauczyć (bez ręcznego ustawiania).

Mam nadzieję, że pomoże ci to zrozumieć zapytania, klucze i wartości w mechanizmie (samo) uwagi głębokich sieci neuronowych.

Kod Pythona do trenowania macierzy wygląda następująco: ` 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 = Sequential () model.add (Gęsty (jednostki = 2, input_dim = 5, aktywacja = 'tanh')) model.add (Gęsty (jednostki = 1, aktywacja = 'tanh')) model.compile (strata = 'mean_squared_error', optymalizator = 'sgd', metrics = ['mse']) model.fit (x = x_Train, y = y_Train, epochs = 100) przewidywania = model.predict (x_Test) `
Tim
2019-09-02 15:03:10 UTC
view on stackexchange narkive permalink

Skąd ludzie uzyskują z nich klucz, zapytanie i wartość równania?

Artykuł, do którego się odnosisz nie zawiera takiej terminologii, jak „klucz”, „zapytanie” czy „wartość”, więc nie jest jasne, co masz na myśli w tutaj. Nie ma jednej definicji „uwagi” dla sieci neuronowych, więc domyślam się, że pomyliliście dwie definicje z różnych prac.

W artykule moduł uwagi zawiera wagi $ \ alpha $ i wartości do zważenia $ h $ , gdzie wagi są wyprowadzane z powtarzających się wyników sieci neuronowych, jak opisano w zacytowanych równaniach i na rysunku z artykułu przedstawionego poniżej.

![enter image description here

Podobnie dzieje się w modelu Transformer z artykułu Attention is all you autorstwa Vaswani i in., w którym używają „kluczy”, „zapytań” i "values" ( $ Q $ , $ K $ , $ V $ ). Vaswani i wsp. Definiują komórkę uwagi inaczej:

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

Używają również uwagi obejmującej wiele głowic, gdzie zamiast jednej wartości dla każdego $ Q $ , $ K $ , $ V $ , podają wiele takich wartości.

enter image description here

Gdzie w modelu Transformer $ Q $ , $ K $ , $ V $ mogą pochodzić z tych samych wejść w koderze (dolna część rysunku poniżej) lub z różnych źródeł w dekoderze (górna prawa część rysunku). Ta część jest kluczowa dla wykorzystania tego modelu w zadaniach tłumaczeniowych.

enter image description here

W obu artykułach, zgodnie z opisem, wartości, które przychodzą jako dane wejściowe dla warstw uwagi są obliczane na podstawie wyników poprzednich warstw sieci.Oba artykuły definiują różne sposoby uzyskiwania tych wartości, ponieważ używają innej definicji warstwy uwagi.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...