Faithful異分散回帰

一言でいうと: Faithful異分散回帰は、異分散ニューラル回帰で分散推定が平均学習を邪魔する問題を避けるために、平均用損失と分散用NLLの勾配経路を分離する学習設計である。

Faithful異分散回帰は、Faithful異分散回帰論文で定義された、異分散ニューラル回帰モデルの望ましい性質およびその実装法である。 異分散モデルから分散出力に不要な計算ノードを除いた mean-only baseline と比べて、平均推定のMSEが悪化しないことを faithfulness と呼ぶ。

提案手法は、平均をSSEで学習し、分散を stop-gradient 付きNLLで学習する。

この設計により、平均ヘッドと共有幹の更新は mean-only baseline をSSEで学習した場合と同一になる。 ここで はサンプリングではなく、観測値に対する正規分布の対数密度評価を意味する。 stop-gradientにより、このGaussian NLL項は平均ではなく主に分散ヘッドを学習するために使われる。 結果として、標準的な異分散NLLにある「平均誤差を分散増大で説明してしまい、平均学習が止まる」問題を避ける。

PyTorchでは、分散ヘッド自体ではなく、分散ヘッドへの入力とNLL内の平均を .detach() する。

import torch
 
z = model.trunk(x)
mu = model.mean_head(z)
 
mean_loss = 0.5 * (y - mu).pow(2)
 
logvar = model.logvar_head(z.detach())
var_loss = 0.5 * (logvar + (y - mu.detach()).pow(2) * torch.exp(-logvar))
 
loss = (mean_loss + var_loss).mean()

このとき、var_loss は分散ヘッドを更新するが、共有幹と平均ヘッドは更新しない。

注意点として、この保証は平均推定に関するものであり、分散推定の完全な真値回復や重尾ノイズへのロバスト性を直接保証するものではない。

Beta-NLLも平均学習を壊しにくくするためのNLL補正であるが、設計思想は異なる。 Beta-NLLはNLL全体を予測分散の 乗で重み付けし、平均勾配をNLLとMSEの中間に置く。 Faithful異分散回帰は平均損失をSSEとして固定し、分散NLLから平均ヘッドと共有幹への勾配を遮断する。

関連リンク