今日は AdaNet の話をしたいだけGoogle Cloud Next Extended 2019 ML Day@shuhei_fujiwara2019-06-041
View Slide
自己紹介藤原秀平 (FUJIWARA Shuhei)Twitter: @shuhei_fujiwara▶ 株式会社メルペイ所属▶ TensorFlow User Group Tokyo Organizer▶ Google Developer Expert (Machine Learning)▶ GCPUG Tokyo Staff▶ 今年は Google Cloud Next 行ってません2
とりあえず会場の雰囲気を知りたいGoogle Cloud Next 2019▶ 現地に行った人▶ 何かしら報告会に既に行った人Google Cloud Platform▶ 普段使ってる人3
目次NewsML APIsAI PlatformAutoMLAdaNet4
News
News既にあちこちで語り尽くされていますが...▶ Rename: Cloud ML Engine ==> AI Platform▶ 機能と新サービスの追加▶ ML APIs にいくつかの機能追加▶ AutoML の機能と新サービス追加▶ 細かいことはだいたいここでわかる▶https://cloud-ja.googleblog.com/2019/04/100-plus-announcements-from-google-cloud-next19.htmlNext 前後に出た重要度高そう (主観) なところだけ軽くおさらい5
ML APIs何気に待望の機能っぽいものが色々追加されてて話題になってないけど結構良い話では...?▶ Vision API▶Object detection▶ Natural Language API▶ カスタム辞書が使用可能に (これ欲しかったよね?)▶ 領収書や請求書の読み取りなどなど6
AI Platform (1/2)Next 以前からこっそり出てたものも含め色々整理された感じ▶ Training▶ 実は Docker image が使えるようになってた▶ Prediction▶ 実は scikit-learn と XGBoost のモデルもホストできるようになってた▶Custom prediction routine でわりと何でもアリになった▶ 若干 Cloud Run で良くね? という気がしてきたけど、どう住み分けるんだろ...?▶ Notebook▶ 実はあった7
AI Platform (2/2)▶ AI Hub▶TensorFlow Hub 用のモデル・ Kubeflow の pipeline、Jupyter Notebook とか諸々共有できる▶TF Hub 用のモデル置き場ができたのはまあまあ嬉しい▶Publish できる条件が謎 (企業アカウントじゃないとだめ?▶ Kubeflow▶Kubeflow on GKE をシュッと準備してくれるやつ▶ Data Labeling▶Google がラベリングしてくれる謎サービス (誰か使ってみてくれ...!▶AutoML のデータアップロードする画面と統合されてることを期待したがそんなことはなかった8
AutoML▶ 何かたくさん出てきたね▶ 僕の番が来る頃には全部語り尽くされてるんじゃないですかね...?9
AutoML Table▶ テーブルデータを渡すと学習から API の生成までやっておいてくれる▶ というのは皆聞き飽きてそう裏で動いてるアルゴリズム気になりません...?https://cloud.google.com/automl-tables/docs/features▶ Linear <== とりあえず最初にやるやつ▶ Feedforward deep neural network <== いつもの▶ Gradient Boosted Decision Tree <== いつもの▶ Ensembles of various model architectures <== 面倒臭いけどたまにやる▶ AdaNet <== 知らない子ですね...?10
AdaNet
AdaNetAutoML Table の裏で使われている (という噂の) 手法▶ Google AI Blog:▶https://ai.googleblog.com/2018/10/introducing-adanet-fast-and-flexible.html▶ ICML 2017▶http://proceedings.mlr.press/v70/cortes17a.html▶ TensorFlow implementation▶https://github.com/tensorflow/adanet11
The Goal of AdaNetFeed forward network よりも一般的なネットワーク構成の中から良いものを探す▶ 後ろの任意の層の任意のノードに対して辺を繋げる▶ もちろん全てのパターンを調べ切るのは不可能12
基本的なアイデア▶ 最初は小さいネットワークで普通に学習▶ 赤い矢印が学習対象の weightこの時点での loss (正則化項は省略)1mm∑i=1Φ (1 − yif1(xi))▶ yi ∈ {−1, +1}: label, Φ(·): loss function▶ f1(·): 1 反復目のモデルの出力InputOutput13
基本的なアイデア▶ 真の値と現時点でのモデルの output の差を予測するようなネットワークを継ぎ足す新しい subnetwork の出力を足し込むF(w, u) =1mm∑i=1Φ (1 − yif1(xi) − yiw · u(xi))▶ −yiw · u(xi): 赤い subnetwork の出力InputOutput14
Subnetwork のくっつけ方Subnetwork の候補以下の 2 種類を試して良かった方をくっつける:▶ 今のネットワークと同じ深さのもの▶ 今のネットワークより 1 段深いもの多少はハイパーパラメータもある▶ Subnetwork のノード数▶ 正則化周りの係数▶ etc...InputOutput15
Algorithm1. 2 種類の subnetwork を作る▶ 今と同じ深さのやつと 1 段深いやつ2. それぞれくっつけて学習させてみる3. より性能が良い方の subnetwork を採用する▶ 性能は正則化なども込みの目的関数で測る▶ 本当はこの部分に Rademacher complexity (の推定値) とかが隠れているので結構重要▶ 改善しなかったらアルゴリズム終了4. 1 へ戻る16
汎化誤差の上界 (おまけ)Theorem 1, Lemma 1, Lemma2, Corollary 1▶ すごく雑な言い方をすると、データを増やせば過学習が減ることを保証 (自明ではない)R(f) ≤ ^RS,ρ(f) + hoge√fuga#sample▶ f: このアルゴリズムで探索対象になる (ニューラルネット)▶ RS,ρ(f): 学習に使ったサンプル S に対する (マージン ρ での) 誤判別率▶ R(f): 母集団に対する誤判別率17
Experiments with CIFAR-10▶ 普通のニューラルネットや Logistic Regression と比べて高精度▶ Subnetwork のくっつけ方は工夫の余地があるので AdaNet 同士でも比較▶AdaNet.R: L1 正則化を追加▶AdaNet.P: 新しい subnetwork は前回加えたものにだけ接続▶AdaNet.D: 前回加えたものとの接続に dropout を入れる18
TensorFlow Implementation▶ TensorFlow での実装▶https://github.com/tensorflow/adanet▶ 研究の実験用コードじゃなくてマジでちゃんと API 整えられたやつ▶ とても嬉しい▶ TensorFlow の Estimator API として作られている19
AdaNet 所感▶ 論文ではきちんと汎化誤差の上界など理論的な面が議論されている▶ 実装はマジでそのまま使えるやつが公開されてる▶ AutoML Table みたいなサービスにも投入された研究 ==> 実用化の流れが芸術点高い20