.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

学習の概要

ニューラルネットワークにおいては、特徴量を機械が選択し重みを学習(自動獲得)する。

機械学習の場合

特徴量の選択

特徴量の学習

深層学習の場合

重みの自動獲得

学習フェーズでは、信号は逆方向に伝播する。

学習はデータ駆動

損失関数(誤差関数)

2乗和誤差

回帰の場合(ニューラルネットワークの出力と正解となる教師データの各要素の差の二乗の総和の2分の一。

交差エントロピー誤差

多値分類(正解ラベルのykデータの底がeの自然対数 log eを計算する。

勾配の計算

勾配の示す方向は、各場所で関数の値を最も減らす方向。

勾配法

NNに対する勾配

ニューラルネットワークの学習における勾配は、
重みパラメタに関する損失関数勾配となる。

ミニバッチ学習

バッチ、ミニバッチ、オンライン学習

バッチ学習(一括学習)ミニバッチ学習オンライン学習(逐次学習)
効率
安定性

ミニバッチ学習を訓練用データセットに適用

バッチサイズ、イテレーション数、エポック数

その他

深層学習の誤差逆伝播法

深層学習のテクニック

実装

手順

前提

ステップ 1

ステップ 2

ステップ 3

重みパラメタを勾配の方向に微小量だけ更新する。

ステップ 4

ステップ 1, ステップ 2, ステップ 3を繰り返す。

2層NNのクラス

TwoLayerNet?クラス
https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch04/two_layer_net.py

変数

#変数説明
1paramsニューラルネットワークの重みパラメタのディクショナリ変数
1-1params['W1']第1層の重み
1-2params['b1']第1層のバイアス
1-3params['W2']第2層の重み
1-4params['b2']第2層のバイアス
2gradsnumerical_gradientで計算された勾配を保持するディクショナリ変数
1-1params['W1']第1層の重みの勾配
1-2params['b1']第1層のバイアスの勾配
1-3params['W2']第2層の重みの勾配
1-4params['b2']第2層のバイアスの勾配

メソッド

#メソッド シグネチャ引数説明
1__init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):コンストラクタ
1-1selfインスタンス
1-2input_size入力層のニューロンの数
1-3hidden_size隠れニューロンの数
1-4output_size出力層のニューロンの数
1-5weight_init_std・・・
2predict(self, x):推論を行う
2-1selfインスタンス
2-2x画像データ
3loss(self, x, t):損失関数の値を求める
3-1selfインスタンス
3-2x画像データ
3-3t正解ラベル
4accuracy(self, x, t):推論の精度を求める
4-1selfインスタンス
4-2x画像データ
4-3t正解ラベル
5numerical_gradient(self, x, t):lossを使用し各重みパラメタの勾配を求める
5-1selfインスタンス
5-2x画像データ
5-3t正解ラベル
6gradient(self, x, t):numerical_gradientの高速版
6-1selfインスタンス
6-2x画像データ
6-3t正解ラベル

学習過程の実装

勾配法により(損失)関数を少なくしていく。

学習結果を確認する実装

学習結果を使用して、学習データとテストデータを推論する。

ハイパーパラメタ

人間が手動で設定するパラメタ


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS