Kursus Matematika untuk AI · Pelajaran 19 dari 180
Hasil Kali Matriks-Vektor untuk AI: Dua Sudut Pandang atas Perhitungan Lapisan Dense
Hitung hasil kali matriks dan vektor menurut baris serta kolom, terapkan keduanya di NumPy, dan periksa kesalahan bentuk serta operator pada lapisan dense.
Tiga nilai fitur masuk ke sebuah lapisan dense dan dua skor keluar darinya. Kode lapisan itu bisa hanya satu baris:
scores = weights @ features
Operator @ menyembunyikan dua jumlah berbobot yang lengkap. Ia juga menyembunyikan penafsiran kedua yang sama benarnya: setiap fitur masukan menskalakan satu kolom matriks bobot, lalu kolom-kolom yang telah diskalakan dijumlahkan menjadi vektor keluaran yang sama. Memahami kedua sudut pandang ini mengubah operator ringkas menjadi perhitungan yang bisa dihitung dan diperiksa saat debugging.
Di akhir pelajaran ini, Anda akan dapat menghitung hasil kali matriks-vektor menurut baris dan kolom, menjelaskan mengapa keduanya sepakat, menerapkan keduanya di NumPy, serta menemukan bentuk yang tidak cocok atau perkalian per elemen yang tidak disengaja.
Hasil belajar: Menghitung hasil kali matriks-vektor menurut baris dan kolom.
Pelajaran 17: Kombinasi Linear untuk AI menunjukkan bagaimana vektor yang diskalakan dijumlahkan. Pelajaran 18: Matriks untuk AI menempatkan satu aturan keluaran per baris dan satu fitur masukan per kolom. Perkalian matriks-vektor menyatukan gagasan tersebut. Situs pendamping resmi Mathematics for Machine Learning menjelaskan perkalian matriks yang kompatibel dan sudut pandang kombinasi kolom pada Bagian 2.2 buku tersebut. Contoh pemeringkatan, perhitungan, kode, visual, dan asesmen di bawah ini adalah karya orisinal.
Dimensi yang sama menjadi aturan perhitungan
Misalkan matriks riil dengan baris dan kolom. Misalkan vektor dengan koordinat. Hasil kali terdefinisi karena jumlah kolom matriks sama dengan jumlah koordinat vektor:
Dua nilai yang cocok menjelaskan pekerjaan di dalam perkalian. Nilai yang tersisa menjadi panjang keluaran.
Ini bukan izin untuk mencoret dimensi yang cocok seolah-olah dimensi itu bilangan biasa. Dimensi mencatat kesejajaran: harus bertemu kolom , sehingga bobot dan masukan berada dalam suku yang sama.
Satu masukan menghasilkan dua skor, baris demi baris
Misalkan sebuah lapisan pemeringkatan kecil memakai tiga fitur masukan yang telah distandardisasi:
- : kecocokan topik berada dua satuan skala di atas nilai acuannya;
- : kebaruan berada satu satuan skala di atas nilai acuannya; dan
- : kualitas sumber berada satu satuan skala di bawah nilai acuannya.
Vektor fitur dan matriks bobot dua barisnya adalah
Dimensinya menunjukkan bahwa jawaban memiliki dua koordinat:
Masukan negatif membuat bobot negatif menyumbang nilai positif ke . Tanda bobot saja tidak menentukan apakah kontribusinya menaikkan atau menurunkan keluaran; tanda masukannya juga berpengaruh.
Baris 1: 1,6 + (-0,4) + (-0,2) = 1
Baris 2: 0,2 + 0,6 + 0,5 = 1,3
| Kontribusi kolom | Kontribusi pada y₁ | Kontribusi pada y₂ | Kolom yang diskalakan |
|---|---|---|---|
| x₁w₁ (x₁ = 2) | 1,6 | 0,2 | 2 × [0,8, 0,1]ᵀ = [1,6, 0,2]ᵀ |
| x₂w₂ (x₂ = 1) | -0,4 | 0,6 | 1 × [-0,4, 0,6]ᵀ = [-0,4, 0,6]ᵀ |
| x₃w₃ (x₃ = −1) | -0,2 | 0,5 | -1 × [0,2, -0,5]ᵀ = [-0,2, 0,5]ᵀ |
| Jumlah | 1 | 1,3 | [1, 1,3]ᵀ |
Tabel lengkap tetap terlihat dalam pelajaran yang dirender server, sehingga enam hasil kali skalar dan kedua jumlahnya tersedia tanpa JavaScript atau animasi.
Simulator dimulai dengan perhitungan baris lengkap yang sudah dirender. Tampilan kolomnya tidak memperkenalkan hasil kali yang berbeda. Tampilan itu mengelompokkan ulang enam perkalian skalar yang sama menjadi tiga kontribusi vektor. Tabel mempertahankan semua nilai tepat bahkan sebelum interaksi aktif atau ketika gerak dikurangi.
Kolom menunjukkan kontribusi setiap masukan
Tuliskan kolom-kolom sebagai vektor :
Koordinat masukan menjadi koefisien untuk kolom-kolom tersebut:
Untuk contoh yang sama,
Tampilan baris menjawab, “Bagaimana keluaran dihitung?” Tampilan kolom menjawab, “Apa kontribusi masukan terhadap setiap keluaran?” Orang yang men-debug lapisan dense sering memerlukan kedua pertanyaan itu.
Mengapa kedua sudut pandang harus sepakat
Kesamaan tersebut berlaku koordinat demi koordinat. Koordinat ke- dari kombinasi kolom adalah
Jumlah terakhir itu persis definisi baris dari . Karena seluruh koordinat sama, vektor hasilnya sama. Argumen ini hanya menggunakan perkalian dan penjumlahan biasa atas sejumlah nilai riil yang berhingga; tidak ada asumsi baru yang tersembunyi di antara kedua diagram.
NumPy dapat memperlihatkan operasi di balik bentuk ringkas
Dokumentasi matmul NumPy saat ini mendefinisikan @ sebagai perkalian matriks dan menjelaskan hasil lazim untuk array dua dimensi dikalikan array satu dimensi. Operasi ringkas itu sebaiknya digunakan setelah pemeriksaan bentuk:
import numpy as np
weights = np.array([
[0.8, -0.4, 0.2],
[0.1, 0.6, -0.5],
], dtype=float)
features = np.array([2.0, 1.0, -1.0])
if weights.shape[1] != features.shape[0]:
raise ValueError("each matrix row needs one weight per input feature")
direct = weights @ features
by_rows = np.array([
sum(weight * value for weight, value in zip(row, features))
for row in weights
])
by_columns = sum(
(features[j] * weights[:, j] for j in range(weights.shape[1])),
start=np.zeros(weights.shape[0]),
)
print("direct:", direct)
print("by rows:", by_rows)
print("by columns:", by_columns)
print("all equal:", np.allclose(direct, by_rows)
and np.allclose(direct, by_columns))
Keluaran yang telah diverifikasi:
direct: [1. 1.3]
by rows: [1. 1.3]
by columns: [1. 1.3]
all equal: True
Versi eksplisit berguna untuk belajar dan debugging. Untuk pekerjaan numerik biasa, weights @ features menyatakan operasi aljabar linear yang dimaksud secara langsung dan memungkinkan NumPy memakai implementasi yang dioptimalkan.
Bentuk keluaran patut diperhatikan. weights berbentuk (2, 3), sedangkan features berbentuk (3,). NumPy memperlakukan operand kedua yang satu dimensi itu sebagai vektor dalam hasil kali matriks-vektor dan mengembalikan bentuk (2,), bukan (2, 1). Nilainya sesuai dengan notasi vektor kolom; representasi perangkat lunaknya hanya menghilangkan sumbu berukuran satu.
Lapisan dense menambahkan bias setelah hasil kali
Hasil kali matriks-vektor adalah bagian linear dari lapisan dense. Lapisan dengan bias memakai aturan afin
Jika pada contoh yang sedang digunakan, maka
Fungsi aktivasi, jika model menggunakannya, diterapkan setelah hasil afin tersebut. Fungsi itu bukan bagian dari definisi .
Dokumentasi torch.nn.Linear saat ini menyimpan bobot dengan bentuk (out_features, in_features), yakni susunan satu baris per keluaran yang sama seperti di sini. PyTorch biasanya menerima masukan dengan fitur pada sumbu terakhir dan menyajikan aturannya sebagai . Untuk satu masukan yang direpresentasikan sebagai baris, itu adalah bentuk yang ekuivalen melalui transposisi dari persamaan vektor kolom ; bukan sekumpulan bobot yang berbeda.
Dua tanda perkalian bisa menghasilkan dua objek berbeda
Kesalahan paling berbahaya di sini dapat berjalan tanpa pengecualian. NumPy mendokumentasikan multiply dan * sebagai perkalian per elemen dengan broadcasting. Karena itu, kode berikut
print(weights * features)
tidak menghitung keluaran lapisan yang memiliki dua koordinat. Vektor panjang tiga di-broadcast ke kedua baris, menghasilkan
[[ 1.6 -0.4 -0.2]
[ 0.2 0.6 0.5]]
dengan bentuk (2, 3). Keenam sel itu adalah kontribusi sebelum setiap baris dijumlahkan. Memanggil sum(axis=1) akan menyelesaikan perhitungan khusus ini, tetapi @ langsung menyatakan kontraksi yang dimaksud. Panduan awal NumPy membedakan kedua operator itu juga: * bekerja per elemen pada array, sedangkan @ melakukan perkalian matriks.
Masukan yang tidak kompatibel gagal karena alasan lain:
bad_features = np.array([2.0, 1.0])
weights @ bad_features
Matriks memiliki tiga kolom, tetapi vektor hanya memiliki dua koordinat. Kontrak matmul yang didokumentasikan NumPy menolak ketidakcocokan dimensi dalam itu. Menambahkan angka ketiga secara sembarang hanya untuk menghilangkan kesalahan justru lebih buruk; fitur yang hilang beserta makna koordinatnya harus diidentifikasi dahulu.
Hasil kali berikutnya tetap mengikuti aturan kesejajaran yang sama
Hasil kali matriks-vektor meringkas beberapa rumus keluaran tanpa menghapus strukturnya. Membaca menurut baris memperlihatkan satu jumlah berbobot per keluaran. Membaca menurut kolom memperlihatkan satu kontribusi vektor keluaran per masukan. Kecocokan bentuk memastikan kedua cara membaca memasangkan yang sama dengan yang sama.
Pelajaran 20 akan menempatkan beberapa vektor masukan di samping matriks bobot yang sama. Operasinya menjadi perkalian matriks-matriks, tetapi prinsip utamanya tetap berlaku: cocokkan dimensi dalam, lalu tentukan sumbu luar mana yang dipertahankan hasilnya. Halaman kursus Math for AI mempertahankan jalur prasyarat tersebut.
Periksa pemahaman Anda
Question 1
Misalkan A berbentuk 4 × 3 dan x panjangnya 3. Apakah Ax terdefinisi, berapa panjang keluarannya, dan berapa hasil kali skalar yang dijumlahkan untuk setiap koordinat keluaran?
Show the step-by-step solution
Matriks memiliki tiga kolom dan vektor memiliki tiga koordinat. Dimensi dalamnya cocok, sehingga hasil kalinya terdefinisi:
Empat baris yang tersisa menentukan empat koordinat keluaran. Untuk setiap keluaran, satu baris menyediakan tiga bobot. Setiap bobot dikalikan dengan koordinat masukan yang sejajar, lalu ketiga hasil kali skalar dijumlahkan. Jadi, panjangnya , dengan tiga hasil kali yang berkontribusi pada setiap koordinat.
Question 2
Hitung Bv menurut baris untuk B = [[2, −1], [0.5, 3]] dan v = [4, 2]ᵀ. Tunjukkan kedua jumlah berbobot.
Show the step-by-step solution
Dua kolom cocok dengan dua koordinat , sehingga hasil kalinya terdefinisi dan memiliki dua keluaran.
Untuk baris 1,
Untuk baris 2,
Menyusun hasil baris sesuai urutan memberikan
Question 3
Hitung ulang hasil kali pada Soal 2 sebagai jumlah berbobot dari kolom-kolom B.
Show the step-by-step solution
Pertama, pisahkan kolom-kolomnya:
Koordinat menjadi koefisien bagi kedua kolom:
Ini cocok dengan perhitungan baris karena kedua tampilan memuat empat hasil kali skalar yang sama, hanya dikelompokkan secara berbeda.
Question 4
Dalam hasil kali pada pelajaran ini, ubah x₂ menjadi nol sambil mempertahankan x₁ = 2 dan x₃ = −1. Gunakan tampilan kolom untuk menghitung hasil baru dan jelaskan apa yang tetap sejajar.
Show the step-by-step solution
Masukan baru adalah . Koordinat keduanya menskalakan kolom kedua menjadi nol, tetapi koordinat itu tetap berada pada posisi 2:
Kolom 2 tetap berkaitan dengan kebaruan dan kolom 3 tetap berkaitan dengan kualitas sumber. Menghapus koordinat nol sepenuhnya akan memperpendek vektor dan membuat setiap fitur setelahnya tidak sejajar.
Question 5
Seorang pengembang menjalankan weights * features dengan bentuk (2, 3) dan (3,). Mengapa kode berhasil, bentuk apa yang dihasilkan, dan operasi apa yang masih kurang?
Show the step-by-step solution
Operator * NumPy melakukan perkalian per elemen. Array panjang tiga dapat di-broadcast ke masing-masing dari dua baris matriks, sehingga operasi berhasil dan menghasilkan array (2, 3) berisi enam hasil kali.
Untuk nilai pada pelajaran ini, kedua barisnya adalah
Keluaran lapisan dense membutuhkan satu angka per baris. Penjumlahan setiap baris masih belum dilakukan:
Menggunakan weights @ features menyatakan perkalian sekaligus penjumlahan yang diperlukan.
Question 6
Untuk matriks A yang kompatibel, bandingkan A0 dengan keluaran lapisan berbias A0 + b. Mengapa hasilnya berbeda?
Show the step-by-step solution
Setiap koordinat vektor nol bernilai nol. Dalam tampilan kolom, setiap kolom karena itu diskalakan dengan nol:
Lapisan dense berbias melakukan penjumlahan vektor tambahan setelah hasil kali matriks:
Jawabannya berbeda karena adalah pemetaan linear, sedangkan penambahan bias tak nol menjadikan aturan lengkapnya afin. Bias bukan bagian dari hasil kali matriks-vektor.
Question 7
Array bobot yang tersimpan berbentuk (3, 2), tetapi lapisan yang dimaksud memiliki tiga masukan dan dua keluaran. Mengapa W @ x gagal untuk masukan panjang tiga, dan apa yang harus diperiksa sebelum mentransposisikan W?
Show the step-by-step solution
Menurut konvensi satu baris per keluaran, bentuk matriks yang dimaksud ialah (2, 3): dua baris keluaran dan tiga kolom masukan. Array (3, 2) yang ditemukan hanya memiliki dua kolom. Karena itu, dimensi dalamnya tidak dapat cocok dengan masukan panjang tiga:
tidak terdefinisi karena .
Transposisi akan menghasilkan bentuk (2, 3), tetapi bentuk saja tidak cukup. Sebelumnya, pastikan bahwa baris yang ditemukan benar-benar mewakili tiga fitur masukan, kolomnya benar-benar mewakili dua aturan keluaran, dan urutannya sesuai dengan metadata fitur serta keluaran. Jika array sudah memiliki tata letak semantik lain, transposisi tanpa pemeriksaan dapat mempertahankan makna yang keliru.
Question 8
Hasil kali pada pelajaran ini adalah [1, 1.3]ᵀ. Sebuah lapisan dense menambahkan b = [0.2, −0.1]ᵀ lalu menerapkan ReLU, yang mengganti koordinat negatif dengan nol. Hitung nilai sebelum aktivasi dan keluaran akhirnya.
Show the step-by-step solution
Pertama, tambahkan bias koordinat demi koordinat:
ini adalah nilai sebelum aktivasi. ReLU bekerja secara terpisah pada setiap koordinat dengan . Kedua koordinat positif, sehingga tidak ada yang berubah:
Urutannya penting: hitung hasil kali matriks-vektor, tambahkan bias, baru terapkan aktivasi.