第3回 ゼロから作るオトナのDeep Learning

第3回 ゼロから作るオトナのDeep Learning

4d8c732195d7beca7a2ea743e164245e?s=128

Takahiro Yano

May 10, 2017
Tweet

Transcript

  1. ゼロから作るオトナの DeepLearning 第3回 画像・テキスト編 2017/5/10 矢野高宏

  2. 自己紹介 • 矢野高宏 • プログラマー(画像処理、自然言語処理、Web アプリ、ゲーム制作、お絵描き、3DCG)

  3. DeepLearningのライブラリ Kerasを使おう • Kerasは人気のDeepLearningのライブラリ – Tensorflow/Theranoをバックエンドにして動く • 日本語のドキュメントある https://keras.io/ja/ •

    現在、Kerasは過渡期にある – マルチバックエンド版(通常版) Keras → Keras2へ (2017/3月) – Keras2が順次TensorFlowに組み込まれる • Tensorflow 1.1版 tf.contrib.keras (2017/4/21) • Tensorflow 1.2版 tf.keras (2017/6~?)
  4. まとめるとこうなる • やたら12がおおい Tesorflow 1.2 Keras2(組込み) Tesorflow 0.12 Keras1.2 2017/3くらいまで

    2017/6くらいから 現在過渡期!
  5. まとめるとこうなる Tesorflow 1.2 Keras2(組込み) Tesorflow 0.12 Keras1.2 2017/3くらいまで 2017/6くらいから 現在過渡期!

    ↑今回はこっちを使います • やたら12がおおい
  6. 紹介するモデル • 画像 – Mnist(手書き数字の認識、分類問題) – SRCNN(画像の超解像、回帰問題) – VGG16(一般物体認識、分類問題) –

    SRGAN(画像の超解像、回帰問題) • テキスト – IMDB(映画レビューのネガポジ分類) • LSTMまたはCNNで解く
  7. 本日の参考図書 • ゼロから作るDeeplearning • ディジタル画像処理 [改訂新版] – 画像処理の基礎を学ぶのに良い本

  8. アジェンダ • Convolution処理(畳みこみ)について – 平均化、微分、鮮鋭化など • 画像のDeeplearning – Convolutional Neural

    Network(CNN) • ConvolutionをDeeplearningで使おう! • Conv2D層、Conv1D、Conv3D層 – 分類問題、回帰問題の例 • テキストのDeeplearning – RNN/LSTM層について – 分類問題、回帰問題の例
  9. アジェンダ • Convolution処理(畳みこみ)について – 平均化、微分、鮮鋭化など • 画像のDeeplearning – Convolutional Neural

    Network(CNN) • ConvolutionをDeeplearningで使おう! • Conv2D層、Conv1D、Conv3D層 – 分類問題、回帰問題の例 • テキストのDeeplearning – RNN/LSTM層について – 分類問題、回帰問題の例
  10. 画像はピクセル(画素)で構成されている

  11. Convolution(畳みこみ) • 画像処理・信号処理の基本的な技術項目 • フィルタリングともいう

  12. Convolutionって結局何よ • 注目画素周辺の画素値とフィルタの係数の 積和演算(線形演算)

  13. 具体的なフィルター(平均化) 画像がぼける →画像の低周波成分を抽出している

  14. 具体的なフィルター(微分) 縦のエッジが抽出される 横のエッジが抽出される

  15. 実際に画像にフィルタをかけてみよう (Convolutionやってみよう)

  16. 結局Convolution(畳み込み)は 何をやっているか? • 画像の特徴を抽出している(特徴抽出) – 画像から有効な情報を引き出す手段 – 縦エッジ、横エッジ、低周波成分、高周波成分 • フィルタ係数を変更することにより、さまざまな情報を

    引き出せる
  17. アジェンダ • Convolution処理(畳みこみ)について – 平均化、微分、鮮鋭化など • 画像のDeeplearning – Convolutional Neural

    Network(CNN) • ConvolutionをDeeplearningで使おう! • Conv2D層、Conv1D、Conv3D層 – 分類問題、回帰問題の例 • テキストのDeeplearning – RNN/LSTM層について – 分類問題、回帰問題の例
  18. Convolutional Neural Network (CNN)

  19. Convolutional Neural Network (CNN) →通常のNeural Networkに   Convolution層(とPooling層)が加わった

  20. CNN といままでの違い • Conv層とPooling層が加わった 前段でConvolution(特徴抽出) 後段で全結合層(次元調整)という典型的なCNNの形態

  21. 通常のConvolutionと CNNのConvolutionの違いは? • CNNのフィルタは、係数が未知数! – 学習で最適化する ? ? ? ?

    ? ? ? ? ? 通常のConvolution フィルタの係数が決まっており 用途も決められていた(平均化など) CNNのConvolution フィルタの係数が決まっており 人工知能の目的に応じて 自動的に最適な値になる
  22. Convolution層 • 画像にConvolution処理をかける層 • データの次元がどう変化していくかを把握す るのが大事 定番のConvolutional Neural Networkをゼロから理解する https://deepage.net/deep_learning/2016/11/07/convolutional_neural_network.html

  23. Pooling層 • 画像のような高次元なデータを上手に低次元化していく方法 – 特徴的な(値の高い)データのみ残して画像のサイズを2分の1にする – たくさん組み合わせると任意の位置の特徴抽出が可能になる – relu活性化関数と相性がよさそう https://www.quora.com/What-is-max-pooling-in-convolutional-neural-networks

    MaxPooling
  24. CNNの例を見てみる その1 • mnist_cnn.py – 手書き数字の分類問題 • mnistデータセットは ディープラーニングの Hello World

    • コードを見ながらビジュ アルがイメージできると よい
  25. Dropout層 • 過学習を抑制する方法として知られている • 学習が進まないときの調整項目としても有効だと思う – NNのパラメータ空間がランダムに変化する • いろんなところに挟んでみよう ←Dense

    ←Dense ←Dense ←Dropout (線の切断) ←Dropout (線の切断) Kerasなら1行でOK 引数には切断する割合を入れる 引数には0~1の値をいれる (0~0.5が好ましい)
  26. Neural Networkの学習の ざっくりとした説明(復習) [ ] OR NAND OR 2 NAND

    2 OR 1 NAND 1 b b w w w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ AND AND 2 AND 1 b w w ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ https://elix-tech.github.io/images/2016/kaggle_facial_keypoints/animation1.gif ( ) ⋯ , , , , 2 1 2 1 w w x x f y = 正解データ : y′ 2 y y loss − ′ = NNのパラメータ空間 等高線はlossをあらわす 転がってる球が現在のNNの状態 転がり方が最適化方法の違い は予測データ y 定数 定数 変数 XORのNN 2 w 1 w y′ ) 比較(loss 入力データ
  27. CNNの例を見てみる その2 • SRCNN(超解像、回帰問題) – http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html – https://github.com/arXivTimes/arXivTimes/issues/218 – https://github.com/titu1994/Image-Super-Resolution 9

    x 9 のフィルタ 64枚 1 x 1 のフィルタ 32枚 5 x 5 のフィルタ 3枚
  28. https://github.com/titu1994/Image-Super-Resolution/blob/master/models.py 455~478 行目

  29. CNNの例を見てみる その3 • VGG16(一般物体認識) – 1000個の物体を見分ける – https://keras.io/ja/applications/#vgg16 – https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py

  30. VGG16のsummary()

  31. GAN (generative adversarial networks) • 最新の学習方法 – いろんなものに適用可能な考え方 • 敵対的ネットワーク

    – 爆発的に論文が増えている – https://deephunt.in/the-gan-zoo-79597dc8c347
  32. Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network (SRGAN,

    2016.9) • https://arxiv.org/abs/1609.04802 正解画像 SRGAN SRResNet Bicubic拡大 GANは驚異的な性能を いろんな分野で出している
  33. アジェンダ • Convolution処理(畳みこみ)について – 平均化、微分、鮮鋭化など • 画像のDeeplearning – Convolutional Neural

    Network(CNN) • ConvolutionをDeeplearningで使おう! • Conv2D層、Conv1D、Conv3D層 – 分類問題、回帰問題の例 • テキストのDeeplearning – RNN/LSTM層について – 分類問題、回帰問題の例
  34. RNN/LSTM NN NN + state vector data1 data2 data3 :

    data1 data2 data3 : RNN/LSTM 普通のNN output output
  35. RNN/LSTM NN NN + state vector data1 data2 data3 :

    data1 data2 data3 : 過去のデータも把握する 入力されたデータ だけ把握する RNN/LSTM 普通のNN output output
  36. RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 教師データで学習によって作られる

  37. RNN • Reccurent Neural Network – 再帰ネットワークを持つNN(時系列データに強い) 入力 出力 ←出力以外にもう一個出力を出して

      それを次の時間(t+1)の入力に入れる t+1
  38. 時間方向に展開

  39. 時間方向に展開 時間の隔たり

  40. 時間方向に展開 時間の隔たり ht の出力に x0 ,x1 ,...,xt-1 の情報が使える

  41. • 時間差が長いとデータの影響が薄くなる( ノД`) RNNの問題点 • 時間差が短かいならデータを利用できる(^◇^)

  42. • 時間差が長いとデータの影響が薄くなる( ノД`) RNNの問題点 • 時間差が短かいならデータを利用できる(^◇^) 例えば... x0,x1を入力したときに h3を正しく出力するような Aは学習で作れる!

    こっちはht+1 とx0 ,x1 が 時間的に遠すぎるので Aは正しく作れない!
  43. LSTMの登場 Long/Short Term Memory 短期記憶も長期記憶もどっちもできるRNN

  44. • RNN • RNN/LSTM

  45. RNN/LSTM NeuralNetworkの単層 (行列+活性化関数) ベクトルの要素ごとの演算 ベクトルの結合 ベクトルのコピー

  46. RNN/LSTM NeuralNetworkの単層 (行列+活性化関数) ベクトルの要素ごとの演算 ベクトルの結合 ベクトルのコピー 結合 コピー コピー コピー

    コピー コピー 要素ごとの掛け算 要素ごとの足し算 要素ごとに tanhを施す 行列がそれぞれの箱に 1つずつ入っている。 A,B,C,Dみたいな。
  47. RNN/LSTMの肝のアイデア • ステート • ゲート – 3つのゲートでステートベクトルのデータをいじっていい感じにする ←このラインを流れる ベクトルがステートベクトルCt ゲート構造

    忘却ゲート 入力ゲート 出力ゲート
  48. 忘却ゲート • 忘れ方は Wf と bf で決定される • Wf と

    bf は教師データを利用した学習で求める 上式で ft を出したら ft ⊗ Ct-1 で忘却! シグモイド関数 (0〜1の範囲の出力にする) • 前時刻のステートベクトルの内容をどれだけ消去するかを 決定する
  49. でステートベクトルに情報付加! 入力ゲート • 入力ベクトルと前時刻の出力ベクトルをどれだけ        ステートベクトルに追加するか決定する • Wi , bi ,

    Wc , bc を学習で求める ( ) 1 1 ~ − − ⊗ ⊕ t t t C i C
  50. 出力ゲート • ステートベクトルから必要な情報だけを取り出し        出力ベクトルとする • ステートベクトルは出力ベクトルに大分似ている ⊗

  51. RNN/LSTM 動作まとめ • ステートベクトルから情報削除(忘却) • ステートベクトルに情報負荷(入力) • ステートベクトルから必要な情報だけ読み出し(出力) • なにを忘れるか、なにを入力するか、何を読み出すかは  

    学習データによって自動的に最適化される • この方法を使うと短期記憶、長期記憶どちらもうまくいく、   と言われている – 自然言語処理を代表として、時系列データでよく利用される手法 • 参考 – http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  52. 実際にLSTMのコードを見てみる • imdb_lstm.py – LSTMを使ったテキスト解析 • imdb_cnn.py – Conv1D(1次元CNN)を使ったテキスト解析 –

    実はLSTMだけじゃなくて、CNNもテキスト解析に 使える
  53. 最後に • 何か面白いトピックがあればまたDeeplearning勉 強会やりたい • Unity3Dゲーム制作の会やる(熊ゆに) – もくもく会/Game A Week/勉強会、アセットレビュー

  54. END