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

中学生でもわかる深層学習

E869120
March 29, 2024

 中学生でもわかる深層学習

第1章 理論編
・深層学習とは (p.13-)
・ニューラルネットワークとは (p.31-)
・どうやって学習するか: 勾配降下法 (p.57-)
・深層学習の注意点 (p.91-)

第2章 応用編
・分類問題 (p.110-)
・画像認識 (p.120-)
・音声認識/自然言語処理 (p.151-)
・講演のまとめ (p.167-)

E869120

March 29, 2024
Tweet

More Decks by E869120

Other Decks in Technology

Transcript

  1. 自己紹介 米田 優峻 (よねだ まさたか) • 2002 年生まれ • 2021

    年東京大学入学 • 2023 年東京大学理学部情報科学科に進学 主な実績 • 国際情報オリンピックで 3 回金メダル獲得 • プログラミングや数学の本を 3 冊出版 (著書累計 7 万部) 2
  2. 目次 1章 理論編 1.1 深層学習とは 1.2 ニューラルネットワーク 1.3 どうやって学習するか? 1.3

    ~勾配降下法~ 1.4 深層学習の注意点 (1) 1.5 深層学習の注意点 (2) 13 31 57 91 100 ……………………… ………… ………… ……………… ……………… 2章 応用編 2.1 分類問題 2.2 画像認識 2.3 音声認識・自然言語処理 講演のまとめ 110 120 151 167 …………………………… …………………………… ………… …………………………… 全 176ページ 10
  3. 深層学習とは たとえば、0.1×(1ピクセル目) + 0.2×(2ピクセル目) + … のような形の式で予測する方法が考えられます 1 ピクセル目 2

    ピクセル目 3 ピクセル目 4 ピクセル目 年齢の 予想 + 0.1×(1ピクセル目) + 0.2×(2ピクセル目) + 0.3×(3ピクセル目) : 29
  4. ニューラルネットワークとは 入力層 中間層 出力層 30 0 60 50 70 24

    21 次に中間層では前の層から順に計算が行われ 1 ピクセル目 2 ピクセル目 3 ピクセル目 35
  5. ニューラルネットワークとは 入力層 中間層 出力層 24 6 30 0 60 50

    70 24 21 次に中間層では前の層から順に計算が行われ 1 ピクセル目 2 ピクセル目 3 ピクセル目 36
  6. ニューラルネットワークとは 入力層 中間層 出力層 24 6 42 30 0 60

    50 70 24 21 最後に出力層で、予測結果 (年齢など) が出力されます 42 歳 1 ピクセル目 2 ピクセル目 3 ピクセル目 37
  7. ニューラルネットワークとは 入力層 中間層 出力層 0.1 0.2 0.1 0.0 0.1 0.3

    0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 ここで、それぞれの線には重みが付けられており この値によって計算結果が決まります 38
  8. ニューラルネットワークとは 入力層 中間層 出力層 60 50 70 24 0.1 0.2

    0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 具体的には、計算結果は (線の始点)×(重み) の合計ですが 0 未満になった場合は 0 にします※ ※これは代表的な計算方法の一例であることに注意 (他にも計算方法はある)。詳細は本節最後の補足を参照 +70×0.1 +60×0.2 +50×0.1 =24 39
  9. ニューラルネットワーク: 具体例 入力層 中間層 出力層 60 50 70 24 0.1

    0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 まず、1 層目上側は 70×0.1 + 60×0.2 + 50×0.1 = 24 41
  10. ニューラルネットワーク: 具体例 入力層 中間層 出力層 60 50 70 24 21

    0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 次に、1 層目下側は 70×0.0 + 60×0.1 + 50×0.3 = 21 42
  11. ニューラルネットワーク: 具体例 入力層 中間層 出力層 30 60 50 70 24

    21 0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 次に、2 層目上側は 24×0.9 + 21×0.4 = 30 43
  12. ニューラルネットワーク: 具体例 入力層 中間層 出力層 30 0 60 50 70

    24 21 0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 次に、2 層目下側は 24×(-0.6) + 21×0.5 = -3.9 だが 0 未満なので計算結果は 0 44
  13. ニューラルネットワーク: 具体例 入力層 中間層 出力層 24 30 0 60 50

    70 24 21 0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 次に、3 層目上側は 30×0.8 + 0×0.7 = 24 45
  14. ニューラルネットワーク: 具体例 入力層 中間層 出力層 24 6 30 0 60

    50 70 24 21 0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 次に、3 層目下側は 30×0.2 + 0×0.6 = 6 46
  15. ニューラルネットワーク: 具体例 入力層 中間層 出力層 24 6 42 30 0

    60 50 70 24 21 0.1 0.2 0.1 0.0 0.1 0.3 0.9 0.5 0.8 0.6 -0.6 0.4 0.2 0.7 1.5 1.0 最後に、出力は 24×1.5 + 6×1.0 = 42 → 予測年齢は 42 歳 47
  16. • 誤差の測り方には様々なものがあるが、2 乗 誤差の合計が採用されることが多い • 単純な絶対値の合計ではない理由は様々 • 計算しやすい • 大きい誤差のあるデータが少なくなりやすい

    • 経験上性能が良くなりやすい etc. 補足: 誤差の測り方 2 乗誤差の例 データ 1 データ 2 データ 3 (28, 34) 誤差 6 (70, 69) 誤差 1 (62, 65) 誤差 3 (予測, 正解) 2 乗誤差の合計は 62 + 12 + 32 = 46 51
  17. • 深層学習の計算では、途中で値が 0 未満に なったら 0 にする • この理由は、もし 0

    にする処理を行わない 場合、どう重みを決めても出力が 0.1x 1 + 0.2x 2 + 0.3x 3 のような形になり、複雑な式を 表現できなくなるため 補足: なぜ 0 未満を 0 にするのか? 入力 x 1 入力 x 2 入力 x 3 絶対に 0.1x 1 + 0.2x 2 + 0.3x 3 のような形になってしまう! 52
  18. • 深層学習の計算では、途中で値が 0 未満に なったら 0 にする • この理由は、もし 0

    にする処理を行わない 場合、どう重みを決めても出力が 0.1x 1 + 0.2x 2 + 0.3x 3 のような形になり、複雑な式を 表現できなくなるため • 具体例は左図 補足: なぜ 0 未満を 0 にするのか? 入力 x 1 入力 x 2 入力 x 3 例:上の重みの場合 0.625x 1 + 0.875x 2 + 1.125x 3 0.1 0.2 0.30.4 0.5 0.6 0.5 0.5 0.5 0.5 1.5 1.0 53
  19. • 深層学習の計算では、途中で値が 0 未満に なったら 0 にする • この理由は、もし 0

    にする処理を行わない 場合、どう重みを決めても出力が 0.1x 1 + 0.2x 2 + 0.3x 3 のような形になり、複雑な式を 表現できなくなるため • 具体例は左図 補足: なぜ 0 未満を 0 にするのか? 入力 x 1 入力 x 2 入力 x 3 例:上の重みの場合 0.462x 1 + 0.884x 2 + 1.789x 3 0.3 0.1 0.40.1 0.5 0.9 0.1 0.3 0.7 0.9 1.2 1.3 54
  20. • 深層学習の計算では、途中で値が 0 未満に なったら 0 にする • この理由は、もし 0

    にする処理を行わない 場合、どう重みを決めても出力が 0.1x 1 + 0.2x 2 + 0.3x 3 のような形になり、複雑な式を 表現できなくなるため • 具体例は左図 補足: なぜ 0 未満を 0 にするのか? 入力 x 1 入力 x 2 入力 x 3 例:上の重みの場合 0.318x 1 + 0.295x 2 + 0.318x 3 0.2 0.3 0.20.5 0.4 0.5 0.3 0.6 0.5 0.4 0.8 0.1 55
  21. • ここで、0 未満を 0 にする部分の処理を活性 化関数という • 活性化関数にはそれ以外にもシグモイド関 数などがあるが、とりあえず現段階では「0 未満を

    0 にする処理をするのだ」と思って おけばよい 補足: なぜ 0 未満を 0 にするのか? ※ 0 未満を 0 にする活性化関数は「ReLU」と呼ばれることがある 活性化関数の例 0 未満を 0 にする シグモイド 関数 0 未満を 半分にする 56
  22. 勾配降下法とは 勾配降下法は、ざっくり書くと下図のような流れで行われる 61 ステップ 1 ランダムに重みの初期値を決める ステップ 2 重みを少し変更することで、誤差を小さくする ステップ

    3 ステップ 2 を繰り返し、誤差をさらに小さくしていく 1.4 1.4 0.6 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 1000 1.4 0.3 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 980 -0.1 0.5 -0.1 0.5 -0.1 1.3
  23. 勾配降下法とは 勾配降下法は、ざっくり書くと下図のような流れで行われる 62 ステップ 1 ランダムに重みの初期値を決める ステップ 2 重みを少し変更することで、誤差を小さくする ステップ

    3 ステップ 2 を繰り返し、誤差をさらに小さくしていく 1.4 1.4 0.6 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 1000 1.4 0.3 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 980 1.3 0.5 0.3 0.6 0.5 0.2 0.3 0.7 0.1 0.8 誤差 965 … -0.1 -0.1 -0.1 1.3 0.5 0.5 -0.2 0.2 +0.1 1.5
  24. 勾配降下法とは 勾配降下法は、ざっくり書くと下図のような流れで行われる 63 ステップ 1 ランダムに重みの初期値を決める ステップ 2 重みを少し変更することで、誤差を小さくする ステップ

    3 ステップ 2 を繰り返し、誤差をさらに小さくしていく 1.4 1.4 0.6 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 1000 1.4 0.3 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差 980 1.3 0.5 0.3 0.6 0.5 0.2 0.3 0.7 0.1 0.8 誤差 965 … -0.1 -0.1 -0.1 1.3 0.5 0.5 -0.2 0.2 +0.1 1.5 では、誤差が減るように重みを変えるには どうすれば良いか?
  25. 1.4 1.4 誤差を減らすには 0.6 0.3 0.6 0.6 0.2 0.3 0.4

    0.7 0.1 0.8 1.4 1.4 0.601 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差が減る • 重みを増やしたら誤差が減った場合 → (当然だが) 重みを増やした方が良さそう! 65
  26. 誤差が増える 1.4 1.4 • 重みを増やしたら誤差が減った場合 → (当然だが) 重みを増やした方が良さそう! • 重みを増やしたら誤差が増えた場合

    → 逆に重みを 減らした方が良さそう! 誤差を減らすには 0.6 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 1.4 1.4 0.601 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 1.4 1.4 0.599 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差が減りそう 67
  27. 1.4 1.4 • 重みを増やしたら誤差が減った場合 → (当然だが) 重みを増やした方が良さそう! • 重みを増やしたら誤差が増えた場合 →

    逆に重みを 減らした方が良さそう! • 重みを増やしたら誤差がほぼ変わらなかった場合 → 重みを増やしても減らしても意味無さそう! 誤差を減らすには 0.6 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 1.4 1.4 0.601 0.3 0.6 0.6 0.2 0.3 0.4 0.7 0.1 0.8 誤差が変わらない 68
  28. 誤差を減らすには まとめると、ある線の重みをちょっとだけ増やしたとき 誤差が大きく減少 → 重みを増やした方が良さそう 誤差がほぼ不変 → 減らしても増やしても意味ない 誤差が大きく増加 →

    重みを減らした方が良さそう 70 そこで右図のように、誤差の減少分に比例して 重みを増やせばよいのでは? 誤差 -30 誤差 0-5 誤差 0+5 誤差 +30 重み +0.30 重み +0.05 重み -0.05 重み -0.30 重要
  29. 誤差を減らす方法 73 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 1.4 1.4 0.6

    0.3 0.6 0.6 0.2 0.3 例 1: 以下の変更で誤差が 0.3 減った場合 1.4 1.4 0.601 0.3 0.6 0.6 0.2 0.3 ?? ?? ?? ?? ?? ?? ?? ?? メモ ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  30. 誤差を減らす方法 74 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 例 1: 以下の変更で誤差が

    0.3 減った場合 ?? ?? 300 ?? ?? ?? ?? ?? メモ 0.001 の変更で 誤差が 0.3 減る → 300 をメモ 1.4 1.4 0.6 0.3 0.6 0.6 0.2 0.3 1.4 1.4 0.601 0.3 0.6 0.6 0.2 0.3 ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  31. 誤差を減らす方法 75 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 1.4 1.4 0.6

    0.3 0.6 0.6 0.2 0.3 例 2: 以下の変更で誤差が 0.2 増えた場合 1.4 1.4 0.6 0.3 0.6 0.6 0.201 0.3 ?? ?? 300 ?? ?? ?? ?? ?? メモ ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  32. 誤差を減らす方法 76 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 1.4 1.4 0.6

    0.3 0.6 0.6 0.2 0.3 例 2: 以下の変更で誤差が 0.2 増えた場合 1.4 1.4 0.6 0.3 0.6 0.6 0.201 0.3 ?? ?? 300 ?? ?? ?? -200 ?? メモ 0.001 の変更で 誤差が -0.2 減る → -200 をメモ ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  33. 誤差を減らす方法 77 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 1.4 1.4 0.6

    0.3 0.6 0.6 0.2 0.3 例 3: 以下の変更で誤差が変わらなかった場合 1.4 1.4 0.3 0.6 0.6 0.2 0.301 ?? ?? 300 ?? ?? ?? -200 ?? メモ 0.6 ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  34. 誤差を減らす方法 78 手順 A 各線について、この線の重みだけをちょっとだけ増やしたとき 1 当たり誤差がどれくらい減るかをメモする 1.4 1.4 0.6

    0.3 0.6 0.6 0.2 0.3 例 3: 以下の変更で誤差が変わらなかった場合 1.4 1.4 0.3 0.6 0.6 0.2 0.301 ?? ?? 300 ?? ?? ?? -200 0 メモ 0.6 0.001 の変更で 誤差が 0 減る → 0 をメモ ※要は偏微分を計算するということだが、大学レベルの知識になってしまうので、このような説明の仕方を行った
  35. 誤差を減らす方法 80 手順 B メモした値の何倍か (0.001 倍など) を各線に足す メモ 300

    -100 100 400 -200 300 -200 0 元々の状態 0.2 0.6 0.5 0.1 1.5 1.0 0.4 0.3 新しい状態 ?? ?? ?? ?? ?? ?? ?? ??
  36. 誤差を減らす方法 メモ 300 -100 100 400 -200 300 -200 0

    元々の状態 0.2 0.6 0.5 0.1 1.5 1.0 0.4 0.3 新しい状態 0.5 ?? ?? ?? ?? ?? ?? ?? 0.001×300 =0.3 を足す 81 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  37. 誤差を減らす方法 メモ 300 -100 100 400 -200 300 0 元々の状態

    0.2 0.6 0.5 0.1 1.5 1.0 0.3 新しい状態 0.5 ?? ?? ?? ?? ?? ?? 0.001×200 = -0.2 を足す -200 0.4 0.2 82 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  38. 誤差を減らす方法 メモ 300 -100 100 400 -200 300 元々の状態 0.2

    0.6 0.5 0.1 1.5 1.0 新しい状態 0.5 ?? ?? ?? ?? ?? 0.001×0 = 0 を足す -200 0.4 0.2 0 0.3 0.3 83 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  39. 誤差を減らす方法 メモ 300 100 400 -200 300 元々の状態 0.2 0.5

    0.1 1.5 1.0 新しい状態 0.5 ?? ?? ?? ?? -200 0.4 0.2 0 0.3 0.3 0.001×-100 = -0.1 を足す -100 0.6 0.5 84 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  40. 誤差を減らす方法 メモ 300 400 -200 300 元々の状態 0.2 0.1 1.5

    1.0 新しい状態 0.5 ?? ?? ?? -200 0.4 0.2 0 0.3 0.3 -100 0.6 0.5 100 0.5 0.6 0.001×100 = 0.1 を足す 85 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  41. 誤差を減らす方法 メモ 300 -200 300 元々の状態 0.2 1.5 1.0 新しい状態

    0.5 ?? ?? -200 0.4 0.2 0 0.3 0.3 -100 0.6 0.5 100 0.5 0.6 400 0.1 0.5 0.001×400 = 0.4 を足す 86 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  42. 誤差を減らす方法 メモ 300 300 元々の状態 0.2 1.0 新しい状態 0.5 ??

    -200 0.4 0.2 0 0.3 0.3 -100 0.6 0.5 100 0.5 0.6 400 0.1 0.5 0.001×-200 = -0.2 を足す -200 1.5 1.3 87 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  43. 誤差を減らす方法 メモ 300 300 元々の状態 0.2 1.0 新しい状態 0.5 1.3

    -200 0.4 0.2 0 0.3 0.3 -100 0.6 0.5 100 0.5 0.6 400 0.1 0.5 0.001×300 = 0.3 を足す -200 1.5 1.3 88 手順 B メモした値の何倍か (0.001 倍など) を各線に足す
  44. 誤差を減らす方法 メモ 300 300 元々の状態 0.2 1.0 新しい状態 0.5 1.3

    -200 0.4 0.2 0 0.3 0.3 -100 0.6 0.5 100 0.5 0.6 400 0.1 0.5 0.001×300 = 0.3 を足す -200 1.5 1.3 89 手順 B メモした値の何倍か (0.001 倍など) を各線に足す あとはこの手順を 何度も繰り返していくだけ!
  45. 関数の近似で理解しよう x y 5 4 3 2 1 1 2

    3 4 5 6 例として、上図のデータを関数で近似したいとする (データは y=0.5x+2 プラスマイナス誤差であるとする) 訓練データ 未知データ 95
  46. 関数の近似で理解しよう x y 5 4 3 2 1 1 2

    3 4 5 6 確かに訓練データでは、1 次関数より 3 次関数※ の方が 精度よく近似できている x y 5 4 3 2 1 1 2 3 4 5 6 1 次 関 数 3 次 関 数 ※ 3 次関数は、y=〇x3 + 〇x2 + 〇x + 〇 の形で表される関数のことを指す 96
  47. 関数の近似で理解しよう x y 5 4 3 2 1 1 2

    3 4 5 6 ところが未知データでは、3 次関数の方が 何倍も誤差が出てしまっている! x y 5 4 3 2 1 1 2 3 4 5 6 1 次 関 数 3 次 関 数 97
  48. 深層学習の注意点 (2) 102 そして一般には、学習率を大きくするほど 重みが速く変わるため、学習が速く進む 学習率 0.0001 誤差 1000 1.4

    1.4 0.6 0.3 0.6 0.6 0.2 0.3 誤差 960 1.4 1.4 0.63 0.29 0.61 0.61 0.18 0.29 誤差 770 1.4 1.4 0.9 0.2 0.7 0.7 0.0 0.2 学習率 0.001
  49. 深層学習の注意点 (2) 103 しかし、学習率を大きくしすぎると 重みが変化しすぎるため、逆に誤差が増えてしまう※ 学習率 0.001 誤差 1000 1.4

    1.4 0.6 0.3 0.6 0.6 0.2 0.3 誤差 15000 1.4 1.4 30.6 -9.7 10.6 10.6 -19.8 -9.7 学習率 0.1 誤差 770 1.4 1.4 0.9 0.2 0.7 0.7 0.0 0.2 ※最適な場所を通り過ぎてしまう、と考えておくとよい
  50. 深層学習の注意点 (2) 104 しかし、学習率を大きくしすぎると 重みが変化しすぎるため、逆に誤差が増えてしまう※ 学習率 0.001 誤差 1000 1.4

    1.4 0.6 0.3 0.6 0.6 0.2 0.3 誤差 15000 1.4 1.4 30.6 -9.7 10.6 10.6 -19.8 -9.7 学習率 0.1 誤差 770 1.4 1.4 0.9 0.2 0.7 0.7 0.0 0.2 ※最適な場所を通り過ぎてしまう、と考えておくとよい したがって、学習率の調整も重要 大きすぎても小さすぎてもダメ
  51. まず、次の問題を考えよう 35度 30度 25度 晴 曇 雨 0 時, 1

    時, 2 時, …, 24 時の気温を受け取り この日は晴れ/曇り/雨のどれであるかを正確に判定してみよう 111
  52. • 3 クラスに分類する場合より、100 クラスとか に分類する場合を考えるとわかりやすい • 1.5 以下のときグループ 1、1.5~2.5 のときグ

    ループ 2、2.5~3.5 のときグループ 3…、と割 り振る場合を考える • このとき、自信を持ってグループ 50 だと言え る入力についても、少し誤差が加わっただけ でグループ 49 や 51 に変わってしまう! 精度が出ない理由 7.00 5.00 6.00 50.0 7.02 5.01 6.03 50.6 グループ 51 グループ 50 わずかな誤差 114
  53. これで上手くいく理由 • たとえば 100 クラス分類でグループ 50 が答えの場合を考える • もし答えに自信がある場合、入力に 少し誤差が出たくらいではグループ

    50 が最大であることは揺らがない • 前述の問題点が解消される 7.00 5.00 6.00 グループ 50: 40.0 その他最大: 8.0 7.02 5.01 6.03 グループ 50: 38.9 その他最大: 8.5 わずかな誤差 118
  54. 発展: 確率付き分類 実は「確率 95% で雨」のように、確率付きの 分類を行うこともできる 具体的には、晴, 曇, 雨の出力がそれぞれ a,

    b, c とし、e=2.718… を自然対数の底とすると • 晴の予測確率は ea ÷ (ea + eb + ec)※ • 曇の予測確率は eb ÷ (ea + eb + ec)※ • 雨の予測確率は ec ÷ (ea + eb + ec)※ ※別に e の何乗ではなく 2 の何乗、としても本質的には変わらないが、後々計算しやすいのでこの値を用いることが多い 晴れ 4.0 曇り 5.0 雨 8.0 e4 + e5 + e8 e4 = 約 2% e4 + e5 + e8 e5 = 約 5% e4 + e5 + e8 e8 = 約 94% 119
  55. 畳み込みニューラルネットワーク ステップ 1-2 次に、畳み込みをしたデータに対してプーリングを行う プーリングは 2×2 毎※に区切って max (または平均) を取る処理

    ※もちろん、2×2 毎ではなく 3×3 毎などになる場合もある 15 14 5 14 6 8 5 6 9 16 15 18 9 17 16 15 最大値は 15 15 ? ? ? 145
  56. 畳み込みニューラルネットワーク ステップ 1-2 次に、畳み込みをしたデータに対してプーリングを行う プーリングは 2×2 毎※に区切って max (または平均) を取る処理

    ※もちろん、2×2 毎ではなく 3×3 毎などになる場合もある 15 14 5 14 6 8 5 6 9 16 15 18 9 17 16 15 最大値は 14 15 14 ? ? 146
  57. 畳み込みニューラルネットワーク ステップ 1-2 次に、畳み込みをしたデータに対してプーリングを行う プーリングは 2×2 毎※に区切って max (または平均) を取る処理

    ※もちろん、2×2 毎ではなく 3×3 毎などになる場合もある 15 14 5 14 6 8 5 6 9 16 15 18 9 17 16 15 最大値は 17 15 14 17 ? 147
  58. 畳み込みニューラルネットワーク ステップ 1-2 次に、畳み込みをしたデータに対してプーリングを行う プーリングは 2×2 毎※に区切って max (または平均) を取る処理

    ※もちろん、2×2 毎ではなく 3×3 毎などになる場合もある 15 14 5 14 6 8 5 6 9 16 15 18 9 17 16 15 最大値は 18 15 14 17 18 148
  59. 単純な方法 一番単純な方法は、各フレームでの音の大きさを入力として 出力が 2 個の単純なニューラルネットワークを使う方法 入力層 中間層 出力層 1 フレーム目:

    60dB 2 フレーム目: 50dB 3 フレーム目: 40dB 4 フレーム目: 70dB 人の声である 人の声でない 154 しかしこの方法では 精度が出ない
  60. リカレントニューラルネットワーク 1 フレーム目の結果は 1 フレーム目の入力データから決まり 1 個目の データ 2 個目の

    データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 158
  61. リカレントニューラルネットワーク 2 フレーム目の結果は 1 フレーム目の中間層と 2 フレーム目の入力データから決まり 1 個目の データ

    2 個目の データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 159
  62. リカレントニューラルネットワーク 3 フレーム目の結果は 2 フレーム目の中間層と 3 フレーム目の入力データから決まり 1 個目の データ

    2 個目の データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 160
  63. リカレントニューラルネットワーク 4 フレーム目の結果は 3 フレーム目の中間層と 4 フレーム目の入力データから決まる 1 個目の データ

    2 個目の データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 161
  64. リカレントニューラルネットワーク 4 フレーム目の結果は 3 フレーム目の中間層と 4 フレーム目の入力データから決まる 1 個目の データ

    2 個目の データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 前の結果が利用されるため 精度が上がる 162
  65. RNN のもう 1 つの利点 実はリカレントニューラルネットワークの重みは時系列毎に変わらない たとえば青の辺の重みはすべて同じ 1 個目の データ 2

    個目の データ 3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 163
  66. RNN のもう 1 つの利点 1 個目の データ 2 個目の データ

    3 個目の データ 4 個目の データ 出力 そのまま コピー そのまま コピー そのまま コピー 実はリカレントニューラルネットワークの重みは時系列毎に変わらない たとえば赤の辺の重みもすべて同じ 164