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.

Chainerで学ぶdeep learning

4,747 views

Published on

みんなのPython勉強会

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Chainerで学ぶdeep learning

  1. 1. Chainerで学ぶ Deep Learning 2016/11/9 みんなのPython勉強会#18
  2. 2. 自己紹介 • 名前 • 舛岡英人(@hidetomasuoka) • 略歴 • 株式会社ソピア(現アクセンチュア)入社 • 中小企業向けERPのスクラッチ開発を提案からサポートまですべてを担当 • 株式会社Preferred Infrastructure 入社 • 各製品の提案からサポートまですべてを担当 • 株式会社Intimate Merger に出向 • 株式会社 レトリバ創業メンバー
  3. 3. 自己紹介 • 社外活動 • PyConJP 2016 スタッフ • 招待講演担当 • Chainer OSS活動 • communityイベントのリード
  4. 4. 会社概要 株式会社レトリバ • 設立:2016年8月 • 場所:東京都千代田区大手町 • 役員:代表取締役 社長 河原 一哉 取締役 西鳥羽 二郎 • 従業員数:11名 • 事業内容:ソフトウェア製品の開発・販売 • ミッション:お客様の課題を最先端の技術で解決する • HP:https://retrieva.jp/ • Twitter:@retrieva_jp
  5. 5. アジェンダ • ディープラーニングブームの背景 • ディープラーニングの導入 • ディープラーニングフレームワークChainerの紹介 • ディープラーニングをどうやって学ぶか
  6. 6. ディープラーニングブームの背景
  7. 7. 機械学習の典型的なプロセス 7 (0, 1, 2.5, -1, …) (1, 0.5, -2, 3, …) (0, 1, 1.5, 2, …) 特徴ベクトル グラフィカルモデル 分類/回帰 SVM/LogReg/PA CW/ALOW/Naïve Bayes/CNB/DT RF/ANN… クラスタリング K-means/Spectral Clustering/MMC/L SI/LDA/GM… 構造分析 HMM/MRF/CRF… 分野に依存しない 抽象化データ 様々な手法 理論を適用 機械 学習 文書 画像 センサー 行動履歴 様々な様式の 生データ 特徴 抽出
  8. 8. 文章からの特徴抽出 • 例:固有名詞を取り出してニュース記事の特徴とする 8 2020年の東京五輪・パラリンピックの主会 場となる新国立競技場をめぐり、安倍晋三首相 は、総工費が2520億円に膨らんだ建設計画 を見直す考えを17日に表明する方向で最終調 整に入った。競技場を19年のラグビーワール ドカップ(W杯)の主会場にする計画は断念す る。同日、東京五輪・パラリンピック組織委員 会会長の森喜朗元首相と会談し、計画見直しへ の協力を求める方針だ。 2020年の東京五輪・パラリンピックの主会 場となる新国立競技場をめぐり、安倍晋三首相 は、総工費が2520億円に膨らんだ建設計画 を見直す考えを17日に表明する方向で最終調 整に入った。競技場を19年のラグビーワール ドカップ(W杯)の主会場にする計画は断念す る。同日、東京五輪・パラリンピック組織委員 会会長の森喜朗元首相と会談し、計画見直しへ の協力を求める方針だ。 単語 頻度 東京五輪 2 パラリンピック 2 新国立競技場 1 安倍晋三 1 ・・・ ・・・ 機械学習アルゴリズム 文章からの固有名詞の抽出は固有表現抽出 (Named Entity Recognition; NER)という
  9. 9. 画像からの特徴抽出 • 例:Histogram of Gradient (HoG特徴量) http://www.vlfeat.org/overview/hog.html 機械学習 アルゴリズム 各ピクセルでの勾配を小ブロック(セル) 単位でまとめてヒストグラム化 各セルでのヒストグラムを(正 規化して)すべてまとめる
  10. 10. 精度をあげるのが職人技 • 精度をあげるためには特徴抽出が重要 • 特徴抽出は難しい • タスクごとに最適な特徴抽出方法は異なる • 機械学習コンテストは最後は特徴抽出のチューニング勝負 • これまで様々な特徴抽出方法が研究されてきた • 自然言語:n-gram/BoW 画像:SIFT/SURF/HOG/PHOW/BoVW • その他にも様々なヒューリスティックが存在 • 精度をあげるにはデータに合わせたチューニングが必要
  11. 11. 11 2012年画像認識コンテストで Deep Learningを用いたチームが優勝 → ILSVRC2012 優勝チームSupervisonの結果 [Krizhevsky+ ‘12] 衝撃的な出来事 • 限界と思われた認識エラーを4割も減らした (26%→16%) • 特徴抽出を行わず、生の画素をNNに与えた 翌年の同コンテストの上位チームは ほぼDeep Learningベースの手法
  12. 12. Neural Netブーム • 様々なコンペティションでDLが既存手法を凌駕 • 16%(‘12) → 11%(‘13) → 6.6%(’14) → 4.8%('15) → 2.9%('16) • 各企業がDL研究者の獲得競争 • Google/FaceBook/Microsoft/Baidu • 実サービスもDLベースに置き換えられる • Siri/Google画像検索 GoogLeNetのアーキテクチャ↓ http://research.google.com/archive/un supervised_icml2012.html Google Brainによる猫認識↑ [Le, Ng, Jeffrey+ ’12]
  13. 13. 音声認識の分野では 10年間の停滞していたが、 DL登場により劇的に精度が 向上した
  14. 14. ニューラルネットワークが利用された タスク データ 画像 タスク カテゴリ 分類 顔検出 生成 ゲームAI シーン認識 動画 画像+ 自然言語 音声+動画 カテゴリ 分類 動作認識 キャプ ション生成 表現学習 音声認識 自然言語 音声 化合物 表現学習 翻訳 質問応答 会話検出 QSAR (活性予測) 応用分野 音声検索 画像キュレーション eコマース 自動運転 ロボティックス 医療画像 マーケティング
  15. 15. ディープラーニング導入
  16. 16. x1 xN ・・・・・・ h1 hH ・・・・ ニューラルネットワーク(多層パーセプトロン) k M k1 y M y1 Forward Backward ・・ ・・ 入力層 隠れ層 出力層 文書 画像 センサー チューリップ 異常確率50% カテゴリ:政治
  17. 17. Forward Propagation(順伝播) • 入力層(グレー)に値を与え、 順方向に計算を進める • Forward計算の過程で損失 (Loss)とエラーを計算する • 通常エラーは計算グラフの最後 のユニット(緑)での値を指す • 計算グラフの途中の値をエラー に加えても良い • Lossは各ユニットの値や各レ イヤーのパラメータの関数に なっている Forward
  18. 18. Backward Propagation(誤差逆伝播) • 計算グラフの末端のユニット (緑)にエラーを与え、逆方 向に計算を進める • Backwardの過程で各パラ メータについてのエラーを計 算する Backward
  19. 19. x1 xN ・・・・・・ h1 hH ・・・・ ニューラルネットワーク(多層パーセプトロン) k M k1 y M y1 Forward Backward ・・ ・・ 入力層 隠れ層 出力層 文書 画像 センサー チューリップ 異常確率50% カテゴリ:政治
  20. 20. 代表的なニューラルネットワーク(1) Convolutional Neural Network • 畳み込み層とプーリング層を 交互に重ねた構造をした ニューラルネットワーク • 主に画像解析で利用されてい る • 畳み込み層 • 前層の近傍のユニットのみと結 合している • ユニット間で重みを共有 • プーリング層 • ユニットの活性をまとめる • 最大値をとる(Max Pooling)か 平均値をとる(Average Pooling) のが一般的 畳み込み層 プーリング層 同じ色の結合は 重みが等しい
  21. 21. 代表的なニューラルネットワーク(2) Recurrent Neural Network • 中間層の活性が、前層 と前時刻の自分自身の 活性により決定される • 音声・動画・自然言語 などの可変長データの 解析に利用されている • 中間層のループ部分を 時間方向に展開すると 通常のフィードフォ ワードニューラルネッ トとみなせる
  22. 22. ディープラーニングの応用例 Deep Q Network*(深層学習で強化学習) * Mnih, Volodymyr, et al. "Human-level control through deep reinforcement learning." Nature 518.7540 (2015): 529-533. ** CaffeでDeep Q-Networkを実装して深層強化学習してみた http://d.hatena.ne.jp/muupan/20141021/1413850461 *** PFIインターン2014 最終発表 http://www.ustream.tv/recorded/53153399 22
  23. 23. ディープラーニングの応用例 画像生成 • 文字を”描く“ニューラルネット • 入力と同じ「雰囲気」の数字が 出力されている。同じ数字でも、 最左画像と生成画像は異なる事 に注意 入力 生成結果 Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014. の実験を弊社で再現 • 絵を”描く“ニューラルネット http://soumith.ch/eyescream/
  24. 24. 典型的なNeural Network (多層パーセプトロン) x1 xN ・・・・・・ h1 hH ・・・・ k M k1 y M y1 f1 f2 f3 W2/b2 W1/b1 tM t1 損失関数で評価 正解ラベル入力 Forward Backward 出力 ・・ ・・ ・・ 学習すべきパラメータ • W1:1層目のパラメータ行列 • b1:1層目のバイアス項 • W2:2層目のパラメータ行列 • b2:2層目のバイアス項 Forward更新式 • h = f1(x) = Sigmoid(W1x+b1) • k = f2(h) = Sigmoid(W2h+b2) • y = f3(k) = SoftMax(k) f3i(k) = exp(ki)/Σ_{j} exp(kj)
  25. 25. DeepLearningフレームワークの構成要素 変数(n次元配列) 層 計算グラフ 最適化アルゴリズム 順伝播 逆伝播 ニューラルネット変数 層 正解データも入力 の一部とみなすと 見通しが良い 途中で分岐して もよい (一般にはDAG)
  26. 26. minibatch j 訓練の流れ Epoch 1 Epoch N Epoch 2 Epoch i Epoch i 全訓練データを シャッフル minibatch 1 Forward minibatch 2 パラメータ更新 時刻 • Epoch (Iteration):全訓練データを1巡する事 → 各訓練データはNetにN回与える • Solver:Netを訓練するモジュール • minibatch:少数の訓練データをまとめたもの 26 パラメータ更新 minibatch j Backward
  27. 27. ディープラーニングフレーム ワークChainerの紹介
  28. 28. Chainer概要 • 製作者:得居誠也、開発:Preferred Networks http://chainer.org/ • バージョン:1.0.0 (2015年6月9日) 1.17.0(2016年11月9日現在) • ライセンス:MIT • 言語:Python(pip install chainerでインストール可) • 依存モジュール:Python2.7+/3.4+/ 3.5.+、Numpy1.9+/1.10/1.11、 Six1.9+ • CUDA依存モジュール:CUDA6.5+ • 特徴 • Powerful:CUDA・マルチGPU対応 • Flexible:ほぼ任意のアーキテクチャーを実現可能 • Intuitive:計算グラフを通常のPythonコードで記述可能
  29. 29. 計算グラフ構築のパラダイム: Define-and-Run • 計算グラフを構築した後に、データを計算グラフに順伝播する • 計算グラフ構築方法はフレームワークにより異なる • prototxt, yamlファイル, Luaスクリプト etc. • 多くの深層学習フレームワークが採用 • Caffe/Torch/Theanoベースのフレームワーク • 長所 • メモリ管理の必要がほとんどない • 計算グラフの最適化を暗黙的に行える • 短所 • 1訓練ループの中では計算グラフを変更できない f g x f g 計算グラフ構築 データフィード
  30. 30. 計算グラフ構築のパラダイム: Define-by-Run • データの順伝播とそのデータに対する計算 グラフの構築を同時に行う • 長所 • 順伝播を通常のプログラムで記述できる • コントロールフロー(条件分岐、forループ)を計 算グラフ構築に利用可能 • 設定ファイル用のミニ言語を作る必要がない • 訓練データごとに異なる計算グラフを変更可能 • 短所 • 訓練データ全体に渡る最適化は自明ではない • 計算グラフを動的に構築するので、メモリ管理 が必要 x yf x = chainer.Variable(...) y = f(x) z = g(x) zg データフィード = 計算グラフ構築 Chainerはこの パラダイムを採用
  31. 31. LSTMをChainerをつかって実装する(1) 入力層 LSTM 出力層• LSTM(Long short-term memory)は、 RNN(Recurrent Neural Network)の 拡張として1995年に登場した、 時系列データ(sequential data)に対する モデル、あるいは構造(architecture)の 1種です
  32. 32. LSTMをChainerをつかって実装する(2) class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer ) def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y rnn = RNN() model = L.Classifier(rnn) optimizer = optimizers.SGD() optimizer.setup(model)
  33. 33. LSTMをChainerをつかって実装する(3) class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer ) def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y 入力層 LSTM 出力層 DLの層を定義する (今回だと右のよう な3層)
  34. 34. LSTMをChainerをつかって実装する(4) class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer ) def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y 入力層 LSTM 出力層 各層に値をセットする
  35. 35. LSTMをChainerをつかって実装する(5) class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer ) def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y rnn = RNN() model = L.Classifier(rnn) optimizer = optimizers.SGD() optimizer.setup(model) 使用するネットワークを 定義する
  36. 36. LSTMをChainerをつかって実装する(6) class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer ) def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y rnn = RNN() model = L.Classifier(rnn) optimizer = optimizers.SGD() optimizer.setup(model)上記で設定したモデルを SGDというアルゴリズムを 使って最適化する
  37. 37. ディープラーニング学ぶには どうするか?
  38. 38. ディープラーニングを 学ぶことができるサイト • Chainer • http://docs.chainer.org/en/stable/tutorial/index.html • https://github.com/hido/chainer-handson • NVIDIA • https://nvidia.qwiklab.com/tags/Deep%20Learning • Google • https://www.tensorflow.org/versions/r0.11/tutorials/index.html
  39. 39. Chainer Playground
  40. 40. まとめ • ディープラーニングブームの背景 • ディープラーニングの概要 • Chainerでの実装方法 • 今後自分でディープラーニングを学ぶ方法

×