Kursus Matematika untuk AI · Pelajaran 16 dari 180

Perkalian Skalar untuk AI: Memperbesar, Memperkecil, atau Membalik Vektor

Skalakan vektor per koordinat, prediksi arah dan magnitudo, lalu hubungkan operasi yang sama dengan embedding, laju pembelajaran, dan NumPy.

Bagikan artikel ini

Vektor arah dapat menunjukkan ke mana pembaruan model harus bergerak tanpa menunjukkan seberapa besar perpindahannya. Satu angka memasok keputusan kedua itu. Jika arahnya [4,−3]T[4,-3]^\mathsf{T}, mengalikannya dengan 0.250.25 menghasilkan perpindahan yang lebih pendek, [1,−0.75]T[1,-0.75]^\mathsf{T}. Mengalikannya dengan −1-1 mempertahankan panjangnya, tetapi mengarahkannya ke sisi sebaliknya.

Angka itu adalah skalar: satu nilai yang diterapkan pada setiap koordinat. Setelah menyelesaikan pelajaran ini, Anda akan mampu menghitung hasil kali skalar–vektor, memprediksi arah dan magnitudonya dari tanda serta nilai mutlak skalar, mengimplementasikannya dengan benar di NumPy, dan mengenali mekanisme yang sama dalam pembaruan berskala laju pembelajaran atau kontribusi embedding berbobot.

Hasil pembelajaran: Skalakan sebuah vektor dan prediksi perubahan arah serta magnitudonya.

Pelajaran 15: Penjumlahan Vektor untuk AI menjelaskan bahwa vektor digabungkan dengan menjumlahkan koordinat yang bersesuaian. Perkalian skalar menyiapkan salah satu vektor itu sebelum penjumlahan: operasi ini mengendalikan seberapa kuat kontribusi vektor tersebut. Situs pendamping resmi Mathematics for Machine Learning memperkenalkan perkalian dengan skalar dalam Bagian 2.2 buku tersebut. Contoh, kode, sinar interaktif, aplikasi AI, dan asesmen di bawah ini adalah karya orisinal.

Satu angka menjangkau setiap koordinat

Misalkan v∈Rn\boldsymbol{v}\in\mathbb{R}^{n} adalah vektor real dengan koordinat v1,v2,…,vnv_1,v_2,\ldots,v_n, dan α∈R\alpha\in\mathbb{R} adalah skalar real. Huruf Yunani α\alpha (alpha) hanyalah nama untuk satu angka; simbol seperti cc, ss, atau λ\lambda dapat menjalankan peran yang sama.

Operasi ini mempertahankan dimensi dan urutan koordinat vektor. Skalar tidak menambahkan koordinat, memilih satu koordinat, atau mencampur koordinat yang berdekatan. Skalar mengubah semua nn nilai melalui aturan perkalian yang sama.

Skala negatif membalik setiap koordinat tak nol

Ambil vektor pembaruan

u=[4−32]\boldsymbol{u}= \begin{bmatrix}4\\-3\\2\end{bmatrix}

dan pilih α=−1.5\alpha=-1.5. Simbol u\boldsymbol{u} menamai keseluruhan pembaruan tiga koordinat. Gunakan definisinya, bukan mencoba menebak jawaban hanya dari tanda minus.

Perhitungan ini memisahkan dua efek. Nilai mutlak—jarak skalar dari nol—adalah ∣α∣=1.5|\alpha|=1.5, sehingga ukuran vektor menjadi 1,5 kali ukuran semula. Tanda negatif membalik arahnya. Tidak satu pun dari kedua efek ini mengubah fitur atau parameter yang direpresentasikan oleh setiap koordinat.

Tanda memilih sinar; nilai mutlak memilih jangkauan

Dalam dua dimensi, gambarkan v\boldsymbol{v} sebagai panah dari titik asal. Setiap kelipatan skalar tak nol berada pada garis tak berhingga yang sama melalui panah tersebut. Skalar positif berada pada sinar yang sama, skalar negatif pada sinar berlawanan, dan nol meruntuhkan panah ke titik asal.

