근사 최근접 이웃(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 알고리즘을 기억하세요.
다음에 해야 할 일
준비가 되시면 비즈니스 데이터에서 인사이트를 활용하는 데 도움이 되는 네 가지 방법을 확인해 보세요.
무료 체험판을 시작하고 Elastic이 여러분의 비즈니스에 어떻게 도움이 되는지 알아보세요.
Elastic 솔루션을 둘러보고 Elasticsearch Platform이 어떻게 작동하는지, 그리고 저희 솔루션이 여러분의 요구 사항에 어떻게 부합하는지 알아보세요.
이 블로그 게시물에 관심이 있을 만한 사람과 공유하세요. 이메일, 링크드인, 트위터 또는 페이스북을 통해 공유하세요.
이 게시물에 설명된 기능의 릴리즈 및 시기는 Elastic의 단독 재량에 따릅니다. 현재 이용할 수 없는 기능은 정시에 또는 전혀 제공되지 않을 수도 있습니다.
이 블로그 포스팅에서, Elastic은 각 소유자가 소유하고 운영하는 서드파티 생성형 AI 도구를 사용했거나 참조했을 수 있습니다. Elastic은 서드파티 도구에 대한 어떠한 통제권도 없으며 당사는 그 내용, 작동 또는 사용에 대한 책임이나 법적 의무가 없고 이러한 도구의 사용으로 인해 발생할 수 있는 손실 또는 손상에 대해 책임을 지지 않습니다. 개인 정보, 민감한 정보 또는 기밀 정보와 함께 AI 도구를 사용할 때 주의하세요. 제출하신 모든 데이터는 AI 교육을 위해 또는 다른 목적으로 사용될 수 있습니다. 제공하시는 정보가 안전하게 유지되거나 기밀로 유지된다는 보장은 없습니다. 사용 전에 생성형 AI 도구의 개인 정보 보호 관행 및 사용 약관을 숙지하셔야 합니다.
Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine 및 관련 마크는 미국 및 기타 국가에서 Elasticsearch N.V.의 상표, 로고 또는 등록 상표입니다. 기타 모든 회사 및 제품 이름은 해당 소유자의 상표, 로고 또는 등록 상표입니다.