ディープラーニングの概要: パーセプトロンからディープネットワークまで

ディープラーニングの概要: パーセプトロンからディープネットワークまで

近年、人工知能の分野は再び活発化しており、伝統的な学術界に加え、Google、Microsoft、Facebookなどの優れた産業企業も関連研究チームを設立し、多くの注目すべき成果を上げています。これは、ソーシャル ネットワーク ユーザーによって生成される大量のデータ (そのほとんどは、さらに分析および処理する必要がある生データ) のおかげです。また、GPGPU の急速な発展など、安価で強力なコンピューティング リソースの出現のおかげでもあります。

これらの要因とは別に、このルネッサンスは主に AI、特に機械学習の分野におけるディープラーニングという新しいトレンドによって推進されてきました。この記事では、最も単純な要素から始めて、その上に構築しながら、ディープラーニングの背後にある主要な概念とアルゴリズムを紹介します。

機械学習の基礎

機械学習に詳しくない方のために、機械学習の一般的なプロセスは次のとおりです。

1. 機械学習アルゴリズムでは、10 匹の子犬の写真のうち 1 枚に 1 (犬を意味する) のラベルが付けられ、その他に 0 (犬ではないことを意味する) のラベルが付けられるなど、少数のラベル付きサンプルを入力する必要があります。この記事では、主に教師ありバイナリ分類を使用します。

2. これらのアルゴリズムは、犬の写真を正しく分類する方法を「学習」し、新しい写真が取り込まれると、アルゴリズムが正しい画像ラベルを出力することが期待できます(たとえば、子犬の写真が取り込まれた場合は 1 を出力し、それ以外の場合は 0 を出力します)。

これは多くの場合、信じがたいことです。データが曖昧でラベルが間違っている可能性があります。あるいは、データが手書きの文字の画像であるのに、実際に表す文字でラベルを付ける可能性もあります。

パーセプトロン

パーセプトロンは最も初期の教師ありトレーニング アルゴリズムであり、ニューラル ネットワークを構築するための基礎となります。

平面上に n 個の点があり、それぞれ「0」と「1」としてマークされているとします。では、新しいポイントを追加してみましょう。この点のマークが何であるかを知りたい場合(前述の子犬の写真の識別と同様)、どうすればよいでしょうか。

非常に簡単な方法は、この点に最も近い点を見つけて、この点と同じマークを返すことです。もう少し「インテリジェントな」アプローチは、異なるラベルを持つデータ ポイントを分離する線を平面上で見つけ、この線を「分類子」として使用して新しいデータ ポイントのラベルを区別することです。

この場合、各入力データはベクトル x = (x_1, x_2) として表すことができ、関数は「線の下にある場合は 0 を出力し、線の上にある場合は 1 を出力する」を実装します。

数学的には、重みを表すベクトル w と垂直オフセット b を定義します。次に、入力、重み、バイアスを組み合わせて、次の伝達関数を取得します。

この伝達関数の結果は活性化関数に送られ、ラベル付けが生成されます。上記の例では、活性化関数はしきい値カットオフ関数です (つまり、特定のしきい値を超えると出力は 1 になります)。

電車

パーセプトロンのトレーニングでは、複数のトレーニング サンプルを入力し、各サンプルの出力を計算します。各計算の後、重み w は出力誤差(入力サンプルのラベル付けされた値と実際の計算値の差)を最小化するように調整されます。平均二乗誤差など、他の誤差計算方法もありますが、基本的な原理は同じです。

欠陥

この単純なパーセプトロンには明らかな欠陥があります。線形に分離可能な関数しか学習できないのです。この欠陥は重要ですか? たとえば、XOR のような単純な関数は、線形分類器では分類できません (下の図に示すように、2 種類のポイントを分離できません)。

この問題を解決するために、多層パーセプトロン、つまりフィードフォワードニューラルネットワークを使用します。実際には、このようなパーセプトロンのグループを組み合わせて、より強力な学習マシンを作成します。

フィードフォワードニューラルネットワーク

ニューラル ネットワークは、実際には、前述の多数のパーセプトロンの組み合わせであり、さまざまな方法で接続され、さまざまな活性化関数に基づいて動作します。

