2009-12-02 40 views
7

對於我的大學項目,我創建了一個神經網絡,可以將信用卡交易欺詐的可能性分類。我正在訓練反向傳播。我正在用Java寫這篇文章。我想申請多線程,因爲我的電腦是一個四核i7。它讓我錯過了幾個小時的訓練,並看到我的核心大部分空閒。如何將多線程應用於反向傳播神經網絡訓練?

但是,我將如何應用多線程反向傳播? Backprop通過網絡向後調整錯誤來工作。一層必須先完成,另一層才能繼續。有什麼方法可以修改我的程序以執行多核背景嗎?

回答

10

首先不要使用反向傳播。那裏有很多其他的選擇。我會建議嘗試RPROP(彈性傳播)。它不會對你的反向傳播算法做很大的修改。你不需要指定學習速度或動量。它幾乎就好像你對神經網絡中的每個連接都有一個單獨的,可變的學習速率。

至於應用多線程反向傳播。我剛寫了一篇關於這個話題的文章。

http://www.heatonresearch.com/encog/mprop/compare.html

基本上我創建多個線程和瓜分訓練數據,以便每個線程具有接近相等的量。我正在計算每個線程中的漸變,並在減少步驟中對它們進行求和。如何將梯度應用於權重取決於所使用的傳播訓練算法,但是權重更新在關鍵部分中完成。

如果您擁有比權重多得多的訓練樣本,則代碼在臨界截面重量更新上花費的時間比多線程梯度計算要多得多。

我在上面的鏈接中提供了一些性能結果。它的確會加快速度!

+1

你如何合併權重?什麼'合併'在這裏意味着,你將它們全部添加? – PeeS

+0

重量不合並。我正在計算每個線程中的漸變,並在減少步驟中對它們進行求和。如何將梯度應用於權重取決於所使用的傳播訓練算法,但是權重更新在關鍵部分中完成。當你的訓練樣本比權重多得多時,代碼花費在多線程梯度計算上的時間比臨界截面權重更新要多得多。 – JeffHeaton

+1

您的鏈接提供了「找不到頁面」。 –

0

對於使用與Java更多的CPU內核你可以嘗試JVM更多的選擇不改變代碼:

  • -server
  • -d64
  • -XX:-UseParallelGC

和其他選項http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

+3

這些選項可以加快執行速度,但它們不會使您的算法並行...如果您想使用多個內核來執行算法,則必須對其進行修改。 – paradigmatic

+0

是的。明顯。當您在Java中嘗試任何並行時,此選項只是最低限度需要的選項。 – 2009-12-02 13:12:26