Introdução ao Deep Learning (67) Rede Neural Recorrente - Mecanismo de Atenção

prefácio

O conteúdo principal vem do link 1 do blog link 2 do blog Espero que você possa apoiar muito o autor
Este artigo é usado para registros para evitar esquecimento

Redes Neurais Recorrentes - Mecanismo de Atenção

material didático

psicologia

  • Os animais precisam se concentrar efetivamente em pontos notáveis ​​em ambientes complexos
  • Uma estrutura psicológica: os humanos escolhem pontos de atenção com base em pistas voluntárias e involuntárias

mecanismo de atenção

Camadas convolucionais, totalmente conectadas e de agrupamento consideram apenas sugestões involuntárias (sem objetivos claros)

A operação de pooling geralmente extrai o valor máximo no intervalo do campo receptivo (pooling máximo).A
operação de convolução geralmente opera em todas as entradas por meio do kernel de convolução e, em seguida, extrai alguns recursos mais óbvios.

O mecanismo de atenção é considerar explicitamente pistas aleatórias

As pistas aleatórias são chamadas de consultas (query) - o que você quer fazer,
cada entrada é um par de valor (valor) e pistas não aleatórias (chave) - podem ser entendidas como o ambiente, ou seja, algumas chaves Pares de valor, chave e o valor pode ser o mesmo ou pode ser diferente.
Selecione certas entradas de forma parcial através da camada de agrupamento de atenção ---- selecione as entradas de forma enviesada de acordo com a consulta, que é diferente da camada de agrupamento anterior. Aqui, consulta explicitamente adicionada e, em seguida, consulta o que você precisa de acordo com a consulta

Camada de agrupamento de atenção não paramétrica

insira a descrição da imagem aqui

Não parâmetro: não há necessidade de aprender o parâmetro
x – chave
y – valor
f(x) – correspondente à coisa a ser consultada
(x, y) – par chave-valor (candidato)
agrupamento médio: a razão pela qual é o mais simples solução é Porque você não precisa se preocupar com o que está procurando (isto é, x em f(x)), você só precisa somar e tirar a média de y sem pensar

Regressão do kernel de Nadaraya-Watson:

Kernel: função K, que pode ser considerada como uma função para medir a distância entre x e xi
. O novo valor fornecido é comparado com dados semelhantes e, em seguida, os valores correspondentes a esses dados são ponderados e somados para obter o consulta final), então não há necessidade de aprender parâmetros

Escolha de K: Núcleo Gaussiano
insira a descrição da imagem aqui

u: representa a distância entre x e xi
exp: a função é mudar o resultado final para um número maior que 0
softmax: obter um número entre 0 e 1 como peso
Adicionar um w apreensível com base na fórmula acima:
insira a descrição da imagem aqui

Resumir

1. A psicologia acredita que as pessoas escolhem os pontos de atenção por meio de pistas aleatórias e involuntárias

2. No mecanismo de atenção, a entrada é selecionada de forma tendenciosa por meio de consulta (pista aleatória) e chave (pista não aleatória), que geralmente podem ser escritas como

insira a descrição da imagem aqui

A chave de f(x) e todas as chaves de pistas involuntárias são calculadas sobre a distância (α(x, xi), geralmente chamada de peso de atenção), que são usadas respectivamente como o peso de todos os valores. Este não é um conceito novo
. Mecanismos de atenção não paramétricos existem desde os anos 60

Livros didáticos (avisos de atenção)

Como a economia estuda a alocação de recursos escassos, as pessoas estão na era da "economia da atenção", ou seja, a atenção humana é considerada uma mercadoria trocável, limitada, valiosa e escassa. Muitos modelos de negócios também foram desenvolvidos para tirar proveito disso: Nos serviços de streaming de música ou vídeo, as pessoas ou consomem atenção em anúncios ou pagam para escondê-los; para crescer no mundo dos jogos online, as pessoas consomem atenção Em batalhas de jogos , ajudando assim a atrair novos jogadores, ou pagar para se tornar instantaneamente poderoso. Em suma, a atenção não é gratuita.

A atenção é escassa, mas não há muita informação no ambiente que interfira na atenção. Por exemplo, o sistema nervoso visual humano recebe cerca de 1 0 8 10^8 por segundo1 08 bits de informação, que está muito além do que o cérebro pode processar completamente. Felizmente, nossos ancestrais aprenderam com a experiência (também conhecida como dados) que "nem todas as entradas dos sentidos são iguais". Ao longo da história humana, essa capacidade de direcionar a atenção para apenas um pequeno subconjunto de informações de interesse permitiu que o cérebro humano alocasse recursos com mais sabedoria para sobreviver, crescer e socializar, como detectar predadores, encontrar comida e parceiros.

