ざっくばらんメモ_17:自動パラメータチューニングの良し悪し

自動パラメータチューニングの良し悪し

kaggleなどでxgboostなどのチューニングを行うことを考えたとき、 何も考えずに広いパラメータグリッド内で最適化しようとすると 当然ながら非常に時間がかかる。

しかもそうしてやって得られた結果が割と大した改善にもなっていない事が多い。

そのためパラメータチューニングをする際にはある程度human in the loopをした 方がまだ効率的である。

つまり、序盤の事前知識がない状態においてはなるべく粗く、でも広くパラメータグリッドを取り、 まずはどのあたりのパラメータで性能が出そうか人手で当たりを付ける。

続いて当たりを付けたあたりのより狭い範囲で、しかしグリッドの粒度を上げた形で さらなる探索を行っていく形である。

だがこれはグリッドサーチに限った形で、例えばランダム探索やbayesian optimisationと比較した 場合にどちらが効率が良いかは気になる。

ざっくばらんメモ_15:kaggle, deepnetの特性解析, 既約性メモ

kaggle recruit

Recruit Restaurant Visitor Forcasting Challengeをスタート.

コード

レストランの将来訪問者数を予測するタスク.

分析はすでにやられていて参考になる

https://www.kaggle.com/headsortails/be-my-guest-recruit-restaurant-eda

ひとまずkernelにあるスターターを参考にxgboostを実装.

ー結果:0.516

sklearnのgridsearchCVで適当にパラメータをふってチューニングしたところ

ー結果:0.512

あまりうまくないので他のkernelのパラメータも参考にしつつ手動チューニングも 取り入れたところ

ー結果:0.500

でまあまあな感じに.

他にもlightgbmも試しに適用してみたところほぼデフォルトのパラメータで

ー結果:0.493

でxgboostよりも良い感じに.今回のタスクはlightgbmが相性が良い?

現在ランク:171/707

Failure of Gradient-Based Deep Learning

この論文を読んだ際に気になった事として, 最適化の収束速度,sample complexityなどの観点からdeep learningモデルの性能を改めて評価している点がある.

例えばEnd-to-Endモデルは複数に分解して別々に学習するよりもはるかに収束速度が遅くなるから 良くないなどとしている.

通常の論文などはとりあえず一般的の指標でSOTA出せばOKな風潮がだいぶ根付いてきたが, 改めて多面的な評価、あるいはモデルの特性の理解、の重要性を訴えている感じがする.

実用面だとただ性能が良いだけでは結局モデルの一側面でしかないので, モデルの特性解析を理論抜きでやるはめになり,イレギュラー対応など頻繁に発生して 保守が難しい面があると感じる.

irreducabilityとintegral domain

あるvariety Xが与えられた時、それが非ゼロでXそのものでない 二つのvariety X_1, X_2で表せる時,Xはreducibleと言い、 そうでない場合はirreducibleであるという。

Xがirreducibleな時のみにおいて、そのcoordinate ring Γ(X)は整域(integral domain)となる.

つまりXがreducibleな場合、X上に定義される非ゼロ関数が2つあって, その積がゼロ関数になるものが存在する.

例:Xはx2+y2=1の解集合とする.Γ(X)=C[x,y]/(x2+y2-1)なので、f=x-y, g=x+yとおけば これらはΓ(X)上でゼロ関数でないがfgはゼロ関数である.つまりΓ(X)は聖域でなくreducible.

ざっくばらんメモ_15:capsule network, model switchingとdomain adaptation

capsule net

最近急に話題になり始めたcapsule networkに関するHintonの講義を見た.

この新しいモデルの一つの動機として従来のconvnetはpooling処理があるせいで,同じ物体に関する様々な観点の特徴を捨てて代表値で代替してしまう事かある.

Capsule netはそれを回避する事が出来る.

これはautoencoderを用いたデータ再構成を考えた時に,従来のconvnetを使ったVAE的な やり方において,細かな復元が難しい問題へ対応可能かもしれないと考えた.

model switcingに基づいたdomain adaptation

最近のdomain adaptationの手法はGANの要領でdomainギャップに関する目的関数を学習して最適化する手法が berkeleyからよく出ている(例えばCyCADA).

ところでdomain adaptationの文脈ではtarget domainの教師情報が与えられていない想定が多いが, 最近は教師情報のコストが下がり始めたおかげかそういう場合は減ってきたように思う(domainごとに偏りはあるが).

なのでむしろどのdomainに対しても教師情報があって良いから状況に合わせて能動的にモデルをスイッチングできるような ネットワークがもっとあって良いように思えた.

最近だと制御分野で出始めているが,条件が色々限定されているのでまだ形式化されていないのかもしれない.

古典的にはswitching linear dynamics modelとか他にも色々あるが,最近のconvnet等でそれを効率よくやる方法は あるのだろうか(特に計算・メモリ効率的な意味で)

ざっくばらんメモ_13:kaggle, 教師コスト

kaggle seguro

code

objectiveを’reg:linear’に元に戻す.

少なくともパラメータ選択で性能向上する事を確認したい.

パラメータ選択の範囲が狭く局所解へ陥っているのかもしれない.

代わりにもう少し広い範囲でパラメータ検索を行ってみる.

また並行して別のモデルを追加していく.

まずはlightgdmを追加してxgboostとのensembleを適用.

