Slide 1

Slide 1 text

Machine Learning Casual Talks #8 [ Lightning Talk ]

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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などのモデル群を圧倒

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Thank you! 11

Slide 12

Slide 12 text

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