1 dicas de atenção em biologia

Como a atenção é aplicada ao mundo visual? Começa com uma estrutura que é muito popular hoje 双组件(two-component): o surgimento dessa estrutura pode ser rastreado até a década de 1890 de William James, considerado o "pai da psicologia americana". Nesse quadro, os sujeitos fundamentam 非自主性提示e 自主性提示direcionam seletivamente o foco da atenção.

As pistas involuntárias são baseadas na saliência e visibilidade dos objetos no ambiente. Imagine que temos cinco itens à nossa frente: um jornal, um trabalho de pesquisa, uma xícara de café, um caderno e um livro, como na foto abaixo. Todos os produtos de papel são impressos em preto e branco, exceto as xícaras de café que são vermelhas. Ou seja, essa caneca de café ganha destaque e destaque nesse ambiente visual, atraindo involuntariamente a atenção das pessoas. Então colocamos a visão mais aguçada no café, como mostra a foto.
insira a descrição da imagem aqui
Depois de tomar café, ficamos empolgados e com vontade de ler um livro, viramos a cabeça, reorientamos o olhar e lemos um livro, conforme a imagem abaixo. Diferente da seleção causada pela saliência na figura acima, o livro de seleção é controlado por cognição e consciência neste momento, então a atenção será mais cautelosa ao auxiliar a seleção com base em prompts autônomos. Impulsionado pela vontade subjetiva do sujeito, o poder de escolha é mais forte.
insira a descrição da imagem aqui

2 Consultas, chaves e valores

Os sinais de atenção autônomos e não autônomos explicam o modo de atenção humana. Vejamos como usar esses dois sinais de atenção para projetar a estrutura do mecanismo de atenção com redes neurais.

Primeiro, considere uma situação relativamente simples usando apenas dicas involuntárias. Para direcionar a seleção para a entrada sensorial, pode-se simplesmente usar camadas paramétricas totalmente conectadas, ou mesmo camadas não paramétricas de agrupamento máximo ou agrupamento de médias.

Portanto, "se as dicas de autonomia estão incluídas" distingue os mecanismos de atenção das camadas totalmente conectadas ou agrupadas. No contexto dos mecanismos de atenção, são chamadas pistas autônomas 查询(query). Dada qualquer consulta, o mecanismo de atenção 注意力汇聚(attention pooling)orienta a seleção para 感官输入(entradas sensoriais, como representações de recursos intermediários) por . No mecanismo de atenção, essas entradas sensoriais são chamadas de 值(value). Interpretado mais coloquialmente, cada valor é 键(key)emparelhado com um , que pode ser imaginado como uma sugestão involuntária para entrada sensorial. Como mostrado, o agrupamento de atenção pode ser projetado de forma que uma determinada consulta (pistas autônomas) corresponda a uma chave (pistas involuntárias), que leva ao melhor valor de correspondência (entrada sensorial).
insira a descrição da imagem aqui
Dada a predominância da estrutura mencionada acima na figura, os modelos sob esta estrutura serão o centro deste capítulo. No entanto, existem muitas alternativas para o design de mecanismos de atenção. Por exemplo, é possível projetar um modelo de atenção não diferenciável que pode ser treinado usando métodos de aprendizado por reforço (Mnih et al., 2014).

3 Visualização da Atenção

A camada de agrupamento média pode ser vista como uma média ponderada das entradas, onde cada entrada é igualmente ponderada. Na verdade, o agrupamento de atenção resulta em uma soma de médias ponderadas, em que os pesos são calculados em diferentes chaves para uma determinada consulta.

import torch
from d2l import torch as d2l

Para visualizar os pesos de atenção, uma show_heatmapsfunção precisa ser definida. A forma de sua entrada matricesé (número de linhas a serem exibidas, número de colunas a serem exibidas, número de consultas, número de chaves).

#@save
def show_heatmaps(matrices, xlabel, ylabel, titles=None, figsize=(2.5, 2.5),
                  cmap='Reds'):
    """显示矩阵热图"""
    d2l.use_svg_display()
    num_rows, num_cols = matrices.shape[0], matrices.shape[1]
    fig, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize,
                                 sharex=True, sharey=True, squeeze=False)
    for i, (row_axes, row_matrices) in enumerate(zip(axes, matrices)):
        for j, (ax, matrix) in enumerate(zip(row_axes, row_matrices)):
            pcm = ax.imshow(matrix.detach().numpy(), cmap=cmap)
            if i == num_rows - 1:
                ax.set_xlabel(xlabel)
            if j == 0:
                ax.set_ylabel(ylabel)
            if titles:
                ax.set_title(titles[j])
    fig.colorbar(pcm, ax=axes, shrink=0.6);

Vamos usar um exemplo simples para demonstrar. Neste exemplo, o peso de atenção é 1 somente se a consulta e a chave forem iguais e 0 caso contrário.

attention_weights = torch.eye(10).reshape((1, 1, 10, 10))
show_heatmaps(attention_weights, xlabel='Keys', ylabel='Queries')

saída:
insira a descrição da imagem aqui

Capítulos posteriores geralmente chamarão show_heatmapsfunções para exibir pesos de atenção.

4 Resumo

  • A atenção humana é um recurso finito, valioso e escasso.

  • Os sujeitos direcionam seletivamente a atenção usando pistas involuntárias e voluntárias. O primeiro é baseado na saliência, o último na consciência.

  • A diferença entre o mecanismo de atenção e a camada totalmente conectada ou a camada de pool é devido à adição de dicas autônomas.

  • O mecanismo de atenção difere das camadas totalmente conectadas ou das camadas de agrupamento devido à inclusão de pistas autônomas.

  • O mecanismo de atenção direciona a seleção para valores (entradas sensoriais), que contêm consultas (pistas autônomas) e chaves (pistas involuntárias), por meio do agrupamento atencional. Chaves e valores são pares.

  • É possível visualizar os pesos de atenção entre consultas e chaves.

Livro didático (Poolização de atenção: regressão do kernel de Nadaraya-Watson)

A seção anterior apresentou os principais componentes do mecanismo de atenção sob a estrutura: Interações entre consultas (pistas voluntárias) e chaves (pistas involuntárias) formam pools de atenção; pools de atenção agregam seletivamente valores (entradas sensoriais) para gerar a saída final. Esta seção apresenta mais detalhes do agrupamento de atenção para obter uma compreensão de alto nível de como o mecanismo de atenção funciona na prática. Especificamente, o modelo de regressão do kernel Nadaraya-Watson proposto em 1964 é um exemplo simples, mas completo, que pode ser usado para demonstrar o aprendizado de máquina com mecanismos de atenção.

import torch
from torch import nn
from d2l import torch as d2l

1 Gerar conjunto de dados

n_train = 50  # 训练样本数
x_train, _ = torch.sort(torch.rand(n_train) * 5)   # 排序后的训练样本

def f(x):
    return 2 * torch.sin(x) + x**0.8

y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,))  # 训练样本的输出
x_test = torch.arange(0, 5, 0.1)  # 测试样本
y_truth = f(x_test)  # 测试样本的真实输出
n_test = len(x_test)  # 测试样本数
n_test

saída

50

A função abaixo plotará todas as amostras de treinamento (as amostras são representadas por círculos), a função de geração de dados reais ff sem o termo de ruídof (rotulado como "Truth") e a função de previsão aprendida (rotulada como "Pred").

def plot_kernel_reg(y_hat):
    d2l.plot(x_test, [y_truth, y_hat], 'x', 'y', legend=['Truth', 'Pred'],
             xlim=[0, 5], ylim=[-1, 5])
    d2l.plt.plot(x_train, y_train, 'o', alpha=0.5);

2 agrupamento médio

Use o estimador mais simples primeiro para resolver o problema de regressão. Calcule a média de todos os valores de saída da amostra de treinamento com base no agrupamento médio:
f ( x ) = 1 n ∑ i = 1 nyi , f(x) = \frac{1}{n}\sum_{i=1}^ n y_i ,f ( x )=n1eu = 1nyeu,
conforme mostrado na figura abaixo, esse estimador realmente não é inteligente o suficiente. função realfff ("Truth") e a função de previsão ("Pred") são muito diferentes.

y_hat = torch.repeat_interleave(y_train.mean(), n_test)
plot_kernel_reg(y_hat)

saída:
insira a descrição da imagem aqui

3 Agrupamento de atenção não paramétrico

