근사 최근접 이웃(ANN) 알고리즘 이해

인터넷이 등장하기 전의 시대에 자란 사람이라면 좋아할 만한 새로운 것을 찾는 것이 항상 쉽지만은 않았다는 것을 기억하실 것입니다. 라디오에서 우연히 듣고 새로운 밴드를 발견하거나, 채널을 돌리는 것을 잊어버려 우연히 새로운 TV 프로그램을 보게 되거나, 표지의 그림만 보고 새로운 비디오 게임을 발견하기도 했죠. 

요즘은 상황이 매우 다릅니다. Spotify는 제 취향에 맞는 아티스트를 추천하고, Netflix는 우리가 즐길 만한 영화와 TV 프로그램을 추천하며, Xbox는 우리가 다음에 플레이하고 싶어 할 만한 게임을 알고 있습니다. 이러한 추천 시스템은 우리가 실제로 찾고 있는 것을 훨씬 쉽게 찾아주며, 최근접 이웃(NN) 알고리즘으로 구동됩니다. NN은 방대한 정보를 분석하여 개인이 좋아하는 것과 가장 가까운 것, 혹은 찾고 있는 것을 찾아냅니다.

하지만 NN 알고리즘에는 내재적인 결함이 있습니다. 분석하는 데이터의 양이 너무 많아지면 모든 옵션을 크롤링하는 데 시간이 오래 걸립니다. 이러한 데이터 소스가 매년 점점 더 커지고 있기 때문에 특히 더 문제입니다. 바로 여기에서 근사 최근접 이웃(ANN)이 NN의 배턴을 이어받아 판도를 바꾸고 있습니다.

이 게시물에서는 다음과 같은 ANN의 주요 주제를 다룹니다.

  • ANN 정의

  • ANN 작동 방식

  • ANN 검색 사용 시점

  • 벡터 검색에서 ANN의 중요성

  • 다양한 유형의 ANN 알고리즘

근사 최근접 이웃 설명

근사 최근접 이웃(ANN)은 데이터 세트에서 주어진 쿼리 요소와 매우 가까운 데이터 요소를 찾는 알고리즘이지만 반드시 절대적으로 가장 가까운 것을 찾는 것은 아닙니다. NN 알고리즘은 모든 데이터를 철저히 검색하여 완벽한 일치 항목을 찾는 반면, ANN 알고리즘은 충분히 가까운 일치 항목을 찾습니다.

이것이 더 나쁜 해결책처럼 들릴 수 있지만, 실제로는 빠른 유사성 검색을 성공적으로 수행하는 핵심입니다. ANN은 지능형 지름길과 데이터 구조를 사용하여 검색 공간을 효율적으로 탐색합니다. 따라서 엄청난 시간과 리소스를 소비하는 대신, 대부분의 실제 시나리오에서 유용할 만큼 충분히 가까운 데이터 요소를 훨씬 적은 노력으로 식별할 수 있습니다.

기본적으로 절충안이라고 보면 됩니다. 가장 잘 일치하는 하나의 데이터 요소를 꼭 찾아야 한다면 속도와 성능을 희생하더라도 NN을 사용할 수 있습니다. 하지만 정확도가 약간 떨어지는 것을 감내할 수 있다면, ANN이 거의 항상 더 나은 솔루션입니다.

근사 최근접 이웃 알고리즘의 작동 방식

ANN 작동 방식의 첫 부분은 차원 축소로, 목표는 고차원 데이터 세트를 저차원으로 변환하는 것입니다. 모든 데이터를 분석하는 것보다 예측 모델 작업을 덜 복잡하고 더 효율적으로 만드는 것이 목표입니다.

이 알고리즘은 데이터 요소가 상주하는 위치이자 그 사이의 거리가 정의되는 메트릭 공간이라는 수학적 개념에 기반합니다. 이러한 거리는 특정 규칙(비음수성, 동일성, 대칭성, 삼각 부등식)을 준수해야 하며, 유클리드 거리나 코사인 유사도와 같은 일반적인 함수를 사용하여 계산합니다. 

더욱 자세히 이해하려면 휴가를 떠나 임대한 별장을 찾는다고 상상해 보세요. 모든 건물을 하나하나 확인하는 대신(고차원), 지도를 사용하면 문제를 2차원(저차원)으로 줄일 수 있습니다. (이는 의도적으로 단순화한 예시입니다. 차원 축소만이 ANN 알고리즘이 효율성을 개선하기 위해 사용하는 유일한 방법은 아닙니다.)

