權重初始化(weight initialization)
/ wayt ih-nish-ul-ih-ZAY-shun /
權重初始化,是在任何學習開始之前,給網路的權重選定一組起始數值。既然訓練靠的是從權重一開始所在之處一步步地輕推它們,那麼起點就實實在在地要緊——就像在一片丘陵地貌上,你先落腳在哪裡,再向下走、奔向最低的山谷。落在一個糟糕的位置,你可能會卡住、慢得令人煎熬地下行,或者乾脆動都動不起來。初始化,就是明智地選定那個落腳點。
兩種天真的選法都會失敗。把每個權重都設成同一個值(比如全設為零)是致命的:相同的權重意味著一層裡的每個神經元算的都是完全一樣的東西、並永遠收到一樣的更新,於是網路再也無法打破這種對稱去分化——無論它有多大,它的表現都和單個神經元無異。所以權重必須從隨機且各不相同的值開始。但這種隨機的尺度很微妙:太大,信號會炸開(梯度爆炸);太小,信號會衰減消失(梯度消失)。無論哪一種,學習都會停滯。
解法是把隨機值縮放得恰到好處,按每個神經元有多少條連接來調,好讓信號在穿過各層時保持一個健康的大小。兩個著名的配方是 Xavier(又稱 Glorot)初始化,為 sigmoid 和 tanh 而設計,以及 He 初始化,為 ReLU 而設計。它們並不高深——不過是些合乎情理的縮放規則——但它們帶來了實實在在的不同,讓深層網路得以可靠地訓練,而換作草率的初始化,它們本會卡死在原地。這是一個小小的、事先要做的決定,卻對訓練究竟能不能成功有著超乎比例的影響。
把一個網路裡的每個權重都設為零再開始訓練:一層裡的每個神經元會永遠與它的鄰居一模一樣,網路什麼有用的東西都學不到。改用按 He 配方(適配 ReLU)縮放的細小隨機數來設權重,同一個網路便訓練得順順當當。唯一改變的,只是那組起始數值。
全零權重會凍住一個網路;縮放得當的隨機權重才讓它真正學得起來。
切勿把所有權重都初始化成同一個常數——一模一樣的神經元永遠無法分化(即「對稱性」問題)。規矩是:隨機且縮放得當;縮放的尺度應與你的激活函數相匹配(sigmoid/tanh 用 Xavier,ReLU 用 He)。