Obviamente, o agrupamento médio ignora a entrada xi x_ixeu. Então Nadaraya e Watson tiveram uma ideia melhor para produzir yi y_i de acordo com a posição da entradayeuPesar:

f ( x ) = ∑ i = 1 n K ( x − xi ) ∑ j = 1 n K ( x − xj ) yi ( 10.2.3 ) f(x) = \sum_{i=1}^n \frac{ K(x - x_i)}{\sum_{j=1}^n K(x - x_j)} y_i \qquad(10.2.3)f ( x )=eu = 1nj = 1nK ( xxj)K ( xxeu)yeu( 10.2.3 )

onde KKK é o núcleo. O estimador descrito pela Equação (10.2.3) é denominadoNadaraya-Watson核回归(Nadaraya-Watson kernel regression). Os detalhes da função kernel não serão discutidos em profundidade aqui, mas inspirados nisso, podemos reescrever (10.2.3) da perspectiva da estrutura do mecanismo de atenção e tornar-se uma fórmula mais geral: f ( x ) = ∑注意力汇聚(attention pooling)i
= 1 n α ( x , xi ) yi ( 10.2.4 ) f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i \qquad(10.2.4)f ( x )=eu = 1num ( x ,xeu) yeu( 10.2.4 )
ondexxx é a resposta,( xi , yi ) (x_i, y_i)( xeu,yeu) são pares chave-valor. Comparando (10.2.4) e (10.2.2), o agrupamento de atenção éyi y_iyeumédia ponderada. vai consultar xxx e chavexi x_ixeuA relação entre é modelada como 注意力权重(attention weight), conforme mostrado em (10.2.4), este peso será atribuído a cada valor correspondente yi y_iyeu. Para qualquer consulta, o modelo tem uma distribuição de probabilidade válida sobre todos os pares chave-valor de pesos de atenção: eles são não negativos e somam 1.

Para entender melhor o agrupamento de atenção, considere um 高斯核(Gaussian kernel), definido como:

K ( u ) = 1 2 π exp ⁡ ( − u 2 2 ) ( 10.2.5 ) K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2 {2})\qquad (10.2.5)K ( você )=14h _ 1exp ( -2você2)( 10.2.5 )

Substituindo o kernel Gaussiano em (10.2.4) e (10.2.3) temos:

f ( x ) = ∑ i = 1 n α ( x , xi ) yi = ∑ i = 1 n exp ⁡ ( − 1 2 ( x − xi ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( x − xj ) 2 ) yi = ∑ i = 1 nsoftmax ( − 1 2 ( x − xi ) 2 ) yi . ( 10.2.6 ) \begin{split}\begin{aligned} f(x) &=\sum_{i=1}^n \alpha(x, x_i) y_i\\ &= \sum_{i=1}^ n \frac{\exp\left(-\frac{1}{2}(x - x_i)^2\right)}{\sum_{j=1}^n \exp\left(-\frac{1} {2}(x - x_j)^2\direita)} y_i \\&= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i) ^2\à direita) y_i. \end{aligned}\end{split} \qquad (10.2.6)f ( x )=eu = 1num ( x ,xeu) yeu=eu = 1nj = 1nexp( -21( xxj)2 )exp( -21( xxeu)2 )yeu=eu = 1nsoftmax( -21( xxeu)2 )yeu.( 10.2.6 )

Em (10.2.6), se uma chave xi x_ixeuQuanto mais próximo de uma determinada consulta xxx , então atribua a esta chave o valor correspondenteyi y_iyeuQuanto maior o peso da atenção, mais "atenção obtida".

Vale a pena notar que a regressão do kernel de Nadaraya-Watson é um modelo não paramétrico. Portanto, (10.2.6) é 非参数的注意力汇聚(nonparametric attention pooling)o modelo. Em seguida, traçaremos as previsões com base nesse modelo não paramétrico de agrupamento de atenção. A partir dos resultados plotados, você descobrirá que a linha de previsão do novo modelo é suave e mais próxima da verdade do que a previsão combinada média.

# X_repeat的形状:(n_test,n_train),
# 每一行都包含着相同的测试输入(例如:同样的查询)
X_repeat = x_test.repeat_interleave(n_train).reshape((-1, n_train))
# x_train包含着键。attention_weights的形状:(n_test,n_train),
# 每一行都包含着要在给定的每个查询的值(y_train)之间分配的注意力权重
attention_weights = nn.functional.softmax(-(X_repeat - x_train)**2 / 2, dim=1)
# y_hat的每个元素都是值的加权平均值,其中的权重是注意力权重
y_hat = torch.matmul(attention_weights, y_train)
plot_kernel_reg(y_hat)

