ディープ ラーニング

完了

"ディープ ラーニング" は、機械学習の高度な形式であり、人間の脳が学習する方法をエミュレートしようとします。 ディープ ラーニングの鍵となるのは、次に示すように、数学関数を使用して生体ニューロンの電気化学活性をシミュレートする人工 "ニューラル ネットワーク" の作成です。

生体ニューラル ネットワーク 人工ニューラル ネットワーク
天然ニューラル ネットワークの図。 人工ニューラル ネットワークの図。
ニューロンは電気化学刺激に応答して発火します。 発火すると、接続されたニューロンにシグナルが渡されます。 各ニューロンは、入力値 (x) と "重み" (w) を操作する関数です。 その関数は、出力を渡すかどうかを決定する "活性化" 関数でラップされます。

人工ニューラル ネットワークは、基本的に深く入れ子になった関数を定義する、複数のニューロンの "レイヤー" で構成されます。 このアーキテクチャは、この手法が "ディープ ラーニング" と呼ばれる理由であり、この手法によって生成されるモデルは、"ディープ ニューラル ネットワーク" (DNN) と呼ばれることがよくあります。 ディープ ニューラル ネットワークは、回帰や分類など、さまざまな種類の機械学習の問題や、自然言語処理やコンピューター ビジョン用のより特殊なモデルに使用できます。

このモジュールで説明する他の機械学習手法と同様に、ディープ ラーニングでは、1 つ以上の特徴 (x) の値に基づいてラベル (y) を予測できる関数にトレーニング データを適合させる必要があります。 関数 (f(x)) は入れ子になった関数の外部レイヤーであり、ニューラル ネットワークの各レイヤーは、x に対して作用する関数と、関連付けられた重み (w) の値をカプセル化します。 モデルのトレーニングに使用されるアルゴリズムは、トレーニング データの特徴値 (x) を各レイヤーに繰り返し供給して ŷ の出力値を計算し、モデルを検証して、計算された ŷ の値が既知の y 値からどれだけ離れているかを評価します (それによってモデルの誤差のレベルまたは "損失" のレベルを定量化します)。そのうえで、損失が少なくなるように重み (w) を変更します。 トレーニング済みモデルには、最も正確な予測をもたらす最終的な重みの値が含まれます。

例 - ディープ ラーニングを分類に使用する

ディープ ニューラル ネットワーク モデルのしくみをより深く理解するために、ニューラル ネットワークを使用してペンギンの種の分類モデルを定義する例を見てみましょう。

ペンギンの種の分類に使用されるニューラル ネットワークの図。

特徴データ (x) は、ペンギンのいくつかの測定値で構成されます。 具体的には、測定値は次のとおりです。

  • ペンギンのくちばしの長さ。
  • ペンギンのくちばしの深さ。
  • ペンギンのひれ足の長さ。
  • ペンギンの体重。

この場合、x は 4 つの値のベクトルになります (数学的には、x=[x1,x2,x3,x4])。

予測しようとしているラベル (y) はペンギンの種であり、次の 3 つの種が考えられます。

  • アデリーペンギン
  • "ジェンツーペンギン"
  • "ヒゲペンギン"

これは分類の問題の例であり、機械学習モデルによって、観測対象が属する最も可能性の高いクラスを予測する必要があります。 分類モデルでは、各クラスの確率で構成されるラベルを予測することによってこれを実現します。 言い換えると、y は可能性があるクラスごとに 1 つ、合計 3 つの確率値のベクトルです ([P(y=0|x), P(y=1|x), P(y=2|x)])。

予測されるペンギンのクラスをこのネットワークを使用して推論するプロセスは、次のとおりです。

  1. ペンギン観測の特徴ベクトルが、各 x 値のニューロンで構成されるニューラル ネットワークの入力レイヤーに送られます。 この例では、入力として次の x ベクトルが使用されます: [37.3, 16.8, 19.2, 30.0]
  2. ニューロンの最初のレイヤーの関数はそれぞれ、x 値と重み w を組み合わせて加重和を計算し、次のレイヤーに渡すためのしきい値を満たしているかどうかを判断する活性化関数に渡します。
  3. レイヤー内の各ニューロンは、次のレイヤー内のすべてのニューロンに接続されているため ("完全に接続されたネットワーク" とも呼ばれるアーキテクチャ)、各レイヤーの結果は、出力レイヤーに到達するまでネットワークを経由して伝達されます。
  4. 出力レイヤーは値のベクトルを生成します。この場合、softmax または同様の関数を使用して、ペンギンの 3 つの可能なクラスの確率分布を計算します。 この例では、出力ベクトルは [0.2, 0.7, 0.1] です
  5. ベクトルの要素は、クラス 0、1、2 の確率を表します。 2 番目の値が最も高いので、モデルはペンギンの種が 1 (Gentoo) であると予測します。

ニューラル ネットワークはどのように学習するのでしょうか。

ニューラル ネットワークにおいて、重みはラベルの予測値を計算する方法の中心となるものです。 トレーニング プロセス中に、モデルは最も正確な予測につながる重みを "学習" します。 この学習がどのように行われるかを理解するために、トレーニング プロセスをもう少し詳しく見てみましょう。

ニューラル ネットワークがトレーニング、評価、最適化されている図。

  1. トレーニング データセットと検証データセットが定義され、トレーニング特徴量が入力レイヤーに送られます。
  2. ネットワークの各レイヤーのニューロンは、重み (最初はランダムに割り当てられる) を適用し、ネットワークを経由してデータを伝達します。
  3. 出力レイヤーは、計算された ŷ の値を含むベクトルを生成します。 たとえば、ペンギンのクラス予測の出力は [0.3. 0.1. 0.6] のようになります。
  4. "損失関数" は、予測された ŷ の値を既知の y の値と比較し、差 ("損失" と呼ばれる) を集計するために使用されます。 たとえば、前の手順で出力が返されたケースの既知のクラスが Chinstrap である場合、y の値は [0.0, 0.0, 1.0] であるはずです。 これと ŷ ベクトルの絶対差は [0.3, 0.1, 0.4] です。 実際には、損失関数は複数のケースの差異の合計を計算し、それを 1 つの "損失" 値として集計します。
  5. ネットワーク全体は本質的に 1 つの大きな入れ子になった関数であるため、最適化関数は微分学を使用して、ネットワーク内のそれぞれの重みが損失に及ぼす影響を評価し、全体的な損失の量を減らすためにそれらをどのように調整 (上下) できるかを決定することができます。 特定の最適化手法はさまざまですが、通常は、それぞれの重みを増減して損失を最小限に抑える "勾配降下" というアプローチが使用されます。
  6. 重みに対する変更はネットワーク内のレイヤーに "逆伝播" され、以前に使われた値が置き換えられます。
  7. 損失が最小限に抑えられ、モデルによる予測が許容可能な精度になるまで、複数回のイテレーション ("エポック" と呼ばれる) でプロセスが繰り返されます。

注意

それぞれのケースでトレーニング データが一度に 1 つずつネットワーク経由で渡されると考える方が簡単ですが、実際には、データはマトリックスにバッチ化され、線形代数計算を使用して処理されます。 このため、ニューラル ネットワーク トレーニングは、ベクトルとマトリックスの操作用に最適化されたグラフィカル処理ユニット (GPU) を搭載したコンピューターで最適に実行されます。