ここでは、次のような特性を持つ順方向ニューラル ネットワークについて簡単に紹介します。

  • 1 つの入力層、1 つの出力層、および 1 つ以上の隠し層。上の図に示すニューラル ネットワークには、3 つのニューロンからなる入力層、4 つのニューロンからなる隠れ層、および 2 つのニューロンからなる出力層があります。
  • 各ニューロンは、前述のパーセプトロンです。
  • 入力層のニューロンは隠れ層の入力として機能し、隠れ層のニューロンは出力層のニューロンの入力としても機能します。
  • ニューロン間の各接続には重み w があります (パーセプトロンで説明した重みと同様)。
  • 通常、レイヤー t の各ニューロンは、前のレイヤー (レイヤー t - 1) のすべてのニューロンに接続されます (ただし、重みを 0 に設定することで、この接続を切断できます)。
  • 入力データを処理するために、入力ベクトルが入力層に与えられます。上記の例では、ネットワークは 3D 入力ベクトルを計算できます (入力層ニューロンが 3 つしかないため)。入力ベクトルが [7, 1, 2] の場合、最初の入力ニューロンに 7 を、真ん中の入力ニューロンに 1 を、3 番目の入力ニューロンに 2 を入力します。これらの値は隠れ層に伝播され、重み付けされた伝達関数(これは順方向伝播です)を介して各隠れ層ニューロンに渡され、隠れ層ニューロンは出力(活性化関数)を計算します。
  • 出力層は隠れ層と同じように計算を行い、出力層の計算結果がニューラルネットワーク全体の出力となります。

スーパーリニア

各パーセプトロンが 1 つの線形活性化関数しか使用できない場合はどうなるでしょうか? ネットワーク全体の最終的な出力は、依然としていくつかの線形関数を通じて計算された入力データであり、ネットワークで収集されたいくつかの異なる重みで調整されるだけです。言い換えれば、線形関数の任意の組み合わせは依然として線形関数です。線形活性化関数のみの使用に限定すると、フィードフォワード ニューラル ネットワークは、ネットワークの層数に関係なく、パーセプトロンよりもそれほど強力ではありません。

このため、ほとんどのニューラル ネットワークでは、対数関数、双曲正接関数、ステップ関数、整流関数などの非線形活性化関数が使用されます。これらの非線形関数を持たないニューラル ネットワークは、入力データの線形結合のみを学習できます。

電車

多層パーセプトロンの教師ありトレーニングに使用される最も一般的なアルゴリズムは、バックプロパゲーション アルゴリズムです。基本的なプロセスは次のとおりです。

1. ニューラル ネットワークを通じてトレーニング サンプルの順方向伝播計算を実行します。

2. 出力誤差(一般的に使用される平均二乗誤差)を計算します。

ここで、t は目標値、y は実際のニューラル ネットワークの計算出力です。他のエラー計算方法も可能ですが、通常は MSE (平均二乗誤差) の方が適しています。

3. 確率的勾配降下法によってネットワークエラーが最小化されます。

勾配降下法は一般的に使用されますが、ニューラル ネットワークでは、入力パラメーターはトレーニング エラーの曲線です。各重みの最大値は、エラー曲線のグローバル最小値 (上図のグローバル最小値) である必要があります。トレーニング中、グローバル最小値を見つけるために、重みは非常に小さなステップで変更されます (各サンプルの後、または小さなサンプル グループのトレーニングの後)。ただし、これは簡単ではなく、トレーニングはローカル最小値 (上の図のローカル最小値) で終了することがよくあります。例のように、現在の重み値が 0.6 の場合は、0.4 に移動します。

このプロットは、エラーが単一のパラメータのみに依存する最も単純なケースを示しています。ただし、ネットワーク エラーはネットワークの重みごとに異なり、エラー関数は非常に複雑です。

幸いなことに、バックプロパゲーション アルゴリズムでは、出力エラーを使用して 2 つのニューロン間の重みを修正する方法が提供されます。関係自体は非常に複雑ですが、特定のノードに対する重みの変更は次のようになります (簡略化されています)。

ここで、E は出力誤差、w_i は入力 i の重みです。

基本的に、これを行う目的は、重み i を使用して勾配の方向を修正することです。重要な点は、必ずしも計算が容易ではない誤差の導関数の使用です。大規模ネットワーク内のランダム ノードのランダム重みの導関数をどのように取得できるでしょうか。

