分類にRBMを使用する方法は?


12

現時点では、制限付きボルツマンマシンで遊んでいます。私はそのため、手書きの数字を分類してみようと思います。

私が作成したモデルは、今ではかなり派手な生成モデルですが、それをさらに進める方法がわかりません。

、この記事の著者は言うが、それは良い生成モデルを作成した後、一つは「その後、差別分類器を訓練する(すなわち、線形分類器、サポートベクターマシン)RBMのトップ標識された試料の使用に関する」」とfurtherly状態をあなたが伝播するため、データベクトルをRBMモデルの非表示ユニットに追加して、非表示ユニットベクトルまたはデータの高レベル表現を取得します。問題は、それが正しいかどうかわからないということです。

つまり、入力を非表示のユニットに伝播するだけで、RBMの分類機能がありますか?

誰かがこのプロセスを説明できますか?


制限付きボルツマンマシンは、深層学習に使用される最も初期のコンポーネントの1つです。実際、DNNで最初に行われた重要な作業は、ヒントンによって行われました。詳細な信念ネットワークはRBMに基づいていました。詳細については、このペーパー(深い信念ネットワーク、2007、ヒントン)を検索してください。彼のウェブサイトでは、非常に重要なリソースとデモ実験を見つけることができますcs.toronto.edu/~hinton/digits.html
Bashar Haddad

@hbaderts RBMをいじり始めました。受け入れられた答えは読みやすかったです。明確化を求めたかったのですが、バイナリ分布からサンプリングした後、RBMの隠れ層はランダムです。分類には、隠れユニットの確率が使用されますか、それともバイナリ分布(1および0)からサンプリングされた隠れユニットが分類器に渡されますか?
M3tho5

回答:


15

制限付きボルツマンマシンのレビュー

制限付きボルツマンマシン(RBM)は、入力上の確率分布を学習する生成モデルです。つまり、トレーニング後、RBMは学習した確率分布から新しいサンプルを生成できます。可視単位の確率分布は、p vh= V i = 0 p v ih与えられ ます ここで、 p v ih= σ a i + Hv

pvh==0Vpvh
σは、シグモイド関数であり、iは可視ノードのバイアスであり、I、およびWJiは重みであるからHJVI。これらの2つの方程式から、pvhは隠れ状態hのみに依存することがわかります。つまり、可視サンプルvの生成方法に関する情報は、非表示の単位、重み、バイアスに保存する必要があります。
pvh=σa+j=0Hwjhj
σawjhjvpvhhv

分類にRBMを使用する

h

この隠されたベクトルは、入力データの変換されたバージョンにすぎません-これ自体では何も分類できません。分類を行うには、入力として「生の」トレーニングデータの代わりに隠しベクトルを使用して、分類器(線形分類器、SVM、フィードフォワードニューラルネットワークなど)をトレーニングします。

ディープフィードフォワードニューラルネットワークを教師なしで事前トレーニングするために使用されたディープビリーフネットワーク(DBN)を構築している場合、この隠されたベクトルを取得し、スタックする新しいRBMへの入力として使用しますその上。これにより、ラベル付きデータを必要とせずに、目的のサイズに達するまでネットワークをレイヤーごとにトレーニングできます。最後に、たとえば、ソフトマックスレイヤーを最上部に追加し、分類タスクで逆伝播を使用してネットワーク全体をトレーニングします。


@ Seanny123の編集に感謝します。これにより、読みやすくなります。
hbaderts 16

5

@hbadertsは、ワークフロー全体を完璧に説明しました。ただし、このアイデアにまったく慣れていない場合は意味がありません。したがって、私はそれを素人の方法で説明します(したがって、詳細は省略します)。

ディープネットワークは、データを変換する機能と考えてください。変換の例には、正規化、データのログの取得などが含まれます。トレーニングしているディープネットワークには複数の層があります。これらの各レイヤーは、何らかの学習アルゴリズムを使用してトレーニングされます。最初のレイヤーでは、元のデータを入力として渡し、それらの「同じ元のデータ」を出力として返す関数を取得しようとします。ただし、完全な出力は得られません。したがって、入力の変換されたバージョンを最初のレイヤーの出力として取得します。

次に、2番目のレイヤーでは、これらの「変換されたデータ」を入力として受け取り、学習プロセス全体を繰り返します。ディープネットワーク内のすべてのレイヤーに対してこれを繰り返します。

最後のレイヤーでは、元の入力データの「変換されたバージョン」が取得されます。これは、元の入力データの高レベルの抽象化と考えることができます。ディープネットワークでラベル/出力をまだ使用していないことに注意してください。したがって、この時点まではすべて教師なし学習です。これは、レイヤー単位の事前トレーニングと呼ばれます。

ここで、分類子/回帰モデルをトレーニングします。これは教師付き学習問題です。その目標を達成する方法は、ディープネットワークの最後の層から元の入力の「最終変換バージョン」を取得し、それらを任意の分類器への入力として使用することです(例:knn分類器/ softmax分類器/ロジスティック回帰など)。これはスタッキングと呼ばれます。

この最後のステップの分類器/学習者をトレーニングするとき、すべての学習をネットワーク全体に伝播します。これにより、ラベル/出力から学習し、学習したレイヤーごとのパラメーターを適宜変更できるようになります。

したがって、生成モデルのトレーニングが完了したら、生成モデルの出力を取得し、分類器/学習者への入力として使用します。学習が継続するにつれてエラーがネットワーク全体に流れるようにして、前の手順で学習したレイヤー単位のパラメーターを変更できるようにします。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.