Kursus Matematika untuk AI · Pelajaran 20 dari 180

Perkalian Matriks-Matriks untuk AI: Menyusun Transformasi dan Batch

Periksa bentuk matriks, hitung perkalian matriks kecil, lalu baca kontraksi yang sama sebagai pemetaan tersusun atau perhitungan lapisan padat secara batch.

Bagikan artikel ini

Lapisan padat melakukan jenis perhitungan yang sama untuk satu input maupun banyak input sekaligus. Untuk satu input, perkalian matriks-vektor menggabungkan satu baris bobot dengan vektor fitur. Untuk sebuah batch, baris-baris matriks input digabungkan dengan setiap aturan keluaran. Perkalian matriks-matriks adalah notasi ringkas yang memungkinkan penggunaan ulang ini.

Di akhir pelajaran ini, Anda akan dapat memeriksa bentuk yang kompatibel, menghitung perkalian matriks kecil, menjelaskan dimensi keluaran, dan menafsirkan perkalian yang sama sebagai transformasi tersusun atau batch dari perkalian matriks-vektor.

Hasil pembelajaran: Memeriksa bentuk yang kompatibel, menghitung perkalian matriks kecil, menjelaskan dimensi keluaran, dan menafsirkan perkalian yang sama sebagai transformasi tersusun atau batch dari perkalian matriks-vektor.

Pelajaran 19: Perkalian matriks-vektor sebagai jumlah berbobot membahas satu input pada satu waktu. Situs pendamping resmi Mathematics for Machine Learning mengembangkan perkalian matriks di Bagian 2.2 buku tersebut. Contoh, kode, visual, dan asesmen di sini merupakan penerapan orisinal dari definisi itu.

Dimensi dalam menentukan apakah suatu perkalian ada

Misalkan

A∈Rm×n,B∈Rn×p.A\in\mathbb{R}^{m\times n}, \qquad B\in\mathbb{R}^{n\times p}.

Perkalian C=ABC=AB terdefinisi karena jumlah kolom pada AA sama dengan jumlah baris pada BB. Bentuknya mempertahankan dua dimensi terluar:

A⏟m×nB⏟n×p=C=AB⏟m×p.\underbrace{A}_{m\times n} \underbrace{B}_{n\times p} = \underbrace{C=AB}_{m\times p}.

Dimensi bersama nn memberi tahu kita berapa banyak pasangan yang sejajar dikalikan dan dijumlahkan untuk setiap entri keluaran. Dimensi terluar mm dan pp memberi tahu berapa banyak baris dan kolom yang dimiliki hasilnya. Dengan kata lain, bentuk keluaran adalah (m,p)(m,p), bukan (m,n)(m,n) dan bukan (n,p)(n,p).

Aturan ini merupakan kontraksi pada sumbu bersama. Aturan ini bukan instruksi untuk mengalikan entri pada posisi yang sama. Perbedaan itu penting dalam kode: NumPy mendokumentasikan numpy.matmul sebagai perkalian matriks dan menggunakan @ sebagai singkatan operatornya untuk kasus dua dimensi biasa (dokumentasi).

Simulator aliran bentuk membuat sumbu tetap terlihat

Visual berikut dimulai dengan perkalian yang lengkap dan kompatibel. Pilih preset lain untuk melihat bentuk terluar valid yang berbeda, beralih antara pembacaan langsung baris-kali-kolom dan pembacaan batch, atau gunakan kontrol bawaan untuk menelusuri satu entri keluaran. Setiap keadaan juga memiliki tabel semantik di bawahnya, sehingga perhitungannya tetap mudah dibaca tanpa JavaScript, warna, atau animasi.

Jelajahi bentuk yang kompatibel, satu hasil kali titik, dan kontraksi yang sama sebagai batch.
Jelajahi aliran bentuk

Setiap opsi memiliki dimensi dalam yang cocok; dimensi terluar menentukan bentuk keluarannya.

Baca perkalian yang sama sebagai

