Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AdaNet
Search
Shuhei Fujiwara
June 26, 2019
Research
1
370
AdaNet
Shuhei Fujiwara
June 26, 2019
Tweet
Share
More Decks by Shuhei Fujiwara
See All by Shuhei Fujiwara
Model Building in Mathematical Programming #2
shuheif
0
46
Nesterov #2
shuheif
0
65
TensorFlow Docs Translation Proofreading
shuheif
0
810
Model Building in Mathematical Programming #1
shuheif
0
68
Nesterov
shuheif
2
140
tbf07-seat-optim.pdf
shuheif
1
9.4k
Google Cloud Next Extended 2019 ML Day
shuheif
4
1.1k
TensorFlow Docs Translation JA
shuheif
1
920
TensorFlow DevSummit 2019 Recap
shuheif
0
710
Other Decks in Research
See All in Research
KDD論文読み会2024: False Positive in A/B Tests
ryotoitoi
0
200
医療支援AI開発における臨床と情報学の連携を円滑に進めるために
moda0
0
110
LLM時代にLabは何をすべきか聞いて回った1年間
hargon24
1
490
MIRU2024_招待講演_RALF_in_CVPR2024
udonda
1
330
SNLP2024:Planning Like Human: A Dual-process Framework for Dialogue Planning
yukizenimoto
1
330
秘伝:脆弱性診断をうまく活用してセキュリティを確保するには
okdt
PRO
3
740
精度を無視しない推薦多様化の評価指標
kuri8ive
1
240
Zipf 白色化:タイプとトークンの区別がもたらす良質な埋め込み空間と損失関数
eumesy
PRO
5
610
クロスセクター効果研究会 熊本都市交通リノベーション~「車1割削減、渋滞半減、公共交通2倍」の実現へ~
trafficbrain
0
240
授業評価アンケートのテキストマイニング
langstat
1
360
第 2 部 11 章「大規模言語モデルの研究開発から実運用に向けて」に向けて / MLOps Book Chapter 11
upura
0
380
TransformerによるBEV Perception
hf149
1
430
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
RailsConf 2023
tenderlove
29
900
Designing Experiences People Love
moore
138
23k
Practical Orchestrator
shlominoach
186
10k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
KATA
mclloyd
29
14k
Gamification - CAS2011
davidbonilla
80
5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
740
Unsuck your backbone
ammeep
668
57k
Designing the Hi-DPI Web
ddemaree
280
34k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Transcript
論文紹介 AdaNet: Adaptive Structural Learning of Artificial Neural Networks @shuhei_fujiwara
2019-06-26 1
What’s AdaNet? ▶ ICML 2017 ▶ http://proceedings.mlr.press/v70/cortes17a.html ▶ Google AI
Blog: ▶ https://ai.googleblog.com/2018/10/introducing-adanet-fast-and-flexible.html ▶ AutoML Table の裏で使われている (という噂の) 手法 ▶ https://cloud.google.com/automl-tables/docs/features ▶ TensorFlow implementation ▶ https://github.com/tensorflow/adanet 2
Basic Idea of AdaNet
The Goal of AdaNet Feed forward network よりも一般的なネットワーク構成の中から良いものを探す ▶ 後ろの任意の層の任意のノードに対して辺を繋げる
▶ 実際には汎化誤差の上界を保証するためにもう少し制約を入れる 3
Basic Idea ▶ 最初は小さいネットワークで普通に学習 この時点での目的関数 (正則化項は省略) 1 m m ∑
i=1 Φ (1 − yif1(xi)) ▶ yi ∈ {−1, +1}: label, Φ(·): loss function ▶ f1(·): 1 反復目のモデルの出力 ▶ 汎化誤差の上界を保証するには 最後の層への重みに L1 正則化が必要 Input Output 4
Basic Idea ▶ 真の値と現時点でのモデルの output の差を 予測するようなネットワークを継ぎ足す 新しい subnetwork の出力を足し込む
F(w, u) = 1 m m ∑ i=1 Φ (1 − yif1(xi) − yiw · u(xi)) ▶ −yiw · u(xi): 赤い subnetwork の出力 Input Output 5
How to Add Subnetwork Subnetwork の候補 以下の 2 種類を試して良かった方をくっつける: ▶
以下の 2 種類を試して良かった方を使う ▶ 今のネットワークと同じ深さのもの ▶ 今のネットワークより 1 段深いもの ▶ Subnetwork の制約 ▶ 1 つ前の層としか結合しない (汎化誤差の上界を保証するのに必要) Input Output 6
Algorithm 1. 2 種類の subnetwork を作る ▶ 今と同じ深さのやつと 1 段深いやつ
2. それぞれくっつけて学習させてみる 3. より性能が良い方の subnetwork を採用する ▶ 性能は正則化なども込みの目的関数で測る ▶ 本当はこの部分に Rademacher complexity (の推定値) とかが隠れているので 結構重要 ▶ 改善しなかったらアルゴリズム終了 4. 1 へ戻る 7
Generalization Bound
汎化誤差の上界に関する議論の定石 手持ちのサンプルに対する誤判別率を使って持っていない母集団に対する 誤判別率を評価したい ▶ S = ((x1, y1), . .
. , (xm, ym)): 持っているサンプル ▶ R(f) = E(x,y)∼D [ 1yf(x)≤0 ] : 母集団に対する誤判別率の期待値 ▶ ^ RS,ρ(f) = 1 m ∑ m i=1 1yif(xi)≤ρ : 持っているサンプル集合 S に対する誤判別率 ▶ マージン ρ だけ余裕を持って判別させるのがミソ R(f) ≤ ^ RS,ρ(f)+「十分サンプル数を大きくすれば定数に近付く何か」 という形がゴール 8
Formal Formulation 仮説集合 (アルゴリズムで探索対象となる関数の集合) を定義 今回はノードや層ごとに分けて定義するところが少し特徴的 入力から最初の層への仮説集合 H1 = {
x → u · Ψ(x) : u ∈ Rn0 , ∥u∥p ≤ Λ1,0 } ▶ Ψ(·): 入力データからベクトルへの写像 (たとえば文章と BoW) ▶ h1,j ∈ H1 : x ∈ X から 1 層目のノード j に渡る値への写像 9
Formal Formulation 2 層目以降の (k 層目の各ノードを構成する) 仮説集合 Hk = {
x → k−1 ∑ s=1 us · (φs ◦ hs)(x) : us ∈ Rns , ∥us∥p ≤ Λ1,0, hk,s ∈ Hs } ▶ hs : ネットワークの s 層目 ▶ φ: 活性化関数 ▶ u: s 層目全ノードから k 層目のある 1 ノードへ繋がる重み 10
Rademacher Complexity 汎化誤差の上界を議論するための道具で、仮説 (関数) 集合の複雑さの指標 ^ RS(G) = 1 m
Eσ [ sup h∈G m ∑ i=1 σih(xi) ] R(G) = ES∼D [ ^ RS(G) ] ▶ ランダムにラベルを付与したデータに対してどれくらい正しく判別できる 関数が仮説内に存在するか ▶ R が大きすぎる ==> 関数が複雑すぎて過学習する 11
Theorem 1 のお気持ち Theorem 1 R(f) ≤ ^ RS,ρ(f) +
4 ρ l ∑ k=1 ∥wk∥1Rm( ˜ Hk) + 2 ρ √ log l m + ˜ O ( 1 ρ √ log l m ) where ˜ Hk = Hk ∪ (−Hk) ▶ サンプル数 m を十分大きく取れば右の 2 項はゼロ ▶ Rademacher complexity と正則化項でおさえられる 12
Lemma 2 のお気持ち ▶ Rademacher complexity って具体的にどれくらいの大きさ? ▶ 仮説集合 Hk
をちょっと狭めると議論できる ▶ H∗ k : Hk に「1 つ前の層にしか接続しない」という制約を加えた版 Lemma 2 ^ RS(H∗ k ) ≤ r∞ΛkN 1 q k √ log(2n0) 2m ▶ r∞ = maxi∈[1,m] ∥Ψ(xi)∥∞ 13
Objective Function
Objective Function 汎化誤差の上界を踏まえて目的関数を次のように設定 F(w) = 1 m m ∑ i=1
Φ 1 − yi N ∑ j=1 wjhj + N ∑ j=1 Γj|wj| where Γj = λRm(Hkj ) + β, hj ∈ H∗ = ∪l k=1 ˜ H∗ k Rademacher complexity は lemma 2 の上界で代用する 14
Iterations 各反復では次のような部分問題を解けば良い Ft(w, u) = 1 m m ∑ i=1
Φ 1 − yi N ∑ j=1 wjhj − yiw · u(xi) + N ∑ j=1 Γu∥w∥1 ▶ u: Subnetwork の最後の層 ▶ 裏にそこまでのネットワークの重みが変数として隠れている ▶ w: Subnetwork の最後の層から出力への重み ▶ Γu : Subnetwork の深さで R が変わる (ので u が添字) 15
Numerical Experiments
Experiments with CIFAR-10 詳しくは論文参照 ▶ 普通のニューラルネットや Logistic Regression と比べて高精度 ▶
Subnetwork のくっつけ方は工夫の余地があるので AdaNet 同士でも比較 ▶ AdaNet.R: L1 正則化を追加 ▶ AdaNet.P: 新しい subnetwork は前回加えたものにだけ接続 ▶ AdaNet.D: 前回加えたものとの接続に dropout を入れる ▶ 疎結合にしても精度は落ちない 16
Implementation
TensorFlow Implementation ▶ TensorFlow での実装 ▶ https://github.com/tensorflow/adanet ▶ 研究の実験用コードじゃなくてマジでちゃんと API
整えられたやつ ▶ とても嬉しい ▶ TensorFlow の Estimator API として作られている 17
Conclusions
Conclusions ▶ 論文ではきちんと汎化誤差の上界など理論的な面が議論されている ▶ 実装はマジでそのまま使えるやつが公開されてる ▶ Estimator の流儀で書くだけなので、最悪地雷を踏んでも 別の手法にすぐ逃げられる ▶
AutoML Table みたいなサービスにも投入された 研究 ==> 実用化の流れが芸術点高い 18