些細なことかもしれない質問がありますが、それは私が見たどこにも説明されていません。私はニューラルネットワークを研究していますが、どこを見ても、いくつかの理論と、入力としていくつかの0と1を使用した簡単な例があります。疑問に思っています。1つのニューロンの入力値として1つの値だけを入力する必要がありますか、それとも3つの値(たとえばRGBカラー)のベクトルにすることができますか?
6 に答える
上記の答えは技術的には正しいですが、単純な真実を説明するものではありません。単一のニューロンに数値のベクトルを与える必要がある状況は決してありません。
実用的な観点から、これは(以前の解決策の1つが示したように)ベクトル内の各数値に対してニューロンを持ち、それらすべてを単一のニューロンへの入力にすることができるためです。これにより、トレーニング後に目的の動作が得られるはずです。これは、第2層のニューロンがベクトル全体を効果的に利用できるためです。
数学的な観点からは、任意の数のベクトルを単一の数として表すことができるという符号理論の基本的な定理があります。したがって、ニューロンの追加レイヤーが本当に必要ない場合は、RGB値を単一の数値にエンコードし、それをニューロンに入力するだけで済みます。ただし、このコーディング機能を使用すると、ほとんどの学習問題がより困難になる可能性があるため、ほとんどの場合、このソリューションが価値があるとは思えません。
要約すると、人工ニューラルネットワークは入力ユニットにベクトルを与えずに使用されますが、これにより計算能力が失われることはありません。
多次元データを扱う場合、2 層のニューラル ネットワークの方が良い結果が得られると言われています。
あなたの場合:
R[0..1] => (N1)----\
\
G[0..1] => (N2)-----(N4) => Result[0..1]
/
B[0..1] => (N3)----/
ご覧のとおり、N4 ニューロンは 3 つのエントリを処理できます。
[0..1] 間隔は慣習ですが、良いものです。そうすれば、任意の数のエントリを取ることができる汎用ニューロン クラスのセットを簡単にコーディングできます (私は個人的にテンプレート パラメータとしてエントリ数を持つテンプレート C++ クラスを持っていました)。したがって、ニューロンのロジックを一度コーディングしてから、ネットワークの構造やニューロン内の機能の組み合わせをいじります。
通常、単一のニューロンは複数の実数を入力として取り、実数を出力します。これは通常、実数の合計にシグモイド関数を適用して計算されます (スケーリングされ、プラスまたはマイナスの定数オフセット)。
たとえば、2 つの RGB ベクトル (2 x 3 実数) を入れたい場合は、値をどのように組み合わせるかを決める必要があります。すべての要素を足し合わせてシグモイド関数を適用すると、6 つの実数を「フラットに」取得することと同じになります。一方、R 要素、G 要素、B 要素をすべて個別に処理する場合 (たとえば、ペアの合計または減算)、実際には 3 つの独立したニューロンがあります。
要するに、いいえ、単一のニューロンはベクトル値を取りません。
入力として可視スペクトルに正規化された光の波長を使用します。
ネット上にはいくつかの近似式があります。RGB から波長への変換を検索するか、HSL カラー モデルを使用して色相成分を抽出し、場合によっては彩度と明度も使用します。良い...
それに応じて内部関数を記述している限り、それはあなたが望むものなら何でもかまいません。
あなたが言及する例では、ドメインとして[0; 1]を使用していますが、ニューロンで使用する関数がこのドメインで定義されている限り、R、R²、または任意の任意のものを使用できます。
あなたの場合、RGB値を処理できるようにR3で関数を定義できます
簡単な例:関数として(x1、y1、z1)、(x2、y2、z2)->(ax1 + x2、by1 + y2、cz1 + z2)を使用して、2つの色を1つに変換します。学習段階で決定する学習係数。
非常に詳細な情報(質問への回答を含む)は、ウィキペディアで入手できます。