Dot product (perkalian titik) adalah operasi dua vektor yang menghasilkan satu bilangan dan mengukur keselarasan arah kedua vektornya. Topik ini membahas definisi aljabar dot product, makna geometrisnya melalui sudut, perhitungan proyeksi vektor, dan kedudukannya sebagai operasi inti pada machine learning. Seluruh perhitungan menggunakan np.dot dari NumPy.
Definisi aljabar#
Dot product dua vektor mengalikan komponen sehadap lalu menjumlahkan hasilnya menjadi satu bilangan tunggal. Untuk dua vektor dua dimensi, rumusnya adalah
Untuk dan , hasilnya adalah . Perhatikan bahwa keluarannya berupa satu bilangan, bukan vektor baru. Berkas dot_product.py berikut menghitung nilai tersebut dengan dua cara, yaitu penjumlahan manual dan np.dot, kemudian melanjutkan ke perhitungan sudut dan proyeksi.
import numpy as np
a = np.array([4.0, 1.0])
b = np.array([3.0, 3.0])
# hasil kali komponen sehadap, dijumlahkan menjadi satu bilangan
manual = a[0] * b[0] + a[1] * b[1]
print("a . b (np.dot) =", np.dot(a, b))
print("a . b (manual) =", manual)
# sudut dua vektor mengikuti rumus kosinus
kos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print("kosinus sudut =", round(kos, 4))
print("sudut (derajat)=", round(np.degrees(np.arccos(kos)), 2))
# vektor tegak lurus memberikan hasil nol
c = np.array([-1.0, 4.0])
print("a . c =", np.dot(a, c))
# proyeksi b pada arah a
proyeksi = (np.dot(b, a) / np.dot(a, a)) * a
print("proyeksi b pd a=", proyeksi)a . b (np.dot) = 15.0
a . b (manual) = 15.0
kosinus sudut = 0.8575
sudut (derajat)= 30.96
a . c = 0.0
proyeksi b pd a= [3.52941176 0.88235294]Dua cara perhitungan memberikan nilai yang sama, sehingga np.dot benar-benar menjumlahkan hasil kali komponen sehadap. Setiap suku pada penjumlahan tersebut dapat positif atau negatif sesuai tanda komponennya. Dua komponen bertanda sama menyumbang nilai positif, sedangkan komponen bertanda berlawanan menyumbang nilai negatif dan mengurangi hasilnya. Perilaku inilah yang kemudian terbaca sebagai ukuran keselarasan pada bagian geometris.
Rumus yang sama berlaku untuk vektor dengan panjang apa pun. Vektor bobot dan vektor masukan pada jaringan saraf tiruan berisi ratusan hingga jutaan komponen, dan dot productnya tetap dihitung dengan pola yang sama, yaitu mengalikan komponen sehadap lalu menjumlahkannya. NumPy mengeksekusi pola tersebut untuk seluruh komponen tanpa perulangan yang harus ditulis manual.
Makna geometris#
Nilai dot product dapat dibaca sebagai ukuran keselarasan karena terhubung langsung dengan sudut kedua vektornya, yaitu
dengan menyatakan sudut di antara kedua vektor. Dari keluaran skrip di atas, kosinus sudut antara dan adalah 0,8575, sehingga sudutnya 30,96 derajat. Kedua vektor itu cenderung searah, dan dot productnya ikut bernilai besar. Tabel berikut merangkum makna tanda dan besarnya.
| Keadaan sudut | Nilai | Nilai dot product |
|---|---|---|
| Searah, | 1 | Hasil kali norma kedua vektor |
| Tegak lurus, | 0 | Nol |
| Berlawanan arah, | -1 | Negatif dari hasil kali norma |
Berkas skrip memeriksa keadaan tegak lurus dengan vektor . Hasil sesuai dengan tabel, karena kedua vektor itu memang saling tegak lurus. Satu operasi dot product sudah cukup untuk menguji ketegaklurusan tanpa menghitung sudutnya terlebih dahulu.
Norma kedua vektor contoh tersebut adalah dan , sehingga hasil kali normanya sekitar 17,49. Nilai dot product 15 belum mencapai batas atas itu karena sudut keduanya masih 30,96 derajat. Batas atas semacam inilah yang membuat nilai dot product mentah sulit dibandingkan antarpasangan vektor dengan panjang yang berbeda-beda.
Proyeksi vektor#
Proyeksi pada arah adalah vektor searah yang panjangnya setara dengan jangkauan ke arah tersebut. Rumusnya menggunakan dua dot product, yaitu
Pembilang mengukur seberapa jauh bergerak sepanjang , sedangkan penyebut menormalkan hasilnya agar tidak bergantung pada panjang . Rasio keduanya berupa skalar, dan perkaliannya dengan mengembalikan arah pada hasilnya. Dari keluaran skrip, proyeksinya adalah . Gambar berikut menampilkan vektor hasil tersebut di bawah ujung .
Proyeksi memecah satu vektor menjadi bagian yang sejajar dengan arah tertentu, sementara sisanya tegak lurus terhadap arah tersebut. Pemecahan arah semacam ini digunakan berulang kali pada fisika dan grafika komputer, misalnya menguraikan gaya atau kecepatan ke dalam sumbu yang diinginkan. Keluaran skrip sebelumnya memberikan contoh angkanya secara langsung.
Di mana hal ini ditemui dalam kode#
Setiap lapisan neural network, yaitu jaringan saraf tiruan, menghitung dot product antara vektor bobot dan vektor masukan. Nilai keluaran sebuah neuron pada dasarnya adalah dot product tersebut, sehingga satu langkah pembaruan pada jaringan berukuran besar mengeksekusi jutaan dot product. Keluarannya membesar ketika masukan selaras dengan bobotnya, sehingga pelatihan jaringan berarti mencari susunan bobot yang selaras dengan data. Karena dihitung sedemikian sering, np.dot dioptimalkan secara khusus pada NumPy agar cepat dijalankan berulang-ulang.
Sistem rekomendasi menggunakan dot product untuk mencocokkan vektor penilaian pengguna dengan vektor karakteristik item. Mekanisme atensi pada arsitektur transformer juga menghitung skor kecocokan sebagai dot product antara vektor query dan vektor key. Satu keterbatasan muncul pada ketiga penggunaan itu, yaitu dot product mentah ikut dipengaruhi panjang vektor. Membagi hasilnya dengan norma kedua vektor menghilangkan pengaruh tersebut dan menghasilkan ukuran kemiripan kosinus.
Ringkasan#
- Dot product menjumlahkan hasil kali komponen sehadap dua vektor dan menghasilkan satu bilangan, bukan vektor.
- Nilainya sama dengan hasil kali norma kedua vektor dengan kosinus sudut di antara keduanya.
- Dot product bernilai nol menandakan kedua vektor saling tegak lurus.
- Proyeksi vektor pada arah vektor lain dihitung dari rasio dot product dan menghasilkan vektor searah vektor dasarnya.
Referensi#
- numpy.dot — NumPy
— Dokumentasi resmi
np.dotbeserta perbedaannya terhadap perkalian komponen biasa. - Mathematics for Machine Learning — Cambridge University Press — Buku terbuka yang membahas hasil kali dalam, sudut antarvektor, dan perannya pada geometri analitik untuk machine learning.