또한 ANN 알고리즘은 인덱스라는 영리한 데이터 구조를 활용하여 효율성을 향상시킵니다. 데이터를 이러한 인덱스로 사전 처리함으로써 ANN은 검색 공간을 훨씬 더 빠르게 탐색할 수 있습니다. 지도에서 현재 위치를 찾아 휴가용 별장에 더 빨리 도착하게 해주는 도로 표지판이라고 생각하면 됩니다.

근사 최근접 이웃 검색을 사용하는 경우

빠르게 변화하는 데이터 과학의 세계에서는 효율성이 가장 중요합니다. 실제 가장 가까운 이웃을 찾는 것(정확한 최근접 이웃 검색)은 가치가 있지만, 앞서 설명한 것처럼 계산 비용이 드는 경우가 많습니다. 바로 이 부분에서 ANN 검색이 빛을 발하며, 빠른 속도와 절대적인 정확도는 아니지만 높은 정확도라는 매력적인 절충안을 제공합니다.

그렇다면 정확히 언제 다른 검색 방법 대신 ANN을 선택해야 할까요?

정확한 최근접 이웃은 속도가 느릴 수 있지만, 정확도가 우선시되거나 작은 데이터 세트를 사용하는 경우 가장 적합한 옵션입니다. k-최근접 이웃(kNN)은 높은 정확도를 유지하면서 더 빠른 결과를 제공함으로써 NN과 ANN의 중간에 위치합니다. 하지만 k 값을 결정할 때 올바른 결정을 내리기 어려울 수 있으며, 고차원 데이터에서도 어려움을 겪습니다.

절대적이지는 않지만 ANN의 높은 정확도와 결합된 속도와 효율성은 다음과 같은 몇 가지 상황에서 완벽한 선택이 됩니다.

  • 대규모 데이터 세트: 수백만 또는 수십억 개의 데이터 요소를 다룰 때, 정확한 NN은 철저한 특성으로 인해 속도가 느려집니다. ANN은 방대한 데이터 환경을 탐색하여 신속하게 결과를 제공하는 데 탁월합니다.

  • 고차원 데이터: 차원이 늘어나면 정확한 NN 계산량이 기하급수적으로 증가합니다. ANN의 차원 축소 기술은 이미지나 텍스트와 같은 복잡한 데이터에서 검색 공간을 효과적으로 축소하고 효율성을 높입니다.

  • 실시간 애플리케이션: 즉시 결과가 필요하신가요? 추천 시스템, 사기 탐지, 이상 징후 탐색은 실시간 인사이트에 의존합니다. ANN의 속도는 이러한 시나리오에 이상적입니다.

  • 허용 가능한 근사치: 애플리케이션이 결과에서 약간의 부정확성을 용인할 수 있다면 ANN의 속도는 매우 유용합니다. 예를 들어, 이미지 검색에서는 절대적으로 가장 유사한 이미지 대신 시각적으로 유사한 이미지를 찾는 것으로 충분할 수 있습니다.

벡터 검색에서 ANN의 중요성

벡터 검색은 고밀도 벡터로 인코딩된 데이터를 다루며, 복잡한 관계와 내재된 의미를 포착합니다. 따라서 기존의 키워드 기반 검색으로는 부족한 이미지, 텍스트, 사용자 선호도와 같은 콘텐츠를 검색하는 데 적합합니다. 하지만 차원의 저주라는 문제는 여기에도 적용됩니다. 벡터를 표현하는 차원의 수가 증가할수록 기존 검색 방법은 느려지고 비효율적이 되기 때문입니다.

ANN은 정확한 일치 검색에서 '충분히 가까운' 일치 검색으로 초점을 전환하여 이 문제를 해결합니다. 이를 통해 빠른 검색이 가능해지며, 벡터 검색은 방대한 데이터 세트에서 유사한 벡터를 매우 빠르게 찾을 수 있습니다. 또한 확장성이 기본 제공되므로 속도 저하 없이 데이터 세트를 원하는 만큼 늘릴 수 있습니다.

향상된 정확도 및 효율성과 실시간 응답이 결합되며 ANN이 벡터 검색의 진정한 잠재력을 발휘하는 데 중요한 역할을 할 수 있음을 의미할 때가 많습니다.

근사 최근접 이웃 알고리즘의 유형

ANN이라는 개념은 검색에서 강력한 속도 이점을 제공하지만, 실제로 이 용어는 다양한 알고리즘을 포괄합니다. 모두 고유한 이점과 장단점이 있으며, 특정 데이터 및 검색 요구에 적합한 도구를 선택할 때 이러한 미묘한 차이를 이해하는 것이 매우 중요합니다.

