Hinton Neural Networks課程筆記4a:使用神經網路做邏輯推理
PPT中的標題是Learning to predict the next word(學習預測下一個單詞),是從實際操作中得出的,但筆者認為這裡使用神經網路做邏輯推理的例子很典型,所以拿出來做標題了。
例子簡單講就是給定n個三元組(A,R,B)作為訓練集,然後給定A和R,神經網路輸出B。這裡涉及到學習A,R,B的特徵表示,不僅要有意義,而且還有三者之間進行配合。
例子簡介:親戚關係推斷
這節主要介紹一個使用神經網路做邏輯推理的例子:親戚關係推斷。
非常常見的家族圖譜,就不贅述了。注意兩個地方:等於號表示兩者結婚了;上下兩個圖譜,表示兩個家庭。
家庭圖譜可以用作邏輯推斷(例如媽媽的媽媽叫姥姥。。。),例子如下:
學習親戚關係推斷
將家庭圖譜表示為上訴邏輯推斷的形式之後,可以把輸入看做三元組(例如(x, has-mother, y))。直覺傳統的做邏輯推斷的方法是使用符號規則,例如指定規則:
這樣的缺點是需要人工設定,窮盡可能。
希望可以使用神經網路學習到如何做邏輯推斷,設計網路結構如下:
輸入三元組的前兩個元素,輸出第三個元素,可以用於質詢,例如:問colin的father是,輸出james。
對於元素的輸入,使用one-hot方式表示,優勢是不引入先驗(如果使用二進位制密集表示,那麼會存在某兩個點在空間上比其他點近),易於分析。
元素輸入之後分別使用一個編碼器對其進行編碼,這個編碼過程可以加入一些限制,傳統的方式是使得維度減少,強制性使得資訊壓縮,保留有用資訊。
元素輸出同樣是one-hot格式的,輸出每個類別的可能性,通常是softmax。同樣的,輸出之前使用解碼器解碼,即對所有元素融合過程中是以編解碼後的隱層表示進行互動。
中間層學習預測邏輯推理的功能,同時也兼具協調兩個編碼器和一個解碼器的功能,使得三者的隱層表示互相之間是有意義的。
對學習到的編碼器進行分析
上圖展示了將輸入24維編碼到6維隱層表示的編碼器權重,圖中存在6個灰色的大框,分別表示六個隱層神經元,每個神經元內上下兩行分別表示兩個家族,每個黑白矩形表示對應家族成員到相應神經元的輸入權重,白色為正數,黑色為負數。因為兩個家族結構一樣,所以只使用一個家族的名稱表示,另一個家族的名稱省略。
首先觀察右上方神經元,清晰可見的一行白矩形,一行黑矩形,可見這個矩形用於區分兩個家族。同一個家族的輸入,只會對應於同一個家族的輸出,學習到家族分類是很有必要的。
繼續觀察其下方的神經元,可以看到其隨輩分的增加,值在變大。(Andrew對應於白色大矩形,而colin是黑色大矩形,james的絕對值相對較小)
驗證效能
這部分就是很toy的了,留下四個測試,其他的訓練,檢視結果: