Pode não ser a resposta que você está procurando, mas ainda vou tentar:
Primeiro, uma rápida revisão do word2Vec, suponha que estamos usando o recurso ignorar grama.
Um modelo típico para treinamento em Word2Vec consiste em 1 camada de entrada (por exemplo, 10.000 vetores quentes de um ano), uma camada oculta (por exemplo, 300 neurônios), uma saída (10.000 vetores quentes de um ano)
- Entrada: 10 000
- Oculto: 300
- Saída: 10 000
Existe uma matriz E entre a entrada oculta e a descrição dos pesos para transformar o seu um quente em uma incorporação. A matriz é especial porque cada coluna (ou linhas, dependendo da notação preferida) representa pré-ativações nesses 300 neurônios - uma resposta a um vetor 1-hot correspondente.
Você não precisa executar nenhuma ativação nesses 300 neurônios e pode usar seus valores imediatamente como uma incorporação em qualquer tarefa futura.
No entanto, simplesmente apertar uma representação quente em uma representação tridimensional não é suficiente - deve ter um significado. E garantimos que esse significado esteja correto usando uma segunda matriz adicional - que conecta Oculto à Saída
Não queremos ativar uma camada oculta porque a função de ativação não será necessária durante o tempo de execução; no entanto, nesse caso, precisaremos de uma segunda matriz, passando de Oculto para Saída.
Essa segunda matriz criará uma totalmente diferente da sua incorporação. Essa palavra quente representará a palavra mais provável de estar próxima (contextualmente) da palavra quente original. Em outras palavras, essa saída não será a sua original.
É por isso que uma segunda matriz é necessária. Na saída, executamos um softmax, como em um problema de classificação.
Isso nos permite expressar uma relação "palavra" -> incorporação -> "contexto-vizinha-palavra"
Agora, a retropropagação pode ser feita para corrigir os pesos de entrada oculta (sua primeira matriz E) - esses são os pesos com os quais realmente nos importamos. Isso porque a Matriz E pode ser usada durante o Tempo de Execução (eu acho), talvez sendo conectada como uma primeira camada totalmente conectada a alguma Rede Neural Recorrente.
Nesse caso, você não usaria isso:
Você não precisa executar nenhuma ativação nesses 300 neurônios e pode usar seus valores imediatamente como uma incorporação em qualquer tarefa futura
mas, em vez disso, basta pegar a coluna (ou linha, dependendo da notação preferida) apropriada dessa matriz, durante o tempo de execução. O benefício é que, dessa maneira, você obtém uma camada totalmente conectada, pré-treinada e barata, projetada para funcionar com um ponto de acesso. Geralmente, as primeiras camadas seriam mais longas para treinar, devido ao problema do gradiente de fuga.
Por que uma segunda matriz é necessária durante o treinamento:
Mais uma vez, lembre-se, não há ativação na camada oculta.
Podemos ditar à rede o que "one-hot" deve ter sido criado em resposta à sua "entrada one-hot" original e podemos punir a rede se ela não conseguir gerar uma resposta correta.
Não podemos colocar o softmax diretamente após a camada oculta, porque estamos interessados em convocar um mecanismo para converter em incorporação. Isso já é responsabilidade de uma primeira matriz E. Portanto, precisamos de uma etapa extra (uma matriz extra) que nos dê espaço suficiente para concluirmos agora na camada de saída sobre uma palavra vizinha diferente, mas semelhante (contextual)
Durante o tempo de execução, você joga fora a segunda matriz. Mas não exclua-o permanentemente, caso precise voltar e continuar treinando seu modelo.