I、Keseluruhan proses bisnis model besar
-
Pembangunan klaster AI:pembangunan komputasi, komunikasi, dan penyimpanan
-
Data model besar:Dataset model besar, pemrosesan data, basis data vektor
-
Algoritma model besar:dari NLP tradisional hingga model bahasa besar LLM pralatih
-
Pelatihan model besar:metode algoritme umum untuk pelatihan model besar dan analisis stabilitas
-
Paralelisme terdistribusi: paralelisme model, paralelisme data, paralelisme pengoptimal, dan sebagainya
-
Penyesuaian model besar:algoritma penyesuaian seluruh parameter, penyesuaian dengan sedikit parameter, dan penyesuaian berbasis instruksi
-
Inferensi model besar:kompresi kuantisasi, inferensi dengan perluasan urutan panjang, metode cache
-
Evaluasi model besar:tugas hilir NLP, tugas hilir CV, rancangan evaluasi
-
Agen model besar:alur RLHF、agen、pembelajaran sepanjang hayat
II、Vektor
Orang yang mengenal anjing dapat dengan cepat membedakan rasnya. Mereka bisa melakukannya karena mengamati ciri-ciri anjing dari berbagai sudut, misalnya ukuran tubuhnya.
Jika kita menggunakan sebuah sumbu koordinat untuk menggambarkan karakteristik ukuran mereka, anjing-anjing ini akan berada pada koordinat yang berbeda. Namun, mengandalkan ukuran tubuh saja belum cukup, karena ukuran tubuh sebagian anjing sangat mirip.
Kemudian kita mengamati ciri lainnya, misalnya panjang bulu, lalu membuat satu sumbu koordinat lagi, dengan demikian sebagian anjing yang memiliki ukuran sama dapat dibedakan
Namun, sebagian masih tumpang tindih, sehingga perlu terus diamati dari lebih banyak sudut, misalnya panjang pendeknya hidung.
Kita juga dapat menambahkan lebih banyak dimensi, misalnya ukuran mata. Kita tidak dapat menggambar dalam ruang empat dimensi, tetapi mewujudkannya dalam nilai koordinat sangatlah mudah, cukup terus menambahkan nilai di belakangnya.
Kita juga dapat mengamati ciri seekor anjing dari lebih banyak sudut pandang, atau dimensi, seperti ketebalan kaki, keritingnya bulu, bahkan dari sudut pandang abstrak, seperti kepatuhan, kegunaan sebagai alat, dan sebagainya. Semakin banyak dimensi yang kita gunakan, semakin kuat kemampuan kita membedakan anjing. Pada saat yang sama, dimensi ruang tempat titik koordinat berada juga menjadi semakin tinggi.
Bukan hanya anjing, pada dasarnya hampir segala sesuatu dapat direpresentasikan dengan cara ini. Bisa berupa sesuatu yang konkret,
bisa pula berupa hal abstrak seperti gembira, marah, sedih, senang, pertemuan dan perpisahan. Berbagai hal memiliki wujud atau nilai yang berbeda pada dimensi ciri yang berbeda, sehingga pada akhirnya masing-masing berkorespondensi dengan satu titik koordinat dalam ruang ciri berdimensi tinggi. Hanya saja, dalam cakupan yang lebih luas ini, kita mungkin memerlukan lebih banyak dimensi ciri agar dapat membedakan berbagai hal dengan baik. Bisa ratusan, ribuan, atau bahkan puluhan ribu.
Namun, karena kita tidak dapat membuat gambar dengan lebih dari tiga dimensi, penjelasannya menggunakan koordinat dua dimensi.
Kita akan menemukan bahwa titik-titik yang secara konseptual lebih dekat akan lebih mengelompok di dalam ruang, sedangkan titik-titik yang konsepnya sangat berbeda akan berjarak sangat jauh. Lebih lanjut, jika titik asal koordinat dijadikan titik awal dan titik-titik koordinat tersebut dijadikan titik akhir, inilah vektor yang memiliki arah dan besaran.
Jika gambar diubah menjadi vektor, pencarian vektor yang mirip dapat digunakan untuk mewujudkan fitur pencarian gambar berdasarkan gambar
Jika video direpresentasikan sebagai vektor, rekomendasi video serupa dapat diwujudkan dengan mencari vektor yang mirip
Jika barang diubah menjadi vektor,pencarian vektor yang mirip dapat digunakan untuk memberikan rekomendasi terkait berdasarkan barang yang sedang dilihat pengguna
Jika teks diubah menjadi vektor, sistem tanya jawab cerdas dapat menemukan beberapa pertanyaan serupa yang telah diselesaikan sebagai referensi berdasarkan pertanyaan pengguna saat ini
III、Basis data vektor
Seiring hadirnya AI, vektor akan menjadi bentuk data yang penting. Namun, basis data tradisional tidak cocok untuk menyimpan dan menelusuri data vektor, sehingga diperlukan basis data yang dirancang khusus untuk menangani masalah ini. Basis data seperti ini mungkin akan menjadi infrastruktur pada lapisan data di masa depan. Berbeda dengan basis data tradisional yang menyimpan tabel data lalu melakukan pencarian presisi menggunakan pernyataan kueri, basis data vektor menyimpan data vektor, sedangkan proses kuerinya mencari sejumlah vektor dalam basis data yang paling mirip dengan vektor kueri, sehingga memiliki tingkat ketidakpresisian tertentu.

