首頁>Club>
最好可以有程式碼,這樣理解起來比較容易。
18
回覆列表
  • 1 # 北航秦曾昌

    NNLM(Neural Network Language Model,神經網路語言模型)是語言模型的一種,其基本結構分為輸入層、embedding層、隱層和輸出層。應題主的要求本文透過結合例項來進行NNLM工作原理的講解。

    例項:英文字母前三個字母順序為abc,輸入字母為a,要透過NNLM預測下一個字母為b還是c。

    本例項的原理圖如上圖所示,神經網路的輸入為a,輸出為b。構建的NNLM模型有輸入層、input embedding層、隱層1(linear transform + Tanh)、隱層2(output embedding)、輸出層(softmax + cross-entropy)。下面講解各個層級結構所進行的操作和任務。

    1.輸入層

    輸入層要完成對輸入字母的編碼,一般是採用one-hot的編碼方式。在本例中,我們隨機初始化一個3*2階的矩陣W,並透過input embedding層完成對編碼a的向量的查詢。

    2.input embedding層

    這裡是對輸入的矩陣W進行查詢,來找到對應a的編碼向量。具體來說就是a對應的編碼向量為W的第0行,透過W’=W[0]就可以將其匯出。

    3.隱層1(linear transform + Tanh)

    本層是典型的神經網路層,輸入先進行線性變換(y=xw+b),輸出y再透過啟用函式(Tanh)作為下一層的輸入,啟用函式本質上是線上性變換的基礎上疊加了一種非線性的操作。神經網路模型的優勢在很大程度上也是來源於有啟用函式這種非線性操作的存在。

    4.隱層2(output embedding)

    本層本質上就是一個單純的線性變換層,透過本層將輸入為1*2階的h3變為輸出為1*3階的h4(因為本例設定的詞庫包含3個詞abc)。

    5.輸出層(softmax + cross-entropy)

    本文將softmax + cross-entropy一起視為輸出層,這樣做的好處是在反向傳播過程中適合求導。softmax可以理解為一種歸一化的操作,其公式為y=exp(xi)/(exp(x1)+exp(x2)+exp(x3)+...+exp(xn)),其求出的是相應xi出現的機率。cross-entropy是本例項中採用的損失函式,其公式為(實際中yj一般取1):

    透過以上的步驟就搭建好了簡單的神經網路語言模型,需要進行強調的是神經網路的訓練分為前向傳播分為反向傳遞兩個重要階段。前向傳播就是從輸入到輸出一步步進行每層的輸入到輸出的操作,而反向傳遞是從輸出到輸入一步步的進行求導操作(包括對本層輸入x的求導、對本層引數w、b求偏導)。神經網路引數的更新採用的是梯度下降的方法。本例的結果如下:

    本例項的程式碼已經上傳到了我的github上,可以作為參考,程式連結如下:https://github.com/JXZe/learn/blob/master/nnlm/AtoB.py

  • 中秋節和大豐收的關聯?
  • 請問高爾夫該怎麼打才準?