tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニートがデータ分析諸々書いてます

NIPS2017読み会@クックパッドでLightGBMの論文紹介してきた(全発表資料リンク付き)

こんにちは

今日はNIPS2017読み会@クックパッドでLightGBMの論文紹介してきたのでブログにします。

cookpad.connpass.com

Twitterで既に告知しましたがブログに残しておかないと埋もれるのでこちらにも置いておきます

今回は急遽前日に発表が空いたのでニート力を活用して発表して来ました。ノリと勢いで行動出来るのはニートの特権

そして懇親会はなんとクックパッドさんの方の手作りという流石のクオリティでした。

f:id:tkm2261:20180127181715j:plain

ドリンクはNVIDIAさんの提供でなんと無料で懇親会に参加させて頂きました。ありがとうございました!

他の方の発表資料

www.slideshare.net

nishibaさん
https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/46346.pdf

ニートなので人と会話する機会は貴重なので、勉強会など誘って頂けると嬉しいです。

業務メール書き方チートシート

お久しぶりです。

今日は技術的な話題では無いですが、社外・社内にメールを出す時のテンプレ的なものを紹介したいと思います。

初めに言いますが、クッッソどうでも良い話題です。面接のスーツに何を着るかぐらいどうでも良い話です。

ただ、学生だと志望会社にメールを出すときに変に文面悩んだり、エンジニアだと社外にメール出す経験があまり無くて変に文面悩んだりとか、ここで悩むのは更に無駄なので、

ニートという身軽な身分のうちに、日本の会社で大体OKっぽいメールの書き方を適当に紹介します。

アホらしいですがメールの行間から仕事慣れてない感がでるとマイナス印象になったりもするので、それっぽいメールの書き方は知っておいて良いかもしれません。

自分もコンサルの新卒の時にいきなりクライアントにメールするのは怖かった記憶があるので、自分が学生の時に知りたかった内容的なのを書いておきます

業務メール書き方チートシート

f:id:tkm2261:20180109180946p:plain

解説

1. To

基本的にメールを見て欲しい人はToにする。MTGした時の参加者とかはToに基本入れとく。

人によってはToで来たメールしか見ないので注意。

一方、情報共有レベルの人はToから外してあげるとメールチェックの手間が省けるので、送る前にToにするかccにするかを吟味してあげると喜ばれる。

2. Cc

情報共有レベルの人はccにする。

業務メールは基本「全員に返信」で運用されます。新卒時に普通の返信にして連絡がいってなくて怒られるのは誰もが通る道

ccが増えて行くと、新卒とかは『自分fromで知らない人に送らない方がよいかな・・・』と思って外したりする事がありますが、基本一度スレッドに入った人には「全員に返信」でccで送る。

「俺連絡もらってないよ?」とか後で言われたりすると面倒ですし。

3. Bcc

基本使いませんが、先方への重要な連絡の時とかに直属の上司をいれて報連相として使うとデキる後輩アピールが出来たりします。

4. 件名

基本的に働いてると、複数プロジェクトに関わるので何の話題かを【】に入れて書いておいた方がよいです。

もし先方にアクションして貰う必要があったら【要ご対応】とかを付けてもよいです。

丁寧でない表現と感じるかもしれませんが、偉い人ほど大量にメールを受信するので、むしろ書いてあると喜ばれます。

メールは埋もれるものなので、タイトルで分かるのが重要

5. 先方氏名

1行目に自分の名前があるかで読む読まないを決める人もいるので、読んで欲しい人の名前はしっかり書きましょう

社内であれ、社外であれ敬称は『さん』で基本OKです。

相当フォーマルなメールは別ですが、よそよそしさが出るので一度会って話したなら『さん』で良いでしょう。受発注関係や役職の差は身分の差ではないですし。

人数が多い場合は『各位』や『関係各位』でもokです。ただ社外向けには余り使わない

会社名に敬称はいりません。

追記:

結構先方敬称『さん』は問題だとの指摘がありましたが、確かにこの辺りの距離感は難しいので、各自適宜状況を考えて使って下さい。ただ敬語学の議論は面倒なので、フォーマルなメールの書き方はネットにいっぱい転がってるのでそちらに任せます。

6. 社外『お世話になっております。』社内『お疲れ様です。』

どの会社ともメールしても、このフォーマットになっているので、業務メールっぽくなるので使うと良いです。

書き出しで悩んでも仕方ないので、使っておくと無難です。

7. 適当なお礼1行