Dalam pelajaran ini, magnitudo berarti panjang panah Euclidean. Untuk v=[v1,…,vn]T\boldsymbol{v}=[v_1,\ldots,v_n]^\mathsf{T}, definisikan

∥v∥2=v12+⋯+vn2.\lVert\boldsymbol{v}\rVert_2 =\sqrt{v_1^2+\cdots+v_n^2}.

Subskrip 2 membedakan aturan panjang ini dari aturan magnitudo lain yang akan dibahas di pelajaran berikutnya. Perkalian skalar mengubah magnitudo ini dengan faktor ∣α∣|\alpha|, bukan α\alpha:

∥αv∥2=(αv1)2+⋯+(αvn)2=α2(v12+⋯+vn2)=∣α∣v12+⋯+vn2=∣α∣∥v∥2.\begin{aligned} \lVert\alpha\boldsymbol{v}\rVert_2 &=\sqrt{(\alpha v_1)^2+\cdots+(\alpha v_n)^2}\\ &=\sqrt{\alpha^2(v_1^2+\cdots+v_n^2)}\\ &=|\alpha|\sqrt{v_1^2+\cdots+v_n^2}\\ &=|\alpha|\lVert\boldsymbol{v}\rVert_2. \end{aligned}

Nilai mutlak penting karena magnitudo tidak boleh negatif. Tanda berkaitan dengan arah; nilai mutlak berkaitan dengan ukuran.

Skalar α\alphaArah αv\alpha\boldsymbol{v} untuk v≠0\boldsymbol{v}\ne\boldsymbol{0}Magnitudo
α>1\alpha>1Arah samaLebih panjang dengan faktor α\alpha
α=1\alpha=1Arah samaTidak berubah
0<α<10<\alpha<1Arah samaLebih pendek dengan faktor α\alpha
α=0\alpha=0Tidak ada arah: hasilnya 0\boldsymbol{0}Nol
−1<α<0-1<\alpha<0Arah berlawananLebih pendek dengan faktor ∣α∣\lvert\alpha\rvert
α=−1\alpha=-1Arah berlawananTidak berubah
α<−1\alpha<-1Arah berlawananLebih panjang dengan faktor ∣α∣\lvert\alpha\rvert

Seret skalar di bawah melalui ketujuh kasus. Vektor tetapnya adalah v=[4,−3]T\boldsymbol{v}=[4,-3]^\mathsf{T}, dengan magnitudo 55. Panah berskala, kalimat status, dan tabel semuanya dimulai dari keadaan yang dirender server, α=1.5\alpha=1.5, lalu diperbarui bersama setelah komponen terlihat.

Perkalian skalar interaktif: gerakkan satu skalar dan bandingkan vektor tetap dengan hasil skalanya.
Pilih skalar yang mengalikan v

Rentangnya −2 hingga 2 dengan langkah 0.25. Gunakan tombol panah untuk satu langkah, atau Page Up dan Page Down untuk perubahan yang lebih besar.

Hasil saat ini: α = +1,5, v = (+4, -3), dan αv = (+6, -4,5). Magnitudonya 7,5; arahnya sama dengan v.

Vektor dasar v — panah solidVektor berskala αv — panah putus-putus

Gaya garis dan teks membedakan panah tanpa mengandalkan warna. Saat α = 0, cincin putus-putus di titik asal menggantikan panah berskala karena vektor nol tidak memiliki arah.

Alternatif numerik untuk skalar dan panah saat ini
VektorSkalaKoordinat pertamaKoordinat keduaMagnitudo EuclideanArah relatif terhadap v
Vektor dasar v — panah solid+1+4-35arah referensi
Vektor berskala αv — panah putus-putus+1,5+6-4,57,5sama dengan v

Gambar ini hanya dua dimensi, tetapi aturannya tidak demikian. Dalam embedding dengan 768 koordinat, satu skalar tetap mengalikan seluruh 768 koordinat, dan magnitudo tetap berubah sebesar ∣α∣|\alpha| menurut aturan panjang Euclidean.

Menskalakan sebelum menjumlahkan mengendalikan sebuah kontribusi

Perkalian skalar sangat berguna di samping penjumlahan vektor. Misalkan model memiliki keadaan konteks

c=[1−12]\boldsymbol{c}=\begin{bmatrix}1\\-1\\2\end{bmatrix}

dan kontribusi embedding kandidat

e=[21−1].\boldsymbol{e}=\begin{bmatrix}2\\1\\-1\end{bmatrix}.

Dengan bobot α=0.5\alpha=0.5, skalakan dahulu lalu jumlahkan:

αe=0.5[21−1]=[10.5−0.5],c+αe=[1−12]+[10.5−0.5]=[2−0.51.5].\begin{aligned} \alpha\boldsymbol{e} &=0.5\begin{bmatrix}2\\1\\-1\end{bmatrix} =\begin{bmatrix}1\\0.5\\-0.5\end{bmatrix},\\ \boldsymbol{c}+\alpha\boldsymbol{e} &=\begin{bmatrix}1\\-1\\2\end{bmatrix} +\begin{bmatrix}1\\0.5\\-0.5\end{bmatrix} =\begin{bmatrix}2\\-0.5\\1.5\end{bmatrix}. \end{aligned}

Bobot mengubah seberapa kuat e\boldsymbol{e} berkontribusi pada jumlah ini. Bobot 00 menghapus kontribusi tersebut; bobot negatif berkontribusi ke arah berlawanan. Inilah makna aritmetika yang tepat dari “kekuatan embedding”. Hal ini tidak menjamin keluaran jaringan saraf lengkap akan berubah sebanding langsung dengan α\alpha: transformasi, normalisasi, dan operasi nonlinier berikutnya dapat mengubah efek hilirnya.

Aturan distributif menjelaskan mengapa penskalaan sinyal gabungan dapat dihitung sebelum atau sesudah bagian-bagiannya dijumlahkan:

α(v+w)=αv+αw.\alpha(\boldsymbol{v}+\boldsymbol{w}) =\alpha\boldsymbol{v}+\alpha\boldsymbol{w}.

Pada koordinat jj, kedua sisi sama-sama bernilai α(vj+wj)=αvj+αwj\alpha(v_j+w_j)=\alpha v_j+\alpha w_j. Karena setiap koordinat sama, kedua vektor tersebut sama. Aturan pendamping (α+β)v=αv+βv(\alpha+\beta)\boldsymbol{v}=\alpha\boldsymbol{v}+\beta\boldsymbol{v} akan membantu menggabungkan beberapa vektor berbobot secara efisien di pelajaran berikutnya.

Laju pembelajaran menskalakan arah yang diusulkan optimizer

Pertimbangkan langkah stochastic gradient descent (SGD) paling sederhana, tanpa momentum atau weight decay. Misalkan θ\boldsymbol{\theta} adalah vektor parameter dan g\boldsymbol{g} adalah vektor gradien yang menunjuk ke arah kenaikan loss. Laju pembelajaran positif η\eta menskalakan arah sebelum pengurangan:

θnext=θ−ηg.\boldsymbol{\theta}_{\text{next}} =\boldsymbol{\theta}-\eta\boldsymbol{g}.

Kalkulus yang diperlukan untuk menghitung g\boldsymbol{g} akan muncul nanti dalam kursus; untuk saat ini, anggap ia sebagai vektor yang sudah diberikan dan periksa skalanya secara langsung.

Ini adalah perkalian skalar yang diikuti penjumlahan vektor θ+(−ηg)\boldsymbol{\theta}+(-\eta\boldsymbol{g}). Dokumentasi PyTorch SGD saat ini menyatakan langkah parameter akhirnya dalam bentuk ini, setelah modifikasi apa pun pada arah pembaruan akibat weight decay, momentum, atau Nesterov yang dikonfigurasi. Klaim yang sempit ini penting: bila opsi tersebut diaktifkan, laju pembelajaran dapat menskalakan arah yang sudah dimodifikasi, bukan gradien mentah yang belum disentuh.

Untuk langkah numerik kecil, misalkan

θ=[21],g=[4−3],η=0.25.\boldsymbol{\theta}=\begin{bmatrix}2\\1\end{bmatrix},\qquad \boldsymbol{g}=\begin{bmatrix}4\\-3\end{bmatrix},\qquad \eta=0.25.

Maka

ηg=0.25[4−3]=[1−0.75],−ηg=[−10.75],θnext=[21]+[−10.75]=[11.75].\begin{aligned} \eta\boldsymbol{g} &=0.25\begin{bmatrix}4\\-3\end{bmatrix} =\begin{bmatrix}1\\-0.75\end{bmatrix},\\ -\eta\boldsymbol{g} &=\begin{bmatrix}-1\\0.75\end{bmatrix},\\ \boldsymbol{\theta}_{\text{next}} &=\begin{bmatrix}2\\1\end{bmatrix} +\begin{bmatrix}-1\\0.75\end{bmatrix} =\begin{bmatrix}1\\1.75\end{bmatrix}. \end{aligned}

Mengganti η=0.25\eta=0.25 dengan η=0.5\eta=0.5 akan menggandakan magnitudo pembaruan yang diusulkan kali ini, sambil mempertahankan arahnya. Fakta aritmetika itu sendiri tidak mengatakan apakah laju pembelajaran yang lebih besar akan memperbaiki pelatihan atau tetap stabil; pertanyaan tersebut bergantung pada permukaan loss dan perilaku optimizer, dan termasuk dalam modul optimasi berikutnya.

NumPy mengalikan array; list Python mengulang

multiply milik NumPy mengalikan argumen secara elementwise, dan * adalah singkatan operatornya untuk array. Aturan broadcasting NumPy memungkinkan satu skalar berlaku pada array tanpa membuat array penuh berisi skalar yang diulang.

import numpy as np

vector = np.array([4.0, -3.0, 2.0])
alpha = -1.5

scaled_with_operator = alpha * vector
scaled_with_function = np.multiply(alpha, vector)

print("vector shape:", vector.shape)
print("operator result:", scaled_with_operator)
print("function result:", scaled_with_function)
print("same values:", np.array_equal(
    scaled_with_operator, scaled_with_function
))

Output yang telah diverifikasi adalah

vector shape: (3,)
operator result: [-6.   4.5 -3. ]
function result: [-6.   4.5 -3. ]
same values: True

List Python biasa mengubah makna *. Dokumentasi sequence Python mendefinisikan perkalian dengan bilangan bulat sebagai pengulangan:

coordinates = [4.0, -3.0, 2.0]

print(2 * coordinates)
print(2 * np.array(coordinates))
[4.0, -3.0, 2.0, 4.0, -3.0, 2.0]
[ 8. -6.  4.]

Hasil pertama memiliki enam entri dan bukan 2v2\boldsymbol{v}. Konversikan koordinat numerik menjadi array NumPy sebelum memakai aritmetika array. Nilai non-integer seperti 0.5 * coordinates menimbulkan TypeError, bukan menskalakan entri.

Skalar kini memiliki dua tugas: tandanya memilih apakah vektor tak nol mempertahankan atau membalik arah, sedangkan nilai mutlaknya mengendalikan magnitudo. Setelah beberapa vektor berskala seperti itu dijumlahkan, perkalian skalar dan penjumlahan vektor menjadi kombinasi linear—konstruksi yang akan digunakan pada pelajaran berikutnya.

Uji pemahaman

Pertanyaan 1

Misalkan v = [−2, 5, 1]ᵀ dan α = 3. Hitung αv per koordinat, lalu nyatakan dimensinya dan arahnya relatif terhadap v.

Tampilkan solusi langkah demi langkah

Terapkan skalar yang sama pada setiap dari tiga koordinat:

(3v)1=3(−2)=−6,(3v)2=3(5)=15,(3v)3=3(1)=3.\begin{aligned} (3\boldsymbol{v})_1&=3(-2)=-6,\\ (3\boldsymbol{v})_2&=3(5)=15,\\ (3\boldsymbol{v})_3&=3(1)=3. \end{aligned}

Jadi

3v=[−6153]∈R3.3\boldsymbol{v}=\begin{bmatrix}-6\\15\\3\end{bmatrix}\in\mathbb{R}^{3}.

Dimensinya tetap tiga. Karena 33 positif, hasilnya mengarah sama dengan vektor asal yang tak nol; magnitudonya tiga kali magnitudo asal.

Pertanyaan 2

Untuk v = [6, 8]ᵀ, hitung −0.5v dan bandingkan magnitudo Euclidean serta arahnya dengan v.

Tampilkan solusi langkah demi langkah

Skalakan koordinat terlebih dahulu:

−0.5v=[(−0.5)(6)(−0.5)(8)]=[−3−4].-0.5\boldsymbol{v} =\begin{bmatrix}(-0.5)(6)\\(-0.5)(8)\end{bmatrix} =\begin{bmatrix}-3\\-4\end{bmatrix}.

Magnitudo asal adalah ∥v∥2=62+82=100=10\lVert\boldsymbol{v}\rVert_2=\sqrt{6^2+8^2}=\sqrt{100}=10. Hasilnya memiliki

∥−0.5v∥2=∣−0.5∣ 10=5.\lVert-0.5\boldsymbol{v}\rVert_2 =|-0.5|\,10=5.

Magnitudonya setengah dari semula karena ∣−0.5∣=0.5|-0.5|=0.5. Arahnya berlawanan karena skalarnya negatif.

Pertanyaan 3

Seorang siswa berkata bahwa 0v mengarah sama dengan v karena nol bukan negatif. Diagnosis klaim itu dan hitung 0v untuk v = [7, −2]ᵀ.

Tampilkan solusi langkah demi langkah

Perkalian per koordinat memberikan

0v=[0(7)0(−2)]=[00]=0.0\boldsymbol{v} =\begin{bmatrix}0(7)\\0(-2)\end{bmatrix} =\begin{bmatrix}0\\0\end{bmatrix} =\boldsymbol{0}.

Aturan tanda memiliki tiga kasus, bukan dua: skalar positif mempertahankan arah dan skalar negatif membaliknya. Nol meruntuhkan setiap koordinat menjadi vektor nol, yang panahnya tidak memiliki panjang dan karena itu tidak memiliki arah. Penalaran siswa keliru karena memperlakukan nol sebagai skalar positif.

Pertanyaan 4

Mulai dari rumus magnitudo Euclidean, tunjukkan mengapa ‖αv‖₂ menggunakan |α| alih-alih α untuk v = [v₁, v₂]ᵀ.

Tampilkan solusi langkah demi langkah

Substitusikan dua koordinat berskala ke definisi magnitudo:

∥αv∥2=(αv1)2+(αv2)2=α2v12+α2v22=α2(v12+v22)=α2v12+v22=∣α∣∥v∥2.\begin{aligned} \lVert\alpha\boldsymbol{v}\rVert_2 &=\sqrt{(\alpha v_1)^2+(\alpha v_2)^2}\\ &=\sqrt{\alpha^2v_1^2+\alpha^2v_2^2}\\ &=\sqrt{\alpha^2(v_1^2+v_2^2)}\\ &=\sqrt{\alpha^2}\sqrt{v_1^2+v_2^2}\\ &=|\alpha|\lVert\boldsymbol{v}\rVert_2. \end{aligned}

Untuk skalar real, α2=∣α∣\sqrt{\alpha^2}=|\alpha|. Menulis α\alpha tanpa nilai mutlak akan secara keliru menghasilkan magnitudo negatif ketika α<0\alpha<0.

Pertanyaan 5

Sebuah konteks adalah c = [2, 0, −1]ᵀ dan kontribusi embedding adalah e = [−2, 4, 2]ᵀ. Dengan α = 0.25, hitung c + αe dan jelaskan tepat apa yang dikendalikan α.

Tampilkan solusi langkah demi langkah

Skalakan kontribusinya sebelum menjumlahkannya:

αe=0.25[−242]=[−0.510.5].\alpha\boldsymbol{e} =0.25\begin{bmatrix}-2\\4\\2\end{bmatrix} =\begin{bmatrix}-0.5\\1\\0.5\end{bmatrix}.

Kemudian jumlahkan koordinat yang bersesuaian:

c+αe=[2−0.50+1−1+0.5]=[1.51−0.5].\boldsymbol{c}+\alpha\boldsymbol{e} =\begin{bmatrix}2-0.5\\0+1\\-1+0.5\end{bmatrix} =\begin{bmatrix}1.5\\1\\-0.5\end{bmatrix}.

Skalar 0.250.25 membuat kontribusi vektor embedding ini menjadi seperempat magnitudo asalnya sambil mempertahankan arahnya. Skalar itu mengendalikan bobot aritmetika dalam jumlah ini; dengan sendirinya, ia tidak menjamin perubahan yang sebanding pada keluaran setiap lapisan model berikutnya.

Pertanyaan 6

Untuk θ = [3, −1]ᵀ, gradien g = [2, 4]ᵀ, dan laju pembelajaran η = 0.1, hitung pembaruan SGD sederhana θnext = θ − ηg dalam tiga langkah eksplisit.

Tampilkan solusi langkah demi langkah

Pertama, skalakan gradien:

ηg=0.1[24]=[0.20.4].\eta\boldsymbol{g} =0.1\begin{bmatrix}2\\4\end{bmatrix} =\begin{bmatrix}0.2\\0.4\end{bmatrix}.

Kedua, balik arah berskala itu untuk langkah descent:

−ηg=[−0.2−0.4].-\eta\boldsymbol{g}=\begin{bmatrix}-0.2\\-0.4\end{bmatrix}.

Ketiga, tambahkan pembaruan ke parameter:

θnext=[3−1]+[−0.2−0.4]=[2.8−1.4].\boldsymbol{\theta}_{\text{next}} =\begin{bmatrix}3\\-1\end{bmatrix} +\begin{bmatrix}-0.2\\-0.4\end{bmatrix} =\begin{bmatrix}2.8\\-1.4\end{bmatrix}.

Perhitungan ini mengasumsikan pembaruan biasa yang ditampilkan dalam soal. Momentum, weight decay, atau aturan optimizer lain dapat mengubah arah sebelum langkah parameter yang diskalakan oleh laju pembelajaran.

Pertanyaan 7

Mengapa 3 * [1, −2] gagal menghitung kelipatan skalar [3, −6] di Python, dan ekspresi NumPy apa yang menjalankan operasi yang dimaksud?

Tampilkan solusi langkah demi langkah

[1, -2] adalah list Python, yaitu sebuah sequence. Perkalian dengan integer 3 mengulang sequence itu tiga kali:

3 * [1, -2]
# [1, -2, 1, -2, 1, -2]

Hasilnya memiliki enam entri, sehingga tidak mungkin sama dengan vektor dua koordinat [3,−6]T[3,-6]^\mathsf{T}. Buat array NumPy numerik, lalu kalikan:

import numpy as np

3 * np.array([1, -2])
# array([ 3, -6])

NumPy menerapkan 3 secara elementwise melalui broadcasting skalar, sesuai dengan definisi matematika.

Pertanyaan 8

Misalkan v = [2, −1]ᵀ. Verifikasi (2 + (−0.5))v = 2v + (−0.5)v dengan menghitung kedua sisi, lalu sebutkan propertinya.

Tampilkan solusi langkah demi langkah

Di sisi kiri, jumlahkan skalar terlebih dahulu:

(2+(−0.5))v=1.5[2−1]=[3−1.5].(2+(-0.5))\boldsymbol{v} =1.5\begin{bmatrix}2\\-1\end{bmatrix} =\begin{bmatrix}3\\-1.5\end{bmatrix}.

Di sisi kanan, skalakan dua kali lalu jumlahkan:

2v+(−0.5)v=[4−2]+[−10.5]=[3−1.5].\begin{aligned} 2\boldsymbol{v}+(-0.5)\boldsymbol{v} &=\begin{bmatrix}4\\-2\end{bmatrix} +\begin{bmatrix}-1\\0.5\end{bmatrix}\\ &=\begin{bmatrix}3\\-1.5\end{bmatrix}. \end{aligned}

Kedua jalur menghasilkan vektor yang sama. Ini adalah distributivitas penjumlahan skalar terhadap perkalian skalar: (α+β)v=αv+βv(\alpha+\beta)\boldsymbol{v}=\alpha\boldsymbol{v}+\beta\boldsymbol{v}.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.multiply
  4. NumPy documentation: broadcasting
  5. Python documentation: common sequence operations
  6. PyTorch documentation: stochastic gradient descent