Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pytorchのススメ

24,177 views

Published on

DLHacks:
2017年8月7日
http://deeplearning.jp/hacks/

動的フレームワークのPytorchの紹介を行ないました。
Pytorchの概要、基本的な使い方、TextCNN・DCGANで実際の実装を説明しました。

Published in: Technology
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F90ZZC ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Pytorchのススメ

  1. 1. Pytorchのススメ 20170807 松尾研 曽根岡 1
  2. 2. アウトライン 次回の発表がPytorch実装のため、簡単な共有を • Pytorchとは • 10分でわかるPytorchチュートリアル • Pytorch実装 - TextCNN:文書分類 - DCGAN:生成モデル 2
  3. 3. Pytorchとは 3
  4. 4. Pytorchとは 4 動的フレームワークで実装が簡単
  5. 5. フレームワークのカテゴリ • 静的フレームワーク - 計算グラフを定義した後にコンパイルしてから
 データを入れる • 動的フレームワーク - コンパイルしないため, データが流れるごとに
 動的に計算グラフを定義される 5
  6. 6. フレームワークのカテゴリ • 静的フレームワーク → Tensorflow, Keras, Theano - 計算グラフを定義した後にコンパイルしてから
 データを入れる • 動的フレームワーク → Chainer, DyNet, Pytorch - コンパイルしないため, データが流れるごとに
 動的に計算グラフを定義される 6
  7. 7. 動的フレームワークのメリット・デメリット • メリット - 直感的に書くことができる - デバッグがしやすい - サンプル毎に構造が変化するような複雑なネットワーク の実装が簡単にできる(TreeRNNs等) • デメリット - サンプル毎に毎回計算グラフを構築するため、
 学習速度が少し遅くなる 7
  8. 8. 速度が遅い? • MNIST:Conv ✕ 2, 全結合 ✕ 2での1epochの訓練 • 結果 on GPU - Tensorflow:8.58s - Keras:11.84s - Pytorch:8.20s 8 (参考:http://qiita.com/t-ae/items/48f17904fcc321d4d421)
  9. 9. vs Chainer • DeepPose 9 Pytorch Chainer CPU学習 48.1h 77.5h GPU学習 3.23h 4.25h GPU予測 0.015s 0.014s
  10. 10. Githubスター数 • Tensorflow:66002 • Keras:18357 • Caffe:19489 • Pytorch:6212 • Caffe2:5363 • Chainer:2767 • dynet:1587 10
  11. 11. Star増加数 11 Githubにあがっている実装も結構ある
  12. 12. Facebookの研究体制 研究ではPytorch, 製品ではCaffe2 12
  13. 13. 10分でわかるチュートリアル 13
  14. 14. インストール • 公式サイト:pytorch.org • condaやpipでinstallが可能 14
  15. 15. モジュール構成 15 torch NumPyのような強力なGPUサポートを備えたTensorライブラリ torch.autograd torch内のすべての微分可能なテンソル操作をサポートする
 テープベースの自動微分ライブラリ torch.nn 自動微分ライブラリと統合されたニューラルネットワークライブラリ torch.optim SGD、RMSProp、LBFGS、Adamなどの標準的な最適化手法を含む
 最適化パッケージ torch.utils DataLoader、Trainerおよびその他のユーティリティ関数 torch.multiproces sing Pythonマルチプロセッシングではなく、プロセス全体にわたるトー チ・テンソルの魔法のメモリ共有が可能です。データロードとホグワル ドトレーニングに役立ちます。 torch.legacy 後方互換性の理由からトーチから移植されたレガシーコード
  16. 16. torch.Tensor • GPUを使うためのNumpy.ndarrayのラッパー • よく使う関数 - torch.Tensor(データの形):Tensor化 - torch.rand(データの形):Tensorを乱数で初期化 - torch.ones(データの形):1で初期化 - torch.zeros(データの形):0で初期化 16
  17. 17. torch.autograd • 自動微分のためのモジュール • torch.autograd.Variabe(Tensor Instance) - 自動微分するためのTensorのラッパー - variable.data:生のTensor - variable.grad:蓄積された勾配 - variable.creator:
 そのvariableが作られた演算処理(Function)への参照 - variable.backword():
 creatorを用いて勾配を逆伝搬する 17
  18. 18. torch.nn • よく使うようなモデルや関数のモジュール • nn.Module: - ネットワークのクラスで継承 - インスタンス変数に学習パラメータを持つ層を持たせる • .paraeters()でパラメータを返す - forward(self, x)をoverrideする
 
 18
  19. 19. torch.nn • 代表的な層 - nn.Linear(input size, output size):全結合層 - nn.Conv2d(input,output, window):2次元の畳込み層 - nn.LSTM(input, output) - nn.Dropout(probability) • nn.functional:パラメータを持たない関数 - functional.relu(x) → ReLU • 誤差関数 - nn.MSELoss(out, target):平均二乗誤差 - nn.CrossEntropyLoss(out, target):交差エントロピー 19
  20. 20. torch.optim • 最適化関数のインスタンスを作る - optimizer = optim.SGD(パラメータ, lr=0.01) - optimizer.zero_grad():パラメータの勾配をゼロにする - optimizer.step():勾配を用いてパラメータを更新する 20
  21. 21. step1:モデル定義 21
  22. 22. step2:損失関数とOptimizer 22
  23. 23. step3:学習 23
  24. 24. step4:GPUでの計算 24
  25. 25. おまけ:データローダ周り • torch.utils.data - TensorDataSet:データとラベルを一緒にする - DataLoader:イテレータ化、バッチサイズ等を設定可 • torchvision:画像の取得と変換用のライブラリ - MNIST, COCO, Cifer10, Imagenetなどのデータローダ - VGGやResnetなどのモデル(pretrained) • torch-text(WIP):テキスト周りのデータローダ 25
  26. 26. 実装①:TextCNN 26
  27. 27. Convolutional Neural Networks for Sentence Classification • メタ情報 - EMNLP 2014 - Cited 660 • 概要 - Google NewsでPretrainされたWord2Vecを用いて
 CNNでテキスト分類を行うモデルを提案 - 4つのタスクでState of the artに(当時) 27
  28. 28. モデル構造 • one-hotベクトルを学習済みの埋め込み層でk次元に • 3 ✕ k, 4 ✕ k, 5 ✕ k のConv層(各100チャネル)で畳み込む • 畳み込まれたベクトルで一番大きい値だけをpooling • 全結合層 + softmaxで分類 28
  29. 29. 実験 転移学習させた場合、State of the artに 29
  30. 30. 実装:モデル init 30
  31. 31. 実装:モデル forward 31 ← Variableにすることでcreatorが消えてembedが保存
  32. 32. 実装:train 32← epoch毎にモデルを保存
  33. 33. 実装②:DCGAN 33
  34. 34. Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks • メタ情報 - 2015年archiveに公開、ICLR2016採択 - Cited 251 • 概要 - 多層パーセプトロンで学習していたGANの進化系 - CNNを使うことで高解像度画像の生成ができる 34
  35. 35. GANの基本 • ノイズzから訓練データと似たものを生成するGenerator • 訓練データと生成データを識別するDiscriminator 35
  36. 36. DCGAN • Pooling層をstride付きの畳み込み層に置き換える • Batch Normalizationを使う • Dの全結合層をGlobal average poolingにする • GではReLU, DではLeakyReLUを使う 36
  37. 37. 実験結果 37
  38. 38. 実装:Discriminator 38 ←リストで保存される ← Batch Normalization ← 負のとき0.2の傾きのReLU 64px向けに縮小版
  39. 39. 実装:Generator 39 64px向けに縮小版 ← Deconvolution
  40. 40. 実装:前準備 40
  41. 41. 実装:train 41 ←各パラメータの勾配を初期化 ←画像のVariable化 ←本物用のラベル ←偽物用のラベル ←ノイズ ←中央値0, 標準偏差1に初期化 ←2回に一回はDの学習 ←2回に1回はGの学習 ←生成された画像 ← detachで.creatorを外している ← Dが強くなりすぎないように Dのロスが大きいときだけ更新

×