1. 程式人生 > >Recursive Autoencoders(遞迴自動編碼器)

Recursive Autoencoders(遞迴自動編碼器)

1. 前言

今天主要介紹用在NLP中比較常見的AutoEncoder的模型,Recursive Autoencoders(遞迴自動編碼模型)。這篇文章主要討論RAE在序列化的資料中,如何把資料降維並且用向量表示。

2. 矩陣表示

假設我們有一個矩陣\(L\)的表示向量,一個有序的有\(m\)個元素的序列,每個元素有\(k\)維的向量表示,我們用\(b_k\)代表我們需要找的那個向量,公式如下:

\[ x_i=Lb_k \]

現在我們能用矩陣表示這個\(m\)個元素的序列了,\((x_1,x_2,x_3...,x_m)\)

3. 非監督遞迴自動編碼器

image

上圖是RAE的二叉樹遞迴結構,最底層的節點\(x_1,x_2...,x_m\)

都是序列的內容。第一個RAE從在最底層最右邊的兩個孩子節點序列的元素\(x_1\)\(x_2\)開始,對它們進行重構,會產生一個隱藏層\(y_1\)。再上層一點,一個節點是序列中的元\(x_i\)素,另一個節點是下一程節點通過AE的過程算出來的隱藏層向量\(y_i\),經過RAE後,會產生隱藏節點\(y_{i+1}\),如此迴圈直到序列中所有元素都進行了AE的過程。

  • 編碼過程:父節點是\(y_1\),兩個孩子節點是\(x_1\)\(x_2\):

\[ \mathbf{y_1}=f(\mathbf{W}[\mathbf{x}_{1},\mathbf{x}_{2}]+\mathbf{b}) \]

  • 解碼過程:通過父節\(y_1\)點再重構\(x_1\)\(x_2\)

\[ [\mathbf{x}_{1}';\mathbf{x}_{2}']=\mathbf{W}'\mathbf{y_1}+\mathbf{b}' \]

  • 損失函式

\[ E=\frac{1}{2}\Vert [\mathbf{x}_{1},\mathbf{x}_{2}]-[\mathbf{x}_{1}',\mathbf{x}_{2}']\Vert ^{2} \]
這個過程在每一個AE過程中重複,直到構造出整棵樹。

4. 優化

我們可以從幾個方面去優化RAE。

  1. 選擇一個好的方式去構造樹:我們構造二叉樹的方法很多。例如一個比較好的構造二叉樹的方式是用貪婪演算法在每一步去嘗試每個可能選擇孩子節點,最後選擇這一步重構損失最低的方式建樹。
  2. 選擇一個好的重構損失函式:前面我們的重構損失是平均的懲罰所有序列的損失值。假設我們可以包含孩子節點多的RAE過程的損失的權重比包含孩子節點少的RAE過程的損失函式的權重大。
  3. 歸一化:RAE計算的隱藏節點,它們後面會被下一個RAE重建。為了最小化重構的損失,RAE計算隱藏節點的時候可以對它進行歸一化。

5. 總結

本文主要介紹了RAE的構造和優化方向,下文將介紹RAE在相似度分析的應用。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]