答えは、バックプロパゲーションです。エラーは単純に計算され(予想値と実際の値の差だけ)、その後巧妙な方法でネットワークに伝播されるため、トレーニング中に重みを効果的に変更し、(うまくいけば)最小値に到達できます。

隠しレイヤー

隠されたレイヤーは非常に興味深いです。普遍近似原理によれば、有限個のニューロンを持つ隠れ層は、任意のランダム関数を近似するようにトレーニングできます。言い換えれば、1 つの隠れ層はあらゆる関数を学習できるほど強力です。これは、実際には複数の隠し層(ディープ ネットワークなど)を使用すると、より良い結果が得られることを示しています。

人間の脳(単純化した例え)が現実世界の抽象化を保存するのと同じように、隠し層にはトレーニング データの内部抽象表現が保存されます。次に、この隠し層を処理するためにさまざまな方法を使用します。

ネットワークの例

IRIS データセットを分類する testMLPSigmoidBP メソッドを使用して Java で実装された、この単純な (4-2-3) フィードフォワード ニューラル ネットワークを見てみましょう。このデータセットには 3 種類のアヤメ植物が含まれており、その特徴には萼片の長さ、花弁の長さなどが含まれます。各クラスは、ニューラル ネットワークのトレーニング用に 50 個のサンプルを提供します。特徴は入力ニューロンに割り当てられ、各出力ニューロンはデータのクラスを表します (「1/0/0」は植物が Setosa であることを意味し、「0/1/0」は Versicolour を意味し、「0/0/1」は Virginica を意味します)。分類のエラー率は 2/150 (つまり、150 回の分類ごとに 2 回のエラー) です。

大規模ネットワークの難しさ

ニューラル ネットワークには複数の隠し層が存在する場合があります。これにより、以前の隠し層に基づいて、より上位の隠し層に新しい抽象化を構築できます。そして、前述したように、これにより大規模なネットワークをより適切に学習できるようになります。隠し層の数を増やすと、通常、次の 2 つの問題が発生します。

1. 勾配消失: 隠し層を追加するにつれて、バックプロパゲーションによって下位層に渡される情報はますます少なくなります。実際、情報がフィードフォワードされるにつれて、異なるレイヤー間の勾配は消え始め、ネットワーク内の重みへの影響は小さくなります。

2. 過剰適合: おそらくこれが機械学習の根本的な難しさです。つまり、オーバーフィッティングとは、トレーニング データに対する識別効果が高すぎることを意味し、非常に複雑なモデルにつながります。この結果、トレーニング データに対しては非常に良好な認識結果が得られますが、実際のサンプルに対しては非常に悪い認識結果が得られます。

いくつかのディープラーニング アルゴリズムがこれらの課題にどのように対処するかを見てみましょう。

オートエンコーダ

ほとんどの機械学習入門コースでは、フィードフォワードニューラルネットワークについて徹底的に学習します。しかし、実際にはここでやるべきことはたくさんあります。読み進めてください。

オートエンコーダは典型的なフィードフォワード ニューラル ネットワークであり、その目的はデータ セットの圧縮および分散表現方法 (コーディングのアイデア) を学習することです。

概念的には、ニューラル ネットワークの目的は、入力データとターゲット出力データが同じであるかのように入力データを「再作成」するようにトレーニングすることです。言い換えると、ニューラル ネットワークの出力を入力と同じものにして、ただ圧縮するだけです。まだ理解しにくいので、例を見てみましょう。

入力データの圧縮: グレースケール画像

これは 28x28 ピクセルのグレースケール画像で構成されるトレーニング セットであり、各ピクセルの値は入力層ニューロンの入力として使用されます (この場合、入力層には 784 個のニューロンがあります)。出力層のニューロンは同じ数 (784) を持つ必要があり、各出力ニューロンの出力値は入力画像内の対応するピクセルのグレースケール値と同じである必要があります。

このアルゴリズム アーキテクチャの背後で、ニューラル ネットワークが実際に学習するのは、トレーニング データからラベルへの「マッピング」ではなく、データ自体の固有の構造と特徴を学習することです (このため、隠し層は特徴検出器とも呼ばれます)。通常、隠れ層のニューロンの数は、入力/出力層のニューロンの数よりも少なくなります。これは、ニューラル ネットワークが最も重要な特徴のみを学習し、特徴の次元削減を実現するためです。

