Como encontrei dificuldades significativas em encontrar uma explicação do mecanismo de propagação de retorno do erro que gostaria, decidi escrever meu próprio post sobre a propagação de retorno do erro usando o algoritmo Word2Vec. Meu objetivo é explicar a essência do algoritmo usando uma rede neural simples, mas não trivial. Além disso, o word2vec se tornou tão popular na comunidade da PNL que será útil se concentrar nele.
Este post está conectado a outro post mais prático que eu recomendo a leitura, que discute a implementação direta do word2vec em python. Neste post, focaremos principalmente a parte teórica.
Vamos começar com as coisas necessárias para uma verdadeira compreensão da retropropagação. Além dos conceitos de aprendizado de máquina, como a função de perda e a descida em gradiente, mais dois componentes da matemática são úteis:
Se você estiver familiarizado com esses conceitos, outras considerações serão simples. Se você ainda não os domina, ainda pode entender o básico da retropropagação.
Primeiro, quero definir o conceito de propagação reversa, se o significado não for suficientemente claro, será divulgado com mais detalhes nos parágrafos seguintes.
1. O que é um algoritmo de retropropagação?
, , , ( , ). , .
, — , , .
, , .
, , , , w1 w2.

1. .
, w1 w2 .
, . , , , . , .
2. Word2Vec
word2vec, , , . , word2vec, NLP.
, word2vec [N, 3], N - , . , , '', , ( ), , ''. , word2vec .
word2vec : (CBOW) (skip-gram). , CBOW, , skip-gram.
. , woed2vec .
3. CBOW
CBOW . , :

2. Continuous Bag-of-Words
, ,
a = 1 (identity function, , ).
Softmax.
one hot encoding , , , , , 1.
: ['', '', '', '', '', '']
OneHot('') = [0, 0, 0, 1, 0, 0]
OneHot(['', '']) = [1, 0, 0, 1, 0, 0]
OneHot(['', '', '']) = [1, 0, 0, 0, 1, 1]
, W , , V — , N — ( , word2vec)
y t, , , , , .
, .
, word2vec :
"I like playing football"
CBOW (2) .
, 4 , V=4, , N=2, :

:
'' '' , . :

:

, one-hot encoding.