Gerakkan penggeser dengan penunjuk atau keyboard. Tabel tetap tersedia sebagai referensi statis yang lengkap.

Menelusuri C11: baris 1, kolom 1; 3 dari 3 produk telah disertakan.

Matriks kiri × Matriks kanan → Matriks keluaran

Penelusuran baris-kali-kolom

C11 = 1 × 2 + (-1) × 3 + 2 × 0 = -1

Total berjalan: -1 · hasil kali titik lengkap

Tabel semantik: setiap entri keluaran, baris kiri, kolom kanan, dan hasil kali titik akhirnya untuk A × B = C
Entri keluaranBaris kiriKolom kananHasil kali titik
C11 (baris 1, kolom 1)[1, -1, 2][2, 3, 0]-1
C12 (baris 1, kolom 2)[1, -1, 2][1, -1, 4]10
C21 (baris 2, kolom 1)[2, 0, 1][2, 3, 0]4
C22 (baris 2, kolom 2)[2, 0, 1][1, -1, 4]6
Tabel semantik: perkalian yang sama dibaca sebagai batch per baris untuk Bᵀ × Aᵀ = Cᵀ
Baris batchBaris input (kolom matriks kanan)Baris keluaran
1[2, 3, 0][-1, 4]
2[1, -1, 4][10, 6]

Tabel-tabel ini dirender bersama pelajaran dan tetap terlihat tanpa JavaScript. Kontrol yang difokuskan, label teks, dan bintang yang disorot menyediakan petunjuk untuk keadaan interaktif tanpa bergantung pada warna.

Keadaan pertama yang dirender server menampilkan perkalian lengkap sebelum interaksi sisi klien opsional terlihat. Penggeser menampilkan jumlah parsial, bukan matematika baru: penggeser hanya menentukan berapa banyak suku dari hasil kali titik yang sama yang sedang ditampilkan. Dalam mode batch, baris yang ditampilkan adalah contoh lengkap, dan tabel menjadi fallback permanen untuk semuanya.

Perkalian kecil memperlihatkan empat hasil kali titik

Pertimbangkan matriks asli

A=[1−12201],B=[213−104].A= \begin{bmatrix} 1 & -1 & 2\\ 2 & 0 & 1 \end{bmatrix}, \qquad B= \begin{bmatrix} 2 & 1\\ 3 & -1\\ 0 & 4 \end{bmatrix}.

Pemeriksaan bentuk dilakukan terlebih dahulu:

(2×3)(3×2)⟶(2×2).(2\times3)(3\times2)\longrightarrow(2\times2).

Kedua dimensi dalam sama-sama 33, sehingga perkalian tersebut ada. Dua dimensi terluar memprediksi empat entri keluaran, yang masing-masing dibentuk dari tiga perkalian skalar.

Lokasi setiap jawaban merupakan bagian dari hasilnya. Misalnya, c12c_{12} bukan “perkalian kedua” dalam daftar yang diratakan; entri ini berada pada baris 11, kolom 22, dan selalu memasangkan baris 11 dari AA dengan kolom 22 dari BB.

Perkalian yang sama menyusun transformasi dalam urutan tetap

Bentuk matriks juga menjelaskan domain dan kodomain. Di sini BB memetakan R2\mathbb{R}^{2} ke R3\mathbb{R}^{3}, sedangkan AA memetakan R3\mathbb{R}^{3} ke R2\mathbb{R}^{2}:

R2→  B  R3→  A  R2.\mathbb{R}^{2} \xrightarrow{\;B\;} \mathbb{R}^{3} \xrightarrow{\;A\;} \mathbb{R}^{2}.

Karena itu, ABAB adalah satu matriks untuk “terapkan BB, lalu terapkan AA.” Untuk

x=[12],\boldsymbol{x}=\begin{bmatrix}1\\2\end{bmatrix},

vektor perantaranya adalah

Bx=[2⋅1+1⋅23⋅1+(−1)⋅20⋅1+4⋅2]=[418].B\boldsymbol{x} = \begin{bmatrix} 2\cdot1+1\cdot2\\ 3\cdot1+(-1)\cdot2\\ 0\cdot1+4\cdot2 \end{bmatrix} = \begin{bmatrix}4\\1\\8\end{bmatrix}.

Menerapkan AA berikutnya memberikan

A(Bx)=[1⋅4+(−1)⋅1+2⋅82⋅4+0⋅1+1⋅8]=[1916].A(B\boldsymbol{x}) = \begin{bmatrix} 1\cdot4+(-1)\cdot1+2\cdot8\\ 2\cdot4+0\cdot1+1\cdot8 \end{bmatrix} = \begin{bmatrix}19\\16\end{bmatrix}.

Perkalian matriks memberikan titik akhir yang sama tanpa mewujudkan vektor tengah:

Cx=[−11046][12]=[1916].C\boldsymbol{x} = \begin{bmatrix}-1&10\\4&6\end{bmatrix} \begin{bmatrix}1\\2\end{bmatrix} = \begin{bmatrix}19\\16\end{bmatrix}.

Urutan ini bukan hiasan. Perkalian terbalik valid di sini, tetapi memiliki bentuk dan makna yang berbeda:

BA=[4−251−35804]∈R3×3.BA= \begin{bmatrix} 4 & -2 & 5\\ 1 & -3 & 5\\ 8 & 0 & 4 \end{bmatrix}\in\mathbb{R}^{3\times3}.

BABA memetakan R3\mathbb{R}^{3} ke R3\mathbb{R}^{3}, sehingga tidak dapat menggantikan ABAB pada vektor dua koordinat x\boldsymbol{x}. Bagian 2.2 buku tersebut juga menekankan bahwa perkalian matriks pada umumnya tidak komutatif; gambaran domain dan kodomain menjelaskan mengapa pertukaran urutan mengubah perhitungan (PDF buku).

Kontraksi ini adalah batch dari perkalian matriks-vektor

Misalkan ada tiga contoh dan masing-masing memiliki tiga fitur. Letakkan satu contoh di setiap baris:

X=[120012−101]∈R3×3.X= \begin{bmatrix} 1&2&0\\ 0&1&2\\ -1&0&1 \end{bmatrix}\in\mathbb{R}^{3\times3}.

Gunakan AA sebelumnya sebagai matriks bobot lapisan padat dan sebut matriks itu WW. Bentuknya (2,3)(2,3): tiga fitur input dan dua skor keluaran. Perhitungan batch yang berorientasi baris memerlukan transpose WTW^{\mathsf T}:

XWT=[120012−101][12−1021]=[−12321−1].XW^{\mathsf T} = \begin{bmatrix} 1&2&0\\ 0&1&2\\ -1&0&1 \end{bmatrix} \begin{bmatrix} 1&2\\ -1&0\\ 2&1 \end{bmatrix} = \begin{bmatrix} -1&2\\ 3&2\\ 1&-1 \end{bmatrix}.

Perhitungan bentuknya adalah

(3×3)(3×2)⟶(3×2).(3\times3)(3\times2)\longrightarrow(3\times2).

Dimensi pertama, 33, adalah jumlah contoh. Dimensi kedua, 22, adalah jumlah skor keluaran per contoh. Menambahkan vektor bias

b=[1−1]\boldsymbol{b}=\begin{bmatrix}1&-1\end{bmatrix}

ke setiap baris memberikan

Y=XWT+b=[01412−2].Y=XW^{\mathsf T}+\boldsymbol{b} = \begin{bmatrix} 0&1\\ 4&1\\ 2&-2 \end{bmatrix}.

Aturan broadcasting NumPy memungkinkan bias berbentuk (2,)(2,) sejajar dengan sumbu terakhir setiap baris berbentuk (3,2)(3,2) (dokumentasi broadcasting). Perkalian matriks itu sendiri tetap merupakan kontraksi; penambahan bias adalah operasi elementwise yang terpisah.

Konvensi batch per baris ini juga merupakan konvensi yang digunakan oleh torch.nn.Linear: dengan in_features=3 dan out_features=2, PyTorch menyimpan bobot berbentuk (2,3)(2,3) dan menghitung y=xWT+by=xW^{\mathsf T}+b. Karena itu, input berbentuk (3,3)(3,3) dikembalikan dengan bentuk (3,2)(3,2). Transpose menjembatani konvensi vektor kolom matematis dan konvensi implementasi yang menjadikan setiap sampel sebagai baris. Untuk tensor dengan lebih banyak dimensi batch, torch.matmul mempertahankan dua sumbu terakhir untuk perkalian matriks dan melakukan broadcasting pada sumbu batch awal yang kompatibel.

Ada cara lain untuk melihat hasil yang sama. Kolom-kolom BB adalah dua input dengan tiga koordinat untuk pemetaan AA. Letakkan input-input tersebut ke dalam baris dengan mentranspose BB:

BTAT=[2301−14][12−1021]=[−14106]=CT.B^{\mathsf T}A^{\mathsf T} = \begin{bmatrix} 2&3&0\\ 1&-1&4 \end{bmatrix} \begin{bmatrix} 1&2\\ -1&0\\ 2&1 \end{bmatrix} = \begin{bmatrix} -1&4\\ 10&6 \end{bmatrix} =C^{\mathsf T}.

Setiap baris BTB^{\mathsf T} adalah satu kolom BB, dan setiap baris CTC^{\mathsf T} adalah keluaran AA yang bersesuaian untuk input tersebut. Identitas (AB)T=BTAT(AB)^{\mathsf T}=B^{\mathsf T}A^{\mathsf T} menjadi jembatan antara “kolom sebagai input terpisah” dan “baris sebagai batch.”

NumPy membuat kontraksi ini dapat diuji

Program kecil berikut menuliskan tiga loop bersarang secara eksplisit dan membandingkannya dengan NumPy. Program ini juga memeriksa identitas batch dan membuat operator elementwise tetap terlihat terpisah. Quickstart NumPy memperkenalkan pembedaan yang sama antara operasi elementwise dan perkalian matriks.

import numpy as np

A = np.array([[1, -1, 2], [2, 0, 1]])
B = np.array([[2, 1], [3, -1], [0, 4]])

def matrix_product_by_loops(left, right):
    if left.shape[1] != right.shape[0]:
        raise ValueError("inner dimensions do not match")

    result = np.zeros((left.shape[0], right.shape[1]), dtype=int)
    for i in range(left.shape[0]):
        for j in range(right.shape[1]):
            for ell in range(left.shape[1]):
                result[i, j] += left[i, ell] * right[ell, j]
    return result

C_by_loops = matrix_product_by_loops(A, B)
C = A @ B
np.testing.assert_array_equal(C_by_loops, C)
np.testing.assert_array_equal(B.T @ A.T, C.T)

print(C)
print("elementwise A * B.T has shape", (A * B.T).shape)

try:
    A @ np.ones((2, 2), dtype=int)
except ValueError as error:
    print(type(error).__name__, "for incompatible inner dimensions")

Program mencetak

[[-1 10]
 [ 4  6]]
elementwise A * B.T has shape (2, 3)
ValueError for incompatible inner dimensions

Pemanggilan yang tidak valid gagal karena AA memiliki tiga kolom, sedangkan operan kedua memiliki dua baris. Ekspresi elementwise A * B.T tidak gagal di sini karena kedua array berbentuk (2,3)(2,3); ekspresi ini menghasilkan

A∗BT=[2−30204],A\mathbin{*}B^{\mathsf T} = \begin{bmatrix}2&-3&0\\2&0&4\end{bmatrix},

yang tidak memiliki penjumlahan baris-dengan-kolom atas tiga suku. NumPy mendokumentasikan multiply sebagai perkalian element-by-element (referensi). Fakta bahwa dua operator menerima operan yang sama bukan bukti bahwa keduanya mewakili operasi matematika yang sama.

Hasil identitas dan nol adalah kasus batas yang berguna

Dua kasus batas memperjelas aturan bentuk. Pertama, matriks identitas yang kompatibel tidak mengubah nilai:

I2C=C=CI2,I2=[1001].I_2C=C=CI_2, \qquad I_2=\begin{bmatrix}1&0\\0&1\end{bmatrix}.

Identitas di sebelah kiri harus memiliki dua baris dan dua kolom di sini karena CC berbentuk (2,2)(2,2). Secara umum, ImA=AI_mA=A untuk A∈Rm×nA\in\mathbb{R}^{m\times n} dan AIn=AAI_n=A jika dimensinya sesuai. Matriks identitas mempertahankan perkalian yang valid; matriks ini tidak memperbaiki perkalian yang tidak valid.

Kedua, perkalian yang valid dapat seluruhnya bernilai nol karena suku-sukunya saling meniadakan. Misalkan

P=[1−100],Q=[3333].P=\begin{bmatrix}1&-1\\0&0\end{bmatrix}, \qquad Q=\begin{bmatrix}3&3\\3&3\end{bmatrix}.

Maka

PQ=[1⋅3+(−1)⋅31⋅3+(−1)⋅300]=[0000].PQ=\begin{bmatrix}1\cdot3+(-1)\cdot3&1\cdot3+(-1)\cdot3\\0&0\end{bmatrix} =\begin{bmatrix}0&0\\0&0\end{bmatrix}.

Dimensi dalamnya cocok, sehingga hasil nol adalah hasil perhitungan, bukan kesalahan bentuk. Saat men-debug lapisan padat, periksa kedua jenis bukti: kontrak bentuk memberi tahu apakah operasi itu sah, sedangkan nilai aktual memberi tahu apakah pembatalan, bobot nol, atau masalah data menjelaskan keluarannya.

Kebiasaan yang dapat digunakan ulang ini singkat: sebutkan bentuk kiri, sebutkan bentuk kanan, cocokkan dimensi dalam, pertahankan dimensi luar, lalu hitung setiap entri keluaran dari baris kiri dan kolom kanan. Kebiasaan itu dapat berkembang dari contoh kecil yang dikerjakan ke X @ W.T + b, ke komposisi pemetaan yang dipelajari, dan ke operasi tensor batch yang lebih besar.

Uji pemahaman Anda

Pertanyaan 1

Jika L berbentuk 4 × 3 dan R berbentuk 3 × 5, apa bentuk LR, dan berapa banyak perkalian skalar yang diperlukan untuk seluruh hasil kali?

Tampilkan solusi langkah demi langkah

Langkah 1: periksa sumbu bersama. Matriks kiri memiliki 3 kolom dan matriks kanan memiliki 3 baris, sehingga dimensi dalamnya cocok.

Langkah 2: pertahankan sumbu luar. Perkalian tersebut berbentuk (4,5)(4,5).

Langkah 3: hitung pekerjaannya. Ada 4⋅5=204\cdot5=20 entri keluaran. Masing-masing menggunakan hasil kali titik dengan panjang 3, sehingga perhitungan langsung menggunakan 20⋅3=6020\cdot3=60 perkalian skalar.

Pertanyaan 2

Hitung P Q untuk P = [[1, 0, −2], [2, 1, 1]] dan Q = [[3, 1], [0, −2], [4, 2]].

Tampilkan solusi langkah demi langkah

Langkah 1: prediksi bentuknya. Bentuknya adalah (2,3)(2,3) dan (3,2)(3,2), jadi hasilnya harus berbentuk (2,2)(2,2).

Langkah 2: hitung baris 1. Entrinya adalah 1⋅3+0⋅0+(−2)⋅4=−51\cdot3+0\cdot0+(-2)\cdot4=-5 dan 1⋅1+0⋅(−2)+(−2)⋅2=−31\cdot1+0\cdot(-2)+(-2)\cdot2=-3.

Langkah 3: hitung baris 2. Entrinya adalah 2⋅3+1⋅0+1⋅4=102\cdot3+1\cdot0+1\cdot4=10 dan 2⋅1+1⋅(−2)+1⋅2=22\cdot1+1\cdot(-2)+1\cdot2=2.

Jadi

PQ=[−5−3102].PQ=\begin{bmatrix}-5&-3\\10&2\end{bmatrix}.

Pertanyaan 3

Sebuah lapisan padat menyimpan W berbentuk (2, 3), menerima X berbentuk (4, 3), dan memiliki bias b berbentuk (2,). Perkalian dan bentuk keluaran apa yang harus digunakan?

Tampilkan solusi langkah demi langkah

Langkah 1: jembatani kedua konvensi. Karena contoh-contoh disusun sebagai baris, transpose matriks bobot: WTW^{\mathsf T} berbentuk (3,2)(3,2).

Langkah 2: kalikan batch.XWTXW^{\mathsf T} berbentuk (4,3)(3,2)→(4,2)(4,3)(3,2)\to(4,2).

Langkah 3: tambahkan bias per baris. Bias memiliki dua entri yang cocok dengan dua fitur keluaran, sehingga XWT+bXW^{\mathsf T}+b tetap berbentuk (4,2)(4,2). Angka 4 di depan menghitung contoh; angka itu bukan bagian dari bentuk bobot yang dipelajari.

Pertanyaan 4

Untuk A dan B pada pelajaran ini, mengapa Bᵀ Aᵀ sama dengan (A B)ᵀ, dan apa yang direpresentasikan oleh setiap baris Bᵀ?

Tampilkan solusi langkah demi langkah

Langkah 1: transpose faktor dalam urutan terbalik. Mentranspose ABAB menghasilkan (AB)T=BTAT(AB)^{\mathsf T}=B^{\mathsf T}A^{\mathsf T}.

Langkah 2: identifikasi barisnya. Setiap baris BTB^{\mathsf T} adalah satu kolom BB, sehingga baris itu merupakan input tiga koordinat untuk pemetaan AA.

Langkah 3: baca keluarannya. Setiap baris yang bersesuaian dari BTATB^{\mathsf T}A^{\mathsf T} adalah keluaran untuk input tersebut menurut konvensi batch per baris. Secara numerik,

BTAT=[−14106]=[−11046]T.B^{\mathsf T}A^{\mathsf T} =\begin{bmatrix}-1&4\\10&6\end{bmatrix} =\begin{bmatrix}-1&10\\4&6\end{bmatrix}^{\mathsf T}.

Pertanyaan 5

Dengan menggunakan A, B, dan x = [1, 2]ᵀ pada pelajaran ini, pemetaan mana yang bekerja lebih dahulu dalam (A B)x, dan apa vektor akhirnya?

Tampilkan solusi langkah demi langkah

Langkah 1: baca urutannya. Faktor paling kanan bekerja lebih dahulu, jadi hitung BxB\boldsymbol{x} sebelum menerapkan AA.

Langkah 2: hitung vektor perantara.

Bx=[418].B\boldsymbol{x}=\begin{bmatrix}4\\1\\8\end{bmatrix}.

Langkah 3: terapkan pemetaan kedua.

A(Bx)=[1916].A(B\boldsymbol{x}) =\begin{bmatrix}19\\16\end{bmatrix}.

Jadi ABAB berarti “BB terlebih dahulu, lalu AA,” dan vektor akhirnya adalah [19,16]T[19,16]^{\mathsf T}.

Pertanyaan 6

Mengapa A * Bᵀ bukan operasi yang sama dengan A B, meskipun kedua ekspresi tersebut diterima untuk array pada pelajaran ini?

Tampilkan solusi langkah demi langkah

Langkah 1: bandingkan bentuknya.AA dan BTB^{\mathsf T} sama-sama berbentuk (2,3)(2,3).

Langkah 2: identifikasi operatornya.* adalah perkalian elementwise, sehingga operator ini mengalikan enam pasangan yang sejajar dan mempertahankan bentuk (2,3)(2,3). Operator ini tidak memasangkan satu baris dengan satu kolom lalu menjumlahkan tiga suku.

Langkah 3: bandingkan dengan perkalian matriks.A @ B menggunakan bentuk (2,3)(2,3) dan (3,2)(3,2), mengontraksikan dimensi bersama, dan mengembalikan (2,2)(2,2). Untuk nilai-nilai ini, A∗BT=[2−30204]A*B^{\mathsf T}=\begin{bmatrix}2&-3&0\\2&0&4\end{bmatrix}, sedangkan AB=[−11046]AB=\begin{bmatrix}-1&10\\4&6\end{bmatrix}.

Pertanyaan 7

A berbentuk (2, 3) dan D berbentuk (2, 2). Mengapa A @ D gagal, dan apakah D @ A valid?

Tampilkan solusi langkah demi langkah

Langkah 1: uji ADA D. Dimensi dalamnya akan menjadi 3 dan 2. Keduanya berbeda, sehingga tidak ada baris AA yang dapat dipasangkan dengan satu kolom lengkap DD menggunakan aturan perkalian matriks; A @ D tidak valid.

Langkah 2: uji DAD A. Sekarang dimensi dalamnya adalah 2 dan 2, sehingga perkalian valid dan memiliki bentuk luar (2,3)(2,3).

Langkah 3: pertahankan urutannya. Pembalikan dapat mengubah keabsahan dan selalu mengubah pemetaan yang direpresentasikan. Menukar faktor sampai bentuknya kebetulan cocok bukanlah perbaikan umum.

Pertanyaan 8

Untuk P = [[1, −1], [0, 0]] dan Q = [[3, 3], [3, 3]], mengapa P Q dapat menjadi matriks nol meskipun perkaliannya valid? Apa yang dilakukan I₂ C?

Tampilkan solusi langkah demi langkah

Langkah 1: periksa perkaliannya. Kedua matriks berbentuk (2,2)(2,2), sehingga dimensi dalamnya cocok.

Langkah 2: jelaskan angka nolnya. Setiap entri pada baris keluaran pertama adalah 1⋅3+(−1)⋅3=01\cdot3+(-1)\cdot3=0, dan baris kedua langsung menghasilkan nol. Jadi PQPQ bernilai nol karena pembatalan dan entri nol, bukan karena bentuknya tidak kompatibel.

Langkah 3: terapkan identitas. Dengan I2=[1001]I_2=\begin{bmatrix}1&0\\0&1\end{bmatrix} dan bentuk CC (2,2)(2,2), berlaku I2C=CI_2C=C. Matriks identitas mempertahankan perkalian yang kompatibel; matriks ini tidak mengubah nilai atau memperbaiki ketidakcocokan.

Pertanyaan 9

Untuk torch.nn.Linear(3, 2), sebuah batch berbentuk (5, 3). Nyatakan bentuk bobot, bentuk bias, bentuk keluaran, dan rumus batch per baris.

Tampilkan solusi langkah demi langkah

Langkah 1: baca parameter lapisan.in_features=3 dan out_features=2 berarti bobot yang dipelajari berbentuk (2,3)(2,3) dan bias berbentuk (2,)(2,).

Langkah 2: transpose untuk input berbentuk baris. Batch yang terdiri dari lima baris berbentuk (5,3)(5,3), sehingga perkalian dengan WTW^{\mathsf T} menggunakan (5,3)(3,2)(5,3)(3,2).

Langkah 3: nyatakan hasilnya. Keluaran berbentuk (5,2)(5,2) dan rumusnya adalah Y=XWT+bY=XW^{\mathsf T}+b. Angka lima tetap menjadi dimensi batch; setiap baris menerima dua fitur keluaran dan bias dengan dua entri ditambahkan ke setiap baris.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.matmul
  4. NumPy documentation: numpy.multiply
  5. NumPy quickstart: elementwise and matrix products
  6. NumPy documentation: broadcasting
  7. PyTorch documentation: torch.nn.Linear
  8. PyTorch documentation: torch.matmul