KD 트리

KD 트리는 데이터 요소를 계층적 트리 구조로 구성하여 특정 차원에 따라 공간을 분할합니다. 이 기능은 저차원 공간과 유클리드 거리 기반 쿼리에서 빠르고 효율적인 검색을 가능하게 합니다.

그러나 KD 트리는 저차원에서 최근접 이웃을 찾는 데는 탁월하지만 ‘차원의 저주’에 시달립니다. 차원 수가 늘어남에 따라 요소 사이의 공간이 폭발적으로 증가하는 것입니다. 이러한 고차원에서는 단일 축을 기반으로 분할하는 KD 트리의 전략이 효과적이지 않게 됩니다. 이로 인해 검색은 대부분의 데이터를 검사하게 되어 효율성이라는 이점을 잃고, 모든 요소를 단순 선형 스캔하는 것과 비슷한 느린 속도에 가까워집니다.

지역성 기반 해싱(LSH)

LSH는 유사성 관계를 영리하게 보존하는 방식으로 데이터 요소를 저차원 공간으로 '해싱'하여 작동하는 강력한 ANN 기술입니다. 이러한 클러스터링은 데이터를 더 쉽게 찾을 수 있게 해주며, LSH가 속도와 확장성을 모두 유지하며 이미지나 텍스트와 같은 대규모 고차원 데이터 세트를 검색할 수 있도록 지원합니다. 그리고 이 모든 작업을 수행하면서도 '충분히 가까운' 일치 항목을 높은 정확도로 반환합니다. 하지만 LSH는 때때로 오탐(유사하지 않은 요소를 유사하다고 판단하는 것)을 일으킬 수 있으며 거리 메트릭과 데이터 유형에 따라 그 효과가 달라질 수 있다는 점을 염두에 두어야 합니다. LSH는 다양한 메트릭(예: 유클리드 거리, 자카드 유사성)과 함께 작동하도록 설계된 다양한 LSH 제품군이 있어 여전히 다용도로 사용할 수 있습니다.

Annoy

Annoy(근사 최근접 이웃 오 예)는 단일 알고리즘이 아니라 LSH 또는 KD 트리를 직접 구현하지 않고 자체 알고리즘을 사용해 트리를 구축하고 쿼리하는 오픈 소스 C++ 라이브러리입니다. 고차원 공간에서 메모리 효율적이고 빠른 검색을 위해 설계되었기 때문에 실시간 쿼리에 적합합니다. 기본적으로 다양한 데이터 유형과 검색 시나리오를 위한 유연성을 제공하는 사용자 친화적인 인터페이스입니다. Annoy의 강점은 한 곳에서 여러 가지 ANN 접근 방식을 활용하여 필요한 부분에 가장 잘 맞는 방식을 선택할 수 있다는 것입니다. 프로세스는 간소화되지만 최적의 성능을 위해서는 Annoy 내에서 적절한 내부 알고리즘을 선택하는 것이 중요하며, 그 효과는 여전히 데이터 및 정확도 요구 사항과 같은 요소에 따라 달라진다는 점을 기억해야 합니다. 

선형 스캔 알고리즘

일반적으로 ANN 기술로 분류되지는 않지만, 선형 스캔은 다른 ANN 알고리즘과 유사한 결과를 제공하는 무차별 접근 방식이기 때문에 언급할 가치가 있습니다. 모든 데이터 요소를 순차적으로 반복하여 레코드 간의 거리를 계산하고 가장 잘 일치하는 것을 추적합니다. 알고리즘의 단순한 특성으로 인해 구현하기 쉽고 소규모 데이터 세트에 적합합니다. 보다 기본적인 접근 방식의 단점은 대규모 데이터 세트에는 비효율적이고, 고차원 데이터와 함께 사용할 경우 속도가 느리며, 실시간 애플리케이션에는 비실용적이라는 점입니다.

올바른 ANN 선택

ANN을 선택하기 전에 고려해야 할 몇 가지 사항이 있습니다.

  • 데이터 세트 크기 및 차원: 고차원의 대규모 데이터에는 지역성 기반 해싱을, 저차원의 소규모 데이터에는 KD 트리를 사용하는 것을 고려해 보세요.

  • 원하는 정확도 수준: 절대적인 정확도가 중요한 경우 선형 스캔이 최선의 선택일 수 있으며, 그렇지 않은 경우 속도와 정확도가 우수한 LSH 또는 Annoy를 고려할 수 있습니다.

  • 계산 자원: Annoy는 유연성을 제공하지만 알고리즘을 선택하기 전에 메모리 및 처리 한도를 고려하세요.

