web-dev-qa-db-ja.com

入力数が変動する可能性がある場合、ニューラルネットワークはどのように使用されますか?

私が見たニューラルネットワークのすべての例は、画像と固定長データに対して適切に機能する固定入力のセットに対するものです。センテンス、クエリ、ソースコードなどの可変長データをどのように処理しますか?可変長データを固定長入力にエンコードし、それでもニューラルネットワークの一般化特性を取得する方法はありますか?

56
Jeremy E

通常、データから特徴を抽出し、それらをネットワークにフィードします。一部のデータのみを取得してネットにフィードすることはお勧めできません。実際には、前処理と適切な機能の選択によって、成功とニューラルネットのパフォーマンスが決まります。残念ながら、私見はそのための感覚を養うために経験を必要とし、それは本から学ぶことができるものではありません。

まとめ:「ごみを出して、ごみを出して」

29
f3lix

私はそこに行ったことがあり、この問題に直面しました。 ANNは固定された特徴ベクトルの長さのために作成され、KNN、SVM、ベイジアンなどの他の多くの分類器も同様です。つまり、入力層は明確に定義され、変化しない必要があります。これは設計上の問題です。ただし、欠落したギャップを埋めるためにゼロを追加することを選択する研究者もいます。これらのゼロ(非実数値)はネットが収束する重みに影響を与えるため、個人的にはこれは良い解決策ではないと思います。さらに、ゼロで終わる実際の信号がある場合があります。

ANNは唯一の分類子ではありません。ランダムフォレストなど、さらに多くの、さらに良いものがあります。この分類子は研究者の中で最高と考えられており、少数のランダムな特徴を使用し、バギングのブートストラップを使用して数百の決定木を作成します。これはうまくいくかもしれません。選択された特徴の数は通常、特徴ベクトルサイズの平方根です。これらの機能はランダムです。各決定木はソリューションに収束し、多数決ルールを使用して、最も可能性の高いクラスが選択されます。

別の解決策は、ダイナミックタイムワーピングDTWを使用することです。さらに、隠れマルコフモデルHMMを使用することもできます。

別のソリューションは、内挿、内挿(小信号に沿った欠損値の補償)、すべての小信号を最大信号と同じサイズにすることです。内挿法には、平均化、Bスプライン、3次などが含まれますが、これらに限定されません。 。

別の解決策は、特徴抽出方法を使用して最良の特徴(最も特徴的な)を使用することです。今回は、固定サイズにします。これらの方法には、PCA、LDAなどがあります。

別の解決策は、特徴選択(通常は特徴抽出後)を使用して、最高の精度を与える最高の特徴を選択する簡単な方法です。

今のところ、これですべてです。それでもうまくいかない場合は、私に連絡してください。

29
Ahmad Hassanat

一部の問題は、再帰型ニューラルネットワークで解決できます。たとえば、一連の入力でパリティを計算するのに適しています。

パリティを計算するためのリカレントニューラルネットワーク の入力フィーチャは1つだけです。ビットは時間の経過とともにそれに供給される可能性があります。その出力も非表示レイヤーにフィードバックされます。これにより、2つの隠れたユニットでパリティを学習できます。

通常のフィードフォワード2層ニューラルネットワークでは、パリティを表すために2 ** sequence_length隠しユニットが必要です。これは 制限が適用される は、2層だけのアーキテクチャ(SVMなど)の場合です。

18
Ivo Danihelka

これを行う1つの方法は、一時コンポーネントを入力(リカレントニューラルネット)に追加し、一度にチャンクをネットにストリーミングすることです(基本的には、レクサーとパーサーに相当するニューラルネットワークを作成します)。これにより、入力は非常に大きくなりますが、入力の異なるシーケンスを互いに分離するための停止記号が必ずしも存在しないという欠点があります(文のピリオドに相当)

2
Jeremy E

さまざまなサイズの画像でニューラルネットを使用するには、画像自体をトリミングして、ネットワークの入力により適合するように拡大または縮小します。私はそれが本当にあなたの質問に答えないことを知っていますが、おそらく他のタイプの入力でも、入力になんらかの変換関数を使用して同様のことが可能でしょうか?

1

完全にはわかりませんが、入力の最大数を使用します(たとえば、単語の場合、45文字を超える単語はありません(Wikipediaによると、辞書にある最も長い単語)。 Wordが検出されました。他の入力を空白文字に設定してください。

または、バイナリデータの場合は、0に設定します。このアプローチの唯一の問題は、空白文字/ゼロ/何でも入力が有効な全長入力と衝突する場合です(数値の場合ほど単語の問題ではありません)。

0
Zenon