まんぼう日記

takataka's diary

MNIST の Logistic Regression

細々した仕事を片付けて,さあ試験の採点を,と思ったら猛烈な眠気が….お昼に1.5倍のカップ麺とか食べたせい…か?…ねむ….ああ,朝ごはん,昨夜の残りの水炊き…あれのせいも?…むにゃ.朝から鍋て,むちゃくちゃですな…ぐぅ.まあこんな調子やったので,答案をソートしただけであきらめて小一時間休憩.それでもすっきりせえへんので,少しでもテンションあがる仕事をしよーと,

のつづきをば.

 

またランニングの話のおまけつき (^^;

 

はい,プログラムはこんなんです.mnist0117.py と logreg0122.py は,上記リンク先にあります. Pylearn2 の tutorial でお勉強 - まんぼう日記 で動かしてみた Pylearn2 の Softmax Regression (Logistic Regressionのこと)のサンプルと同様に,MNIST の学習データ6万個のうち前5万個を実際の学習に使い,残り1万個を汎化誤差の見積もり用の検査データとして使います.Pylearn2 の方は,検査データでの誤差を指標に学習を途中で止めるとかそういう工夫をしてますが,こちらは単に10 epoch毎に誤識別率を表示するだけ.

 

それから,学習アルゴリズムは stochastic gradient ascent です.上記5万個をランダムにbatchsize個ずつのサブセットに分けて,それら毎にパラメータの更新を行ないます.

 

batchsize = 1000 での結果の一例:

# NL = 50000 NV = 10000 D = 784 K = 10
0 -0.46610637176 11.954 10.43
10 -0.307433162585 8.614 8.02
20 -0.286678682516 7.944 7.73
30 -0.276393004128 7.66 7.53
40 -0.270021740208 7.528 7.37
50 -0.265266230705 7.372 7.32
60 -0.261824779582 7.29 7.21
70 -0.259333379826 7.258 7.13
80 -0.257009173027 7.09 7.11
90 -0.255033262996 7.104 7.13     左から,学習epoch数,対数尤度の平均,
100 -0.25299256585 7.066 7.04       学習データの誤識別率,検査データの同
# NT = 10000
100 7.066 7.04 7.52               右端がテストデータ1万個の誤識別率

Pylearn2のサンプルでは14epochでテスト誤識別率7.55%と言ってますが,こっちと違ってあっちは直線探索とかしてるおかげでepoch数が少なくてすんでるだけのはずです.上記の例も含めてseedだけ変えて3回動かしてみたら,テスト誤識別率は 7.52%, 7.56%, 7.51% でした.

 

ついでに,batchsize を変えた実験もやってみました.batchsize = 10000 の場合,8.19%, 8.14%, 8.19%,batchsize = NL(5万個全部で1バッチ)の場合,9.75%, 9.71%, 9.95%.全学習データの対数尤度を最大化する標準的な gradient ascent より,ランダムに選んだ一部のサンプルでの最大化を繰り返す stochastic gradient ascent の方がよいという結果になりました.が,前回書いたように,ここで使ってる logreg0122.py では

データ数 N で割った値で動くようになってます

ので,細かいバッチに分けてると学習定数 eta を大きくしたのと似た効果が出てしまいます.そのせいだけかもしれへんので,試しに batchsize = NL で eta を 50倍してみると…振動してうまく収束しなくなりました.ちうわけで,やぱし stochastic gradient ascent の方がよさげですね.

 

まあ,慣性項入れろとか,Hessian 使えとか,いろいろつっこみポイントありますが,この実験はそこがんばるとこちゃうから.そもそも Pylearn2 の convolutional net が遅いので,Theano 使うか全部自分で作るかしょー,ちう話が発端やし( cf. Pylearn2 の tutorial でお勉強 - 5時間目 - まんぼう日記 ).だから,次は Theano で logistic regression 書くか,自前で隠れ層追加するか,どっちかかな.

 

おっと,それより先に,試験の採点とか,卒論の審査とか,あれとか済ませなあかんのでした.

 

で.今朝また走って記録更新しました(前回の記録更新: Logistic Regression してみる - まんぼう日記 ).

6.15km, 33分57秒, 5:31min/km (10.87km/h)

https://www.runtastic.com/ja/users/takashi-takahashi-13/sport-sessions/386494354

  • 3mi最速 26:33
  • 5km最速 27:32

f:id:takatakamanbou:20150127214524p:plain

 はじめて信号待ち以外ずっと走り続けることができました.たぶん.それでも前回とちょっとしか変わりませんな.記録更新もそろそろ頭打ちかも.