CNTK-ニューラルネットワーク(NN)の概念
この章では、CNTKに関するニューラルネットワークの概念について説明します。
私たちが知っているように、ニューロンのいくつかの層はニューラルネットワークを作るために使用されます。しかし、CNTKでは、NNのレイヤーをどのようにモデル化できるのかという疑問が生じます。これは、レイヤーモジュールで定義されたレイヤー関数を使用して実行できます。
レイヤー機能
実際、CNTKでは、レイヤーを操作することで、明確な関数型プログラミングの感覚が得られます。レイヤー関数は通常の関数のように見え、事前定義されたパラメーターのセットを使用して数学関数を生成します。レイヤー関数を使用して、最も基本的なレイヤータイプであるDenseを作成する方法を見てみましょう。
例
次の基本的な手順の助けを借りて、最も基本的なレイヤータイプを作成できます-
Step 1 −まず、CNTKのレイヤーパッケージから高密度レイヤー関数をインポートする必要があります。
from cntk.layers import Dense
Step 2 −次に、CNTKルートパッケージから、input_variable関数をインポートする必要があります。
from cntk import input_variable
Step 3−ここで、input_variable関数を使用して新しい入力変数を作成する必要があります。そのサイズも提供する必要があります。
feature = input_variable(100)
Step 4 −最後に、必要な数のニューロンを提供するとともに、高密度関数を使用して新しいレイヤーを作成します。
layer = Dense(40)(feature)
これで、構成済みのDense layer関数を呼び出して、Denseレイヤーを入力に接続できます。
完全な実装例
from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)
レイヤーのカスタマイズ
これまで見てきたように、CNTKは、NNを構築するための非常に優れたデフォルトのセットを提供します。に基づくactivation選択した機能やその他の設定では、NNの動作とパフォーマンスが異なります。これは、もう1つの非常に便利なステミングアルゴリズムです。それが理由です。何を構成できるかを理解するのは良いことです。
高密度レイヤーを構成する手順
NNの各レイヤーには独自の構成オプションがあり、高密度レイヤーについて説明するときは、次の重要な設定を定義します。
shape −名前が示すように、レイヤーの出力形状を定義し、そのレイヤー内のニューロンの数をさらに決定します。
activation −そのレイヤーの活性化関数を定義するため、入力データを変換できます。
init−そのレイヤーの初期化機能を定義します。NNのトレーニングを開始すると、レイヤーのパラメーターが初期化されます。
構成できる手順を見てみましょう Dense レイヤー-
Step1 −まず、インポートする必要があります Dense CNTKのレイヤーパッケージのレイヤー関数。
from cntk.layers import Dense
Step2 −次に、CNTK opsパッケージから、インポートする必要があります sigmoid operator。活性化関数として構成するために使用されます。
from cntk.ops import sigmoid
Step3 −ここで、初期化パッケージから、インポートする必要があります glorot_uniform イニシャライザ。
from cntk.initializer import glorot_uniform
Step4 −最後に、最初の引数としてニューロンの数を指定するとともに、Dense関数を使用して新しいレイヤーを作成します。また、sigmoid としての演算子 activation 機能と glorot_uniform として init レイヤーの機能。
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
完全な実装例-
from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
パラメータの最適化
これまで、NNの構造を作成する方法と、さまざまな設定を構成する方法を見てきました。ここでは、NNのパラメータを最適化する方法を説明します。つまり、2つのコンポーネントの組み合わせの助けを借りてlearners そして trainers、NNのパラメータを最適化できます。
トレーナーコンポーネント
NNのパラメータを最適化するために使用される最初のコンポーネントは trainer成分。基本的に、バックプロパゲーションプロセスを実装します。その動作について話すと、データをNNに渡して、予測を取得します。
その後、NNのパラメーターの新しい値を取得するために、learnerと呼ばれる別のコンポーネントを使用します。新しい値を取得すると、これらの新しい値を適用し、終了基準が満たされるまでプロセスを繰り返します。
学習者コンポーネント
NNのパラメータを最適化するために使用される2番目のコンポーネントは learner コンポーネント。基本的に、勾配降下アルゴリズムの実行を担当します。
CNTKライブラリに含まれる学習者
以下は、CNTKライブラリに含まれている興味深い学習者のリストです-
Stochastic Gradient Descent (SGD) −この学習者は、基本的な確率的勾配降下法を追加なしで表します。
Momentum Stochastic Gradient Descent (MomentumSGD) − SGDを使用すると、この学習者は極大値の問題を克服するために勢いを適用します。
RMSProp −この学習者は、降下率を制御するために、減衰する学習率を使用します。
Adam −この学習者は、時間の経過とともに降下率を下げるために、減衰する運動量を使用します。
Adagrad −この学習者は、頻繁に発生する機能とまれに発生する機能について、さまざまな学習率を使用します。