Saída:
insira a descrição da imagem aqui
Agora observe os pesos de atenção. Aqui, a entrada dos dados de teste é equivalente à consulta e a entrada dos dados de treinamento é equivalente à chave. Como ambas as entradas são classificadas, pode-se observar que quanto mais próximo estiver o par de chaves de consulta, maior será o peso de atenção do pool de atenção.

d2l.show_heatmaps(attention_weights.unsqueeze(0).unsqueeze(0),
                  xlabel='Sorted training inputs',
                  ylabel='Sorted testing inputs')

saída
insira a descrição da imagem aqui

4 Pool de atenção com parâmetros

Vantagens da regressão de kernel Nadaraya-Watson não paramétrica 一致性(consistency): Se houver dados suficientes, o modelo convergirá para o resultado ideal. No entanto, podemos facilmente integrar parâmetros que podem ser aprendidos no pooling de atenção.

Por exemplo, ligeiramente diferente de (10.2.6), na seguinte consulta xxx e chavexi x_ixeuA distância entre multiplicada pelo parâmetro apreensível www

f ( x ) = ∑ i = 1 n α ( x , xi ) yi = ∑ i = 1 n exp ⁡ ( − 1 2 ( ( x − xi ) w ) 2 ) ∑ j = 1 n exp ⁡ ( − 1 2 ( ( x − xj ) w ) 2 ) yi = ∑ i = 1 nsoftmax ( − 1 2 ( ( x − xi ) w ) 2 ) yi . ( 10.2.7 ) \begin{split}\begin{aligned}f(x) &= \sum_{i=1}^n \alpha(x, x_i) y_i \\&= \sum_{i=1}^ n \frac{\exp\left(-\frac{1}{2}((x - x_i)w)^2\right)}{\sum_{j=1}^n \exp\left(-\frac {1}{2}((x - x_j)w)^2\direita)} y_i \\&= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2 }((x - x_i)w)^2\direita) y_i.\end{aligned}\end{split} \qquad (10.2.7)f ( x )=eu = 1num ( x ,xeu) yeu=eu = 1nj = 1nexp( -21(( xxj) w )2 )exp( -21(( xxeu) w )2 )yeu=eu = 1nsoftmax( -21(( xxeu) w )2 )yeu.( 10.2.7 )
O restante desta seção aprende os parâmetros de agrupamento de atenção treinando este modelo (10.2.7).

4.1 Multiplicação de matrizes em lote

Para calcular de forma mais eficiente a atenção em pequenos lotes de dados, podemos aproveitar a multiplicação da matriz de lote fornecida na estrutura de desenvolvimento de aprendizado profundo.

Suponha que o primeiro mini-lote contenha nnn matrizesX 1 , … , X n \mathbf{X}_1,\ldots, \mathbf{X}_nx1,,xn, a forma é a × ba\times ba×b , o segundo mini-lote contémnnn intervaloY 1 , ... , Y n \mathbf{Y}_1, \ldots, \mathbf{Y}_nY1,,Yn, a forma é b × cb\vezes cb×c . Sua multiplicação de matriz de lote produznnn intervaloX 1 Y 1 , ... , X n Y n \mathbf{X}_1\mathbf{Y}_1, \ldots, \mathbf{X}_n\mathbf{Y}_nx1Y1,,xnYn, a forma é a × ca\times ca×c . Então, supondo que dois tensores tenham a forma( n , a , b ) (n,a,b)( n ,um ,b ) e(n, b, c) (n,b,c)( n ,b ,c ) cuja saída da multiplicação da matriz em lote tem formato( n , a , c ) (n,a,c)( n ,um ,c ) _

X = torch.ones((2, 1, 4))
Y = torch.ones((2, 4, 6))
torch.bmm(X, Y).shape

saída

torch.Size([2, 1, 6])

No contexto dos mecanismos de atenção, podemos usar a multiplicação de matrizes de minilotes para calcular médias ponderadas em minilotes de dados.

weights = torch.ones((2, 10)) * 0.1
values = torch.arange(20.0).reshape((2, 10))
torch.bmm(weights.unsqueeze(1), values.unsqueeze(-1))

saída

tensor([[[ 4.5000]],

        [[14.5000]]])