結果:0.265でxgboost単体の0.269と比較して微減

教師あり学習のコストを低減したい

最近は主にdeep learning系の研究テーマの動機づけとして, 教師あり学習におけるデータ作成コストの低減が良くあげられるようになってきた.

例えば,deep learningのモデルは学習のため大量のラベル付きデータが必要, 複雑化していくタスクのためにデータ単位辺りのラベルコストも上昇している, 等である.

そのための方法として強化学習ではcuriosity driven search,教師ありでは Self-supervision,transfer learning,あるいはsimulationの利用などがある.

そうした結果はしかし従来のラベル付きデータによる教師あり学習を代替出来るには まだまだ遠く,現状は組み合わせて使う事で性能向上をサポートする事を可能に出来ると いったレベルである.

一方,人為的のろベル付きコストも削減され始めている.

これは単純にラベル付け会社が増えて競争が発生している事と,ノウハウが溜まって 効率化出来てきている事に起因している.

実用面では人為的なラベリングが圧倒的に単純なので, 今後,上記の教師あり学習コストの低減手法が実用化するまでの道のりは遠い.

しかしエッジケース,そもそも現実世界で集めにくいデータ,に完全にフォーカス すれば実用性は向上しそうである.

この場合人為的にデータを集めてラベル付けする事のコストが非常に高くなるからである. 例えば,自動車の安全機能のテストのため,事故データを大量に集める事は出来ないし, 集まったとしても詳細なデータは得辛い.

また曖昧なタスクは人手で定義するためのは難しいが,self-supervision, curiosity, 逆強化学習などを通して データから自然なタスク定義を導き出す事が出来れば非常に有用である.

ざっくばらんメモ_12:kaggle

###kaggle seguro

code

このサイトを参考に,xgboostのパラメータチューニングを引き続き行う.

一部修正を加えつつ,一通り通しでやってみたが,

結果LB0.269 -> 0.236へ下がってまう.

どこかでチューニングのやり方が間違っているように思える.

ひとまず公式の評価指標がNormalized Giniなのでそれに合わせてみる.

しかし結果のsubmissionが上手く行かず. エラーとしては出力のレンジが[0, 1]に収まっていないというもの.

たしかにobjectiveをlinear regeressionでの学習をしていた事に気づいた.

ここをobjectiveをlogitstic regressionに切り替えて利用.

しかし結果はLB0.131で通常のrmsエラーより半減してしまった.

ざっくばらんメモ_11:kaggle

kaggle seguro

code

まず基本のコンポーネントを実装する.

モデルは動作確認のためシンプルに xgboostを利用.

結果:LB0.269.ベースラインとしては妥当?

この後はハイパーパラメータチューニングを トライしてみる.

特に,パラメータ毎の感度解析的の事が出来ると良い.

ざっくばらんメモ_10:kaggle, 創造性について

kaggle zillow

code

zillowは今週末で提出期限.

Kernelに公開されている手法で二種類のxgboostとlightgbmを組み合わせる事 で好成績を叩き出している手法が存在しているので, これらを取り入れる事にする.

kernelで公開されている手法とパラメータをそのまま使ってみる。

結果0.0655292 -> 0.0649626で結構改善.

しかしkernelで公開されている手法より性能は低いままであった.

結局は,学習そのものよりも前処理やアンサンブルなどに問題があると思われる.

他の公開手法を見てみても普通にxgboostやlightgbm等を使っているだけで 0.064台を達成出来ているので,もう少し前処理やモデルの組み合わせ方の部分に気を配るべきであった.

またモデルの学習などにおいて,適切のハイパーパラメータが選ばられているとは言えず, 次以後は簡単で良いのでちゃんとパラメータ選択を行う事にする.

kaggle Porto Seguro

新たなkaggle challengeとしてPorto Seguro’s Safe Driver Prediction Challengeへ取り込む事とする.

今回は保険会社からのお題で,ドライバが次年に保険適用申請するか どうかを予測するというもの.

問題自体はシンプルだが,今回扱うデータは2値出力のラベルがかなり偏っている のどそれを念頭に入れる必要がある.

こうしたimbalanceデータに対しては例えばwieghted lossの適用や, Subsampling+boosting,exemplar learning的の手法などがある.

消費と創造の関係

何かを消費するたびに何かを知る事が出来る.

その知る事に付随した驚きや感動を覚える事で,それをまた期待 しさらなる消費によって,さらに知ろうとする.

しかし消費を続ける内に新たに知る事の絶対量は減っていき, 最終的に物足りなさを感じるようになる.

あるいは今まで知った事に基いて,これから知りたい事に対する興味の 方向性が決まってくると,消費される物がその方向性に対して 正確に最適化されていない事に気づき,ストレスを感じるようになる.

こうした状態に至ると初めて消費から創造へのシフトが起きる.

この時,創造の動機は自己の内へ向いている.

自分が本当に知りたい(消費したい)事は何かを探求し,それを創造する 過程で知る(消費する)事を達成する.

ここで創造されたものは,自己の興味に最適化しており,創造されたもの(消費されるもの) と自己の興味が接近し,理想的には一体化する.

これはまさに自己表現の形であると考えられる.

ただ上記した創造の動機は自己の内だけでなく外にも向いている場合が多く, その場合,社会的な承認欲求(あるいは自己超越?)などと組み合わさっている と思われる.