為什麼GCN的訓練耗記憶體?

時間 2021-05-29 22:52:29

1樓:墨菲特先森

你問題的核心是訓練視訊記憶體的消耗,首先要明確GPU的視訊記憶體消耗的組成部分,主要由三部分組成訓練資料大小、模型引數、中間儲存變數(前向的中間值,反向的梯度等)。

在Skeleton-based Action Recognition的任務上,空域卷積實質是K組1*1卷積和矩陣相乘實現的。其中1*1的卷積用於特徵的提取;鄰接矩陣與特徵矩陣的相乘用於特徵的聚合即訊息的傳遞。

對於Skeleton-based的識別任務而言,CNN和GCN訓練資料是一樣的。GPU的消耗主要就體現在模型大小和中間變數上,而CNN和GCN兩個模型無法直接對比。

非要對比的話,就拿一層CNN和一層ST-GCN Block來簡單舉個例子。

CNN,其中模型引數和輸入特徵、輸出特徵以及對應的梯度需要消耗記憶體。

從上面簡單對比可以看出,CNN和GCN在視訊記憶體消耗上,GCN需要儲存的中間變數明顯更多,因此訓練時更消耗視訊記憶體。

2樓:HankGuo

圖神經網路分直推式和遞迴式兩種。

經典的gcn屬於直推式。這種模型直接用歸一化的鄰接矩陣或者說拉普拉斯矩陣與所有節點的特徵組成的矩陣相乘,這樣拉普拉斯矩陣的空間占用是n x n的。可以用稀疏矩陣優化,但是這樣的話關係越稠密記憶體消耗越大。

直推式一次前向計算會把所有節點都算出來。如果節點太多或者關係太多就不合適了,一般只用在小規模的圖上。

遞迴式的代表是graphsage。這種一般是用一種叫訊息傳遞機制的東西,不用矩陣乘法。如果知道前一層所有節點的輸出,就可以遍歷每個節點以及對應的鄰居依次計算出下一層的結果。

進一步的,遞迴式可以通過取樣出乙個小的子圖,使得取樣出來的子圖互相是鄰居,依次計算乙個個小圖來訓練。

不過遞迴式用了取樣,就意味著所有資料都要在記憶體裡,才能進行完整的取樣。如果資料規模進一步擴大,一般需要分布式的計算,用一台記憶體超大的機器做取樣,然後把取樣的子圖分發給有gpu的小記憶體的worker做訓練。

遞迴式有個問題是一般只能做兩層卷積,三層就有可能記憶體不夠。不過考慮到圖卷積網路有過平滑問題,即使通過一些手段做到更深的層收益也不大,也就沒有必要做大於兩層的卷積了。這個問題很容易理解,大部分網路是具有小世界屬性的,也就是說六度人脈理論,你的六階鄰居基本上包含了世界上所有的人。

遞迴式在取樣的時候需要考慮鄰居的依賴性,卷積的層數越大取樣出來的子圖就越大,超過三層子圖就可能會包含一半的原圖。

3樓:Assassin

GCN是直推式學習,需要把訓練集和驗證集同時進行載入,或者說他需要整個鄰接矩陣,而空域卷積就只需要知道節點的一階或二階鄰居就可以了,儲存也就小了。

耗 字為什麼讀 h o ?

青山先生 首先,形聲字不一定要同音,主要看主母音和韻尾。同源派生的時候陰陽入互轉,所以一些形聲字甚至韻尾也不相同。再說為什麼讀hao4,民眾都這麼讀,同時根據韻書也能推導出這個讀音,語委也就沒有理由不以此為標準音了。 msoeg 首先說一條業界共識 古今音不同,而且古代的語音不能拿現代漢語拼音去套,...

為什麼記憶體不叫運存?

起風了 可能有很多軍迷分不清為啥f22有時叫四代機有時叫五代機。因為美蘇國的飛機劃代標準不一樣。一代機二代機都沒啥問題,但之後的劃代出了點問題。美國f16f15算三代機,而蘇聯方面同級別的側位家族卻叫四代機。但到了後面,美中國人覺得吃虧。還是決定用毛子標準,把f22叫五代機了。就是個名字而已 已登出...

人為什麼樂於把時間糜耗在無用的事物上?

風後面是風 昨天看書看到了乙個對這個問題的闡述,我覺得很好來自 脆弱亦美好 因為這些無用的事在做起來是不會有壓力,不用像學習那樣必須要做出一道題,學會某個知識點,考到多少分,不會有心裡預期,必須要達到某種水平。而且,做那些事可以讓自己暫時逃離現實,進去另乙個世界,在那裡,整個人是放鬆的,就像我現在,...