中間層ではごく少数のノードを使用して、概念レベルでデータを学習し、コンパクトな表現を生成したいと考えています。

インフルエンザ

オートエンコーダーをより詳しく説明するために、別のアプリケーションを見てみましょう。

今回は、風邪の症状がいくつか含まれたシンプルなデータセットを使用します。ご興味があれば、この例のソース コードをここに掲載しています。

データ構造は次のとおりです。

  • 入力データは合計6つのバイナリビットを持つ
  • 最初の3桁は病気の症状です。たとえば、1 0 0 0 0 0 は患者に発熱があることを意味し、0 1 0 0 0 0 は咳を意味し、1 1 0 0 0 0 は咳と発熱の両方を意味します。
  • 最後の 3 桁は抵抗力を表します。患者がこの数値を持っている場合、病気を発症する可能性は低いことを意味します。たとえば、0 0 0 1 0 0 は、患者がインフルエンザワクチンを接種したことを意味します。考えられる組み合わせの 1 つは、0 1 0 1 0 0 で、これはインフルエンザの予防接種を受けた咳をしている患者を表します。

患者が最初の 3 つのうち 2 つを同時に満たしている場合、その患者は病気であるとみなされます。最後の 3 つのうち少なくとも 2 つを満たしている場合は、健康であるとみなされます。

  • 111000、101000、110000、011000、011100 = 病気
  • 000111、001110、000101、000011、000110 = 健康

6 つの入力、6 つの出力ニューロン、および 2 つの隠しニューロンのみを使用して、オートエンコーダー (バックプロパゲーションを使用) をトレーニングしてみましょう。

数百回の反復処理の後、「異常な」サンプルが入力されるたびに、2 つの隠し層ニューロンのうちの 1 つ (異常なサンプルの場合は常にこのニューロン) が常に高い活性化値を示すことがわかりました。 「健全な」サンプルが入力されると、他の隠し層はより高い活性化値を示します。

もう一度学びを見つめ直す

本質的には、2 つの隠しニューロンはデータセットからインフルエンザの症状の簡潔な表現を学習しました。本当に学習が達成されるかどうかをテストするために、過剰適合の問題を見てみましょう。ニューラル ネットワークをトレーニングすることで学習するのは、データセットに過剰適合する非常に複雑な表現ではなく、コンパクトでシンプルな表現です。

ある程度、単純な表現方法を探すのではなく、「感覚」でデータを学習するようにしています。

制限付きボルツマンマシン

次に、入力データセットの確率分布を学習できる生成確率ニューラル ネットワークの一種である制限付きボルツマン マシン (RBM) を見てみましょう。

RBM は、隠し層、可視層、バイアス層で構成されます。フィードフォワード ニューラル ネットワークとは異なり、可視層と非表示層間の接続は非方向性 (値は可視層 -> 非表示層、または非表示層 -> 可視層から任意に転送可能) かつ完全接続 (現在の層のすべてのニューロンは次の層のすべてのニューロンに接続されます - 任意の層の任意のニューロンが他の任意の層に接続できる場合、ボルツマン マシン (制限なし) が得られます) になります。

標準的な RBM では、非表示層と可視層の両方のニューロンはバイナリです (つまり、ニューロンの活性化値はベルヌーイ分布に従って 0 または 1 のみになります) が、他の非線形バリアントも存在します。

学者たちは長い間 RBM を研究してきましたが、最近、対照的差異の教師なしトレーニング アルゴリズムが登場したことで、この分野が復活しました。

違いを比較する

シングルステップ比較差分アルゴリズムの原理:

1. フォワードプロセス:

入力サンプル v は入力層に入力されます。

v はフィードフォワードネットワークと同様の方法で隠れ層に伝播され、隠れ層の活性化値は h になります。

2. 逆のプロセス:

h を可視層に渡して v' を取得します (可視層と非表示層の間の接続は無向なので、このように渡すことができます)。

次に、v' を隠し層に渡して h' を取得します。

3. 体重の更新:

