GitHub Repo
PyTorch 社群回報反雙曲函數梯度歸零,float16 輸入 256 即可觸發
10 月 24 日的 PyTorch 社群回報指出,asinh 與 acosh 在特定輸入下可能因中間運算溢位,回傳零梯度。回報附有重現程式與候選修補,但分析由 AI 協助產生,正式修復與影響範圍仍待確認。

PyTorch 儲存庫於 10 月 24 日出現數值穩定性回報:在 2.14.1 的 CPU eager 模式下,torch.asinh 與 torch.acosh 接收特定有限輸入時,前向結果仍正常,反向傳播卻得到零梯度。截至查核時,議題仍開啟,尚無正式修復版本。社群回報
回報提供的關鍵案例是 float16 輸入 256:兩個運算的梯度皆為零,將運算暫時提升為 float32 後,則得到約 0.00390625。作者將原因指向導數公式先計算輸入平方,再求平方根倒數;256 的平方超出 float16 範圍,即使最終梯度本身可以表示,途中溢位仍會抹去結果。重現與分析
這種誤差可能沿計算圖放大。回報以 asinh(256 * u)、u=1 示範,對 u 原應約為一的梯度也變成零。對自行使用半精度張量、且把這類函數放入可微分轉換的工程師而言,這意味著僅檢查前向輸出是否有限,可能漏掉訓練訊號中斷。組合運算案例
官方數值精度文件原已說明:輸入及最終答案可由資料型別表示,不代表中間步驟不會溢位;不同後端也可能採取不同演算法。因此,這份回報較適合視為可改善的穩定性問題,不能直接推論所有半精度訓練都受影響。官方文件
作者提出以較高精度處理低精度中間值的候選修補,但回報明列分析、測試與修補由 Codex 協助準備;CUDA 與標準 AMP 行為尚未驗證。工程團隊可先對照局部 float32 運算前後的梯度,後續追蹤維護者確認、修補合併及跨裝置測試,再決定部署調整。驗證限制