面接やMTGのお礼は忘れたり、あんまりやり過ぎると慇懃すぎるので文頭1行に書く癖をつける。

たまに腸煮えくり返って怒りのメールをすることありますが、怒ってる相手にお礼を書くと冷静になれたりするので習慣づけると役立つ場面もある。

8. メール本文

簡潔に書く

9. 最強締めワード『よろしくお願いします。』

多少文章の繋がりが不自然でも『よろしくお願いします。』で締めておけばなんとかなる。

文章で悩むぐらいなら『よろしくお願いします。』で締めてサッサと送ってしまったほうが良い。

10. 最後に名前と署名

慣習なので入れておく。

署名あるとそれっぽい業務メール感が増すので入れておく。メーラーの設定で自動で挿入できます。

会社の場合は指定があったりするので、先輩のをパクっておくと無難です。

なんでも良いですが、1例はこんな感じ

-------------
山田 太郎 (Yamada, Taro)
Tel: xxx-xxxx-xxxx
Mail: xxx@xxx.co.jp

こんな感じに自分の業務メールフォーマットを作っておくと、脳みそ使わずにメールをさばけるので楽です。

適当に書いてみるとこんな感じになります。

aaaさん、bbbさん

お世話になっております、◯◯の山田太郎です。
先日はMTG頂きありがとうございました。

MTGにてこちらの宿題となっていた、11/15~11/30のデータをご共有する件ですが、
本メールにて送付させて頂きます。

ご確認のほど、よろしくお願いします。

山田

-------------
山田 太郎 (Yamada, Taro)
Tel: xxx-xxxx-xxxx
Mail: xxx@xxx.co.jp

NIPS2017 タイトル&概要訳 一覧を作った

ブログに書いておかないと忘れるのでこちらにも

NIPS2017 タイトル&概要訳 一覧 - Google スプレッドシート

Kaggle Tokyo Meetup #3 開催レポート

こんにちは。tkm2261です。

今日は10/28に開催したKaggle Tokyo Meetup #3の模様をレポートします。

connpass.com

このmeetupは@threecourseさんや@smlyさんが2年前ぐらいから始めて不定期で開催しており、

私もニートの有り余る労働力を活かして今回運営をして来ました。

開始前

今回はsmlyさんの勤め先であるアドバンステクノロジーラボさんに会場をお借りすることが出来ました。

渋谷の超良いところにあって、美術館の上という超良いところのオフィスでした。

今回、Youtubeのチャネル登録者数が100人を超えたのでライブストリーミングスマホで出来るようになったのですが、配信に耐えられる回線がなかったため今回は見送りました。次回以降考えます。

挨拶と自己紹介

threecourseさんがTokyowebminingからもろパクリしたスライドで開始

いつもはネタですが、今回は裏開催だったため喧嘩売ってる感じになってますが、向こうとも仲良いので大丈夫ですw

f:id:tkm2261:20171028133452j:plain

自己紹介は数が多いので紹介することは出来ませんが、meetup参加条件がKaggleで最低1 submitだったからか、コンペ上位者等レベルの高い人が散見されました。

運営入れて40人弱でmeetupはスタート

発表① ONODERAさん『Instacart 2nd Place Solution』

www.slideshare.net

最初の発表はONODERA(@0verfit)さんによる、Instacartコンペ2位の発表でした。

概要としては

  • いつも買ってるコーラを買ってない時はダイエットコーラ買ってるなどの特徴を捉えたかった
  • 1位の人は過去のその商品の購買有無を0-1にして、数字として特徴にいれていた。これはやるべきだった
  • 予測値を確率として解釈するのは無理があるが、良い案がなかったため特徴の作り込みで対処した
  • 商品購買予測モデルと購買有無(None予測)モデルを2つ作って精度がかなりあがった

ONODERAさんはKaggle公式ブログやgitリポジトリも公開しているので気になる方はそちらもどうぞ。

Instacart Market Basket Analysis, Winner’s Interview: 2nd place, Kazuki Onodera | No Free Hunch

GitHub - KazukiOnodera/Instacart: 2nd place solution

Prize Winnerの話が生で聞けるのは貴重な経験でした。ONODERAさんありがとうございました!

発表② Jackさん『Santander Product RecommendationのアプローチとXGBoostの小ネタ』

speakerdeck.com

二人目は大阪からお越し頂いた、Jackさんです。長く私にとって謎の人で凄いお会い出来て良かったです。

Twitterを始めてくれて助かりました。

内容はSantanderコンペとXGBoostの概要の2本立てでした。