ここで、a は学習率、v、v'、h、h'、w はすべてベクトルです。

アルゴリズムの考え方は、順方向プロセスにおける実際のデータのネットワークの内部表現に影響を与えることです。同時に、逆のプロセスでは、この影響を受けた表現からデータを再構築しようとします。主な目的は、生成されたデータを元のデータにできるだけ近づけることです。この違いは重みの更新に影響します。

言い換えれば、このようなネットワークは入力データの表現の程度を認識する能力を持ち、この認識に基づいてデータを再構築しようとします。再構築されたデータが元のデータと大きく異なる場合は、調整を行って再度再構築します。

インフルエンザの例を見てみましょう。

対比を説明するために、前の例と同じインフルエンザ症状データセットを使用します。テスト ネットワークは、6 つの可視層ニューロンと 2 つの隠し層ニューロンを持つ RBM です。対照差分法を使用してネットワークをトレーニングし、症状 v を可視層に割り当てます。テスト中、これらの症状の値は可視層に再転送され、その後、非表示層に転送されます。隠れ層のニューロンは、オートエンコーダーと同様に、健康/病気の状態を表します。

数百回の反復処理の後、オートエンコーダーと同じ結果が得られます。つまり、異常なサンプルが入力されると、隠れ層のニューロンの 1 つがより高活性値を持ち、正常なサンプルが入力されると、別のニューロンがより興奮します。

ディープネットワーク

これまで、隠れ層の強力な特徴検出器(オートエンコーダーと RBM)について学んできましたが、これらの機能を効果的に活用する方法はまだ見つかっていません。実際、上記で使用したデータ セットはすべて特定のものです。そして、検出されたこれらの特徴を間接的に使用する方法を見つける必要があります。

良いニュースとしては、これらの構造を積み重ねて深いネットワークを作成できることが発見されたことです。これらのネットワークは、貪欲アプローチを使用して一度に 1 つのレイヤーずつトレーニングすることができ、前述の勾配消失やバックプロパゲーションにおける過剰適合の問題を克服できます。

このアルゴリズム アーキテクチャは非常に強力であり、非常に優れた結果を生み出すことができます。たとえば、Google の有名な「猫」認識機能は、実験において、特定のディープ オートエンコーダーを使用して、ラベルのない画像ライブラリ内の人間と猫の顔を認識することを学習しました。

以下でさらに詳しく説明します。

スタック型オートエンコーダ

名前が示すように、このネットワークは複数のスタックされたオートエンコーダで構成されています。

オートエンコーダの隠れ層 t は、 t + 1 層の入力層として機能します。最初の入力層は、ネットワーク全体の入力層です。貪欲法を使用して各レイヤーをトレーニングする手順は次のとおりです。

1. すべてのデータを使用して、バックプロパゲーション法によって第 1 層 (t=1、上図の赤い接続部分) のオートエンコーダをトレーニングします。

2. オートエンコーダの 2 番目のレイヤー t=2 (緑の接続部分) をトレーニングします。 t=2 の入力層は t=1 の隠し層であるため、t=1 の入力層については考慮する必要がなくなり、ネットワーク全体から削除できます。トレーニング全体は、入力サンプル データを t=1 で入力層に割り当て、t=2 で出力層に順方向に伝播することから始まります。以下の t = 2 での重み (入力-> 暗黙的および暗黙的-> 出力) は、バックプロパゲーション法を使用して更新されます。 t = 2 のレイヤーは t = 1 のレイヤーと同じであり、すべてのサンプルでトレーニングする必要があります。

3. すべてのレイヤーに対して手順 1 ~ 2 を繰り返します (つまり、前のオートエンコーダーの出力レイヤーを削除し、別のオートエンコーダーに置き換えて、バックプロパゲーションを使用してトレーニングします)。

4. ステップ1〜3は事前トレーニングと呼ばれ、ネットワーク内の重み値を適切な位置に初期化します。ただし、このトレーニングでは、入力データから出力タグへのマッピングは行われません。たとえば、手書きの数字を認識するようにトレーニングすることを目的としたネットワークでは、トレーニング後に最大の特徴検出器 (つまり、隠れ層の最大のオートエンコーダ) の出力を画像のラベルにマッピングできない場合があります。このように、一般的なアプローチは、ネットワークの最後の層 (青い接続部分) の後に、1 つ以上の完全接続層を追加することです。ネットワーク全体を多層パーセプトロンとして捉え、バックプロパゲーション法を使用してトレーニングすることができます (このステップは微調整とも呼ばれます)。

