ghmmにおける過学習の回避

ghmmで特徴ベクトルの次元数を大きくすると, BaumWelchアルゴリズムの結果がnanでいっぱいになってしまう. これは, 過学習が起こった際の数値的不安定さが原因と考えられる. (違うかも)

そこで, 出力分布の共分散行列を対角行列に制限することで, パラメーター数を減らしたい. この機能は存在するだろうと予想して, 「univariate ghmm」などでぐぐったが出ない・・・.
ひらめいたのが「ghmm diagonal covariance」というキーワードで, その結果たどりついたのが, このメーリングリストである.

要はconfigure時にオプションとして, 「--enable-gsl --enable-gsl-diagonal-hack」を追加して, makeすればよい. gslを使わなければ, オンに出来ないが, ちゃんとソースコードを読めばgslの使用も回避できそう.

これを使うと実際に過学習を回避することが出来た. ただし, 共分散行列の非対角成分は0にならず, その逆行列の非対角成分のみ0になる. まあ, 動くからいいけど, 気持ち悪い.

しかし, このgsl-diagonal-hackは本当にアドホックな解決っぽいなーw. プログラミングが面倒だから力技で解決してるように見えるw.