1、Kueri vektor
Salah satu penerapan utama data vektor adalah: dengan sebuah vektor kueri yang diberikan, mencari sejumlah vektor yang paling mirip dari sekumpulan besar vektor. Inilah yang disebut masalah tetangga terdekat, sedangkan algoritma yang mewujudkannya disebut algoritma tetangga terdekat. Salah satu metode yang paling mudah terpikir mungkin adalah pencarian brute force, yaitu membandingkan kemiripan setiap vektor dengan vektor kueri secara berurutan, lalu memilih beberapa yang memiliki kemiripan tertinggi. Ada banyak metode khusus untuk membandingkan kemiripan dua vektor,Jarak Euclidean dan kemiripan kosinus.
-
Jarak Euclidean adalah jarak garis lurus antara dua vektor. Dalam sistem koordinat dua dimensi, misalkan ada dua vektor p dan q, jarak Euclidean dihitung sebagai panjang garis lurus yang menghubungkan p dan q. Dalam sistem koordinat tiga dimensi, setiap vektor memuat tiga koordinat x、y、z, dan jarak antara dua titik mana pun dihitung berdasarkan rumus. Sedangkan dalam sistem koordinat n dimensi, terdapat 100 koordinat, dan jarak antara dua titik mana pun dihitung berdasarkan rumus. Semakin pendek jaraknya, semakin tinggi kemiripan kedua vektor tersebut pada dimensi tertentu

-
Cara lain adalah kesamaan kosinus. Selain jarak, kita juga dapat menggambarkan hubungan antarvektor melalui sudut di antara keduanya. Dalam sistem koordinat dua dimensi, semakin kecil sudutnya, semakin tinggi keterkaitan antara kedua vektor. Kita dapat menggunakan rumus untuk menghitung kesamaan kosinus antara dua vektor mana pun. Dalam sistem koordinat tiga dimensi, prinsip yang sama juga dapat digunakan untuk menghitung sudut dan kesamaan kosinus antara dua vektor mana pun.

