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

Machine Learning Casual Talks #8 LT

Machine Learning Casual Talks #8 LT

Machine Learning Casual Talks #8
https://mlct.connpass.com/

分散深層学習
Distributed deep learning

vaaaaanquish

January 28, 2019
Tweet

More Decks by vaaaaanquish

Other Decks in Technology

Transcript

  1. Machine
    Learning
    Casual Talks #8
    [ Lightning Talk ]

    View full-size slide

  2. Hello!
    I’m Shunsuke Kawai
    @vaaaaanquish
    Yahoo! JAPAN
    Auction, ML Engineer
    (あと3日)
    2

    View full-size slide

  3. Big
    concept
    1. ヤフオク!における分散深層学習
    3

    View full-size slide

  4. In Yahoo! JAPAN
     ▶ kukaiによる分散深層学習 (P100 * 2 * 80)
    - マルチモーダルなDNNモデルを用いたヤフオク! 偽物検知
    (https://about.yahoo.co.jp/pr/release/2018/11/30a/)
    - LSTMによる知恵袋の不快投稿検知
    (https://headlines.yahoo.co.jp/hl?a=20181102-00000007-zdn_n-sci)
    - DNN-HMMによる音声認識YJVOICE
    (https://www.slideshare.net/techblogyahoo/yjvoice)
    - 画像検索、分類…etc
    More info:
    Yahoo! JAPAN、ディープラーニングに特化したスパコンを開発
    スパコンの省エネランキング「 GREEN500」にて世界第2位を獲得
    https://about.yahoo.co.jp/pr/release/2017/06/19b/
    * 画像はhttp://www.hpc.co.jp/zettascaler1.6.htmlより引用
    4

    View full-size slide

  5. 5
    偽物検知モデル
    Kaggle Avito Demand Prediction Challenge 1st solution
    https://www.kaggle.com/c/avito-demand-prediction/discussion/59880 より
    ▶ Avitoコンペ 1st solutionを参考にした
    マルチモーダルCNN
    ▶ Kukaiで最大GPU60個使った分散深層学習
    ▶ コンペのモデルを参考にレイヤーの幅や
    層数、初期パラメータ、Samplerなどの実験
    ▶ Kerasで初期モデル作成、分散化、デプロイ起因で
    ChainerMN、MXNet、fasttextを利用
    ▶ チャットbotとfabricを介した学習の仕組みで
    前一ヶ月作ってたLGBMなどのモデル群を圧倒

    View full-size slide

  6. CtoCなe-commerceにおける違反検知の課題
    ▶ 人が見るのには限界がある
    - 精度が重要
    ▶ データのバラツキ
    - ニセモノを代表に違反者は全体から見れば少ない (Imbalance data)
    - カテゴリや価格帯、出品者(ストアetc)によって様々なバラツキ
    ▷ Samplerが重要
    ▶ 常に新しい手法が出続ける
    - 画像や文言をちょっと変えて出すのが流行ったりする
    - ユーザの通報や人間の巡回で未学習な手法のデータが増えていく
    - 定期的な再学習が必要でありpre-trainとして再利用できるモデルは嬉しい
    → Overfitに注意する必要がある
    ▷ CVが重要 (目視で見る結果の採用)
    ▷ Samplerが重要
    ▶ サービスの文化や変動の課題
    - カテゴリや価格帯の変動、バースト
    - ある程度、長期間のデータを利用しつつデータ量に対して効率良く学習する必要
    ▷ Samplerが重要
    6
    * ここでSamplerはChainerならDataset、iterators、PyTorchならDataLoader、Samplerといったクラス

    View full-size slide

  7. 7
    深層学習に対する工夫
    ▶ Samplerによる正例、負例のコントロール
    - 学習初期は負例が少なすぎて学習が進まないため5:5からスタート
    - 徐々に元のデータの比率に戻していく
    ▷ Random minority oversampling
    ▷ Random majority undersampling
    ▶ 機械学習向けカテゴリの再編とサンプリング
    - ヤフオクの末端カテゴリ数3万3千 + シンボリックリンク
    - 事業目的で枝分かれ (例:ファッション -> ブランド別 -> ... -> Tシャツ ### ファッション -> Tシャツ ->...)
    - 目視で全部見て、機械学習観点(テキスト、画像)でそれぞれ分類できる粒度にマッピング
    - マッピングした辞書の情報を参考に学習データを収集していく
    ▶ Categoricalやそれらになり得る情報をEmbeddingレイヤーで表現
    - 商品カテゴリなどをEmbeddingする事でカテゴリの位置関係を考慮できる
    - 数値でも出品時価格などで有効
    ● 偽物かの判定における「数値的な大きさ」の相関小さい特徴量
    ● [-1, 1, 100, 1000, 5000, 10000, 20000, ….]とrangeを設定しそのindexを取る (目視ノウハウが生きる)
    ● サービスの特性として1円出品や負の値が発生するのもカバーしやすい
    ▷ Entity Embeddings of Categorical Variables
     [1604.06737] Entity Embeddings of Categorical Variables

    View full-size slide

  8. 8
    分散深層学習に対する工夫
    ▶ 特定ノードでCVを出し現在精度の低いカテゴリの算出しSamplerへ
    - Samplingのweightにしたり、足りないカテゴリがあればデータ取得のためhadoopクエリを生成
    ▷ Cluster-based sampling
    ▷ [1801.04396] Cost-Sensitive Convolution based Neural Networks for Imbalanced Time-Series Classification
    ▷ [1710.05381] A systematic study of the class imbalance problem in convolutional neural networks
    ▶ 画像同士のphashを計算し同一画像を同一のBatch内でなるべく学習しないように
    - 特定ノードや空いているメモリ、CPUを計算用に使い計算、GPUに送信し次回以降のSamplerに利用
    ▷ Class-aware sampling [ILSVRC-2015] Winner Solution]
    ▶ 複数のGPUを利用したパラメータ探索
    - 現在は手動、今後自動にしていきたい ( Optunaとかはその方向性の雰囲気がある...? )
    CV
    Data Aug
    Calc, Sampling
    Training, predict

    View full-size slide


  9. 分散深層学習は
    機械学習モデリングと
    ソフトウェアエンジニアリングの
    総合格闘技
    9

    View full-size slide

  10. ◎ ヤフオクの分散深層学習
    ○ モデルの工夫とSamplerの工夫について紹介
    ○ 分散する事で高速かつ出来る事も増える
    PDCAも回せる!
    10
    まとめ

    View full-size slide

  11. Thank you!
    11

    View full-size slide

  12. 12
    ボトルネックとなるインターコネクトに対し
    Infinibandが使えるのは現状Azureかさくらだけ
    AzureのChainerポチポチ設定が強力
    ChainerMNにdouble bufferingが入り
    通信のボトルネックが削減された(2018年5月)
    AWSのインスタンス申請が厳しめか
    そのっつさんが各インスタンスで実験
    Uber社のOSSであるHorovod良い
    OpenMPIを利用し少ないコード変更ですぐ分散
    Deep Learning AMIが強力
    生のdistributed TensorFlowが使いたい場合
    コード書いてCloud MLのTF_CONFIG設定するだけで分散
    (ノウハウや分散方法の違いもあり上に比べるとしんどい)
    個人的なオススメのライブラリとクラウド

    View full-size slide