進階最佳化
Lion 最佳化器(Lion optimizer)
幾乎所有在用的最佳化器都是研究者手工設計的;Lion(名字代表 EvoLved Sign Momentum,演化出的符號動量)卻是由一場在候選最佳化器程式上的符號程式搜尋自動發現的。搜尋找到的東西因為它的簡單與省記憶體而引人注目:Lion 只存一個動量緩衝,而它真正的權重更新就只是內插後動量的符號,於是每個座標都朝符號所指的方向移動相同的幅度。
每一步把更新算成「beta1 乘以舊動量、加上 (1 減 beta1) 乘以當前梯度」的逐元素符號,然後用第二個衰減 beta2 更新動量緩衝。因為取符號丟掉了大小資訊,每個參數的有效步伐是均勻的,很像帶符號的 SGD;作為交換,學習率必須設得大約小十倍、權重衰減大上數倍——相對於你給 AdamW 的值——因為現在衰減要和一個固定大小的更新競爭。
Lion 只保留 Adam 一半的最佳化器狀態,因為它沒有二階矩估計,這在大規模時很重要;而它在影像分類與語言模型預訓練上,與 AdamW 相當甚至更好。權衡是實在的:符號更新在小批次時可能不穩,而它的表現對於是否把重新縮放過的學習率與權重衰減調對非常敏感。
u_t = \operatorname{sign}\!\big(\beta_1 m_{t-1} + (1-\beta_1) g_t\big),\quad m_t = \beta_2 m_{t-1} + (1-\beta_2) g_t
更新是內插後動量的符號;只需儲存 m。
因為 Lion 每個座標的更新大小都是一致的,它自然地搭配解耦權重衰減(AdamW 風格):衰減是唯一真正會隨參數大小縮放的項。
又稱
另見