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
PRO

January 28, 2019
Tweet

More Decks by vaaaaanquish

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View 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 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 Slide

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

    View 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 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 Slide


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

    View Slide

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

    View Slide

  11. Thank you!
    11

    View 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 Slide