• 沒有找到結果。

池架構 (Pool)

編碼完成後,我們對池進行初始化。將做完自注意力的數字特徵向量依序加入 池。並額外加入兩個常數的特徵向量,分別是 1 和π。在後續選數字的階段,這兩 個向量會如同池中的其他數字一樣,在後續的階段被平等的選取。

因為算式會出現題目中不存在的數字,前者經常在比率問題中出現,後者則會 在圓的幾何計算中出現,但題目沒有出現任何相關的數字,這類型的問題屬於領域 知識 (domain knowledge) 的範疇。為了處理這個問題,我們將這兩個額外的數字 特徵視為模型參數之一,並在開始時隨機初始化,期望透過大量數據能夠訓練出它 們的表徵。

Figure 4: Examples of question have 1 and π.

解碼階段 (Decode)

我們選擇 2 層的單向 LSTM 作為解碼器,解碼器的輸入分別是前一階段的隱 藏層 ℎ𝑡−1𝐷 , 𝑐𝑡−1𝐷 、前一階段的運算結果 𝑠𝑡𝑡−1。我們用編碼器最後一層的隱藏層為解 碼器初始化,並將編碼階段產生的變數特徵 𝑒𝑣𝑎𝑟當作第一步的輸入,雖然 𝑒𝑣𝑎𝑟嚴 格來說不算是運算結果,但也代表我們在著手第一個運算時要先以目標變數提供 的訊息做參考。在第二步以後會將前一步合成的數字 e𝑡−1𝑐𝑜𝑚𝑏當作輸入,這個用意是 在模仿人解題時回顧「目前算到哪裡」的行為,並用來做下一步運算的參考。

LSTM 會輸出一個隱藏層ℎ𝑡𝐷,我們將它與問題的隱藏層向量 {ℎ𝑖𝐸}𝑖=1𝑚 計算注意 力分數,象徵這一輪的選擇主要關注在題目的哪個部分,並計算出當前的問題文本 特徵 𝑞𝑡,我們將隱藏層 ℎ𝑡𝐷、運算結果特徵 𝑠𝑡𝑡−1、問題文本特徵 𝑞𝑡,3 個向量合併

數字選擇器 (Number Selector)

在數字的選擇上,我們依序選擇出一前一後的數字,以滿足減與除運算的有序 性,並且透過剛剛的歸一化,我們也把有序性帶給部分的加與乘運算。如果我們換 另一個做法,求機率最高的兩個數字,在遇到減與除時免不了還要決定兩者的順序,

而阻斷了某些運算有選取兩個相同數字的需求,例如求正方形面積。

在選取前運算元時,我們將 𝐻𝑁𝑄𝑡通過一層網路,過濾出 3 個層面中,選擇前 運算元要著重的資訊,然後將它跟前一階段生成的運算元 𝑂𝑡合併成 𝑟𝑡𝑓𝑟,維度為 𝑑 + 1的向量。接下來將 𝑟𝑡𝑓𝑟和池中的每個數字計算分數,並用𝑠𝑜𝑓𝑡𝑚𝑎𝑥計算出機 率,選取出機率最高的數字特徵向量,作為是前運算元的特徵向量 𝑒𝑡𝑓𝑟

選取後運算元的過程跟前者相似,一樣將 𝐻𝑁𝑄𝑡通過一層網路過濾資訊,但在 合併成 𝑟𝑡𝑏ℎ的方式不太一樣,除了運算元 𝑂𝑡 ,我們還要加入剛剛計算出的 𝑒𝑡𝑓𝑟,合 併成維度是 2𝑑 + 1的 𝑟𝑡𝑓𝑟。接下來一樣將 𝑟𝑡𝑏ℎ和池中每個數字向量計算出機率,選 擇機率最高者作為後運算元。

另外,若前一階段的運算符為等號,則宣告計算即將完成,我們在此階段只要 選擇前運算元並回傳對應的算式當作答案。

合成器 (Combinator)

當解碼階段輸出的運算符不是等號時,會進入合成數字的階段。我們根據加減 乘除不同運算,訓練四種合成器,並用運算符 𝑂𝑡去選擇對應的合成器。將前後運 算元的特徵向量合併,過兩層網路,每層分別通過激活函數 𝑅𝑒𝐿𝑈和 𝑡𝑎𝑛ℎ,得到的 運算結果作為兩者合成的向量。合成的向量會加入池,並被當作下一階段解碼器的 輸入。

3.3 損失函數 (Loss Function)

關於 Loss function 的計算,主要是加總每一輪運算符、前後運算元分類器的 Cross Entropy 來計算,以最小化以下算式為目標:

訓練時,我們會設定 Teacher forcing ratio 為 1。參考每一輪運算符、前後運算 元的正確答案,主要是因為每次做完選擇不能回頭修改答案,卻都會影響下一輪的 運算,像是利用錯誤的前運算元去求後運算元。所以要在選擇後馬上將錯誤修正,

以免讓模型學習到錯誤的語義和因果關係。

實驗結果

比較的基線模型(Baseline model)為帶有注意力機制的 seq2seq 模型。並同樣以生成 後序式為目標做訓練,以比較兩者的能力。

相關文件