Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PythonとKerasによるディープラーニング読書会_5章まとめ

 PythonとKerasによるディープラーニング読書会_5章まとめ

【レベルと目的に応じて2冊の本で学ぶ】DeepLearning勉強会#6
『PythonとKerasによるディープラーニング』(François Chollet 著)読書会資料
https://soleildatadojo.connpass.com/event/142768/

shinebalance

August 22, 2019
Tweet

More Decks by shinebalance

Other Decks in Programming

Transcript

  1. Agenda • Part1(第1~4章)おさらい • 第5章「コンピュータビジョンのためのディープラーニング」 ◦ 畳込みニューラルネットワークの仕組み ◦ DataAugmentation ◦

    転移学習(特徴抽出&ファインチューニング ) ◦ 学習過程の可視化 • 余録(時間あれば適宜, なければスキップ) ◦ 第5章のJupyterNotebookで苦労したこと ◦ 個人的に感じた疑問点 ◦ その他フリーテーマ 本セッションの目標:「PythonとKerasによるディープラーニング」第5章のポイントとなる 概念を振り返りつつ、ディスカッションにより理解を深める。
  2. Remember Part1... • 第1章:Deep LearningとMachine Learningの概念 • 第2章:ニューラルネットワークの基礎 ◦ 『損失関数』『オプティマイザ』『学習とは訓練データと対応する目的値を対象に、

    損失関数を最小化する NWパラメータの組み合わせを見つける事である』 etc… • 第3章:ニューラルネットワーク入門 ◦ Keras製NNで映画レビュー(二値分類),Reutersニュース(多クラス多ラベル分類 ), 住宅価格予測(回帰) • 第4章:機械学習の基礎 ◦ 評価方法(ホールドアウト法,k分割交差検証),特徴エンジニアリング ,正則化(l1,l2,Dropout), 『必要なモデルの大きさを突き止めるには、過学習に陥るモデルを開発する必要がある』 ◦ 詳しくは前回資料へ! 出典:Deep Learning with Python /Francois Chollet(原著)
  3. 畳込みニューラルネットワーク(Convolutional Neural Network) 畳み込みの処理の流れと用語を確認します。 • 入力特徴マップに対し、 ウィンドウ単位で特徴量を抽出する。 • 抽出された特徴量と フィルタで

    内積を行う(カーネル計算)。 • ウィンドウは画像を網羅するよう スライドしていく。 • 取得した特徴量を集積すると 出力特徴マップになる。 • 出力特徴マップはカーネル演算の結果を 踏まえ空間次元が変化し (畳込み)、 カーネル計算の結果に応じた チャネルを持つ すごいぜ 出典:Deep Learning with Python /Francois Chollet(原著) 要約元:Chapter.5 p128~134
  4. 畳込みニューラルネットワーク(Convolutional Neural Network) 畳み込みの過程で使われる概念を確認します。 • 入力と同じ空間次元の出力特徴マップを取得し たい場合は、パディングを行う。 ◦ 外縁部分の特徴量を捉えやすくなる。 •

    ウィンドウ(フィルタ演算を行う単位 )の スライド幅をストライドという。 • プーリング演算により、出力特徴マップを ダウンサイジングできる。 MaxPooling,AveragePooling等が実装可 ◦ 特徴マップの係数が減ることで 汎化性能が高まる ◦ 深い層ほど入力が小さくなり、対しフィルタが捉え る範囲が徐々に大きくなる。これが「パターンの空 間階層」抽出に繋がる。 出典:Deep Learning with Python /Francois Chollet(原著) 要約元:Chapter.5 p128~134
  5. Data Augmentation:データ拡張 • CNNにおいて過学習の抑制に効果がある • フィルタを通じて取得した特徴量は 移動不変性を持つ ◦ つまり歪めたり回転したデータであっても 学習に利用できる

    • KerasにおいてはImageDataGenerator()で 実装可 • 実装は別途JupyterNotebook参照 すごいぜ Deep Learning with Python 第5章のnotebook実行結果
  6. • 特徴抽出: 特徴量の抽出に、学習済の NWが抽出した 特徴量を利用する。 • 手法1: ◦ 新しいデータを学習済NWにInput ◦

    Outputを独立した全結合分類器に入力 ◦ DataAugmentationが使えない • 手法2: ◦ 学習済NWの分類器を削除して、 新しい分類層を追加 ◦ 学習済部分のパラメータは凍結したまま、新 しいデータを入力して分類器を訓練する ◦ DataAugmentationが使える • ファインチューニング: 学習済NWの 転移学習:特徴抽出 要約元:Chapter.5 p149~159 出典:Deep Learning with Python /Francois Chollet(原著)
  7. • ファインチューニング: ◦ 学習済のNWのうち、 凍結されていた畳み込み層を一部解凍して再度学習を行う。 • 学習の流れとしては次の通り。 ◦ 訓練済NWの最後に、 任意の分類層を新規作成する。

    ◦ 訓練済NWを凍結する。 ◦ 追加した分類層の訓練を行う。 ◦ 訓練済NWの任意の層も解凍する。 ◦ 解凍した層、分類層の訓練を同時に行う。 • 入力層側を凍結しておくことで 「汎用的で再利用可能な特徴量」を エンコードできる(「パターンの空間階層」の活用) 転移学習:ファインチューニング 要約元:Chapter.5 p160~166 出典:Deep Learning with Python /Francois Chollet(原著)
  8. 学習過程の可視化テクニック(活性化したチャネルとフィルタ) Deep Learning with Python 第5章のnotebook実行結果 Input ↓ conv2d_5 (Conv2D)

    (None, 148, 148, 32) max_pooling2d_5 (MaxPooling2 (None, 74, 74, 32) ↓ conv2d_6 (Conv2D) (None, 72, 72, 64) max_pooling2d_6 (MaxPooling2 (None, 36, 36, 64) ↓ conv2d_7 (Conv2D) (None, 34, 34, 128) max_pooling2d_7 (MaxPooling2 (None, 17, 17, 128) ↓ conv2d_8 (Conv2D) (None, 15, 15, 128) max_pooling2d_8 (MaxPooling2 (None, 7, 7, 128) ↓ flatten_2 (Flatten) (None, 6272) dropout_1 (Dropout) (None, 6272) dense_3 (Dense) (None, 512) dense_4 (Dense) (None, 1) ↓ Output ※点線部はイメージ。フィルタは厳密にはVGG-16のものであるため。 要約元:Chapter.5 p166~181
  9. 学習過程の可視化テクニック(Class Activation Map) • Class Activation Map • 「入力画像によってどのチャネルが  活性化しているのか」

            × 「そのクラスではどのチャネルが重要なのか」 要約元:Chapter.5 p160~166
  10. 個人的に感じている疑問点 • 「CNNが学習するパターンは移動不変である」回転不変ではないということ??? ◦ 噂に聞いている「カプセルネットワーク」がこのAnswer? • 転移学習∋データ拡張 ,ファインチューニング? ◦ 広い意味では学習済モデルを再利用しているので「転移学習」としてまとめたが、厳密には?

    • 何故、特徴抽出の手法1では DataAugmentationが使えないの? ◦ 単純に学習データが増えただけの話で、一緒では? • この本を読む限りKerasは分かりやすいが、 世の「やってみた」だと chainerやPytorchをよく見る。そんなに違うの? ◦ 悩む前に動かしたほうが早そうなので、 とりあえずPytorchで同じようにVGG-16のファインチューニングやってみます……