神經網絡模型拆分


神經網絡模型拆分

針對神經網絡的模型並行方法有:橫向按層划分、縱向跨層划分和模型隨機划分

橫向按層划分

將神經網絡每兩層間的連邊參數、激活函數值和誤差傳播值存儲於一個工作結點。前饋時,每一個節點要先向前一個結點索要一層的數據,經過自身的計算后,再把數據存到自身的末層上,供下一層發出索要數據的申請。后饋時,每個結點要先向后一層發出申請,索要后一層傳下來的誤差,經過訓練后將誤差保存在自身結點的首層,供前一個結點索要誤差值。

縱向跨層划分

把每一層的參數均等地划成若干份,每個結點存一份,相當於每個結點存了一整個神經網絡。每個結點除了存自己那一部分神經元的數據以外,還要存指向該神經元的邊。當訓練或推導時,若需要其他神經元的值(推導時),則需要向其他節點發出索要數據的申請;若需要將誤差傳給其他神經元(訓練時),則需要向其他節點發出寫入誤差的申請。

模型隨機划分

每個結點存一個骨架網絡,各個工作結點互相通信的時候,會隨機傳輸一些屬於非骨架網絡的神經元參數,從而起到探索原網絡全局拓撲結構的作用。骨架網絡的選擇是周期性更新的,對全局拓撲結構的探索也是動態的。
對於模型隨機拆分的方式見下方論文
A Multi-Agent System for Communication-Efficient Distributed Deep Learning
對於骨架網絡的選擇:
整個神經網絡保存在一個服務器上,首先服務器會先選出一個骨架網絡。對於神經元的選擇,每一層選擇(a-b)%個神經元,所有神經元按照其所發出的邊上值的絕對值的和,貪心選出前(a-b)%個,再對每一個結點隨機選擇所有神經元的b%個神經元(這些神經元不屬於之前所選的那些),這些被選中的神經元及其相應的邊共同構成了每一個結點的骨架網絡。每一個節點上的骨架網絡做訓練后,會得到誤差值。對一個結點而言,所有誤差值,會先選出|邊值|+|誤差值|最大的前(a-b)%個誤差值,再隨機選擇b%不屬於他們的誤差值,傳回服務器。服務器將所有結點的誤差值匯總,做更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM