>100 Views
May 21, 26
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2026年度前期輪読会 #5 ゼロから作る Deep Learning 2026/5/21 ニューラルネットワークの学習 (4.1~4.3) 理学部 3回生 ALAWIK Abdourrahman 0
アジェンダ ◼ 4.1 データから学習する ◼ 4.2 損失関数 ◼ 4.3 数値微分 1
アジェンダ ◼ 4.1 データから学習する ◼ 4.2 損失関数 ◼ 4.3 数値微分 2
データから学習する 目的:ニューラルネットワークの重みパラメータの値を決めたい 問題:パラメータが多すぎる、手作業で決めるのはか! GPT-1: 1億+ GPT-4: 1兆+ 解決:データに基づいて自動的に学習させる 3
3.1.1 データ駆動 具体例:画像が与えられて、それが手書きの「5」なのかに認識するアルゴリズムを作りたい 方針1:「5」と認識してほしい画像の特徴を考えて賢いアルゴリズムを作る ➢ 難しい! 方針2:画像の大事な特徴だけを抽出して、識別器を学習させる ➢ 問題に応じて特徴量を設計したり調整したりしないといけない 方針3:画像をニューラルネットワークに入力して、端から端まで機械学習に任せる 4
4.1.2 訓練データとテストデータ 機械学習の流れ:大量のデータを供給(訓練データ = 教師データ) → その中のパターンを自動 的に見出す → パラメータなどを適切に決定する → 関心の問題を解くモデルを作る 大事な点:教師データに入っていない幅広い入力に対しても適応したい ➢ 汎化能力 ➢ 教師データのパターンに適合しすぎると、現実世界のデータに適合しなくなる:過学習!! 解決:テストデータ ➢ 一部のデータを教師データに含めず、出来上がったモデルの汎化能力の評価に使う 5
アジェンダ ◼ 4.1 データから学習する ◼ 4.2 損失関数 ◼ 4.3 数値微分 6
4.2 損失関数 目的:教師データを基に、最適なパラメータを決めたい 欲しいもの:一つの指標により、モデルの適合度を量的に記述したい ➢ 損失関数:モデルが教師データに対してどれぐらい一致していないかを表す指標 モデルの出力を 𝒚、教師データ(正しい出力)を 𝒕 として、𝐸 = 𝐸(𝒚, 𝒕) 教師データに対する入力を 𝒙、モデルのパラメータを 𝜽 として、𝒚 = 𝑓𝜽 (𝒙) と書けるので、 ➢ 機械学習が損失関数の最小化問題に帰着する:𝜽 = argmin𝜽′ 𝐸 𝑓𝜽′ 𝒙 , 𝒕 7
4.2.1~4.2.2 大事な損失関数 以下、ニューラルネットワークの出力を {𝑦𝑘 }、教師データを {𝑡𝑘 } とする 1. 二乗和誤差 1 𝐸 = 𝑦𝑘 − 𝑡𝑘 2 2 𝑘 2. 交差エントロピー誤差 𝐸 = − 𝑡𝑘 log 𝑦𝑘 𝑘 delta は発散を防ぐため 𝑦 = log 𝑥 𝑦 = 𝑥 log 𝑥 8
手書き数字認識の例 「3.6 手書き数字認識」の例では、出力が10個の要素(0~1の実数)からなる ➢ i 番目は「入力の画像が数字 i である確率」と解釈できる ➢ 正しい答えは1つのみだから、教師データは one-hot表現:正解は 1、それ以外は 0 9
4.2.3 ミニバッチ学習 損失関数は1つのデータに対して定義されているが、実際の学習においては、複数の訓練データ を用意して、それらの平均損失を最小化する ➢ N個のデータに対する交差エントロピー誤差: 1 𝐸 = 𝑡𝑛𝑘 log 𝑦𝑛𝑘 𝑁 𝑛 𝑘 しかし、実際の機械学習において、訓練データが多すぎて、同時に学習させることは非現実的 (c.f: MNISTのデータセットは 60,000個の訓練データを含む) 10
4.2.3 ミニバッチ学習 ミニバッチ学習:データの一部を無作為に選び出して、それらで学習を行う ➢ サンプルデータにより全体を近似する np.random.choice が便利 例:np.random.choice(60000,10) は 0~60000未満の数字10個をランダムに選び出す 後はこれらをインデックスとしてミニバッチを取れる 11
4.2.4 [バッチ対応版] 交差エントロピー誤差の実装 バッチデータに対応した交差エントロピー誤差 t が one-hot表現ではなく、ラベルとして与えられている場合([0,0,1,0,…] -> 2) 12
4.2.5 なぜ損失関数を設定するのか? 疑問:なんで認識精度を直接指標とし使えないのか? 重要なキーワード:微分 滑らかな損失関数を使うことで、微分の符号が損失関数を最小化する方向の手がかりになる ➢ 微分が正なら:増加関数だから、パラメータを負の方向へと更新させる ➢ 微分が負なら:減少関数だから、パラメータを正の方向へと更新させる ➢ (より正確には、勾配の逆向きに沿って更新する⇒勾配降下法) しかし、認識精度はステップ関数の組み合わせでできており、ほとんどのところで微分がゼロ ➢ パラメータをすこしだけ更新しただけでは変化しない なお、同じ理由で、ステップ関数は活性化関数に使えない 13
アジェンダ ◼ 4.1 データから学習する ◼ 4.2 損失関数 ◼ 4.3 数値微分 14
4.3.1 微分 滑らかな関数 𝑓: (𝑥 − 𝜖, 𝑥 + 𝜖) → ℝ の微分: d𝑓 𝑥 𝑓 𝑥 + ℎ − 𝑓(𝑥) = lim ℎ→0 d𝑥 ℎ 未知の関数 f の微分を数値的に計算する: ➢ 極限を正確実行することは不可能なので、小さな h で近似する ➢ しかし、小さすぎると丸め誤差で 0/0 になってしまうので、適切な h で計算する: 「前方差分」: しかし数値計算である以上、誤差を含む 「中心差分」により、その誤差を減らせる: 15
補足 テーラーの定理より、𝑓 が 𝐶 2 級ならば、∃𝑥ℎ ∈ (𝑥, 𝑥 + ℎ) より、 ′′ 𝑥 𝑓 ℎ 𝑓 𝑥 + ℎ = 𝑓 𝑥 + ℎ𝑓 ′ 𝑥 + ℎ2 2 𝑓 𝑥+ℎ −𝑓 𝑥 d𝑓 𝑥 − ℎ d𝑥 ≤ max 𝑦∈ 𝑥,𝑥+ℎ 𝑓 ′′ 𝑦 ℎ =𝑂 ℎ 2 同様に、 𝑓 が 𝐶 3 級ならば ∃𝑥ℎ+ ∈ 𝑥, 𝑥 + ℎ , 𝑥ℎ− ∈ 𝑥 − ℎ, 𝑥 ′′ 𝑥 ′′′ 𝑥 + 𝑓 𝑓 ℎ 𝑓 𝑥 + ℎ = 𝑓 𝑥 + ℎ𝑓 ′ 𝑥 + ℎ2 + ℎ3 2 6 ′′ ′′′ − 𝑓 𝑥 𝑓 𝑥ℎ 𝑓 𝑥 − ℎ = 𝑓 𝑥 − ℎ𝑓 ′ 𝑥 + ℎ2 − ℎ3 2 6 なので、 ′′′ 𝑥 + + 𝑓′′′(𝑥 − ) 𝑓 𝑥+ℎ −𝑓 𝑥−ℎ d𝑓 𝑥 𝑓 ℎ ℎ − = ℎ2 2ℎ d𝑥 12 特に、 2 𝑓 𝑥+ℎ −𝑓 𝑥−ℎ d𝑓 𝑥 ℎ − < max 𝑓 ′′′ 𝑦 = 𝑂(ℎ2 ) 𝑦∈ 𝑥−ℎ,𝑥+ℎ 2ℎ d𝑥 6 16
4.3.2 数値微分の例 関数 𝑓(𝑥) = 0.01𝑥 2 + 0.1𝑥 の数値微分を求めたい まず関数を定義して、プロットしてみる 17
4.3.2 数値部微分の例 関数 𝑓(𝑥) = 0.01𝑥 2 + 0.1𝑥 の解析的な解は d𝑓 (𝑥) = 0.02𝑥 + 0.1 d𝑥 点 𝑥 = 5 と 𝑥 = 10 における微分を数値的に求める(真の値はそれぞれ 0.2 と 0.3) 前方差分の場合: 中心差分の場合: 18
4.3.3 偏微分 今回、2変数関数 𝑓 𝑥1 , 𝑥2 = 𝑥02 + 𝑥12 を考える 偏微分 ➢ 𝜕𝑓 𝜕𝑓 、 片方の変数を止めながら、指定された変数について微分を行う 𝜕𝑥0 𝜕𝑥1 𝜕𝑓 = 2𝑥0 𝜕𝑥0 𝜕𝑓 = 2𝑥1 𝜕𝑥1 数値に求めるには、他の変数を止めた1変数関数の数値微分をこれまで通りに求めればよい: 例えば、上で定義した 𝑓 の (3,4) における偏微分( 𝜕𝑓 𝜕𝑓 = 6, = 8)を数値的に求める: 𝜕𝑥0 𝜕𝑥1 19
20