, , , . , , .
3.1 (Loss function)
1, , x:
, h — , u — , y — .
, , , (wt, wc). , onehot encoding .
, onehot wt ( ).
softmax , :
, j* — .
. (1):
L=−uj∗+log∑iexp(ui).(1)
.
"I like play football", , "I" "like", , x=(1,0,0,0)— "I", y^=(0,1,0,0), "like".
word2vec, . W 4×2
W=(−1.381187280.548493730.39389902−1.1501331−1.169676280.360780220.06676289−0.14292845)
W′2×4
W′=(1.39420129−0.894417570.998696670.444470370.69671796−0.233643410.21975196−0.0022673)
"I like" :
h=WTx=(−1.381187280.54849373)
u=W′Th=(−1.543507651.10720623−1.25885456−0.61514042)
y=Softmax(u)=(0.052565670.74454790.069875590.13301083)
y,
L=−logP(“like”|“I”)=−logy3=−log(0.7445479)=0.2949781.
, (1):
L=−u2+log∑i=14ui=−1.10720623+log[exp(−1.54350765)+exp(1.10720623)+exp(−1.25885456)+exp(−0.61514042)]=0.2949781.
, "like play", , .
3.2 CBOW
, , W W` . , .
. (1) W W`. ∂L/∂W∂L/∂W′
, . (1) W W`, u=[u1, ...., uV],
L=L(u(W,W′))=L(u1(W,W′),u2(W,W′),…,uV(W,W′)) .
:
∂L∂Wij′=∑k=1V∂L∂uk∂uk∂Wij′(2)
∂L∂Wij=∑k=1V∂L∂uk∂uk∂Wij .(3)
, (2) (3) .
(2), Wij, W
, i j , uj ( yj).

3. (a) yjhiWij′W′. (b) , xkN Wk1…WkNW.
, ∂uk/∂Wij′, , k=j, 0.
(4):
∂L∂Wij′=∂L∂uj∂uj∂Wij′(4)
∂L/∂uj, (5):
∂L∂uj=−δjj∗+yj:=ej(5)
, δjj∗— , , 1, , 0 .
(5) e N ( ), , , .
(4) (6):
∂uj∂Wij′=∑k=1VWikxk(6)
(5) (6) (4) (7):
∂L∂Wij′=(−δjj∗+yj)(∑k=1VWkixk)(7)
∂L/∂Wij, Xk, yj j W , 3(b). . ∂uk/∂Wij, uk u :
uk=∑m=1N∑l=1VWmk′Wlmxl .
∂uk/∂Wij, l=i m=j, (8):
∂uk∂Wij=Wjk′xi .(8)
(5) (8) , (9):
∂L∂Wij=∑k=1V(−δkk∗+yk)Wjk′xi(9)
. (7) (9) . (7)
∂L∂W′=(WTx)⊗e(10)
⊗ .
(9) :
∂L∂W=x⊗(W′e)(11)
3.3
, (7) (9), , . . η>0, :
Wnew=Wold−η∂L∂WWnew′=Wold′−η∂L∂W′
3.4
. , . , . , . , , , .
4. CBOW
CBOW . . (4) . OneHot Encoded . word2vec. .

4. CBOW
CBOW CBOW .
h=1CWT∑c=1Cx(c)=WTx¯u=W′Th=1C∑c=1CW′TWTx(c)=W′TWTx¯y= Softmax(u)=Softmax(W′TWTx¯)
, '' x¯=∑c=1Cx(c)/C
, . :
L=−logP(wo|wc,1,wc,2,…,wc,C)=−uj∗+log∑iexp(ui).(12)
, :
∂L∂Wij′=∑k=1V∂L∂uk∂uk∂Wij′(13)
∂L∂Wij=∑k=1V∂L∂uk∂uk∂Wij .(14)
CBOW , , . Wij′
∂L∂Wij′=∑k=1V∂L∂uk∂uk∂Wij′=∂L∂uj∂uj∂Wij′=(−δjj∗+yj)(∑k=1VWkix¯k)(15)
Wij:
∂L∂Wij=∑k=1V∂L∂uk∂∂Wij(1C∑m=1N∑l=1VWmk′∑c=1CWlmxl(c))=1C∑k=1V∑c=1C(−δkk∗+yk)Wjk′xi(c).(16)
:
∂L∂Wij′=(−δjj∗+yj)(∑k=1VWkix¯k)(17)
∂L∂Wij=∑k=1V(−δkk∗+yk)Wjk′x¯i.(18)
(17) (18) .
(17) :
∂L∂W′=(WTx¯)⊗e(19)
(18):
∂L∂W=x¯⊗(W′e)(20)
, CBOW .
⊗ .
5. Skip-gram
CBOW, , . :

5. Skip-gram .
skip-gram :
h=WTxuc=W′Th=W′TWTxc=1,…,Cyc= Softmax(u)=Softmax(W′TWTx)c=1,…,C
( uc) , y1=y2⋯=yC. :
L=−logP(wc,1,wc,2,…,wc,C|wo)=−log∏c=1CP(wc,i|wo)=−log∏c=1Cexp(uc,j∗)∑j=1Vexp(uc,j)=−∑c=1Cuc,j∗+∑c=1Clog∑j=1Vexp(uc,j)
skip-gram C×V
:
L=L(u1(W,W′),u2(W,W′),…,uC(W,W′))=L(u1,1(W,W′),u1,2(W,W′),…,uC,V(W,W′))
:
∂L∂Wij′=∑k=1V∑c=1C∂L∂uc,k∂uc,k∂Wij′
∂L∂Wij=∑k=1V∑c=1C∂L∂uc,k∂uc,k∂Wij .
∂L/∂uc,j, :
∂L∂uc,j=−δjjc∗+yc,j:=ec,j
CBOW :
∂L∂Wij′=∑k=1V∑c=1C∂L∂uc,k∂uc,k∂Wij′=∑c=1C∂L∂uc,j∂uc,j∂Wij′=∑c=1C(−δjjc∗+yc,j)(∑k=1VWkixk)
Wij, :
∂L∂Wij=∑k=1V∑c=1C∂L∂uc,k∂∂Wij(∑m=1N∑l=1VWmk′Wlmxl)=∑k=1V∑c=1C(−δkkc∗+yc,k)Wjk′xi.
, skip-gram :
∂L∂Wij′=∑c=1C(−δjjc∗+yc,j)(∑k=1VWkixk)(21)
∂L∂Wij=∑k=1V∑c=1C(−δkkc∗+yc,k)Wjk′xi.(22)
(21):
∂L∂W′=(WTx)⊗∑c=1Cec(23)
(22):
∂L∂W=x⊗(W′∑c=1Cec)(24)
6.
word2vec. . [2] ( softmax, negative sampling), . [1].
, word2vec.
. Python, .
!
[1] X. Rong, word2vec Parameter Learning Explained , arXiv: 1411.2738 (2014).
[2] T. Mikolov, K. Chen, G. Corrado, J. Dean, Estimativa eficiente de representações de palavras no espaço vetorial , arXiv: 1301.3781 (2013).