隨時間反向傳播(backpropagation through time)
/ bak-prop-uh-GAY-shun throo tym /
隨時間反向傳播,是循環神經網路——那種一步一步讀句子、股價之類序列的網路——從自己的錯誤中學習的方式。循環網路在每一個時間步都重複使用同一套權重,一邊走一邊把一份記憶向前帶。訣竅在於在腦中把這個循環「展開」成一條長鏈,每個時間步對應網路的一個副本,再沿著整條鏈往回跑一遍普通的反向傳播。
具體來說,網路先把序列向前處理一遍,在末尾(或每一步)產出一個輸出和一個損失。然後誤差不僅要在層與層之間往回傳,還要沿著時間往回傳,從最後一步一路回到第一步,好讓末尾的誤差能正確地「歸咎」於許多步之前就起了作用的那些權重。由於每一步用的都是同一套權重,它們各自的貢獻要在所有時間步上累加起來,才得到最終的調整量。
老實說,麻煩在於長鏈很脆弱。當誤差信號沿著許多步往回走時,它要麼傾向於衰減到幾近於無(梯度消失問題,於是網路學不到長程的依賴),要麼爆炸開來(梯度爆炸,訓練就失穩)。這正是為什麼普通循環網路在長序列上舉步維艱,為什麼 LSTM、GRU 這類架構被發明出來以保住信號,也為什麼人們常用「截斷式」隨時間反向傳播——只展開有限的一段步數,好讓訓練還跑得動。
一個網路要預測「我在法國長大……所以我能說一口流利的 ___」這句話的最後一個詞。線索「法國」在許多個詞之前。隨時間反向傳播必須把「猜錯了」這個誤差一路帶回到讀到「法國」的那一步——可在這麼長的跨度上,信號往往就消失了,這正是 LSTM 被造出來要解決的那個弱點。
誤差必須穿越時間往回走——而在長長的間隔上,它會漸漸淡去。
隨時間反向傳播並不是一種新演算法——它就是把普通反向傳播用在一個沿時間展開的網路上。它在實踐中的侷限(長序列上的梯度消失/爆炸),正是梯度裁剪、LSTM 和截斷之所以存在的原因。