Por exemplo, para a palavra na posição na sequência de entrada , com incorporação 4-dimensional e , a operação seria
Wp o s ∈ [ 0 , L - 1 ]w = ( w0 0, ⋯ , wL - 1)eWdm o de l= 4e′W= eW+ [ s i n ( p o s100000 0) ,cos ( p o s100000 0) ,sin ( p o s100002 / 4) ,cos ( p o s100002 / 4) ]= eW+ [ s i n ( p o s ) , c o s ( p o s ) , s i n(pos100) ,Cos (pos100) ]
onde a fórmula para codificação posicional é a seguinte:
com (portanto ) no artigo original.PE ( p o s , 2 i ) = s i n ( p o s100002 i / dm o de l) ,
PE ( p o s , 2 i + 1 ) = c o s ( p o s100002 i / dm o de l) .
dm o de l= 512i ∈ [ 0 , 255 ]
Esta técnica é utilizada porque não há noção de ordem das palavras (1ª palavra, 2ª palavra, ..) na arquitetura proposta. Todas as palavras da sequência de entrada são alimentadas na rede sem ordem ou posição especial (ao contrário das arquiteturas comuns RNN ou ConvNet), portanto, o modelo não tem idéia de como as palavras são ordenadas. Consequentemente, um sinal dependente da posição é adicionado a cada incorporação de palavras para ajudar o modelo a incorporar a ordem das palavras. Com base em experimentos, essa adição não apenas evita a destruição das informações incorporadas, mas também adiciona as informações vitais da posição. No caso de RNNs, alimentamos as palavras sequencialmente para RNN, ou seja, a ésima palavra é alimentada na etapa , o que ajuda o modelo a incorporar a ordem das palavras.nn
Este artigo de Jay Alammar explica o artigo com excelentes visualizações. Infelizmente, seu exemplo de codificação posicional está incorreto no momento (ele usa para a primeira metade das dimensões de incorporação e para a segunda metade, em vez de usar para índices pares e para índices ímpares).s i nc o ss i nc o s