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

目次

学習の概要

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

機械学習の場合

特徴量の選択

特徴量の学習

深層学習の場合

重みの自動獲得

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

学習はデータ駆動

損失関数(誤差関数)

損失関数上の地形

2乗和誤差

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

多クラス交差エントロピー誤差

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

二値交差エントロピー誤差

ミニバッチ対応版

return np.mean(- y * np.log(p) - (1-y) * np.log(1-p))

勾配の計算

微分(偏微分)で求めた勾配の示す方向は、
各場所で関数の値を最も減らす方向(である可能性が高い)。

勾配降下法

曲線の勾配計算

曲面の勾配計算

NNに対する勾配

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

見せかけの最適化を防ぐ

ミニバッチ学習

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

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

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

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

適切なバッチサイズの選択

※loss(損失)とacc(正解率)の進捗を確認する。

その他

深層学習の誤差逆伝播法

深層学習のテクニック

実装

手順

前提

ステップ 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