Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AdaNet

 AdaNet

Shuhei Fujiwara

June 26, 2019
Tweet

More Decks by Shuhei Fujiwara

Other Decks in Research

Transcript

  1. 論文紹介
    AdaNet: Adaptive Structural Learning of Artificial Neural Networks
    @shuhei_fujiwara
    2019-06-26
    1

    View Slide

  2. 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

    View Slide

  3. Basic Idea of AdaNet

    View Slide

  4. The Goal of AdaNet
    Feed forward network よりも一般的なネットワーク構成の中から良いものを探す
    ▶ 後ろの任意の層の任意のノードに対して辺を繋げる
    ▶ 実際には汎化誤差の上界を保証するためにもう少し制約を入れる
    3

    View Slide

  5. Basic Idea
    ▶ 最初は小さいネットワークで普通に学習
    この時点での目的関数 (正則化項は省略)
    1
    m
    m

    i=1
    Φ (1 − yif1(xi))
    ▶ yi ∈ {−1, +1}: label, Φ(·): loss function
    ▶ f1(·): 1 反復目のモデルの出力
    ▶ 汎化誤差の上界を保証するには
    最後の層への重みに L1 正則化が必要
    Input
    Output
    4

    View Slide

  6. 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

    View Slide

  7. How to Add Subnetwork
    Subnetwork の候補
    以下の 2 種類を試して良かった方をくっつける:
    ▶ 以下の 2 種類を試して良かった方を使う
    ▶ 今のネットワークと同じ深さのもの
    ▶ 今のネットワークより 1 段深いもの
    ▶ Subnetwork の制約

    1 つ前の層としか結合しない
    (汎化誤差の上界を保証するのに必要) Input
    Output
    6

    View Slide

  8. Algorithm
    1. 2 種類の subnetwork を作る
    ▶ 今と同じ深さのやつと 1 段深いやつ
    2. それぞれくっつけて学習させてみる
    3. より性能が良い方の subnetwork を採用する
    ▶ 性能は正則化なども込みの目的関数で測る
    ▶ 本当はこの部分に Rademacher complexity (の推定値) とかが隠れているので
    結構重要
    ▶ 改善しなかったらアルゴリズム終了
    4. 1 へ戻る
    7

    View Slide

  9. Generalization Bound

    View Slide

  10. 汎化誤差の上界に関する議論の定石
    手持ちのサンプルに対する誤判別率を使って持っていない母集団に対する
    誤判別率を評価したい
    ▶ 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

    View Slide

  11. Formal Formulation
    仮説集合 (アルゴリズムで探索対象となる関数の集合) を定義
    今回はノードや層ごとに分けて定義するところが少し特徴的
    入力から最初の層への仮説集合
    H1 =
    {
    x → u · Ψ(x) : u ∈ Rn0 , ∥u∥p ≤ Λ1,0
    }
    ▶ Ψ(·): 入力データからベクトルへの写像 (たとえば文章と BoW)
    ▶ h1,j ∈ H1
    : x ∈ X から 1 層目のノード j に渡る値への写像
    9

    View Slide

  12. 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

    View Slide

  13. Rademacher Complexity
    汎化誤差の上界を議論するための道具で、仮説 (関数) 集合の複雑さの指標
    ^
    RS(G) =
    1
    m

    [
    sup
    h∈G
    m

    i=1
    σih(xi)
    ]
    R(G) = ES∼D
    [
    ^
    RS(G)
    ]
    ▶ ランダムにラベルを付与したデータに対してどれくらい正しく判別できる
    関数が仮説内に存在するか
    ▶ R が大きすぎる ==> 関数が複雑すぎて過学習する
    11

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. Objective Function

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. Numerical Experiments

    View Slide

  20. Experiments with CIFAR-10
    詳しくは論文参照
    ▶ 普通のニューラルネットや Logistic Regression と比べて高精度
    ▶ Subnetwork のくっつけ方は工夫の余地があるので AdaNet 同士でも比較

    AdaNet.R: L1 正則化を追加

    AdaNet.P: 新しい subnetwork は前回加えたものにだけ接続

    AdaNet.D: 前回加えたものとの接続に dropout を入れる
    ▶ 疎結合にしても精度は落ちない
    16

    View Slide

  21. Implementation

    View Slide

  22. TensorFlow Implementation
    ▶ TensorFlow での実装

    https://github.com/tensorflow/adanet
    ▶ 研究の実験用コードじゃなくてマジでちゃんと API 整えられたやつ
    ▶ とても嬉しい
    ▶ TensorFlow の Estimator API として作られている
    17

    View Slide

  23. Conclusions

    View Slide

  24. Conclusions
    ▶ 論文ではきちんと汎化誤差の上界など理論的な面が議論されている
    ▶ 実装はマジでそのまま使えるやつが公開されてる

    Estimator の流儀で書くだけなので、最悪地雷を踏んでも
    別の手法にすぐ逃げられる
    ▶ AutoML Table みたいなサービスにも投入された
    研究 ==> 実用化の流れが芸術点高い
    18

    View Slide