訓練生成對抗網絡的過程中,訓練gan的地方爲什麼這裏沒有detach,怎麼保證訓練生成器的時候不會改變判別器

在這裏插入圖片描述
答:

detach的作用是凍結梯度下降,無論是對於判別網絡還是生成網絡而言,我們更新的都是關於logD(G(z)),對於判別網絡而言,凍結G並不影響整體的梯度更新(就是內層函數看成是一個常數,不影響外層函數求梯度),但是反過來,如果凍結D,就沒有辦法完成梯度更新了。所以,我們在訓練生成器的時候沒用凍結D的梯度。所以,對於生成器而言,我們的確計算了D的梯度,但是我們沒有更新D的權重(只寫了optimizer_g.step),所以訓練生成器的時候也就不會改變判別器了。你可能會問,那既然如此,爲什麼訓練判別器的時候還要加上detach呢,這不是多此一舉嗎?

因爲我們凍結梯度下降,可以加快訓練速度,所以能用的地方就可以用一下,不是多此一舉。然後我們在訓練生成器的時候,因爲logD(G(z))的原因,凍結D的梯度根本就沒有辦法計算了,所以,這裏就不寫detach了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章