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

ゼロから始めるニューラルネットワーク CNN編

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

ゼロから始めるニューラルネットワーク CNN編

KC3 2023の学生勉強会に登壇した際に使用したスライドです。

Avatar for Yamamoto

Yamamoto

June 05, 2024
Tweet

More Decks by Yamamoto

Other Decks in Technology

Transcript

  1. 始める前に • 勉強会中たびたび質問します(HTTP 200 OK) • スライドのこの⾊の単語・⽂章はぜひメモを︕ • 時間の都合上勉強会中は質問受け付けられないかも •

    トイレや具合が悪くなった⼈は何も⾔わず⾏って頂いて⼤丈夫で す︕ • つまらねえなと思ったら寝るかYouTubeとかみててください
  2. ⽬次 • ⾃⼰紹介 • ニューラルネットワークの概要 • ニューラルネットワークの基礎 ~休憩~ • CNNの仕組み

    • やってみよう ~説明編~ • やってみよう ~ハンズオン編~ 座学: 約60分 ハンズオン: 約30分
  3. ⾃⼰紹介 • 名前: ⼭本 瑛悟 • 所属: 近畿⼤学理⼯学部情報学科 • 団体:

    KINDAI Info-Tech HUB/CSG • 学年: 学部4年 • 専⾨: ⼤規模ニューラルネットワークの分散処理 • やってたこと: web系, 深層学習, 強化学習, 深層強化学習 • ひとこと: はやおきつらい
  4. ニューラルネットワークの中⾝ 𝑢! = # "#$ % 𝑤" 𝑥" + 𝑏!

    𝑦 = 𝑓(𝑢) 𝑥# : ⼊⼒ 𝑤# : 重み 𝑓: 活性化関数 𝑦: 出⼒ ユニット 𝑚 = 2のとき 𝑢 = 𝑤! 𝑥! + 𝑤" 𝑥" + 𝑏
  5. 各パラメータの解説 • 重み(weight) • 各⼊⼒の重要度を⽰す • 重みは誤差を最⼩化するように調整される → 最適化アルゴリズム •

    バイアス(bias) • ユニットの出⼒を調整 • 活性化関数の閾値を調整 • ユニットの「感度」を調整する役割 • バイアスも同様に調整される
  6. 補⾜(式の表現) 𝒖 = 𝑾𝒙 + 𝒃 𝑧 = 𝑓(𝑢) 𝒛

    = 𝒇(𝒖) 𝑢! = # "#$ % 𝑤" 𝑥" + 𝑏!
  7. ニューラルネットワークにおける学習とは • ⼀⾔で⾔うと → 損失関数(コスト関数)を最⼩化する → 損失関数を最⼩化するために重みやバイアスを更新するプロセス • 損失関数 •

    ニューラルネットワークの出⼒と⽬的の出⼒との差を数値化したもの • 最適化アルゴリズム • 勾配法(勾配降下法)を⽤いる
  8. 損失関数の具体例 活性化関数はシグモイド関数とする 𝑓 𝑥 = 1 1 + 𝑒#$ モデルの出⼒を

    ̂ 𝑧 = 𝑓 𝑥! 𝑤! 、正解値が𝑧 = 1とする。 ℒ = (𝑧 − ̂ 𝑧)" = 1 − 1 1 + 𝑒#$!%! " 最⼩になるような 𝑤! を求める
  9. 畳み込み層 • 似たパターン → 値が⼤きくなる 特徴量抽出 𝑥!! 𝑥!" 𝑥!# 𝑥!$

    𝑥!% 𝑥"! 𝑥"" 𝑥"# 𝑥"$ 𝑥"% 𝑥#! 𝑥#" 𝑥## 𝑥#$ 𝑥#% 𝑥$! 𝑥$" 𝑥$# 𝑥$$ 𝑥!% 𝑥%! 𝑥%" 𝑥%# 𝑥%$ 𝑥%% ℎ!! ℎ!" ℎ!# ℎ"! ℎ"" ℎ"# ℎ#! ℎ#" ℎ## 𝑢"" 𝑢## x = 𝑢!! 𝑢!" 𝑢!# 𝑢"! 𝑢"" 𝑢"# 𝑢#! 𝑢#" 𝑢## 𝑢!! = 𝑥!! ℎ!! + 𝑥!" ℎ!" + ⋯ + 𝑥'' ℎ'' フィルター(カーネル) 特徴マップ フィルタの数だけ特徴マップが⽣成
  10. プーリング層 位置がある程度変化しても値が変化しない → 頑健性 𝑥!! 𝑥!" 𝑥!# 𝑥!$ 𝑥"! 𝑥""

    𝑥"# 𝑥"$ 𝑥#! 𝑥#" 𝑥## 𝑥#$ 𝑥$! 𝑥$" 𝑥$# 𝑥$$ 𝑢!! 𝑢!" 𝑢"! 𝑢"" 𝑢!! = 𝑚𝑎𝑥 𝑥!! 𝑥!" 𝑥"! 𝑥"" 最⼤プーリング
  11. 出⼒層 • 多くは、全結合層の出⼒に活性化関数を通したもの • ソフトマックス関数 𝑦! 𝑦" 𝑦$ ⋮ 𝑢!

    𝑢" 𝑢$ 𝑦! = 𝑒"& 𝑒"' + 𝑒"( + ⋯ 𝑒") 分⼦: ⼤きい値をより強調 分⺟: 規格化のため 0~1の値を取り、総和が1 → 確率に対応
  12. conv1 → max_pool2d ••• ••• ••• 幅: 32 ⾼さ: 32

    チャンネル: 32 幅: 16 ⾼さ: 16 チャンネル: 32
  13. max_pool2d → conv2 ••• ••• ••• 幅: 16 ⾼さ: 16

    チャンネル: 32 幅: 16 ⾼さ: 16 チャンネル: 64
  14. conv2 → max_pool2d(2回⽬の⽅) ••• ••• ••• 幅: 16 ⾼さ: 16

    チャンネル: 64 幅: 8 ⾼さ: 8 チャンネル: 64
  15. max_pool2d(2回⽬) → flatten • Flatten(平滑化) • CNNでは全結合層に渡す前に使う • Softmax関数で扱えるようにする •

    多次元テンソルを任意の次元まで平滑化する → 多次元の特徴マップを⼀次元に変換
  16. max_pool2d(2回⽬) → flatten ••• ••• 幅: 16 ⾼さ: 16 チャンネル:

    64 幅: 8 ⾼さ: 8 チャンネル: 64 [………] 配列のサイズ 8x8x64 flatten
  17. flatten → fc1 → relu → fc2 [………] 配列のサイズ 8x8x64

    [………] 配列のサイズ 256 [………] 配列のサイズ 10 → 各クラスの確率 torchのCrossEntropyLossは ⾃動的にSoftmax関数使ってくれる
  18. ではやってみましょう︕ • 層の数 • チャンネルの数 • 活性化関数の種類 • 最適化アルゴリズムの種類 •

    バッチ正規化 • ドロップアウト 精度を上げられるよう に⼯夫してみよう︕
  19. 引⽤・参考 • https://tjo.hatenablog.com/entry/2020/08/16/153129 • https://axa.biopapyrus.jp/deep-learning/perceptron.html • 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) •

    ⾼校数学からはじめる深層学習⼊⾨(畳み込みニューラルネットワークの理解) • Chat-GPT(校正と図の出⼒に使⽤)