Namun, jika data vektor terlalu banyak, metode brute force yang tidak memerlukan kecanggihan teknis ini akan menyebabkan waktu pencarian yang sangat lama. Meski demikian, kualitas pencariannya memang sempurna karena benar-benar membandingkan setiap vektor. Jadi, jika skala data dalam basis data relatif kecil dan waktu untuk menelusuri seluruh vektor masih dapat diterima, ini juga merupakan metode yang baik. Namun, skala data dalam penerapan nyata biasanya tidak kecil, sehingga perlu ditemukan cara untuk mengoptimalkannya.
2、indeks vektor
Sebelumnya telah dijelaskan prinsip pencarian pada basis data vektor. Namun, dalam praktiknya, pencocokan kemiripan di dalam basis data vektor tidak dapat sepenuhnya mengandalkan perhitungan rumus, karena jumlah datanya biasanya sangat besar dan dimensinya juga sangat tinggi. Menghitung kemiripan antara dua vektor berdimensi 1000 dengan rumus memerlukan banyak komputasi dan membebani CPU dengan kebutuhan komputasi intensif. Jika ada seratus juta vektor dan masing-masing harus dihitung, biaya waktu dan komputasinya akan semakin tinggi. Karena itu, di sini kita memperkenalkan konsep yang disebut indeks vektor.
Indeks vektor mirip dengan indeks dalam basis data relasional, tetapi ada satu perbedaan. Dalam basis data vektor, hasil yang ditemukan melalui indeks vektor merupakan hasil perkiraan, bukan hasil yang akurat 100%.Indeks vektor menggambarkan tinggi rendahnya tingkat kemiripan. Oleh karena itu, kita menyebutnya pencarian tetangga terdekat aproksimatif(ANS). Tanpa indeks vektor, pencarian kemiripan suatu vektor menyerupai pemindaian seluruh tabel dalam basis data relasional. Namun, di atas pemindaian seluruh tabel itu masih ada satu lapisan komputasi tambahan, sehingga biayanya jauh lebih tinggi daripada pemindaian seluruh tabel dalam basis data relasional.
Berdasarkan cara implementasinya, indeks vektor ANNS dapat dibagi menjadi empat kategori utama:
-
Indeks berbasis pohon
-
Indeks berbasis graf
-
Indeks berbasis hash
-
Indeks berbasis kuantisasi
1、Metode berbasis pohon
Gagasan utama metode berbasis pohon adalah membagi data, mirip dengan pohon pencarian biner, sehingga ruang pencarian diperkecil saat pencarian dilakukan untuk mencapai pengambilan data yang cepat. Namun, metode ini tidak cocok untuk ruang berdimensi tinggi. Metode berbasis pohon terutama mencakup KDTree(K-Dimensional Tree, pohon berdimensi K)dan Annoy(Approximate
Nearest Neighbors Oh Yeah, pencarian perkiraan tetangga terdekat, oh ya).
1.1
KDTree
Pembangunan KDTree juga didasarkan pada gagasan pembagian rekursif,mula-mula memilih dimensi dengan varians terbesar,lalu menggunakan median seluruh data pada dimensi tersebut sebagai titik pemisah,membagi wilayah hiperpersegi panjang menjadi dua subwilayah,data yang lebih kecil dari median ditempatkan di kiri,data yang lebih kecil dari median ditempatkan di kanan,kemudian membangun subpohon kiri dan kanan secara rekursif,hingga seluruh data selesai dibagi。
Alur pencarian berbasis KDTree:
1、Untuk data kueri p dan dimensi pemisah d pada node saat ini, bandingkan nilai koordinat data p pada dimensi d dengan nilai node; jika lebih besar, menuju node anak kiri, dan jika lebih kecil, menuju node anak kanan;
2、Telusuri hingga mencapai simpul daun, tandai sebagai sudah dikunjungi, lalu hitung jarak ke simpul daun sebagai jarak terdekat;
3、Lakukan penelusuran balik pada simpul daun, dan pada setiap langkah penelusuran balik, periksa jarak antara p dan cabang pada simpul induk yang belum dikunjungi.
a)Jika jarak antara simpul cabang tersebut dan p lebih besar daripada jarak terdekat saat ini, lanjutkan penelusuran balik ke atas hingga simpul akar;
b)Jika jarak simpul cabang tersebut ke p lebih kecil daripada jarak terdekat saat ini, gunakan cabang tersebut, jalankan langkah 1 dan langkah 2 hingga mencapai simpul daun, lalu perbarui jarak terdekat antara simpul daun dan Q.
1.2Annoy
Annoy menggunakan hiperbidang untuk membagi ruang. Hiperbidang tersebut diperoleh dengan menggunakan KMeans(k=2) untuk mencari dua pusat klaster; bidang yang tegak lurus terhadap garis penghubung kedua pusat itu menjadi hiperbidang pembagi. Proses ini diulangi hingga jumlah data dalam setiap subruang berada di bawah ambang yang ditentukan.


Untuk mencari titik mana pun dalam ruang ini, kita dapat menelusuri pohon biner mulai dari akar. Setiap simpul perantara (kotak-kotak kecil pada pohon di atas) menentukan sebuah hiperbidang, sehingga hiperbidang tersebut dapat digunakan untuk memutuskan apakah penelusuran selanjutnya menuju simpul anak kiri atau kanan. Pencarian sebuah titik dapat diselesaikan dalam waktu logaritmik, yakni setinggi pohon tersebut.
Kelebihan: Akurasi cukup tinggi pada data berdimensi rendah Kekurangan: Tidak dapat sepenuhnya menangkap kompleksitas data, akurasi lebih rendah pada data berdimensi tinggi
2、Metode berbasis graf
Metode berbasis graf terutama menggunakan struktur data graf, memanfaatkan keterhubungan antarsimpul tetangga untuk membangun jalur cepat, dan mengubah masalah menjadi penelusuran graf. Dengan begitu, ruang pencarian dapat dipersempit dengan cepat dan pencarian dipercepat. Namun, struktur data graf cukup rumit. Untuk mencapai kecepatan pencarian maksimal, biasanya seluruh graf dimuat ke memori sehingga penggunaan memorinya sangat tinggi, tetapi pencariannya cepat dan tingkat recall-nya tinggi.
Algoritma pencarian graf yang umum digunakan saat ini terutama adalah HNSW(Hierarchical Navigating Small World), sedangkan NSW(Navigating Small World)merupakan algoritma pendahulunya yang juga perlu dipahami.
2.1 NSW
NSW menambahkan ketentuan berikut pada konstruksi graf sederhana:semua simpul harus memiliki simpul tetangga;simpul-simpul yang bertetangga harus dihubungkan oleh sisi;jumlah tetangga ditetapkan oleh pengguna sebagai hiperparameter. Ini terutama digunakan untuk mengatasi beberapa keterbatasan metode konstruksi graf sederhana.
Proses pembentukan graf NSW:
Saat menyisipkan simpul baru, pertama-tama cari m simpul yang paling dekat dengan simpul baru tersebut, lalu hubungkan simpul baru itu dengan m simpul tersebut.
Proses pencarian NSW:
Untuk data kueri q, pilih secara acak satu simpul entry
point beserta simpul-simpul tetangganya dari graf, lalu hitung jarak entry point dan simpul tetangga ke p. Jika ada tetangga yang jaraknya ke p lebih kecil daripada jarak p ke entry
point, tetapkan titik dengan jarak minimum, hingga akhirnya ditemukan sebuah point yang semua tetangganya memiliki jarak ke query lebih besar daripada jarak point tersebut。
Seperti terlihat pada gambar di atas, untuk mencari simpul terdekat dengan simpul query hijau dalam graf tetangga yang telah dibangun, mulailah dari entry
points yang dipilih secara acak. Mula-mula, long-link merah membawa pencarian dengan cepat ke simpul di dekat query, lalu short-link hitam digunakan untuk menemukan titik yang memenuhi syarat。
NSW juga merupakan komputasi aproksimasi, sehingga tidak dapat menjamin bahwa hasilnya adalah tetangga terdekat yang sebenarnya. Titik yang dimasukkan lebih awal memiliki lebih banyak sisi redundan, sehingga lebih mungkin membentuk jalur cepat, sedangkan semakin belakangan suatu titik dimasukkan, semakin kecil kemungkinannya memiliki jalur cepat.
2.1 HNSW
HNSW adalah penyempurnaan berbasis NSW yang terutama menggunakan gagasan skip list dan diterapkan secara berlapis. Setiap lapisan merupakan sebuah NSW, sehingga metode ini juga dapat disebut NSW berlapis. Semakin tinggi lapisannya, semakin jarang simpulnya dan semakin jauh jarak antarsimpul. Semakin ke bawah, jumlah simpul dan koneksinya bertambah, sedangkan jarak rata-ratanya semakin dekat.
Kelebihan:dapat menemukan tetangga terdekat yang serupa dalam data berdimensi tinggi, sehingga meningkatkan performa pencarian;kekurangan:metode pembentukan graf rumit dan memengaruhi efisiensi memori.
3、Metode berbasis hash
Metode berbasis hash terutama memanfaatkan karakteristik fungsi hash: data yang memiliki kemiripan tinggi juga memiliki nilai hash yang mirip. Fungsi hash dapat mengubah data berdimensi tinggi menjadi data berdimensi rendah, sehingga sangat meningkatkan efisiensi pembangunan indeks. Namun, fungsi hash juga memiliki keterbatasan lain: data dengan nilai hash yang mirip belum tentu mirip, sehingga tingkat recall metode ini tidak terlalu tinggi. Metode berbasis hash terutama menggunakan LSH(Locality-Sensitive
Hashing, hashing yang peka terhadap kedekatan). Diasumsikan bahwa jika dua vektor mirip, nilai hash keduanya juga mirip. Fungsi hash digunakan untuk memetakan vektor yang mirip ke bucket yang sama. Saat melakukan kueri, pertama-tama temukan bucket yang paling mirip dengan vektor kueri, lalu lakukan pencarian pada data di dalam bucket untuk menghitung topk yang paling mirip.
LSH(hash peka lokasi) juga merupakan metode berbasis pembagian ruang. Cara penerapannya seperti pada gambar berikut:sebuah garis lurus dibuat secara acak, yang membedakan sisi positif dan negatif. Jika suatu vektor berada di sisi positif garis tersebut, nilainya adalah 1, sedangkan di sisi negatif nilainya 0. Lalu dibuat lagi sebuah garis lurus secara acak, dengan sisi positif bernilai 1 dan sisi negatif bernilai 0;dengan membuat beberapa garis seperti ini,
untuk setiap vektor kita memperoleh 4 nilai berupa 0 atau 1, sehingga masing-masing mendapatkan kode biner sepanjang 4 bit. Sekarang mari kita amati tingkat kemiripan 4 kode biner ini.





