導出まとめあとがき問題意識ニューラルネットの出力は点推定になっていることがおおい。一時刻先の電力使用量を予測して、14.5[kW]使いますよ、といった出力が点推定である。点推定では重要な情報が抜け落ちる可能性がある。予測された電力使用量と実際の電力使用量を比較して異常な状態を検知したい問題を考えてみる。直感的には、予測と実測値が離れていれば異常と言える。どれぐらい離れていたら異常なのか、異常度はどれぐらいなのか等を判断するのは難しい。そこで確率分布が必要となる。値を予測する代わりに確率分布を推定できたら、実測した値を確率や尤度で異常かどうか評価できる。興味があるのは点ではなく分布である。今回はニューラルネットを用いつつも、分布を出力しようという試みである。データと今回の目的データこちらから取得した。Setこれは電力使用量のデータで15分ごとに記録されている。数日を抜き出してみるとこんな感じで周期的に上下していることがわかる。目的あるユーザーの一時刻先の電力使用量の分布を推定したい。入力は過去から現在までの電力使用量192点分(2日に相当)。出力は一時刻先の電力使用量の分布である。一時刻先の電力使用量の分布として正規分布を仮定した。正規分布のパラメーターは時刻に依存するものとした。このとき、ニューラルネットの出力は正規分布のパラメータであれば、正規分布を回帰できる。モデルRNNとしてGRUを採用し、ハイパーパラメータは適当に決めた以下のようなモデルを作成した。分散の代わりに精度パラメーターを用いている。model学習時及び推論時は下図のように、灰色の矩形を入力、1時刻後の分布(のパラメーター)を出力するようにした。コーディングできるように学習させるには、適切な損失関数を設定しなければいけない。詳細は後述するが、正規分布の負の対数尤度を取れば、損失関数は以下のようになる。これは自分で実装する必要がある。出力できるように学習してくれるはずだ。入力波形を1時刻ずつずらしながら、常に1時刻先の正規分布を推定した。テストデータで推論した結果を何枚か示す。推論結果の多くは下図のようになった。緑色の区間は約95%の予測区間を示す。次に、予測区間から外れている日に注目してみよう。すると、電力消費が急増したり(1枚目)、いつも電力が使われる時間帯に使われなかったりする日(2枚目)であることがわかる。損失関数の導出は正規分布の負の対数尤度を計算すれば導出できる。損失関数に定数項や定数倍は不要おわり!まとめ時系列の1時刻後の分布を推定したパラメーターが時間に依存する正規分布を仮定したニューラルネットが正規分布のパラメーターを学習できるように適切な損失関数を導入した2σ区間を予測区間に設定し、電力需要のデータを用いて実験。GitHubあとがき前にも似たような記事を書きました。平均と分散を推定するのに、別々のニューラルネットを個々に学習させました。分散は二乗誤差系列を導入することで推定しました。最尤推定のようなことは行っていません。aotamasaki.hatenablog.com損失関数を工夫して平均と分散を同時に推定しようと思考錯誤はしていたのですが、学習が安定せずに断念したという経緯があったのです。今朝、記事に的確なコメントがついていました。平均μと同時に分散σも推定するモデルを不当分散(heteroscedastic)モデルと呼ぶそうですよ。学習時の損失関数には対数尤度が使えます。分散σでなく精度βを使用するのは最適化対象のパラメータが分母にくると学習の安定性を損なうからです。これを読んだ瞬間ピンと来ました。その勢いでこの記事を書き上げた次第です。コメントをくださったshuheiさん、ありがとうございます。お問い合わせはてなブログをはじめよう!aotamasakiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。