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.

「機械学習とは?」から始める Deep learning実践入門

570 views

Published on

「機械学習とは?」から始める Deep learning実践入門

Published in: Data & Analytics
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

「機械学習とは?」から始める Deep learning実践入門

  1. 1. 「機械学習とは?」から始める Deep Learning実践入門
  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. アジェンダ • Part1: 機械学習とDeepLearningの概要 • 機械学習とは • DeepLearningとは? • Chainerとは? • Part2: jupyter notebookとChainerを使ってDeep Learningに 触れてみよう • jupyter notebookをセットアップしよう! • Deep LearningのHello worldであるMinstをやってみよう! • chainerで線画自動着色してみよう!
  6. 6. Part1: 機械学習とDeep Learningの概要
  7. 7. 機械学習とは • 機械学習の定義 - 「経験(データ)によって 賢くなるアルゴリズム」 • 古典的な統計手法に比べた 特徵 - 確率分布の仮定などの制限が 少ない - 大規模・高次元データにも有 効 7 Dimensionality Reduction by Learning an Invariant Mapping Raia Hadsell, Sumit Chopra, Yann LeCun, CVPR, 2006 学習データ 分類モデル
  8. 8. 機械学習の典型的なプロセス 8 (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… 分野に依存しない 抽象化データ 様々な手法 理論を適用 機械 学習 文書 画像 センサー 行動履歴 様々な様式の 生データ 特徴 抽出
  9. 9. 文章からの特徴抽出 • 例:固有名詞を取り出してニュース記事の特徴とする 9 2020年の東京五輪・パラリンピックの主会 場となる新国立競技場をめぐり、安倍晋三首相 は、総工費が2520億円に膨らんだ建設計画 を見直す考えを17日に表明する方向で最終調 整に入った。競技場を19年のラグビーワール ドカップ(W杯)の主会場にする計画は断念す る。同日、東京五輪・パラリンピック組織委員 会会長の森喜朗元首相と会談し、計画見直しへ の協力を求める方針だ。 2020年の東京五輪・パラリンピックの主会 場となる新国立競技場をめぐり、安倍晋三首相 は、総工費が2520億円に膨らんだ建設計画 を見直す考えを17日に表明する方向で最終調 整に入った。競技場を19年のラグビーワール ドカップ(W杯)の主会場にする計画は断念す る。同日、東京五輪・パラリンピック組織委員 会会長の森喜朗元首相と会談し、計画見直しへ の協力を求める方針だ。 単語 頻度 東京五輪 2 パラリンピック 2 新国立競技場 1 安倍晋三 1 ・・・ ・・・ 機械学習アルゴリズム 文章からの固有名詞の抽出は固有表現抽出 (Named Entity Recognition; NER)という
  10. 10. 画像からの特徴抽出 • 例:Histogram of Gradient (HoG特徴量) http://www.vlfeat.org/overview/hog.html 機械学習 アルゴリズム 各ピクセルでの勾配を小ブロック(セル) 単位でまとめてヒストグラム化 各セルでのヒストグラムを(正 規化して)すべてまとめる
  11. 11. 精度をあげるのが職人技 • 精度をあげるためには特徴抽出が重要 • 特徴抽出は難しい • タスクごとに最適な特徴抽出方法は異なる • 機械学習コンテストは最後は特徴抽出のチューニング勝負 • これまで様々な特徴抽出方法が研究されてきた • 自然言語:n-gram/BoW 画像:SIFT/SURF/HOG/PHOW/BoVW • その他にも様々なヒューリスティックが存在 • 精度をあげるにはデータに合わせたチューニングが必要
  12. 12. 12 2012年画像認識コンテストで Deep Learningを用いたチームが優勝 → ILSVRC2012 優勝チームSupervisonの結果 [Krizhevsky+ ‘12] 衝撃的な出来事 • 限界と思われた認識エラーを4割も減らした (26%→16%) • 特徴抽出を行わず、生の画素をNNに与えた 翌年の同コンテストの上位チームは ほぼDeep Learningベースの手法
  13. 13. ニューラルネットブーム • 様々なコンペティションでDLが既存手法を凌駕 • 16%(‘12) → 11%(‘13) → 6.6%(’14) → 4.8%('15) → 2.9%('16) • 各企業がDL研究者の獲得競争 • Google/FaceBook/Microsoft/Baidu • 実サービスもDLベースに置き換えられる • Siri/Google画像検索/Google翻訳 GoogLeNetのアーキテクチャ↓ http://research.google.com/archive/un supervised_icml2012.html Google Brainによる猫認識↑ [Le, Ng, Jeffrey+ ’12]
  14. 14. 音声認識の分野では 10年間の停滞していたが、 DL登場により劇的に精度が 向上した
  15. 15. ニューラルネットワークが利用された タスク データ 画像 タスク カテゴリ 分類 顔検出 生成 ゲームAI シーン認識 動画 画像+ 自然言語 音声+動画 カテゴリ 分類 動作認識 キャプ ション生成 表現学習 音声認識 自然言語 音声 化合物 表現学習 翻訳 質問応答 会話検出 QSAR (活性予測) 応用分野 音声検索 画像キュレーション eコマース 自動運転 ロボティックス 医療画像 マーケティング
  16. 16. Deep Learningの導入
  17. 17. x1 xN ・・・・・・ h1 hH ・・・・ ニューラルネットワーク(多層パーセプトロン) k M k1 y M y1 Forward Backward ・・ ・・ 入力層 隠れ層 出力層 文書 画像 センサー チューリップ 異常確率50% カテゴリ:政治
  18. 18. Forward Propagation(順伝播) • 入力層(黄色)に値を与え、 順方向に計算を進める • Forward計算の過程で損失(Loss) とエラーを計算する • 通常エラーは計算グラフの最後のユ ニット(緑)での値を指す • 計算グラフの途中の値をエラーに加 えても良い • Lossは各ユニットの値や各レイ ヤーのパラメータの関数になって いる Forward
  19. 19. Backward Propagation(誤差逆伝播) • 計算グラフの末端のユニット (緑)にエラーを与え、逆方 向に計算を進める • Backwardの過程で各パラ メータについてのエラーを計 算する Backward
  20. 20. x1 xN ・・・・・・ h1 hH ・・・・ ニューラルネットワーク(多層パーセプトロン) k M k1 y M y1 Forward Backward ・・ ・・ 入力層 隠れ層 出力層 文書 画像 センサー チューリップ 異常確率50% カテゴリ:政治
  21. 21. 代表的なニューラルネットワーク(1) Convolutional Neural Network • 畳み込み層とプーリング層を交互に 重ねた構造をしたニューラルネット ワーク • 主に画像解析で利用されている • 畳み込み層 • 前層の近傍のユニットのみと結合し ている • ユニット間で重みを共有 • プーリング層 • ユニットの活性をまとめる • 最大値をとる(Max Pooling)か平均値 をとる(Average Pooling)のが一般的 畳み込み層 プーリング層 同じ色の結合は 重みが等しい
  22. 22. 代表的なニューラルネットワーク(2) Recurrent Neural Network • 中間層の活性が、前層と前 時刻の自分自身の活性によ り決定される • 音声・動画・自然言語など の可変長データの解析に利 用されている • 中間層のループ部分を時間 方向に展開すると通常の フィードフォワードニュー ラルネットとみなせる
  23. 23. ディープラーニングの応用例 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 23
  24. 24. ディープラーニングの応用例 画像生成 • 文字を”描く“ニューラルネット • 入力と同じ「雰囲気」の数字が出力 されている。同じ数字でも、最左画 像と生成画像は異なる事に注意 入力 生成結果 Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014. の実験を弊社で再現 • 絵を”描く“ニューラルネット http://soumith.ch/eyescream/
  25. 25. 典型的なニューラルネットワーク (多層パーセプトロン) 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)
  26. 26. DeepLearningフレームワークの構成要素 変数(n次元配列) 層 計算グラフ 最適化アルゴリズム 順伝播 逆伝播 ニューラルネット変数 層 正解データも入力 の一部とみなすと 見通しが良い 途中で分岐して もよい (一般にはDAG)
  27. 27. 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:少数の訓練データをまとめたもの 27 パラメータ更新 minibatch j Backward
  28. 28. ディープラーニングフレームワーク Chainerの紹介
  29. 29. Chainer概要 • 製作者:得居誠也、開発:Preferred Networks http://chainer.org/ • バージョン:1.0.0 (2015年6月9日) 1.20.1(2017年2月4日現在) • ライセンス: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コードで記述可能
  30. 30. 計算グラフ構築のパラダイム: Define-and-Run • 計算グラフを構築した後に、データを計算グラフに順伝播する • 計算グラフ構築方法はフレームワークにより異なる • prototxt, yamlファイル, Luaスクリプト etc. • 多くの深層学習フレームワークが採用 • Caffe/Torch/Theanoベースのフレームワーク • 長所 • メモリ管理の必要がほとんどない • 計算グラフの最適化を暗黙的に行える • 短所 • 1訓練ループの中では計算グラフを変更できない f g x f g 計算グラフ構築 データフィード
  31. 31. 計算グラフ構築のパラダイム: Define-by-Run • データの順伝播とそのデータに対する計算グラ フの構築を同時に行う • 長所 • 順伝播を通常のプログラムで記述できる • コントロールフロー(条件分岐、forループ)を計算グラ フ構築に利用可能 • 設定ファイル用のミニ言語を作る必要がない • 訓練データごとに異なる計算グラフを変更可能 • 短所 • 訓練データ全体に渡る最適化は自明ではない • 計算グラフを動的に構築するので、メモリ管理が必 要 x yf x = chainer.Variable(...) y = f(x) z = g(x) zg データフィード = 計算グラフ構築 Chainerはこの パラダイムを採用
  32. 32. LSTMをChainerをつかって実装する(1) 入力層 LSTM 出力層 • LSTM(Long short-term memory)は、 RNN(Recurrent Neural Network)の 拡張として1995年に登場した、 時系列データ(sequential data)に対する モデル、あるいは構造(architecture)の 1種です
  33. 33. 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)
  34. 34. 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層)
  35. 35. 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 出力層 各層に値をセットする
  36. 36. 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) 使用するネットワークを 定義する
  37. 37. 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というアルゴリズムを 使って最適化する
  38. 38. jupyter notebookをセットアップ しよう!
  39. 39. jupyter notebook • jupyter notebook • ノートブックと呼ばれる形式で作成したプログラムを実行し、実行結果を 記録しながら、データの分析作業を進めるためのツール • Chainer • jupyter notebookをセットアップしよう! • https://github.com/hidetomasuoka/chainer-handson
  40. 40. chainerで線画自動着色してみよう!
  41. 41. PaintChainer • 線画着色webサービスPaintsChainerを公開してみた • http://qiita.com/taizan/items/7119e16064cc11500f32 • 初心者がchainerで線画着色してみた。わりとできた。 • http://qiita.com/taizan/items/cf77fd37ec3a0bef5d9d © 2017 Retrieva, Inc. 41
  42. 42. Paint Chainerの作成の過程(近くでみてて) 1. Chainerで色を塗らせたいという強い欲望(問題設定) 2. いいアルゴリズムがないか調べる(アルゴリズムの選定) 3. カラー画像と線画データを作成して、教師データを作成する (教師データの作成) 4. うまくいくか試してみる(試行錯誤) 5. うまくいったので、サービス化 © 2017 Retrieva, Inc. 42
  43. 43. 画像提供 • https://whomor.com/ • 成果をつぶやくのはOKですが、作成者の佐藤弘康様(株式会社フーモ ア所属)の名前をつけてくださ! © 2017 Retrieva, Inc. 43
  44. 44. Dockerを使用して線画アプリを実行する • 出典:https://docs.com/asashiho/4719/web-docker © 2017 Retrieva, Inc. 44
  45. 45. Dockerfileをみてみる © 2017 Retrieva, Inc. 45
  46. 46. Dockerファイル • https://github.com/liamjones/PaintsChainer- Docker/blob/master/Dockerfile © 2017 Retrieva, Inc. 46
  47. 47. すいません!!! • Windowsの方は、Dockerが使えないため、今回ローカルで設 定することができません。。。。。。。 • https://github.com/pfnet/PaintsChainer/wiki/Installation-Guide © 2017 Retrieva, Inc. 47

×