非常に資料がわかりやすいので見て頂ければと思いますが、Kagglerにとって有益な知見の塊でした。

  • Santanderコンペでの商品特徴をみて直近データと去年同月のどちらで学習するかを見つけられた
  • ラップトップのみで分析したので、データをローリングして学習、最後に幾何平均をとった
    • 直近重み付けとかも試したが、幾何平均が最も良かった
  • カテゴリカル変数をtarget平均で置き換える手法をとった
    • targe-based encodingと呼ばれて最近知られてきた
    • 単にやるとoverfitするのでCVのvalidationデータで特徴を作る
    • CVの切り方は特に気にしなかったが上手く言った
  • XGBoost概要はデータサイズやcolsambleを動かした時の結果への影響度やXGBoostアルゴリズムの概要を説明
    • (XGBoost使う人は一度見ておく事を強く推奨します)

途中電源が切れてLTにも回ってもらったりもしましたが、発表ありがとうございました!

発表③ mamas16kさん『画像認識コンペ(UNIQLO)にdeep learning以外の手法で殴りこんでみた』

speakerdeck.com

お次は、なんと若干学部3年生のmamas16kさんにUNIQULOコンペについて発表頂きました。

UNIQULOコンペ3位のthreecourseさんに面白いアプローチの人がいたと紹介頂き、今回知り合うことができました。

内容としては色を当てるコンペなのでひたすら色空間(RGB、HSV等)の3次元空間から特徴を如何に作るかという話で、

猫も杓子もDNNの中で良い着眼点だと思いました。Kaggleの衛星画像(DSTL)コンペでも色空間情報は有効だったらしく、頭の片隅に置いておくとコンペでも有効な場面がありそうです。

また、Probability Calibrationにも力を入れたと言っていました。

これはXGBoostなどのモデルが出す確率(スコア)は確率として解釈できない場合が多く、(というか普通できない。)

Probability Calibrationはどうにかスコアを実際の確率に近くする事を目指す手法です。

個人的にはLogistic Regressionは『訓練データの頻度=訓練データ予測値の和』となるので、こういう時はLogistic Regressionをかけてましたが、

Probability Calibrationという名前がついて一分野になっていることは知らず、非常に学びが多い発表でした。

1.16. Probability calibration — scikit-learn 0.19.1 documentation

学部2年でコレは末恐ろしく、また成果が出た折に発表をお願いしたいです。

ありがとうございました!

発表④ lyakaapさん『Carvana 3rd Place Solution』

※スライドは後ほど

※スライド来ました!

speakerdeck.com

最後の発表者はCarvanaコンペ③位のlyakaapさんです。

こちらはCarvanaコンペ後にKaggler Slackに降臨した折に、発表をお願いすることが出来ました。

こちらも学部4年生の方でした。発表者の半分が学部生とは、日本の将来に期待が持てそうです。

内容はスライドが来てからですが。

  • 領域検知はU-NETが最強
  • Dilated Convolutionを底の層に入れたのが聞いた。
  • Psedo-Labelingで学習データを増やした
  • 今回タスクとしては検知し易いものだったので、Psedo-Labelがそのまま信用できた
  • Psedo-Labelingと訓練データの割合や、解像度の違いでアンサンブルをした。
  • 1モデルを作るのに、学習に2日、予測に6時間かかった。

スライドの作りも非常に丁寧でわかりやすく、発表も落ち着いており、学部4年とは思えない風格でした。

今Smlyさんとコンペに一緒に出てるらしく、若いKagglerの台頭をまざまざと感じたmeetupでした。

こういう方々を見ると、日本の将来は実は明るいんでは無いかと思います。

LT

懇親会

そのまま会場で、ビールと大阪王将のデリバリで懇親会をしました。

1人1,000円は集めすぎかも。。。と危惧しましたが、フタを開けると追加で買い出ししてほぼ使い切りました

運営としては変に余るより会計が楽ですが、予想以上に食って飲みました。笑

要因としては皆若く男だけだったのと、議論の質が高く盛り上がったことかなぁと思っております。

何度か勉強会には参加したり主催したりしてますが、今回はトップクラスの楽しさでした。

TwitterのTLでも同様のコメントが見られたので、また次回開催していきたいです。

最後に

今回は参加頂きありがとうございました!

非常に双方向の議論で楽しかったです。あと運営がグダりながらも上手く進行出来たのは皆様のおかげです。

次回についても開催を予定していますが、基本的に発表者はコンペ(Kaggle問わず)上位を想定しているので連続開催とは行かなそうです。