スタックされたオートエンコーダーは、ネットワークの重みを初期化するための効果的な事前トレーニング方法を提供するため、トレーニングに使用できる複雑な多層パーセプトロンが得られます。

ディープビリーフネットワーク

オートエンコーダーと同様に、ボルツマンマシンをスタックしてディープ ビリーフ ネットワーク (DBN) を構築することもできます。

この場合、隠れ層RBM tはRBM t+1の可視層とみなすことができます。最初の RBM の入力層は、ネットワーク全体の入力層です。層間貪欲事前トレーニングの動作モードは次のとおりです。

1. 対照差分法によって、すべてのトレーニングサンプルの最初のRBM t=1をトレーニングする

2. 2番目のRBMをt=1でトレーニングします。 t=2 の可視層は t=1 の隠し層であるため、トレーニングは、t=1 の可視層にデータを割り当て、順方向伝播法によって t=1 の隠し層に渡すことから始まります。次に、t = 2 での対照差異トレーニングの初期データとして使用されます。

3. すべてのレイヤーに対して前のプロセスを繰り返します。

4. スタック型オートエンコーダと同様に、事前トレーニング後、1 つ以上の完全接続 RBM 隠し層に接続することでネットワークを拡張できます。これにより、バックプロパゲーションによって微調整できる多層パーセプトロンが形成されます。

このプロセスはスタックされたオートエンコーダと非常に似ていますが、オートエンコーダが RBM に置き換えられ、バックプロパゲーションが対照差分アルゴリズムに置き換えられている点が異なります。

畳み込みネットワーク

これは、この記事で紹介する最初のソフトウェア アーキテクチャです。畳み込みネットワークは、画像認識に非常に効果的な特殊なタイプのフィードフォワード ネットワークです。

実際の畳み込みネットワークに進む前に、まず画像フィルター、つまり関連する重みを持つ正方行列を定義します。フィルターは画像全体に適用でき、複数のフィルターを適用できる場合もよくあります。たとえば、画像に 6x6 フィルターを 4 つ適用できます。すると、出力の座標 (1,1) のピクセル値は、入力画像の左上隅の 6x6 領域の加重合計となり、他のピクセルについても同様になります。

上記を基礎として、畳み込みネットワークを定義するプロパティを紹介しましょう。

  • 畳み込み層は入力データにいくつかのフィルターを適用します。たとえば、画像の最初の畳み込み層では 4 つの 6x6 フィルターが使用されます。画像にフィルターを適用した結果は特徴マップ (FM) と呼ばれ、特徴マップの数はフィルターの数と等しくなります。前のレイヤーも畳み込みレイヤーである場合、フィルターは FM に適用されます。これは、1 つの FM を入力して別の FM を出力することと同じです。直感的に言えば、重みが画像全体に分散されている場合、特徴は位置から独立しており、複数のフィルターが異なる特徴を個別に検出できます。
  • ダウンサンプリング レイヤーは入力データのサイズを縮小します。たとえば、32x32 の画像を入力して 2x2 でダウンサンプリングすると、16x16 の出力画像が得られます。つまり、元の画像の 4 つのピクセルが出力画像では 1 つのピクセルに結合されます。ダウンサンプリングを実装する方法は多数ありますが、最も一般的な方法は、最大値のマージ、平均のマージ、ランダムのマージです。
  • ***ダウンサンプリング層 (または畳み込み層) は通常、1 つ以上の完全接続層に接続され、完全接続層の出力が最終出力になります。
  • トレーニング プロセスは、ダウンサンプリング レイヤーを考慮し、すべての値に基づいて畳み込みフィルターの重みを更新する、修正されたバックプロパゲーションを介して実装されます。

MNIST データセットに適用された畳み込みネットワークのいくつかの例は、こちらでご覧いただけます。また、JavaScript での同様のネットワークの視覚的な実装は、こちらでご覧いただけます。

成し遂げる

これまで、一般的なニューラル ネットワークの最も重要な要素について学習してきましたが、実装プロセスで遭遇した課題についてはほんの一部しか説明していません。