Kelebihan:pemrosesan data sangat cepat saat diperluas ke data besar, kekurangan:tingkat ketepatannya biasa saja
5、Indeks berbasis kuantisasi(Quantized)
5.1、Pengelompokan
Jika kita dapat menentukan perkiraan cakupan pencarian untuk vektor kueri sebelum melakukan pencarian, kecepatan pencarian dapat meningkat pesat. Pertama, kita menentukan jumlah kelompok yang diinginkan, misalnya 4 kelompok pada gambar di bawah, lalu menghasilkan 4 titik pusat secara acak. Setiap vektor kemudian dimasukkan ke kelompok titik pusat yang paling dekat dengannya. Selanjutnya, vektor-vektor yang saat ini berada dalam satu kelompok digunakan untuk menghitung titik vektor rata-rata, lalu posisi titik pusat dipindahkan ke titik rata-rata tersebut. Setelah itu, kita kembali menentukan titik pusat terdekat untuk setiap titik vektor dan mengelompokkannya ulang. Proses berulang ini disebut pelatihan, dan akhirnya titik-titik pusat tersebut akan cenderung stabil, atau disebut konvergen. Saat melakukan pencarian, cukup temukan pusat klaster yang paling dekat dengan vektor kueri, lalu cari di antara vektor-vektor dalam klaster tersebut. Dengan demikian, tujuan mempersempit cakupan pencarian pun tercapai
5.2、Kuantisasi(Quantization)
Namun, untuk data vektor dalam jumlah sangat besar, selain kecepatan pencarian, penggunaan memori juga menjadi tantangan besar. Dalam skenario penerapan nyata, vektor dengan ribuan dimensi dan data berjumlah ratusan juta vektor bukanlah hal yang langka, sehingga penggunaan memorinya akan sangat besar.
Dari pembahasan pengelompokan di atas, kita mengenal titik pusat, yang sebenarnya disebut centroid. Bisakah centroid digunakan untuk mewakili titik-titik dalam suatu kelompok?Seharusnya bisa, sebenarnya metode ini merupakan contoh khas dari Kompresi lossy ,jika diilustrasikan dengan gambar, hasilnya seperti berikut:

