Dot Product

Perkalian titik, proyeksi, dan koneksinya dengan machine learning.

Daftar isi

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

a⃗⋅b⃗=axbx+ayby \vec{a} \cdot \vec{b} = a_x b_x + a_y b_y

Untuk a⃗=(4,1)\vec{a} = (4, 1) dan b⃗=(3,3)\vec{b} = (3, 3), hasilnya adalah 4×3+1×3=154 \times 3 + 1 \times 3 = 15. 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.

python dot_product.py
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)
text Keluaran
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

a⃗⋅b⃗=∥a⃗∥ ∥b⃗∥cos⁡θ \vec{a} \cdot \vec{b} = \|\vec{a}\| \, \|\vec{b}\| \cos\theta

dengan θ\theta menyatakan sudut di antara kedua vektor. Dari keluaran skrip di atas, kosinus sudut antara a⃗\vec{a} dan b⃗\vec{b} 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 sudutNilai cos⁡θ\cos\thetaNilai dot product
Searah, θ=0∘\theta = 0^\circ1Hasil kali norma kedua vektor
Tegak lurus, θ=90∘\theta = 90^\circ0Nol
Berlawanan arah, θ=180∘\theta = 180^\circ-1Negatif dari hasil kali norma

Berkas skrip memeriksa keadaan tegak lurus dengan vektor c=(−1,4)c = (-1, 4). Hasil a⃗⋅c⃗=4×(−1)+1×4=0\vec{a} \cdot \vec{c} = 4 \times (-1) + 1 \times 4 = 0 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 17\sqrt{17} dan 18\sqrt{18}, 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 b⃗\vec{b} pada arah a⃗\vec{a} adalah vektor searah a⃗\vec{a} yang panjangnya setara dengan jangkauan b⃗\vec{b} ke arah tersebut. Rumusnya menggunakan dua dot product, yaitu

proya⃗(b⃗)=b⃗⋅a⃗a⃗⋅a⃗ a⃗ \text{proy}_{\vec{a}}(\vec{b}) = \frac{\vec{b} \cdot \vec{a}}{\vec{a} \cdot \vec{a}} \, \vec{a}

Pembilang mengukur seberapa jauh b⃗\vec{b} bergerak sepanjang a⃗\vec{a}, sedangkan penyebut a⃗⋅a⃗=∥a⃗∥2\vec{a} \cdot \vec{a} = \|\vec{a}\|^2 menormalkan hasilnya agar tidak bergantung pada panjang a⃗\vec{a}. Rasio keduanya berupa skalar, dan perkaliannya dengan a⃗\vec{a} mengembalikan arah pada hasilnya. Dari keluaran skrip, proyeksinya adalah (3,5294,0,8824)(3{,}5294, 0{,}8824). Gambar berikut menampilkan vektor hasil tersebut di bawah ujung b⃗\vec{b}.

Proyeksi b pada arah a

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#