2008/4/26 土曜日

libLBFGS 1.4 released

カテゴリー: News, Research — chokkan @ 1:18:27

libLBFGS (L-BFGS library) のバージョン1.4をリリースしました.変更点は以下の通りです.

  • OWL-QNルーチンのバグ修正
  • 直線探索アルゴリズムとしてMore&Thuenteの方法と,backtracking法を選べるようにした
  • configureスクリプトの追加
  • SSE2への透過的な対応
  • gccでのSSE/SSE2対応

OWL-QNルーチンのバグは,直線探索(line search)を行うときに,目的関数の勾配を適切に修正していなかった問題です.前々から,最大エントロピー法やロジスティック回帰モデルのL1正則化をlibLBFGSでやると,学習の早い段階にエラーが発生してしまう現象が発生していました.今回のリリースにより,目的関数の最小化がきちんと進むことを確認しています.なお,OWL-QNを無効にしている場合(つまり, lbfgs_parameter_t::orthantwise_c を0に設定している場合;デフォルト)は,このバグの影響を受けません.

オリジナルのL-BFGSのソースコードでは,直線探索法として, MoreとThuenteのアルゴリズムが実装されています.これに対し,L-BFGSのいくつかの実装では,backtracking法が用いられているようです.backtracking法は,ステップ幅1.0を初期値とし,ステップ幅を半分ずつ短くしていく方法です.このアルゴリズムは実装が簡単なのですが,ステップ幅を見つけるまでに,目的関数の評価を何回か繰り返すことがあります.CRFや最大エントロピー法では,目的関数,すなわち確率モデルの対数尤度の計算に時間がかかるので,backtracking法は学習時間という観点で,やや不利になります.

これに対し, MoreとThuenteのアルゴリズムは,目的関数の現在の探索点における値と勾配を用い,二次関数や三次関数で適切に補間を行うことで,効率よく勾配ステップを見つけるというものです.L-BFGS法自体は,理解してしまえば実装が簡単なのですが,MoreとThuenteのアルゴリズムは場合分けがやや複雑で,バグを出さないように実装するのは大変だと思います.今回のリリースでは,L-BFGS法の勉強のために,backtracking法とMoreとThuenteのアルゴリズムを切り替えられるようにしてみました.

ぼちぼちとlibLBFGSを利用するソフトウェアが出てきたので,autoconf/automakeでconfigureスクリプトを作り,簡単にビルドできるようにしました.make install をすると,ヘッダとライブラリ一式がインストールされます.単に別のソフトウェアから利用したいだけであれば,lbfgs.c, lbfgs.h, arithmetic_ansi.h だけを取り出して,一緒にビルドしてもOKです.

また,SSE/SSE2ルーチンの使い方が分からないというメールが寄せられたので, ./configure –enable-sse2 でSSE2ルーチンを有効にするようにしました(詳しくはREADME参照).このようにしてビルドされたlibLBFGSは,常にSSE2を利用するようになります.ただし,libLBFGSは,現在のCPUにおいてSSE2が利用できるかどうかチェックしないので,SSE2が利用できないCPUで不用意に動かすと,クラッシュしてしまうと思います. SSE2で得られる速度向上は10%弱なので,特別な理由がなければ,SSE2ルーチンは使わなくて良いと思います.ちなみに,SSE2ではなくSSEを使うと,すべての浮動小数点演算をdouble(64 bit)からfloat(32 bit)に変更しなければなりません.この場合,libLBFGSの演算精度のパラメータ(lbfgs_parameter_t::xtol)を調整する必要があり,エキスパートでないとSSEルーチンは使いこなせないと思います.

今までのlibLBFGSでは,SSE/SSE2を利用するときに,変数の数を8の倍数にする必要がありましたが,このバージョンでは,その制約が撤廃されました.また,SSE/SSE2では,変数の配列のアドレスを16でアライメントしなければならないので,そのための関数lbfgs_malloc/lbfgs_freeを追加しました.

コメントはまだありません »

コメントはまだありません。

このコメント欄の RSS フィード トラックバック URL

コメントをどうぞ

HTML convert time: 0.491 sec. Powered by WordPress ME