最近傍探索(NNS )は、近接探索の一種であり、与えられた点に最も近い(または最も類似した)点を、与えられた集合の中から見つける最適化問題です。近さは通常、非類似度関数で表され、オブジェクト間の類似性が低いほど、関数値は大きくなります。
形式的には、最近傍探索(NN)問題は次のように定義されます。空間M内の点の集合Sとクエリ点が与えられたとき、、 S内でqに最も近い点を見つける。ドナルド・クヌースは『コンピュータプログラミングの技法』第 3 巻(1973 年) でこれを郵便局問題と呼び、住居に最も近い郵便局を割り当てるという応用例を指している。この問題の直接的な一般化はk -NN 探索であり、 k 個の最も近い点を見つける必要がある。
最も一般的には、 Mは距離空間であり、非類似度は距離尺度として表現され、対称であり、三角不等式を満たします。さらに一般的なのは、Mがd次元ベクトル空間であり、非類似度はユークリッド距離、マンハッタン距離、またはその他の距離尺度を使用して測定される場合です。ただし、非類似度関数は任意です。1 つの例として、三角不等式が成り立たない非対称ブレグマン発散があります。 [ 1 ]
最近傍探索問題は、以下のような多くの応用分野で発生します。
NNS問題に対する様々な解決策が提案されてきた。アルゴリズムの品質と有用性は、クエリの時間計算量と、維持しなければならない検索データ構造の空間計算量によって決まる。一般的に次元の呪いと呼ばれる非公式な観察によれば、多項式前処理と多対数探索時間を用いた高次元ユークリッド空間におけるNNSに対する汎用的な厳密解は存在しない。
NNS問題に対する最も単純な解決策は、クエリポイントからデータベース内の他のすべてのポイントまでの距離を計算し、「これまでの最良」を追跡することです。このアルゴリズムは、ナイーブなアプローチと呼ばれることもあり、実行時間はO ( dN )です。ここで、NはSの要素数、dはSの次元です。維持すべき検索データ構造がないため、線形検索の空間計算量はデータベースのストレージ以外にはありません。ナイーブ検索は、平均的に、高次元空間における空間分割アプローチよりも優れたパフォーマンスを発揮します。[ 7 ]
距離比較には絶対距離は必要なく、相対距離のみが必要です。幾何座標系では、2つの座標間の距離計算から平方根の計算を省略することで、距離計算を大幅に高速化できます。それでも距離比較の結果は同じになります。
1970年代以降、この問題には分岐限定法が適用されてきました。ユークリッド空間の場合、このアプローチには空間インデックスまたは空間アクセス法が含まれます。NNS問題を解決するために、いくつかの空間分割法が開発されています。おそらく最も単純なのはkd木で、これは検索空間を親領域の点の半分を含む2つの領域に繰り返し分割します。クエリは、各分割でクエリ点を評価することにより、ルートからリーフまでツリーをたどって実行されます。クエリで指定された距離に応じて、ヒットを含む可能性のある隣接するブランチも評価する必要がある場合があります。定数次元クエリ時間の平均複雑度はO (log N ) [ 8 ]で、ランダムに分布した点の場合、最悪の場合の複雑度はO ( kN ^(1-1/ k )) [ 9 ]です。 あるいは、R木データ構造は、R*木などの挿入と削除の効率的なアルゴリズムを備えているため、動的なコンテキストでの最近傍検索をサポートするように設計されています。[ 10 ] Rツリーはユークリッド距離だけでなく、他の距離でも最近傍を生成することができます。
一般的な距離空間の場合、分岐限定法は距離木法として知られています。具体的な例としては、vp木法やBK木法などがあります。
3次元空間から取得した点の集合をBSPツリーに配置し、同じ空間から取得したクエリ点が与えられた場合、クエリ点に最も近い点群点を見つける問題に対する可能な解決策が、以下のアルゴリズムの説明に示されています。
(厳密に言えば、そのような点は存在しない可能性があります。なぜなら、一意ではない可能性があるからです。しかし実際には、通常、与えられたクエリ点から最短距離にある点群のすべての点のサブセットのいずれかを見つけることだけが重要です。)アイデアは、ツリーの各分岐について、点群の中で最も近い点がクエリ点を含む半空間にあると推測することです。これは当てはまらない場合もありますが、良いヒューリスティックです。推測された半空間の問題を再帰的に解決するすべての手間をかけた後、この結果によって返される距離を、クエリ点から分割平面までの最短距離と比較します。この後者の距離は、クエリ点と、検索されていない半空間に存在する可能性のある最も近い点との間の距離です。この距離が前の結果で返された距離よりも大きい場合、明らかに他の半空間を検索する必要はありません。そのような必要性がある場合は、残りの半分の空間についても問題を解くという手間をかけ、その結果を以前の結果と比較し、適切な結果を返す必要があります。クエリ点が点群に近い場合、このアルゴリズムのパフォーマンスは線形時間よりも対数時間に近いものとなります。これは、クエリ点と最も近い点群点との距離がゼロに近づくにつれて、アルゴリズムはクエリ点をキーとしてルックアップを実行するだけで正しい結果を取得できるためです。
近似最近傍探索アルゴリズムは、クエリからの距離が最大でクエリから最も近い点までの距離を倍します。このアプローチの魅力は、多くの場合、近似的な最近傍点が正確な最近傍点とほぼ同等の精度を持つことです。特に、距離尺度がユーザーの品質の概念を正確に捉えている場合、距離のわずかな違いは問題にならないはずです。[ 11 ]
近接グラフ法(ナビゲーション可能なスモールワールドグラフ[ 12 ]やHNSW [ 13 ] [ 14 ]など)は、近似最近傍探索の最新技術と考えられています。
これらの手法は、近接近傍グラフにおける貪欲探索に基づいている。すべてのポイント頂点と特有の関係がありますクエリqに対する集合S内の最近傍点の探索は、グラフ内の頂点の探索という形をとる。基本的なアルゴリズムである貪欲探索は、次のように動作します。探索は入口となる頂点から始まります。クエリqからその近傍の各頂点までの距離を計算することによってそして、最小距離値を持つ頂点を見つけます。クエリと選択された頂点間の距離値が、クエリと現在の要素間の距離値よりも小さい場合、アルゴリズムは選択された頂点に移動し、それが新しい入口点となります。アルゴリズムは、局所最小値、つまり近傍にクエリ自身よりも近い頂点が存在しない頂点に到達したときに停止します。
近接近傍グラフのアイデアは、Arya と Mount による先駆的な論文[ 15 ] 、飛行機用の VoroNet システム[ 16 ] 、 RayNet システムなど、複数の出版物で活用されています。[ 17 ]および Navigable Small World [ 12 ] 、 Metrized Small World [ 18 ]およびHNSW [ 13 ] [ 14 ]アルゴリズムでは、距離関数を持つ空間の一般ケースが扱われています。これらの研究に先立って、Toussaint による先駆的な論文があり、その中で彼は相対近傍グラフの概念を導入しました。[ 19 ]
局所性敏感ハッシュ(LSH) は、空間内の点を、点に作用する何らかの距離尺度に基づいて「バケット」にグループ化する手法です。選択された尺度の下で互いに近い点は、高い確率で同じバケットにマッピングされます。[ 20 ]
カバーツリーには、データセットの倍増定数に基づいた理論的な上限があります。検索時間の上限はO ( c 12 log n ) で、 cはデータセットの拡張定数です。
データが幾何学的点の密な 3D マップである特殊なケースでは、センシング技術の投影ジオメトリを使用して、検索問題を劇的に単純化できます。このアプローチでは、3D データが 2 次元グリッドへの投影によって整理されている必要があり、オブジェクトの境界を除いて、データが隣接するグリッド セル間で空間的に滑らかであると仮定します。これらの仮定は、測量、ロボット工学、ステレオ ビジョンなどのアプリケーションで 3D センサー データを扱う場合には有効ですが、一般的に整理されていないデータには当てはまらない場合があります。実際には、この技術を実世界のステレオ ビジョン データに適用した場合、 k近傍問題の平均検索時間はO ( 1 ) またはO ( K )になります。 [ 6 ]
高次元空間では、ノードのますます多くの割合を調べる必要があるため、ツリーインデックス構造は役に立たなくなります。線形検索を高速化するために、RAMに格納されている特徴ベクトルの圧縮バージョンを使用して、最初の実行でデータセットを事前フィルタリングします。最終的な候補は、距離計算のためにディスクからの非圧縮データを使用して、2 番目の段階で決定されます。[ 21 ]
VAファイル方式は、各特徴コンポーネントが均一かつ独立して圧縮される圧縮ベースの検索の特殊なケースです。多次元空間における最適な圧縮技術は、クラスタリングによって実装されるベクトル量子化(VQ)です。データベースはクラスタリングされ、最も「有望な」クラスタが取得されます。VAファイル、ツリーベースのインデックス、シーケンシャルスキャンに比べて大きな改善が見られました。[ 22 ] [ 23 ]また、クラスタリングとLSHの類似点にも注目してください。
NNS問題には数多くのバリエーションがあり、最もよく知られているのはk近傍探索とε近似近傍探索の2つです。
k近傍探索は、クエリに対して最も近いk個の近傍点を特定します。この手法は、予測分析において、近傍点のコンセンサスに基づいて点を推定または分類するためによく用いられます。k近傍グラフとは、すべての点がそのk個の近傍点に接続されているグラフのことです
アプリケーションによっては、最近傍点の「おおよその推定値」を取得するだけで十分な場合があります。そのような場合、速度向上やメモリ使用量の削減のために、必ずしも実際の最近傍点を返すとは限らないアルゴリズムを使用できます。多くの場合、このようなアルゴリズムは最近傍点を見つけますが、これはクエリ対象のデータセットに大きく依存します。
近似最近傍探索をサポートするアルゴリズムには、局所性敏感ハッシュ、ベストビンファースト、バランスボックス分解ツリーベースの探索などがあります。[ 24 ]
最近傍距離比は、元の点から挑戦者となる近傍点までの直接距離ではなく、前の近傍点までの距離に応じた比率に基づいて閾値を適用します。これは、CBIR(コンテンツベース画像検索)において、局所的な特徴間の類似性を利用した「事例によるクエリ」によって画像を検索するために使用されます。より一般的には、いくつかのマッチング問題に関わっています。
固定半径近傍探索とは、指定された点から一定の距離内にあるユークリッド空間内のすべての点を効率的に見つける問題です。距離は固定されていると仮定しますが、クエリ点は任意です。
一部のアプリケーション(例えばエントロピー推定)では、 N個のデータポイントがあり、それらのN個のポイントそれぞれについて、最も近い近傍点を知りたい場合があります。もちろん、これは各ポイントに対して最近傍探索を1回実行することで実現できますが、より効率的な探索を実現するには、これらのN個のクエリ間の情報冗長性を活用するアルゴリズムを用いる方が望ましいでしょう。簡単な例を挙げると、ポイントXからポイントYまでの距離を求めると、ポイントYからポイントXまでの距離もわかるため、同じ計算を2つの異なるクエリで再利用できます。
固定次元、半正定値ノルム(これによりすべてのL pノルムを含む)、およびこの空間内のn個の点が与えられた場合、各点の最近傍はO ( n log n ) 時間で見つけることができ、各点のm個の最近傍はO ( mn log n ) 時間で見つけることができます。[ 25 ] [ 26 ]
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)