Meskipun ini menghilangkan sebagian nilai vektor, mengingat tingkat keterkaitan antara centroid klaster dan vektor dalam kelompoknya, sebagian informasi asli masih dipertahankan dalam kadar yang besar. Dibandingkan dengan hilangnya sebagian detail akibat kompresi lossy ini, manfaat yang diperoleh sangat besar. Penyimpanan dapat dilakukan seperti pada gambar berikut. Dengan begitu, saat menggunakan suatu vektor, nilai kodenya digunakan untuk menemukan centroid yang sesuai dalam buku kode, lalu memulihkan nilai konkret yang bersesuaian dengan centroid tersebut. Merepresentasikan vektor dengan kode centroid inilah yang disebut kuantisasi vektor (Quantization)
5.3、Kuantisasi produk PQ(Product Quantization)
Setelah vektor dikuantisasi, justru muncul sebuah buku kode tambahan. Beban memori vektornya sendiri memang berkurang, tetapi buku kode ini menimbulkan beban memori baru yang cukup besar. Hal ini belum begitu terlihat pada dimensi rendah, tetapi dalam skenario nyata dengan ratusan hingga ribuan dimensi vektor, ukuran buku kode ini menjadi sangat mengerikan. Dengan jumlah yang tetap, untuk menjaga kualitas kuantisasi, semakin jarang sebaran vektornya, semakin banyak vektor pusat klaster yang dibutuhkan.




Untuk vektor dengan ratusan hingga ribuan dimensi dalam penerapan nyata, datanya akan sangat jarang, sehingga dalam ruang berdimensi tinggi, demi menjamin kualitas kuantisasi, kita mungkin memerlukan jumlah klaster yang sangat besar. Situasi umum ditunjukkan pada gambar berikut:sebuah vektor berdimensi 128 mungkin membutuhkan 2 pangkat 64 pusat klaster, karena hal ini akan membuat buku kode untuk mencatat pengodean sentroid menjadi sangat besar. Memori yang dihabiskan untuk menyimpan buku kode ini pun sudah jauh melampaui memori yang dihemat oleh kuantisasi itu sendiri
Cara mengatasi masalah ini adalah membagi vektor berdimensi tinggi menjadi beberapa subvektor berdimensi rendah, lalu melakukan kuantisasi secara independen pada subvektor tersebut. Misalnya, membagi vektor berdimensi 128 menjadi 8 subvektor berukuran 16 bit, lalu melakukan pelatihan pengelompokan secara independen pada masing-masing dari 8 subvektor berdimensi 16.
Dengan demikian, setiap vektor dapat menggunakan hasil pelatihan dari 8 subruang untuk menguantisasi 8 subvektor yang bersesuaian. Dimensi setiap subvektor adalah 16, tidak terlalu tinggi, sehingga setiap subruang berdimensi 16 hanya memerlukan 256 klaster untuk menghasilkan kuantisasi yang cukup baik. Karena itu, nilai kode setiap subvektor berada dalam rentang 0-255. Menggabungkan kode kuantisasi dari 8 subvektor menghasilkan nilai kode kuantisasi akhir vektor asli. Artinya, satu vektor kini dikuantisasi menjadi 8 nilai kode. Setiap subruang juga membangun buku kode bagiannya sendiri. Saat digunakan, 8 nilai kode dipakai untuk mengambil 8 subvektor berdimensi 16 dari buku kode bagian masing-masing, lalu menggabungkannya untuk merekonstruksi sebuah vektor berdimensi 128