なので皆さんが上位入賞した時がMeetup開催時期なんので、良い成績をとったらTwitterかSlackでドヤって下さい!

すぐスカウトに行きます!

その代わりといってはアレですが、LTは比較的何でもOKにしようと思ってるので、何か調べたとか新しい手法Kaggleで試したとかも絶賛募集中です。

何かあれば、TwitterかSlackまでお願いします!

Kaggle入門動画をつくった

皆様こんにちわ

今回はKaggle入門動画作ったので、その事について書いていきます。

Twitterでも告知したし、ブログは良いかなーと思ってたのですが、

英語の翻訳タイトルつけると、Googleが日本語でインデックスしてくれない事に気づき、ブログにも投稿することにしました。

良ければ見てみて下さい。

Kaggle入門 Porto Seguroコンペ

www.youtube.com

規約的に怪しかったので、Kaggleにも問い合わせてOK貰ってます。

https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/discussion/41562#233452

英語での議論はここでやってます。

引き続きニートなので、Youtuberとしてお金入ってくると嬉しいですが、まあ現実は厳しいでしょうね。

内容目次

内容としてはこんな感じになってます。気になるところがあったら視聴してみて下さい。

  • Kaggleについて
  • Porto Seguroコンペについて
  • GCP立ち上げ(アカウント作ると付いてくる$300クーポン使用)
  • Bitbucketでgitリポジトリ作成
  • GCPの使い方
  • Ubuntuセットアップ
  • Anacondaセットアップ
  • Pythonコーディング (Pandas, scikit-learn, xgboost)
  • Gitの使い方
  • loggerの使い方
  • ロジスティック回帰
  • Cross Validation解説
  • Grid Search解説
  • xgboost解説
  • on hot encoding解説
  • Kaggleの提出方法
  • おまけ: 私の過去コンペのコードの解説

理研AIP主催Micheal Jordan先生最適化セミナー聴講メモ

お久しぶりです。

今日は10/20に参加した、理研AIPでのMicheal Jordan先生の講演のメモを書いていきたいと思います。

参加を許可頂いた理研AIPの方や司会の福水先生も良い会をありがとうございました。

Talk by Prof. Michael I. Jordan (University of California, Berkeley, USA) | 革新知能統合研究センター

In this post, I am writing about Prof. Micheal Jordan's speak at Riken AIP in Oct. 20th. If you have some problems about this post, please inform to @tkm2261 on Twitter.

いまはニートなので参加したセミナーの報告をする義務は全く無いのですが、やらないのもケツの座りが良くないので簡単なメモだけ書いていきます。

免責:私の拙いリスニング力に基づいて書かれているので、各自必要な箇所は調べて下さい。検索できるようにワードはなるべく残します。

間違っている箇所は積極的にコメントで教えて下さい

私の備忘のためでもあるので、不確かでも不確かなりに聴講すぐの時点のメモを残したいと思います。

タイトルと要約

webサイトの告知と異なり2つのトークを聞くことが出来ました。

  • Part I: Variational, Hamiltonian and Symplectic Perspectives on Acceleration
  • Part II: How to Escape Saddle Points Efficiently

両方共、連続最適化のお話です。

Part. I 要約

  • Nesterovの加速法を始めとした、加速法はBergman Lagrangianを考える事により微分方程式として統一的に議論できる
  • この時、全ての加速法は同じ経路を異なる時間で進んでいると解釈できる。
  • ただし、この解析は経路が連続(おそらくステップサイズが無限小取れる)時の議論で、これを単に離散化(discretization)した時は精度保証ができず、実験的にも不安定だった。
  • コレに対してSympletic integrationを用いて離散化した場合を解析する、Nesterovの加速法よりも速く、先行研究より安定したアルゴリズムが構築出来た?

最後の方は早くて少し聞き取れていません。

少し前の資料ですが、スライドはこれっぽい

https://www.sigmetrics.org/sigmetrics2017/MI_Jordan_sigmetrics2017.pdf

Part. II 要約

  • PCA、Tensor分解など、局所解に悩む場面は多い
  • これらの学習において、如何に鞍点を抜けるか、如何に効率よく鞍点を抜けるかが重要になってくる
  • GDやSGDでの鞍点に対する研究はいくつかある
    • GDは漸近的に局所解を抜ける?
    • GDが局所解を抜けるのに指数時間かかる場合がある。
    • SGDは鞍点を多項式時間で抜ける?
  • 彼らの研究はPerturbation Gradient Descent(PGD)がSecond Order Stationary Point(SOSP)に収束する事を示した。
  • (SOSPは、鞍点でなく停留点である度合いを2次まで考慮したものと思われ、First Order Stationary Pointへの収束を示した先行研究のよりも、より鞍点を避けて、より停留点と思われる点に収束できると思われる。)