簡単に言えば、私の目標は、ディープラーニング ライブラリ、つまり、次の条件を満たすニューラル ネットワークに基づくフレームワークを実装することです。

さまざまなモデル(前述のニューラルネットワークのすべての要素など)を表現できる一般的なアーキテクチャ

さまざまなトレーニング アルゴリズム (バックプロパゲーション、コントラスト ダイバージェンスなど) を使用できます。

まともなパフォーマンス

これらの要件を満たすために、ソフトウェア設計では階層化アプローチを使用しました。

構造

まずは基本から始めましょう:

  • NeuralNetworkImpl は、すべてのニューラル ネットワーク モデル実装の基本クラスです。
  • 各ネットワークはレイヤーの集合で構成されます。
  • 各層には接続のリンク リストがあります。接続とは 2 つの層間の接続を指し、これによりネットワーク全体が有向非巡回グラフになります。

この構造は、従来のフィードバック ネットワーク、RBM、ImageNet などのより複雑なネットワークにも十分対応できる柔軟性を備えています。

この構造により、レイヤーを複数のネットワークの要素にすることもできます。たとえば、Deep Belief Network のレイヤーは、RBM でも使用できます。

さらに、このアーキテクチャでは、DBN の事前トレーニング フェーズをスタックされた RBM のリストとして表示し、微調整フェーズをフィードフォワード ネットワークとして表示できるため、非常に直感的で適切に実装されています。

データフロー

次のセクションでは、ネットワーク内のデータの流れについて、2 段階のプロセスで説明します。

レイヤー間のシーケンスを定義します。たとえば、多層パーセプトロンの結果を得るには、入力データが入力層(つまり、最初に計算される層)に与えられ、その後、データはさまざまな方法を通じて出力層に流れます。バックプロパゲーションで重みを更新するには、出力エラーを幅優先方式で出力層から各層に伝播させます。これは、ネットワーク グラフ構造を活用し、さまざまなグラフ トラバーサル メソッドを使用して、LayerOrderStrategy を通じて実装されます。いくつかの例としては、幅優先戦略や特定のレイヤーをターゲットにすることなどが挙げられます。レイヤーの順序は実際にはレイヤー間の接続によって決定されるため、戦略部分は常に順序付けられた接続のリストを返します。

活性化値を計算します。各レイヤーには、接続のリスト(前のステップから)と入力値(他のレイヤーから)を受け取り、結果のアクティベーション値を計算する ConnectionCalculator が関連付けられています。例えば、単純なS字フィードフォワードネットワークでは、隠れ層のConnectionCalculatorが入力層とバイアス層の値(それぞれ入力値とすべて1の配列)とニューロン間の重み値(全結合層であれば重み値は実際には行列の形でFullyConnected構造体に格納されている)を受け取り、重み付き和を計算してから、結果をS関数に渡します。ConnectionCalculatorは、いくつかの伝達関数(重み付き和や畳み込みなど)と活性化関数(多層パーセプトロンに対応する対数関数や双曲正接関数、RBMに対応する二進関数など)を実装しています。そのほとんどはAparapiを通じてGPU上で計算でき、ミニバッチトレーニングを利用できます。

Aparapi 経由の GPU コンピューティング

先ほども述べたように、近年ニューラル ネットワークが復活した重要な理由の 1 つは、ニューラル ネットワークのトレーニング方法を高度に並列化できるため、GPGPU を通じてトレーニングを効率的に高速化できることです。この記事では、GPU サポートに Aparapi ライブラリを選択します。

Aparapi は接続計算にいくつかの重要な制限を課します。

プリミティブ データ型の 1 次元配列 (変数) のみが許可されます。

GPU 上で実行されるプログラムは、Aparapi Kernel クラス自体のメンバー関数のみを呼び出すことができます。

このようにして、ほとんどのデータ (重み、入力データ、出力データ) は、1 次元の浮動小数点配列である Matrix インスタンスに格納されます。すべての Aparapi 接続計算は、AparapiWeightedSum (完全接続レイヤーと加重合計関数に適用)、AparapiSubsampling2D (サブサンプリング レイヤーに適用)、または AparapiConv2D (畳み込みレイヤーに適用) を使用して実行されます。これらの制限の一部は、異種システム アーキテクチャで導入された概念を使用して対処できます。また、Aparapi を使用すると、同じコードを CPU と GPU の両方で実行できます。

