[Vector Search] HNSW ์ธ๋ฑ์ค
๊ด๋ จ ํฌ์คํธ
https://m.blog.naver.com/sssang97/223790220320
HNSW(Hierarchical navigable small world)๋ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค ๊ตฌํ์ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๊ทธ๋ํ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค ํ๋๋ค.
2016๋
์ ๋์๋ค.
ํน์ง
๋ค๋ฅธ ๋ฒกํฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ ๋ง์ฐฌ๊ฐ์ง์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทผ์ฌ์น(ANN) ๊ฒ์์ ์ํ ๊ตฌ์กฐ๋ผ์, ๊ฒฐ๊ณผ๊ฐ ์ ํํ ์ ์๋ค.
์๋๋ฅผ ์ํด์ ์ ํ๋๋ฅผ ํฌ์ํ ๊ตฌ์กฐ๋ค.
์ ํ๋๋ ๊ตฌํ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ๋์ฒด๋ก 70~90% ์ ๋๋ฅผ ์ค๊ฐ๋ค.
๊ฒ์์์ ์๊ฐ๋ณต์ก๋๋ O(log N), ๊ณต๊ฐ๋ณต์ก๋๋ O(N Log N) ์ ๋๋ค.
์ญ์ฌ์ ์ผ๋ก๋, Navigable Small World์ด๋ ๊ทธ๋ํ ๋จ์์ Skip list๋ฅผ ๋น๋กฏํ ์์ด๋์ด๋ฅผ ์ฒจ๊ฐํด์ ๋ฐ์ ์ํจ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
NSW (Navigable Small World)
HNSW์ ๋ํด์ ์ดํดํ๋ ค๋ฉด ๊ทธ ์ด์ ๋จ๊ณ์ธ NSW(Navigable Small World)์ ๋ํด์๋ ์ง๊ณ ๋์ด๊ฐ ํ์๊ฐ ์๋ค.
์ผ๋จ ์ด๋ฆ์ ๋ค์ด์๋ Small World๋ผ๋ ์ฉ์ด ์์ฒด๋ ๊ธฐ์ ๊ณผ ์ฐ๊ด์ด ์๋ ๊ฒ์ด์๋ค.
.png?type=w800)
๊ทธ๋ฅ ์ธ๊ฐ๋ค๋ผ๋ฆฌ์ ์ธ๊ฐ๊ด๊ณ๋ฅผ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ฉด, ๋ณดํต ๋๋ถ๋ถ์ ๊ฑฐ์ ์ฐ๊ฒฐ๋์ด์๋ค๋ ์ฌํ ์ด๋ก ์ด์๋ค.
๋ฐ์ดํฐ ์์ค์์๋ ์ฌ์ค ๋น์ทํ๋ค.
๋
ธ๋๋ผ๋ฆฌ ์ด๋์ ๋ ์ฐ๊ฒฐ์ ํด๋์ผ๋ฉด, ์ค์ ๋ก๋ ์ ์๋ฏธํ ํ์ ์๋๋ฅผ ๋ณด์ผ ์ ์์๋ค.
๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์ด๋ ๋ค.
NSW์์ ํ์์ ํ ๋๋ entrypoint๋ผ๊ณ ํ๋ ํน์ํ ๋
ธ๋์์๋ถํฐ ์์ํ๋ค.
entrypoint๊ฐ ์ผ๋ฐ์ ์ธ Tree์ root์ ๋น์ทํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
entrypoint์์๋ถํฐ ์์ํด์, ์ฃ์ง๋ฅผ ๋ฐ๋ผ ๊ฒ์ ๋ฒกํฐ์ ๊ฐ์ฅ ๋น์ทํ ๋
ธ๋๋ฅผ ์ฐพ์์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ๋ค๊ฐ ์ฃ์ง์ ๋ ๋น์ทํ๊ฒ ์๋ค๋ฉด ๊ทธ๊ฒ ๊ฐ์ฅ ๋น์ทํ ๋ฒกํฐ๋ผ ํ๋จํ๊ณ ์์น์์ ์ข
๋ฃํ๋ค.
์ด ์ข
๋ฃ ์ง์ ์ local minimum์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ด๋ฌํ ํ์ ์ ๊ทผ๋ฒ์ greedy routing์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋จ์
ํ์ง๋ง, ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ฒฐ๋์ด์๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์, ํ์์ ์ค๋จํ๋ค๊ณ ํ๋๋ผ๋ ๊ทธ๊ฒ ๊ฐ์ฅ ๋น์ทํ ๋ฒกํฐ๋ผ๋ ๋ณด์ฅ์ ์๋ค. ํ๋ฅ ์ ์ผ๋ก ๋น์ทํ ํ๋ฅ ์ด ๋์ ๊ฒ์ด๊ณ , ๊ทผ์ฌ์น์ ๋ถ๊ณผํ๋ค.
๊ฒ๋ค๊ฐ ์ผ๋ฐ์ ์ธ NSW ๊ตฌํ์์๋ ๋ฐ์ดํฐ๊ฐ ์ปค์ง์๋ก ์ข ๋ฃ ์ง์ , local minimum์ด ์ค์ ๊ฐ๊ณผ ๋๋จ์ด์ ธ์์ ํ๋ฅ ์ด ๋๋ค. local minimum์ด ์ ๋งคํ ์ง์ ์์ ์กํ์ ๋๋ฌด ์ผ์ฐ ์ข ๋ฃ๋๋ ๊ฒ์ early stopping์ด๋ผ๊ณ ํ๋ค.
entrypoint๋ฅผ ์ฌ๋ฌ ์ง์ ์ผ๋ก ์ก์์ ๋บ๋บ์ด๋ฅผ ๋ง์ด ๋๋ฆฌ๋ฉด ๋์์ง ์๋ ์์ง๋ง, ํ๊ณ๋ ์กด์ฌํ๋ค.
๊ทธ๋์ ์ผ๋ฐ์ ์ธ ๋ฒกํฐ ์ธ๋ฑ์ค์์๋ NSW์ ์ฌ์ฉํ์ง ์๊ณ , ๊ฐ์ ๋ ๋ฒ์ ์ธ HNSW์ ์ฌ์ฉํ๋ค.
Skip List
HNSW๋ Skip List์ ํ๋ฅ ๊ธฐ๋ฐ ๊ณ์ธต ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ก ์ ์์ฉํด์ early stopping๊ณผ ๊ฐ์ ์ ์กฐํ ์ ํ๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๋ค. Skip List์ ๋ํ ๋ด์ฉ์ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223801577003
๋ค๋ง ์ด๊ฑด ์์ด๋์ด๋ง ํ์ฉํ๊ฑฐ๊ณ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋๊ฑด ์๋๋ค
HNSW์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
HNSW๋ NSW์ ์ ๊ทผ๋ฐฉ์์ด ํฌ๊ฒ ๋ค๋ฅด์ง๋ ์๋ค.
๋ค๋ง Hierarchical(๊ณ์ธตํ)์ด๋ผ๋ ์ด๋ฆ์ด ๋ถ์ ๊ฒ์ฒ๋ผ, ๊ฐ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
.png?type=w800)
๋ค๋ง ์ ๋
ธ๋๊ฐ ํ ๋น๋ ๊ณ์ธต(layer)๋ ๋ฑํ ์ ํด์ง ๊ท์น ์์ด ๋๋ค์ผ๋ก ์ ํด์ง๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ๊ณ์ธต์ ๋
ธ๋๊ฐ ํ ๋น๋ ํ๋ฅ ์ ๊ฐ์๋ก ๋ฎ์์ง๋ค. ๊ทธ๋ฌ๋๊น ๊ณ์ธต 2์ ํ ๋น๋ ํ๋ฅ ์ด ๊ณ์ธต 0์ ํ ๋น๋ ํ๋ฅ ๋ณด๋ค ํจ์ฌ ๋ฎ์ ๊ฒ์ด๋ค.
์ด๋ฅผ ํตํด ๊ณ์ธต์ด ๋ฎ์์ง์๋ก ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋, Tree์ ๋น์ทํ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ถํฌ๋๋๋ก ์ ๋ํ๋ค.
์ด๋ฌํ ๊ตฌ์กฐ ๋๋ฌธ์ ํญ์ ๊ฒ์ entrypoint๋ ์ต์์ ๊ณ์ธต์๋ง ์ก๊ณ ์์ํ๋ค.
์ต์์ ๊ณ์ธต์์ ๋น์ทํ๊ฒ ์์ผ๋ฉด ์ด๋ํ๊ณ , ๋น์ทํ๊ฒ ์์ด์ local minimum์ ๋๋ฌํ๋ฉด, ๊ทธ ํ์ ๊ณ์ธต์ ์์ผ๋ฉด ๋ด๋ ค๊ฐ๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด์ ์ตํ์ ๊ณ์ธต์์ local minimum์ ๋๋ฌํ๋ฉด ๊ทธ๊ฒ ๊ฒ์์ ๋์ด๋ค.
์ด๋ฐ ๊ท ํ์กํ ํ์ ๊ตฌ์กฐ ๋๋ถ์ ์ข ๋ ๊ณ ๋ฅด๊ฒ ๊ฒ์์ ํ ์ ์๊ณ , ์ ํ๋๋ฅผ NSW๋ณด๋ค๋ ๋์ผ ์ ์๋ค.
HNSW ๊ด๋ จ ์ฉ์ด
HNSW ๊ตฌํ์ฒด์์๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ด ์๋ค.
์ธ๋ฑ์ค ์์ฑ์์๋ ๋ณดํต ๋ค์ 2๊ฐ์ง ์ต์
์ด ์กด์ฌํ๋ค.
- M(Minimum): ๊ฐ ๋ ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ์ด์(์ฃ์ง)์ ์. ๋์ด๋ ์๋ก ์ ํ๋๊ฐ ์ฌ๋ผ๊ฐ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋๊ณ ์๋๊ฐ ๋จ์ด์ง๋ค.
- ef_construction: ๊ทธ๋ํ ์์ฑ์, ํ์ฌ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐธ๊ณ ์ฉ์ผ๋ก ํ์ ์์๋ ์ด์ ๋ ธ๋์ ๊ฐ์. ์ด๊ฒ ๋์ด๋ ์๋ก ์ธ๋ฑ์ค ๊ตฌ์ฑ์ด ๋์ด๋๋ ๋์ ์ ํ๋๊ฐ ๋์ด๋ ์ ์๋ค.
๊ฒ์์์๋ ๋ณดํต ๋ค์ 2๊ฐ์ง ์ต์ ์ด ์กด์ฌํ๋ค.
- K: ๊ฐ์ ธ์ฌ ๋ฐ์ดํฐ ๊ฐ์
- ef: ๊ฒ์์์ ํ์ฌ ๋ ธ๋์์ ๊ณ ๋ คํ ์ด์ ๋ ธ๋์ ์. ๋ณดํต k๋ณด๋ค๋ ์ต์ํ 1.5๋ฐฐ ์ ๋๋ก ํฌ๊ฒ ์ก์์ผ ํ๋ค.
ํํฐ ๊ฐ๋ฅํ ์ธ๋ฑ์ค
์ผ๋ฐ์ ์ผ๋ก ๋ฒกํฐ ์ธ๋ฑ์ค๋ ์ฌ์ ํํฐ๋ง์ ์ ์ฉํ๊ธฐ ์ด๋ ต๋ค๊ณ ์๋ ค์ ธ์์ง๋ง, ๋ณํ์ ์ข ๊ฐํ๋ฉด ๋ถ์์ ํ๊ฒ๋๋ง ๊ตฌํ์ด ๊ฐ๋ฅํ๊ธด ํ๋ค.
๊ทธ๋์ elasticsearch, qdrant, milvus ๋ฑ ์๋น์์ HNSW ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ ๋ฒกํฐ ์ ์ฌ๋ ๊ฒ์์ ํํฐ๋ง์ ๊ฑฐ๋ ๊ฒ์ ์ง์ํ๋ค.
์์ธํ ๋ด์ฉ์ qdrant์ ๋ํด ์ ๋ฆฌํ ๊ธ์ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/223845582216
์ฌ์ฉ ์ฌ๋ก
pgvector, elasticsearch, qdrant, milvus ๋ฑ ๋ง์ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ HNSW์ ๊ธฐ๋ณธ ๋ฒกํฐ ์ธ๋ฑ์ค๋ก ์ ๊ณตํ๋ค.
์ฐธ์กฐ
https://velog.io/@eenzeenee/neural-search-HNSW-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%84%A4%EB%AA%85
https://en.m.wikipedia.org/wiki/Hierarchical_navigable_small_world
https://qdrant.tech/articles/vector-search-filtering/
https://qdrant.tech/documentation/concepts/indexing/
https://pangyoalto.com/faiss-1-hnsw/
https://jerry-ai.com/30
https://www.pinecone.io/learn/series/faiss/hnsw/