Motivação
O que é atenção?
Funções score
Atenção Global e Local
Atenção visual
Atenção hierárquica
Como vimos, redes recorrentes apresentam dificuldades em capturar relações de longa distância.
LSTM e GRU ajudam mas não resolvem o problema completamente.
Intuição: seq2seq não captura a estrutura interna da linguagem
Todo encoder-decoder possui um gargalo informacional, toda informação capturada no encoder deve ser representada em apenas um vetor.
Intuitivamente, atenção pode ser vista como uma medida de relevância entre os elementos de um input e de um output.
Nos permite capturar o contexto mais relevante para cada etapa do decoder, de maneira independente da distância entre os tokens.
Em termos estatísticos, atenção mede correlação.
No contexto de traduções, atenção também pode ser vista como uma espécie de alinhamento.
Existem diversas variações do conceito de atenção. Mas todos seguem um mesmo esqueleto para se chegar em pesos de atenção.
De maneira geral, para criar um modelo de atenção é necessário definir 3 coisas:
Key, Query, Value
Função Score
Função de Distribuição
Key e Query são os parâmetros da função score, são os objetos sobre os quais desejamos calcular a atenção, ou seja, correlacionar numericamente.
Keys e Values podem ser os mesmos elementos (como em Luong et. al. 2015)
Value são os valores em que aplicaremos os pesos de atenção calculados.
Definem a distribuição dos pesos de atenção, sendo Softmax a mais tradicional.
Também pode ser utilizado para delimitar o escopo da atenção (global vs local).
Um código adaptado para cada token de saída
A cada etapa nós utilizamos um vetor contexto \(C_t\) e o \(h_t\) anterior para calcularmos a palavra seguinte \(y_t\).
\(C_t\) é específico para cada etapa e é calculado a partir do \(h_t\) atual do decoder (Query) e todos os \(\bar{h}_s\) do encoder (Keys).
Após obtermos os pesos de atenção \(a_t\), podemos calcular \(c_t\) ao tomarmos a média ponderada dos \(\bar{h}_s\) do encoder (Values)
Key, Query, Value
Função Score
Função de Distribuição
Key, Query, Value
Função Score
Função de Distribuição
\((\bar{h}_s,h_t,\bar{h}_s )\)
produto escalar
softmax
Considere \(h_1 , \ldots , h_k\) os estados escondidos do encoder e \(h'_1 , \ldots , h'_m\) os do decoder
$$\hat{y}_t = {softmax}(W h_t +b)$$
\(\tilde{h}_t = {tanh}(W_x[c_t;h'_t]+b_x)\)
\(c_t = attend(h_1, \ldots, h_k, h'_t)\)
\(h'_t = f_{dec}(x'_t,h'_{t-1})\)
\( x'_t = word2vec(y_{t-1})\)
\(attend(h_1, \ldots, h_k, h'_t) = \sum_{i=1}^{k} \alpha_{t,i} \cdot h_i\)
\[\alpha_t = softmax[s_1\\\qquad\vdots\\\qquad s_k]\]
\[s_i = score(h'_t,h_i)\]
\(score(h'_h,h_i) = h'_t{}^\top\cdot h_i\)
Atenção nos permite associar partes do input mais importantes para o output. Por exemplo, qual legenda você daria para essas fotos?
E agora?
Atenção nos ajuda a interpretar melhor nossos modelos e entender qual foi seu processo de decisão.
Atenção nos ajuda a interpretar melhor nossos modelos e entender qual foi seu processo de decisão.