電車

トレーニング モジュールはさまざまなトレーニング アルゴリズムを実装します。このモジュールは、上記の 2 つのモジュールに依存します。たとえば、BackPropagationTrainer (すべてのトレーニング アルゴリズムは Trainer を基本クラスとして使用します) は、フィードフォワード フェーズでフィードフォワード レイヤーの計算を使用し、エラー伝播および重み更新中に特別な幅優先レイヤーの計算を使用します。

私の最新の作業は Java 8 環境で開発されています。他のいくつかの更新された機能はこのブランチで取得でき、この部分の作業はすぐにトランクにマージされる予定です。

結論は

この記事の目的は、最も基本的な構成要素 (パーセプトロン) から始めて、制限付きボルツマン マシンなどの現在人気があり効果的なさまざまなアーキテクチャに徐々に進みながら、ディープラーニング アルゴリズムの分野を簡潔に紹介することです。

ニューラル ネットワークのアイデアは古くから存在していましたが、今日では、ディープラーニングやその他の関連知識を知らなければ機械学習の分野に参入することはできません。過度に宣伝すべきではありませんが、GPGPU が提供する計算能力と、Geoffrey Hinton、Yoshua Bengio、Yann LeCun、Andrew Ng などの研究者によって提案された効率的なアルゴリズムにより、この分野が大きな可能性を示していることは否定できません。今こそ、これらの分野を深く学ぶ最適な時期です。

<<:  AI業界におけるGoogleの独占に警戒せよ。中国勢力が世界規模のゲームに参入

>>:  マルウェア検出のための機械学習

ブログ    

推薦する

AI-WAN: AIOps と SD-WAN が出会うとき

[[320126]] [51CTO.com クイック翻訳]ソフトウェア定義広域ネットワーク (SD-...

...

Raspberry Pi の「リス対策アーティファクト」が Reddit で人気に。13 行のコードで AI があなたの代わりに食べ物を守れる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

基本モデル+ロボットの開発軌跡を見通すレビュー

ロボット工学は、特にスマートテクノロジーと組み合わせると、無限の可能性を秘めたテクノロジーです。近年...

アリババのナレッジグラフが完全公開、最先端の人工知能技術が雲奇カンファレンスで輝く

現在のテクノロジーのホットスポットとして、近年、多くの国内主流テクノロジー企業が人工知能、ナレッジグ...

...

人工知能への恐怖現象を探る

現在、人工知能は人類に大きな発展の機会をもたらす一方で、さまざまなリスクや課題も伴っています。科学技...

AI予算は増加しているが、導入の課題は残る

企業の人工知能予算は急速に増加しているが、導入には依然として大きな課題が残っていることが、Algor...

この記事ではSentinelと一般的なフロー制御アルゴリズムを紹介します。

[[401361]]この記事では主に、カウンター アルゴリズム、リーキー バケット アルゴリズム、...

プロセス産業におけるグリーン製造における人工知能の機会と課題

1. はじめにプロセス産業は原材料産業の一分野であり、国民経済にとって大きな意義を持っています。数十...

2022年までのビッグモデルの未来を展望し、周志華、唐潔、楊紅霞といったビッグネームはどう考えているのだろうか?

年末から年始にかけて、ビッグモデルの過去を振り返り、ビッグモデルの未来に期待してみましょう。 28日...

個人信用リスク評価モデルにおける新しいビッグデータアルゴリズムの使用の有効性の評価

1980 年代に、FICO はロジスティック回帰アルゴリズムに基づく FICO クレジット スコアリ...

滴滴出行のスマート交通建設における3つの短期目標:信号機の改善、バスシステムのオンライン化、予測スケジュール

[51CTO.comより] 両会期中の政府活動報告に人工知能が盛り込まれた。万鋼科学技術部長は、中国...

人工知能は核爆弾と同じくらい人類にとって脅威なのでしょうか? AI脅威理論の謎を解く

新たに世界一の富豪となり、テスラのCEO、そしてテクノロジー界の大物となったマスク氏は、ロボットが近...