Algoritmo de propagação de erro de volta usando o Word2Vec como exemplo

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 .


, . , L/w1L/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, WN×V, V — , N — ( , word2vec)


y t, , , , , .


, .


, word2vec :
"I like playing football"
CBOW (2) .
, 4 , V=4, , N=2, :



:


Vocabulary=[“I”,“like”,“playing”,“football”]


'' '' , . :



:



, one-hot encoding.



, , , . , , .


3.1 (Loss function)


1, , x:


h=WTxu=WTh=WTWTxy=  Softmax(u)=Softmax(WTWTx)


, h — , u — , y — .


, , , (wt, wc). , onehot encoding .


, onehot wt ( ).


softmax , :


L=logP(wt|wc)=logyj =log[Softmax(uj)]=log(expujiexpui),


, j* — .
. (1):


L=uj+logiexp(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.393899021.15013311.169676280.360780220.066762890.14292845)


W2×4


W=(1.394201290.894417570.998696670.444470370.696717960.233643410.219751960.0022673)


"I like" :


h=WTx=(1.381187280.54849373)



u=WTh=(1.543507651.107206231.258854560.61514042)



y=Softmax(u)=(0.052565670.74454790.069875590.13301083)


y,


L=logP(“like”|“I”)=logy3=log(0.7445479)=0.2949781.


, (1):


L=u2+logi=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/WL/W


, . (1) W W`, u=[u1, ...., uV],


L=L(u(W,W))=L(u1(W,W),u2(W,W),,uV(W,W)) .


:


LWij=k=1VLukukWij(2)



LWij=k=1VLukukWij .(3)


, (2) (3) .


(2), Wij, W, i j , uj ( yj).



3. (a) yjhiWijW. (b) , xkN Wk1WkNW.


, uk/Wij, , k=j, 0.


(4):


LWij=LujujWij(4)


L/uj, (5):


Luj=δjj+yj:=ej(5)


, δjj, , 1, , 0 .


(5) e N ( ), , , .


(4) (6):


ujWij=k=1VWikxk(6)


(5) (6) (4) (7):


LWij=(δjj+yj)(k=1VWkixk)(7)


L/Wij, Xk, yj j W , 3(b). . uk/Wij, uk u :


uk=m=1Nl=1VWmkWlmxl .


uk/Wij, l=i m=j, (8):


ukWij=Wjkxi .(8)


(5) (8) , (9):


LWij=k=1V(δkk+yk)Wjkxi(9)


. (7) (9) . (7)


LW=(WTx)e(10)


⊗ .


(9) :


LW=x(We)(11)

3.3


, (7) (9), , . . η>0, :


Wnew=WoldηLWWnew=WoldηLW


3.4


. , . , . , . , , , .


4. CBOW


CBOW . . (4) . OneHot Encoded . word2vec. .



4. CBOW


CBOW CBOW .


h=1CWTc=1Cx(c)=WTx¯u=WTh=1Cc=1CWTWTx(c)=WTWTx¯y=  Softmax(u)=Softmax(WTWTx¯)


, '' x¯=c=1Cx(c)/C


, . :


L=logP(wo|wc,1,wc,2,,wc,C)=uj+logiexp(ui).(12)


, :


LWij=k=1VLukukWij(13)



LWij=k=1VLukukWij .(14)


CBOW , , . Wij



Wij:


LWij=k=1VLukWij(1Cm=1Nl=1VWmkc=1CWlmxl(c))=1Ck=1Vc=1C(δkk+yk)Wjkxi(c).(16)


:


LWij=(δjj+yj)(k=1VWkix¯k)(17)



LWij=k=1V(δkk+yk)Wjkx¯i.(18)


(17) (18) .
(17) :


LW=(WTx¯)e(19)


(18):


LW=x¯(We)(20)


, CBOW .
⊗ .


5. Skip-gram


CBOW, , . :



5. Skip-gram .


skip-gram :


h=WTxuc=WTh=WTWTxc=1,,Cyc=  Softmax(u)=Softmax(WTWTx)c=1,,C


( uc) , y1=y2=yC. :


L=logP(wc,1,wc,2,,wc,C|wo)=logc=1CP(wc,i|wo)=logc=1Cexp(uc,j)j=1Vexp(uc,j)=c=1Cuc,j+c=1Clogj=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))


:


LWij=k=1Vc=1CLuc,kuc,kWij



LWij=k=1Vc=1CLuc,kuc,kWij .


L/uc,j, :


Luc,j=δjjc+yc,j:=ec,j


CBOW :


LWij=k=1Vc=1CLuc,kuc,kWij=c=1CLuc,juc,jWij=c=1C(δjjc+yc,j)(k=1VWkixk)


Wij, :


LWij=k=1Vc=1CLuc,kWij(m=1Nl=1VWmkWlmxl)=k=1Vc=1C(δkkc+yc,k)Wjkxi.


, skip-gram :


LWij=c=1C(δjjc+yc,j)(k=1VWkixk)(21)



LWij=k=1Vc=1C(δkkc+yc,k)Wjkxi.(22)


(21):


LW=(WTx)c=1Cec(23)


(22):


LW=x(Wc=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).


All Articles