4.2 Definir o modelo

Com base no agrupamento de atenção paramétrica em (10.2.7), usando a multiplicação de matrizes em minilote, a versão paramétrica da regressão de kernel de Nadaraya-Watson é definida como:

class NWKernelRegression(nn.Module):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.w = nn.Parameter(torch.rand((1,), requires_grad=True))

    def forward(self, queries, keys, values):
        # queries和attention_weights的形状为(查询个数,“键-值”对个数)
        queries = queries.repeat_interleave(keys.shape[1]).reshape((-1, keys.shape[1]))
        self.attention_weights = nn.functional.softmax(
            -((queries - keys) * self.w)**2 / 2, dim=1)
        # values的形状为(查询个数,“键-值”对个数)
        return torch.bmm(self.attention_weights.unsqueeze(1),
                         values.unsqueeze(-1)).reshape(-1)

4.3 Treinamento

Em seguida, transforme o conjunto de dados de treinamento em chaves e valores para treinar o modelo de atenção. No modelo de agrupamento de atenção com parâmetros, a entrada de qualquer amostra de treinamento será calculada com os pares "valor-chave" de todas as amostras de treinamento, exceto ela mesma, de modo a obter sua saída prevista correspondente.

# X_tile的形状:(n_train,n_train),每一行都包含着相同的训练输入
X_tile = x_train.repeat((n_train, 1))
# Y_tile的形状:(n_train,n_train),每一行都包含着相同的训练输出
Y_tile = y_train.repeat((n_train, 1))
# keys的形状:('n_train','n_train'-1)
keys = X_tile[(1 - torch.eye(n_train)).type(torch.bool)].reshape((n_train, -1))
# values的形状:('n_train','n_train'-1)
values = Y_tile[(1 - torch.eye(n_train)).type(torch.bool)].reshape((n_train, -1))

Ao treinar um modelo de atenção agrupada com parâmetros, use uma função de perda quadrada e uma descida de gradiente estocástica.

net = NWKernelRegression()
loss = nn.MSELoss(reduction='none')
trainer = torch.optim.SGD(net.parameters(), lr=0.5)
animator = d2l.Animator(xlabel='epoch', ylabel='loss', xlim=[1, 5])

for epoch in range(5):
    trainer.zero_grad()
    l = loss(net(x_train, keys, values), y_train)
    l.sum().backward()
    trainer.step()
    print(f'epoch {
      
      epoch + 1}, loss {
      
      float(l.sum()):.6f}')
    animator.add(epoch + 1, float(l.sum()))

Saída:
insira a descrição da imagem aqui
Conforme mostrado abaixo, depois de treinar o modelo de agrupamento de atenção com parâmetros, pode-se descobrir que: Ao tentar ajustar os dados de treinamento ruidosos, os resultados da previsão desenham uma linha que não é tão suave quanto o modelo não paramétrico anterior.

# keys的形状:(n_test,n_train),每一行包含着相同的训练输入(例如,相同的键)
keys = x_train.repeat((n_test, 1))
# value的形状:(n_test,n_train)
values = y_train.repeat((n_test, 1))
y_hat = net(x_test, keys, values).unsqueeze(1).detach()
plot_kernel_reg(y_hat)

Saída
insira a descrição da imagem aqui
Por que o novo modelo é menos suave? Vamos dar uma olhada na plotagem dos resultados de saída: Em comparação com o modelo não paramétrico de agrupamento de atenção, depois de adicionar parâmetros que podem ser aprendidos ao modelo parametrizado, a curva se torna menos suave na área onde o peso da atenção é maior.

d2l.show_heatmaps(net.attention_weights.unsqueeze(0).unsqueeze(0),
                  xlabel='Sorted training inputs',
                  ylabel='Sorted testing inputs')

saída
insira a descrição da imagem aqui

5 Resumo

  • A regressão do kernel Nadaraya-Watson é um paradigma de aprendizado de máquina com um mecanismo de atenção.

  • O agrupamento de atenção para a regressão do kernel Nadaraya-Watson é uma média ponderada das saídas nos dados de treinamento. Do ponto de vista da atenção, o peso da atenção atribuído a cada valor depende de uma função que recebe como entrada a chave e a consulta correspondentes ao valor.

  • O agrupamento de atenção pode ser dividido em não paramétrico e paramétrico.

Acho que você gosta

Origin blog.csdn.net/qq_52358603/article/details/128485768
Recomendado
Clasificación