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 −この学習者は、頻繁に発生する機能とまれに発生する機能について、さまざまな学習率を使用します。