おそらく↓が元ネタなので参照下さい。

[1703.00887] How to Escape Saddle Points Efficiently

講演メモ

初めに

  • 最適化とコンピュータ資源にはトレードオフがある

    • 凸緩和でのエラー
    • 並列実行でのエラー
    • 最適化オラクルの性能
    • community complexity?
    • subsampleing
  • 近年のデータ解析の分野でも重要な問題

  • アルゴリズムを開発するだけでなく、下界を得ることは様々な場面で有用。

Part I: Variational, Hamiltonian and Symplectic Perspectives on Acceleration

  • 加速勾配法はsublinearのオーダーで収束する

  • Nemirovski先生などが、90年台により優れた収束性を持つアルゴリズムはないかと研究。

  • 一般的にモーメント法として知られている

  • 加速法がどういった最適化オラクルにはいるのだろうか

  • まだまだ加速法はミステリアスで解析されていない。

  • 加速法の解釈にはいくつか研究がある

    • Chebyshev polynomial
    • Linear Coupling
    • etc...
  • しかし依然として謎があり、一体加速法の裏には何があるのだろうか?何故、一度下がって上がった方が収束が速いのだろうか?

  • 加速法を連続(continious time perspective)(恐らくステップサイズが無限小取れる)を考えると、Boyd先生の研究により微分方程式として定義できる。

  • Bregman Lagrangianを導入して、最適化問題をBergman Lagrangianの時間で積分した値の最小化として考える。

  • この時、全ての加速法は同じ経路を異なる時間で移動する手法と考える事ができる。(All accelerated methods are traveling the same curve in space-time at different speeds)

  • p=2のときはNesterovの加速法で、P=3のときはaccelerated cubic-regularized Newton’s methodになる。

  • ただこの解析は、連続の場合であり離散化(discretization)をする必要がある。

  • ただしそのまま離散化すると、収束性の理論保証がなく、経験的に不安定なアルゴリズムとなる。

  • そこでSympletic integrationを用いる。物理の分野では有名

  • (ただし、この手法においてはconverce vs quantitiesのトレードオフがあるらしく、スライド無いでは『Is it possible to find discretiztion whose solutions exactly conserve these same quantities? YES!!』と言っていたが、分かる方解説求む)

  • Bergman Hamiltonian上でSympletic integrationを考えるとNesterovの加速法よりも(実験的に)速いアルゴリズムが開発できた。

  • Gradient法と組み合わせると、より安定したアルゴリズムとなった。

Part II:How to Escape Saddle Points Efficiently

  • 悪い局所解はいつも問題である。

  • 如何に鞍点を抜けるか、如何に効率よく鞍点を抜けるかが重要である

  • GDやSGDでの鞍点に対する研究はいくつかある

    • GDは漸近的に局所解を抜ける?
    • GDが局所解を抜けるのに指数時間かかる場合がある。
    • SGDは鞍点を多項式時間で抜ける?
  • PCA、Tensor分解など、局所解に悩む場面は多い

  • 1980年にNesterovが勾配降下法(GD)がFirst Order Stationary Point(FOSP)に収束することを示した。

  • 本研究はPerturbation Gradient Descent(PGD)がSecond Order Stationary Point(SOSP)に収束する事を示した。

  • (FOSPやSOSPは鞍点でなく停留点である度合いを示していると思われ。Second orderだとより停留点っぽいところに収束できる事が示せると思われる)

  • 幾何学的な解釈をすると、高次元の場合、鞍点付近では取れる値の幅がとても薄くなる。(恐らく勾配がなだらかすぎて鞍点判別&抜け出すのが難しい事を言っていると思う。わかった方解説求む)

  • この薄さが問題を難しくしている。

  • 先行研究ではoverdamped Langevin diffusionを用いて収束に必要な反復回数がO(d/¥epsilon2)だったのに対し、本研究ではoverdamped Langevin diffusionを用いてO(¥sqrt(d)/¥epsilon)を達成した。(dは次元、イプシロンは目標精度)

Githubを整備した

Kaggleの汚いコードばっかなので、Bitbucketのコードを公開するのを躊躇ってたが、

このご時世githubにコードが上がっていないのもリスクなので諸々上げました