만능 솔루션은 없다는 것을 기억하시기 바랍니다. 다양한 ANN 알고리즘을 실험하고 특정 데이터에 대한 성능을 평가하여 여러분의 벡터 검색 요구 사항에 가장 적합한 알고리즘을 찾으세요. 이러한 옵션 외에도, ANN 알고리즘의 세계는 끊임없이 진화하고 있으므로 검색을 개선할 수 있는 새로운 기술을 놓치지 않도록 귀를 기울이는 것도 좋습니다.

더 나은 검색을 위한 비밀 소스, ANN

방대하고 복잡한 데이터의 세계에서는 그 미로를 탐색할 수 있는 효율적인 도구가 필요합니다. 바로 이 점에서 ANN은 유사성 검색을 우수한 수준에서 탁월한 수준으로 끌어올리는 비밀 소스가 될 수 있습니다. 정확도가 약간 떨어지기는 하지만 속도와 확장성을 제공합니다. 그리고 매주 발전하는 연구가 진행 중이며, 이 모든 것이 ANN 공간의 역동적인 특성에 기여하게 될 것입니다. 예를 들어, 양자 컴퓨팅과 머신 러닝의 발전은 더 빠르고 효율적인 새로운 유형의 ANN 알고리즘으로 이어질 수 있습니다.

각기 고유한 장단점을 지닌 다양한 ANN 알고리즘을 살펴보았습니다. 그러나 궁극적으로 최적의 선택은 사용자의 구체적인 요구 사항에 따라 달라집니다. 데이터 크기, 차원, 정확도 요구 사항, 리소스 등의 요소를 고려하세요. 실험하고, 탐색하고, 올바른 알고리즘을 선택하여 ANN을 최대한 활용하세요. 이미지 검색에서 사기 탐지에 이르기까지 이러한 알고리즘은 숨겨진 연관성을 찾아내고 데이터 기반 인사이트를 빠르게 확보하여 큰 차이를 만들 수 있습니다.

따라서 이후에 다음 노래, 영화, 비디오 게임을 검색할 때는 뒤에서 점을 연결하고 관련성을 만들어 내는 조용한 영웅, 즉 ANN 알고리즘을 기억하세요.

다음에 해야 할 일

준비가 되면 비즈니스 데이터에서 인사이트를 활용하는 데 도움이 되는 네 가지 방법을 확인해 보세요.

  1. 무료 체험판을 시작하고 Elastic이 여러분의 비즈니스에 어떻게 도움이 되는지 알아보세요.

  2. Elastic 솔루션을 둘러보고 Elasticsearch Platform의 작동 방식과 솔루션이 여러분의 요구 사항에 어떻게 부합하는지 알아보세요.

  3. 엔터프라이즈에서 생성형 AI를 어떻게 통합하고 있는지 알아보세요.

  4. 관심이 있을 만한 지인에게 이 글을 공유하세요. 이메일, LinkedIn, Twitter, 또는 Facebook을 통해 공유할 수 있습니다.

 

이 게시물에서 설명된 모든 기능이나 성능의 출시와 일정은 Elastic의 단독 재량에 따라 결정됩니다. 현재 제공되지 않는 기능이나 성능은 예정된 시간에 출시되지 않을 수도 있으며 아예 제공되지 않을 수도 있습니다.

이 블로그 게시물에서는 타사 생성형 AI 도구를 사용하거나 언급했을 수 있으며 이러한 도구는 각각의 소유자가 소유하고 운영합니다. Elastic은 이러한 타사 도구에 대해 어떠한 통제권도 없으며 해당 도구의 콘텐츠, 운영, 사용뿐 아니라 사용으로 인해 발생할 수 있는 손실이나 손해에 대해 어떠한 책임도 지지 않습니다. 개인 정보, 민감한 정보 또는 기밀 정보를 AI 도구와 함께 사용할 때는 주의하시기 바랍니다. 제출된 모든 데이터는 AI 학습이나 기타 목적으로 사용될 수 있습니다. 제공한 정보가 안전하게 보호되거나 비밀로 유지된다는 보장은 없습니다. 생성형 AI 도구를 사용하기 전에 해당 도구의 개인정보 보호 관행과 이용 약관을 숙지하시기 바랍니다. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine 및 관련 마크는 미국 및 기타 국가에서 Elasticsearch N.V.의 상표, 로고 또는 등록 상표입니다. 그 외의 모든 회사 및 제품 이름은 해당 소유자의 상표, 로고 또는 등록 상표입니다.