1

直到知道我只使用神經網絡對單個輸出進行分類,我爲每個類設置了一個輸出神經元,並檢查哪個神經元具有最高/最低激活。多輸出神經網絡

我想要做的是檢測一個模式,而不是輸出一個值(類或激活值)我想輸出多個值。例如,

[0,5 0,5 0,5] -> [0,5 0,5 0,5] 
[1 1 1] -> [1 1 1] 
[2 2 2] -> [-1 -1 -1] 

因此,我想知道是我可以使用網絡與3個輸出和而不是檢查激活,使用所有輸出作爲我的輸出模式?

回答

3

是的,您可以使用具有多個輸出的神經網絡。基本上,你有兩個選擇這樣做:

  • 使用一個簡單的分解,即針對的答覆,並訓練出3種人工神經網絡,其中每一個都有一個單獨的輸出分開你的訓練集。但我想這是而不是你在找什麼。

  • 列車a real多輸出神經網絡。在這種情況下,對於雙隱層ANN,輸入層的神經元權重對於每個輸出是相同的,而輸出層權重對於每個輸出是特定的。在這種情況下,您必須組合三個輸出的反向傳播過程。在一個簡單的方法中,你可以通過隨後對每個輸出應用一次反向傳播迭代來實現,直到你希望獲得收斂。爲了以合理的方式做到這一點,你可能必須以適當的方式擴大你的反應(否則,一個輸出可能會支配其他輸出)。

如此反覆,這裏是三個輸出的基本步驟:

  1. 單獨訓練套入三組,每個一種具有一個響應。標準化每套。

  2. 將一個反向傳播迭代應用到第一個數據集,然後一個到第二個,最後一個到第三個數據集。對於每一個,使用相同的輸入圖層權重。

  3. 重複2.直到收斂(--however你定義它。應該類似於一維輸出過程。)​​

然而,如所提到的,這僅僅是一種可能性出的種類繁多的優化方法。


編輯:上面是簡單的一維反傳過程的擴展。這裏的自由度是

(i)輸入被處理的順序和誤差項被計算,並且(ii)當隱藏神經元被更新時。

上述變體的數據爲[x_1, ..., x_N, y_1, ..., y_N, z_1, ..., z_N],並在每個步驟後更新(此更新方案通常稱爲Gauss-Seidel)。另一個極端是存儲錯誤條款,並在完整集合處理後僅更新一次。 (Gauss-Seidel版本通常會更快一點)。

另一個可能與標準反向傳播最相似的變體是處理每個數據點的三個維度,即[x_1, y_1, z_1, ..., x_N, y_N, z_N],並且在每個數據點之後(即在每個第三次迭代之後)更新。實際上,可以進行一次三維梯度更新(由於梯度的線性特性,可以將其更改爲三次一維誤差評估)。

總結一下,可以看到有很多種可能的優化方案,它們都非常相似,可能都會導致相似的結果。


作爲替代方案,也可以考慮使用極限學習機。在這裏,您只需要訓練輸出權重,而您隨機選擇輸入權重。由此,多響應案例自然地分爲三個一維優化問題。

+0

你能指出任何論文/代碼/博客文章等,這解釋了第二種方法?或者叫什麼名字?訓練的技巧。 – 2014-10-20 22:16:00

+0

不,我沒有提及上述內容(儘管它可能不應該很難找到),但它是後向傳播算法的直接擴展。但是,請注意,對於一個*真實*直接的擴展,您不應該連續地訓練每個維度,而是要爲每個數據點處理所有三個維度。由於反向傳播梯度的線性特性,三個一維更新等於一個三維更新。 – davidhigh 2014-10-20 22:47:32