SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

Python - ニューラルネットワーク:14/14 学習アルゴリズムの全体像

概要

ニューラルネットワークの学習アルゴリズムを、ミニバッチ、推論、損失関数、勾配、パラメータ更新の流れとして整理する。

これまで扱った個別の処理は、学習ループの中で順番につながっている。

ここでは、入力データから損失を計算し、勾配を求めて重みを更新するまでの全体像をまとめる。

この記事で扱うこと

  • ニューラルネットワーク学習の全体的な処理順序。
  • ミニバッチ、損失関数、勾配、更新式の関係。
  • 推論処理と学習処理の違い。
  • これまでの各記事が学習アルゴリズムのどこに対応するか。

作業前に確認すること

確認項目 内容
前提記事損失関数、数値微分、勾配降下法、重み更新の記事を確認しておく。
用語重み、バイアス、ミニバッチ、学習率の意味を整理しておく。
実装視点処理の順番を追いながら、どこで値が変わるかを意識する。

学習アルゴリズムの流れ(まとめ)

ニューラルネットワークの学習とは、訓練データを基に意図した結果となる最適な重みパラメータを判別する処理を指す。

その処理を大きく分類すると、以下の手順(*1)~(*4)の4つに分かれ、これを繰り返すことで限りなく最適な重みパラメータに近づけていく。

その結果、最適な重みパラメータによって、正解率がほぼ100%となる画像認識膨大なデータに基づく根拠ある推測が実現できるようになる。

勾配法についての補足

上記の勾配に関する記述は、すべて勾配降下法によってパラメータを更新する方法となる。

そしてミニバッチは、ランダム抽出したデータ群であることから確率的勾配降下法といい、ディープラーニングのフレームワークでは、一般的にSGD(stochastic gradient descent)と呼ばれる。

※ 参考

違いを整理する

比較する項目 整理するポイント
推論と学習の混同推論は予測を出す処理、学習は重みを更新する処理。
損失を直接下げるわけではない勾配を使ってパラメータを動かし、その結果として損失を下げる。
一回で最適化されないミニバッチを変えながら何度も更新を繰り返す。

実務とのつながり

  • 学習ログの読み方
    損失や精度の推移を見ると、学習が進んでいるか、発散しているかを判断しやすい。
  • フレームワーク理解
    PyTorchやTensorFlowを使う場合でも、裏側では同じ流れでパラメータ更新が行われる。

まとめ

  • 学習は、ミニバッチ抽出、推論、損失計算、勾配計算、重み更新を繰り返す処理。
  • 損失関数はモデルの悪さを測り、勾配は改善方向を探す手がかりになる。
  • 一連の流れを理解すると、深層学習フレームワークの動作も追いやすくなる。

参考文献

  • 斎藤 康毅(\(2018\))『ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装』株式会社オライリー・ジャパン


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp