Deeplearning 4jではニューラルネットワークの各パラメータ/ハイパーパラメータを関数で設定できる。ニューラルネットワーク全体に関わるパラメータは NeuralNetConfiguration.Builderクラスに対して設定し、各層に関わるパラメータはLayer.Builderクラスに対し て設定する。以下にDeeplearning 4jにおける主な設定項目を示す。すべてのパラメータ一覧はJavaDoc(
*1,
*2,
*3)やリファレンス(
*4)を参照のこと。
ニューラルネットワーク全体(NeuralNetConfiguration.Builder)の設定項目
NeuralNetConfiguration.Builderで設定する主な項目は以下の通りである。
| 設定項目 |
内容 |
| seed関数 |
ランダム値の生成に利用するシード値を指定 |
| iterations関数 |
1回のMultiLayerNetwork::fit関数呼出で学習する回数を指定 |
| learningRate関数 |
学習率\(\eta\)を指定。デフォルトは0.1 |
| miniBatch関数 |
ミニバッチ学習をするかどうかを指定 |
| regularization関数 |
正規化を行うかどうかを指定 |
| l1 , l2 関数 |
L1正規化、L2正規化を指定。過学習を防ぐために利用 |
| weightInit関数 |
重みパラメータの初期化方法を指定。デフォルトはWeightInit.VI
| 設定値 |
内容 |
| DISTRIBUTION |
入力次元に基づいた分布 |
| NORMALIZED |
正規分布 |
| ZERO |
0 |
| SIZE |
入力の次元(shape)の最大値~最小値の一様分布(と思われる) |
| UNIFORM |
入力の最大値~最小値の一様分布(と思われる) |
| VI |
分散が正規化された値 |
| RELU |
平均=0、分散=\(\frac{2}{nIn}\)の正規分布 |
| XAVIER |
平均=0、分散=\(\frac{1}{nOut+nIn}\)の正規分布 |
|
| optimizationAlgo関数 |
学習アルゴリズムを指定。デフォルトはOptimizationAlgorithm.CONJUGATE_GRADIENT
| 設定値 |
内容 |
| CONJUGATE_GRADIENT |
共役勾配法 |
| HESSIAN_FREE |
Hessian-Free法 |
| LBFGS |
L-BFGS法 |
| LINE_GRADIENT_DESCENT |
直線探索を用いた確率的勾配降下法 |
| STOCHASTIC_GRADIENT_DESCENT |
確率的勾配降下法 |
|
| updater関数 |
学習アルゴリズムでパラメータ学習する際の拡張方法を指定。(*8)
| 設定値 |
内容 |
| ADADELTA |
勾配を利用したアップデータ及び学習アルゴリズム。SGD(ネットワーク内のパラメータ更新に同じ学習率を利用)とは異なり、パラメータ毎に学習率を変化させる。
論文「ADADELTA: AN ADAPTIVE LEARNING RATE METHOD」 |
| ADAGRAD |
勾配の2乗をモニタリングすることにより、パラメータ毎に学習率を最適化する。SGDの代わりに利用でき、スパースなデータに有効。
論文「Adaptive Subgradient Methods for Online Learning and Stochastic Optimization」 |
| ADAM |
rmspropに似たアップデータ。勾配の移動平均を利用する
論文「Adam: A Method for Stochastic Optimization」 |
| CUSTOM |
自身で定義 |
| NESTEROVS |
論文「Advances in Optimizing Recurrent Networks」 |
| NONE |
なし |
| RMSPROP |
論文「Generating Sequences With Recurrent Neural Networks」 |
| SGD |
確率的勾配降下法 |
|
| momentu関数 |
慣性項を指定。学習を早くするために利用する |
| list関数 |
この関数呼び出し後にニューラルネットワークの層を宣言する |
| layer関数 |
ニューラルネットワークの層の構成情報を追加する |
ニューラルネットワークの層(Layer.Builder)の設定項目
Layer.Builderで設定する主な項目は以下のとおりである。
| 設定項目 |
内容 |
| nln関数 |
入力データ数を指定。 |
| nOut関数 |
出力データ数を指定。 |
| activation関数 |
活性化関数を指定。デフォルトは「"sigmoid"」
| 設定値 |
内容 |
| "identity" |
恒等変換\(f(x)=x\) |
| "relu" |
ランプ関数 |
| "tanh" |
ハイパボリック・タンジェント |
| "sigmoid" |
シグモイド関数 |
| "softmax" |
ソフトマックス関数 |
| "hardtanh" |
hard tanh |
| "leakyrelu" |
論文「Rectifier Nonlinearities Improve Neural Network Acoustic Models 」 |
| "maxout" |
maxout関数 |
| "softsign" |
ソフトサイン関数 |
| "softplus" |
ソフトプラス関数 |
|
LossFunction
(Layer.Builderの引数) |
誤差関数を指定。
| 設定値 |
内容 |
| MSE |
誤差の平方和(線形回帰) |
| EXPLL |
対数尤度関数(ポアソン回帰) |
| XENT |
交差エントロピー(二項分類) |
| MCXENT |
交差エントロピー(多クラス分類) |
| NEGATIVELOGLIKELIHOOD |
負の対数尤度関数 |
| RECONSTRUCTION_CROSSENTROPY |
Reconstruction 交差エントロピー |
| RMSE_XENT |
RMSE 交差エントロピー |
| SQUARED_LOSS |
二乗損失 |
| CUSTOM |
自身で誤差関数を定義 |
|
■ 参照
- JavaDoc DeepLearning4j
- JavaDoc ND4J
- JavaDoc 「Class Layer.Builder>」
- DeepLearning4j 公式 「NeuralNetConfiguration Class」
- JavaDoc 「Enum WeightInit」
- JavaDoc 「Enum OptimizationAlgorithm」
- JavaDoc 「Enum Updater」
- DeepLearning4j 公式 「Deeplearning4j Updaters Explained」
- 俺とプログラミング 「CNNの学習に最高の性能を示す最適化手法はどれか」
- JavaDoc 「Enum LossFunctions.LossFunction」