上圖是一個神經網路的正、反向過程,其中輸入層沒有畫進來,但是可以看到,在反向傳播的過程里,誤差傳到最後一層後依然可以繼續往上,傳給輸入層,輸入層接收到傳來的誤差之後,一樣可以使用梯度下降演算法來對輸入數據進行更新。
然後在網路中選擇一個中間層,分別將內容圖片,風格圖片,生成的隨機圖片作為輸入數據投入到網路中進行一遍forward過程,得到對應的激活值(也就是之前選的那一層的輸出值),分別記做 (簡寫為 )、 ( )、 ( )。接著定義兩個損失函數
最後按照梯度下降演算法(可以使用Adam)對生成圖片進行更新,以上有幾點需要注意的是:反向傳播的過程中沒有計算各層參數的梯度,生成圖片和風格圖片的激活值只需要計算一遍就可以了,一直反覆進行計算激活值更新梯度的是生成圖片。而且這裡只選定了一個中間層的輸出,所以直接可以把後面的層都截斷,將該層作為輸出層即可。