【ゼロから作るDeap Learning】4.4~4.6

>100 Views

May 21, 26

スライド概要

profile-image

AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

2026年度前期輪読会 ゼロから作るDeep Learning 第4章 ニューラルネットワークの学習 (4.4~4.6) 京都大学大学院 工学研究科 M2 河田 賢斗 0

2.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 1

3.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 2

4.

4.4 勾配 の関数の偏微分について 計算) の両方の偏微分をまとめて 右にコードを記載 𝝏𝒇 𝝏𝒇 𝝏𝒙𝟎 𝝏𝒙𝟏 として計算する(勾配(gradient)の 使用 • • 最後の 文で におけ る勾配の計算を実装 計算結果は正しく得られた 3

5.

4.4 勾配 の関数の勾配について(以下にコードを記載)  勾配は、関数 ( )の「一 番低い場所」をさしている  「一番低い場所」から遠く離 れれば離れるほど、矢印の大 きさも大きくなる  また、勾配が示す方法は各場 所において関数の値を最も減 らす方向である コードの出典: https://github.com/oreilly-japan/deep-learning-fromscratch/blob/master/ch04/gradient_2d.py 4

6.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 5

7.

4.4.1 勾配法 ニューラルネットワークの学習では、最適なパラメータ(重みとバイア ス)を見つける必要がある 最適なパラメータにおいて、損失関数は最小値をとる 損失関数の最小値(または、できるだけ小さな値)を探査する際に、勾配 を利用することが勾配法 (注意点) 勾配は各地点において損失関数の値を最も減らす方向であり、 勾配が目指す先が、損失関数の最小値となるわけではない 鞍点や極小値においても勾配は0となるが、必ずしも関数の最小値と なるわけではない →勾配の情報を参考に、進む方向を決めるのが良い 勾配方向へ進むことを繰り返して、関数の値を徐々に減少するのが勾配 法(gradient method) 6

8.

4.4.1 勾配法 関数の最小値を探索する場合: 勾配降下法(gradient descent method) 式 関数の最大値を探索する場合: 勾配上昇法(gradient ascent method) 学習率(learning rate)) 勾配法を表した数式を式(1)に記載する • 変数の値が増えても式(1)に従い、更新していく • 式(1)のステップを繰り返すことで、関数の値を減らす • 学習率の値は、大きすぎても小さすぎても、適切ではない 値を変更しながら正しく学習出来ているか、確認作業を行う 7

9.

4.4.1 勾配法 の最小値を勾配法を用いて解くコードを作成 • 学習率を は にすると、最終的な結果 となった • 学習率を にすると,最終的な結 果は上記の通りとなった ←初期値を とし、学習率は 勾配法における繰り返しの数は 最終的な結果は ほぼ正確な結果を得た , となり、 8

10.

4.4.1 勾配法 勾配法による変数の更新を図示するコードも作成 学習率はハイパーパラメータと 呼ばれ、手動で設定される →様々な学習率の値を試し、う まく学習出来るケースを探す コードの出典: https://github.com/oreilly-japan/deep-learningfrom-scratch/blob/master/ch04/gradient_method.py 9

11.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 10

12.

4.4.2 ニューラルネットワークに対する勾配 ニューラルネットワークの学習における勾配( 現出来る )は以下の式(3)で表 式 式(3) 以下ではニューラルネットワークを基にして、実際に勾配を求める実 装を行う(はじめに、simpleNetというクラスを実装する) 11

13.

4.4.2ニューラルネットワークに対する勾配 • ここでは、ランダムな 数値を重み に格納 • に1×2次元配列を組 み込み、重み との 行列積を計算すること で1×3次元行列を得る • argmax()関数により、 最大値のインデックス を出力する(0) • 正解ラベル を与え、 cross entropy 誤差を 算出→下の結果より 2.27と求まる 12

14.

4.4.2ニューラルネットワークに対する勾配 最終の行列の出力では、勾配が表現されている 前ページの例では、 と算出されている 損失関数を減らすという観点では、 をマイナス方向へ、 を プラス方向へ更新させることが良い 更新では、 のほうが よりも大きく貢献することが分かる 13

15.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 14

16.

4.5 学習アルゴリズムの実装 ニューラルネットワークの学習に関する基本について 【前提】 ニューラルネットワーク:重みとバイアスを有する 重みとバイアスを訓練データに適応するように調整すること=「学習」 【ステップ1(ミニバッチ)】 訓練データの中から一部のデータを抽出(ミニバッチ)し、この損失関数の値を減らすことを目的 【ステップ2(勾配の算出)】 ミニバッチの損失関数を減らすため、各重みパラメータの勾配を算出 【ステップ3(パラメータの更新)】 重みパラメータを勾配方向に微小量だけ更新 【ステップ4(繰り返す)】 ステップ1~ステップ3を繰り返す ニューラルネットワークの学習は、これら4つの手順で実施 使用データは無作為に抽出したものを使用するため、確率的勾配降下法 (stochastic gradient descent; SGD)と呼ばれる 15

17.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 16

18.

4.5.1 2層ニューラルネットワークのクラス 2層ニューラルネットワークをTwoLayerNetという名前のクラスとし て、以下のコードの通り実装 17

19.

4.5.1 2層ニューラルネットワークのクラス • 重みパラメータの初期化を実施 重みはガウス分布に従う乱数で初期 化・バイアスは0で初期化 • は損失関数の値を計算 predict()の結果と正解ラベルを元に、 交差エントロピーを算出 • は各重み に対する損失関数の勾配を計算 数値微分による勾配の算出法 • 実装の結果より、コードが正しく処理 されたことが分かる ↓実装の結果 18

20.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 19

21.

4.5.2 ミニバッチ学習の実装 実装コード例(1・2/6) 20

22.

4.5.2 ミニバッチ学習の実装 実装コード例(3・4/6) 21

23.

4.5.2 ミニバッチ学習の実装 実装コード例(5・6/6) 22

24.

4.5.2 ミニバッチ学習の実装 【コードの基本情報】  訓練データからミニバッチを取得 勾配法によりパラメータを更新  TwoLayerNetクラスにより、MNISTデータセットを用いて学習  (ミニバッチサイズ)=100, (訓練データの個数)=60,000  確率勾配降下による繰り返しの回数は、10,000回  損失関数の結果は右図の通りである 学習の回数が進むにつれて損失関数 の値が減少する (学習がうまくいっている) 23

25.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 24

26.

4.5.3 テストデータで評価 学習の回数が進むと損失関数の値が減少することが確認できた これは訓練データのミニバッチに対してであり、他のデータセット に同じことが言えるのかは不明瞭 訓練データ以外のデータを正しく認識できるのかを確認する必要が ある(「過学習」を防ぐ) ニューラルネットワークの学習では、「汎化能力」を身に付けること が目標 1エポック毎に、訓練データとテストデータの認識精度を記録する 25

27.

4.5.3 テストデータで評価 • 上記赤枠の部分のコードにより、認識精度を得る • for 文の繰り返しでは時間がかかるため、 1エポック毎に計算 26

28.

4.5.3 テストデータで評価 • 前ページで得られたコードの結果を以下に示す • 各エポック毎の、訓練データ及びテストデータの認識精度の値を出力(左図) • 値をグラフにプロット(右図) 27

29.

アジェンダ  4.4 勾配 • 4.4.1 勾配法 • 4.4.2 ニューラルネットワークに対する勾配  4.5 学習アルゴリズムの実装 • 4.5.1 2層ニューラルネットワークのクラス • 4.5.2 ミニバッチ学習の実装 • 4.5.3 テストデータで評価  4.6 まとめ 28

30.

4.6 まとめ ニューラルネットワークの学習について 損失関数という指標を導入 この値が最も小さくなる重みパラメータを探索 探索には、関数の傾きを用いた勾配法を使用 (本章のまとめ)  データセットは訓練データとテストデータに分けて、汎化能力をテ ストデータで評価  損失関数を指標とし、重みパラメータの勾配をもとに勾配方向に主 にの値を更新  重みパラメータの勾配は数値微分により算出可能  次章で実装する誤差逆伝播法では、高速に勾配を算出可能 29