學習目標:條件要接在哪裡,由條件的形狀決定。而純量條件有一個和形狀無關的坑:把一個數字直接接成一個輸入座標,網路對它的高頻學不動——這正是前一節那個頻譜偏好,解法是先把它展成一組不同頻率的座標。右邊是另一件事:classifier-free guidance 的 null token 不是設計出來的,是訓練出來的,而它需要條件 dropout 才會被訓練到。
左=固定 t 時模型的輸出對真值 sin(2πx + 2πkt);右=訓練 MSE 對步數,三條線=純量/嵌入/寬兩倍的純量
c=0 與 c=1 兩類的輸出(第一個 seed),加上三個不同初始化各自的 null 輸出;灰虛線=兩類的真平均(=0)
觀察:k = 1 的時候三條曲線疊在一起(都在 4e-4 附近)——條件變化得夠慢,接法怎麼挑都無所謂。把 k 拉到 6,「純量」跳到 4.45e-1、「寬兩倍」3.49e-1,而「嵌入」還在 3.65e-4:差了三個數量級,而且加寬完全沒有用,所以這不是容量問題,是梯度下降在這個參數化下先學低頻。嵌入也不是萬靈丹:把 k 拉到 12 而 J 還停在 4 時,嵌入那條也爬到 6.1e-3(它的最高頻蓋不過 k 了),把 J 加到 8 才掉回 1.1e-4——嵌入要蓋得過條件的頻率才算數。下圖是另一件事:p = 0 的時候三個 seed 的 null 曲線完全散開(散佈 0.274),因為那個方向從來沒有收到過梯度,輸出純粹是初始化的產物;p 只要調到 0.06,散佈就掉到 0.028,三條線疊成一條。null token 的位置不是設計出來的,是訓練出來的。