Kursus Matematika untuk AI · Pelajaran 38 dari 180

Aljabar Linear dalam Jaringan Saraf Kecil

Telusuri setiap bentuk, bias, aktivasi, dan perubahan rank pada jaringan dua lapis melalui contoh NumPy dan penjelajah interaktif.

Bagikan artikel ini

Jaringan saraf bisa tampak seperti serangkaian operasi matriks, padahal setiap langkah mengubah makna angkanya. Dengan mengikuti satu jaringan kecil dari masukan hingga keluaran, kita bisa melihat keseluruhan alurnya: bentuk matriks menentukan pemetaan mana yang dapat disambungkan, bias menggeser pemetaan tersebut, rank membatasi arah yang independen, dan fungsi aktivasi mengubah apa yang dapat dinyatakan oleh komposisinya.

Setelah menyelesaikan pelajaran ini, Anda akan mampu menelusuri setiap bentuk, menghitung jaringan dua lapis dengan tangan atau NumPy, lalu menjelaskan bagaimana bias, rank, dan aktivasi memengaruhi hasil.

Pelajaran ini menggabungkan tiga alat dari pelajaran sebelumnya: menyelesaikan sistem linear tanpa membentuk invers matriks secara eksplisit, menggunakan kernel dan image untuk menjelaskan arah yang hilang dan dapat dicapai, serta menggunakan bias untuk menggeser pemetaan afin. Bab 2 dari Mathematics for Machine Learning menyediakan landasan aljabar linear untuk merangkai konsep-konsep tersebut. Jaringan, angka, kode, visual, dan soal di bawah ini merupakan materi orisinal.

Ikuti dimensi pada dua lapisan afin

Di sini, “jaringan dua lapis” berarti dua pemetaan afin yang parameternya dipelajari, dengan aktivasi tersembunyi di antaranya. Keluaran kita biarkan sebagai dua skor; tidak ada konversi ke probabilitas atau keputusan kelas. Misalkan masukan berupa vektor kolom x∈R2x\in\mathbb{R}^2. Setiap pemetaan afin menggabungkan matriks dengan vektor bias:

Dimensi bersama antara pemetaan yang bersebelahan harus cocok: W1W_1 memiliki dua kolom untuk dua fitur masukan dan dua baris untuk keluaran tersembunyi. Lalu W2W_2 menerima dua nilai tersembunyi itu dan menghasilkan dua skor keluaran. Bias b1b_1 ditambahkan pada setiap koordinat tersembunyi, sedangkan b2b_2 ditambahkan pada setiap keluaran. Matriks dengan dimensi yang tidak cocok tidak dapat melakukan pemetaan tersebut; ini sama dengan pemeriksaan bentuk pada perkalian matriks NumPy.

Telusuri jaringan dengan dua masukan dan dua unit tersembunyiGeser salah satu koordinat masukan atau ganti aturan aktivasi tersembunyi. Keadaan awal menggunakan x = (1, 1) dan ReLU; semua nilai di bawah ini dirender sebelum JavaScript berjalan.
  1. Masukan · 2 fitur
  2. Pemetaan afin · 2 nilai tersembunyi
  3. Aktivasi tersembunyi
  4. Pemetaan afin · 2 skor
  5. Keluaran · 2 skor

z = W₁x + b₁

h = σ(z)

y = W₂h + b₂

Ubah masukan dan aturan tersembunyi

Gunakan tombol panah atau penggeser untuk mengubah tiap masukan dari −2 hingga 2 dengan langkah 0.25.

Aturan tersembunyi
Pra-aktivasi z
(-0.50, 0.50)
Keluaran tersembunyi h
(0.00, 0.50)
Skor y
(1.50, -0.50)
Unit tersembunyi aktif
1 / 2
Rank Jacobian lokal
1

Masukan awal 1, 1; keluaran tersembunyi 0, 0.5; skor 1.5, −0.5.

Nilai awal pada gambar menggunakan parameter tetap yang dipilih secara manual berikut:

W1=[1−111],b1=[−0.5−1.5],W2=[12−11],b2=[0.5−1].W_1=\begin{bmatrix}1&-1\\1&1\end{bmatrix},\quad b_1=\begin{bmatrix}-0.5\\-1.5\end{bmatrix},\quad W_2=\begin{bmatrix}1&2\\-1&1\end{bmatrix},\quad b_2=\begin{bmatrix}0.5\\-1\end{bmatrix}.

Contoh ini cukup kecil untuk diikuti per entri. Nilainya dipilih untuk menunjukkan satu unit tersembunyi dinonaktifkan oleh ReLU; ini bukan parameter hasil pelatihan dan bukan klaim tentang model yang tipikal.

Hitung satu prediksi sambil mempertahankan setiap nilai antara

Ambil x=(1,1)Tx=(1,1)^\mathsf{T}. Matriks pertama menggabungkan dua koordinat masukan dengan cara berbeda. Penambahan bias lalu menggeser setiap hasil:

Operator @ NumPy melakukan perkalian matriks. Operasi + b di bawah menggunakan broadcasting elementwise NumPy untuk menambahkan bias sepanjang dua elemen ke hasil sepanjang dua elemen. Implementasi sederhana ini mencetak vektor perantara yang sebenarnya:

import numpy as np

W1 = np.array([[1.0, -1.0], [1.0, 1.0]])  # (2, 2)
b1 = np.array([-0.5, -1.5])               # (2,)
W2 = np.array([[1.0, 2.0], [-1.0, 1.0]])  # (2, 2)
b2 = np.array([0.5, -1.0])                # (2,)
x = np.array([1.0, 1.0])                  # (2,)

z = W1 @ x + b1                           # (2,) = (2, 2) @ (2,) + (2,)
h = np.maximum(z, 0.0)                    # (2,), elementwise ReLU
y = W2 @ h + b2                           # (2,) = (2, 2) @ (2,) + (2,)

print('z:', z)  # [-0.5  0.5]
print('h:', h)  # [0.  0.5]
print('y:', y)  # [ 1.5 -0.5]

Logika lebar yang sama berlaku pada satu batch. Jika BB contoh disimpan sebagai baris, array-nya berbentuk (B,2)(B,2); kalikan dari kanan dengan W1TW_1^\mathsf{T} untuk menghasilkan nilai tersembunyi berbentuk (B,2)(B,2), lalu dengan W2TW_2^\mathsf{T} untuk menghasilkan skor berbentuk (B,2)(B,2). Lapisan Linear PyTorch menggunakan konvensi yang berorientasi pada baris tersebut: bentuk bobotnya (out features,in features)(\text{out features},\text{in features}) dan operasinya y=xAT+by=xA^\mathsf{T}+b. Jadi, Linear(2, 2) menyimpan bobot berbentuk (2,2)(2,2) serta bias sepanjang dua elemen. ReLU PyTorch diterapkan elementwise dan mempertahankan bentuk masukan, sama seperti langkah di atas (dokumentasi Linear, dokumentasi ReLU, dokumentasi NumPy matmul).

Tanpa aktivasi, dua lapisan tetap merupakan satu pemetaan afin

Bias pada lapisan afin berfungsi sebagai translasi. Jika langkah tersembunyinya adalah identitas, substitusi menggabungkan kedua lapisan:

y=W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2).y=W_2(W_1x+b_1)+b_2 =(W_2W_1)x+(W_2b_1+b_2).

Artinya, menumpuk lebih banyak pemetaan afin tanpa aktivasi nonlinear tidak akan membuat aturan masukan-keluaran keseluruhan menjadi nonlinear; matriks-matriksnya dikalikan menjadi satu matriks dan biasnya digabungkan menjadi satu offset. Untuk nilai yang dipilih di contoh ini, W2W1=[3102]W_2W_1=\begin{bmatrix}3&1\\0&2\end{bmatrix} dan W2b1+b2=(−3,−2)TW_2b_1+b_2=(-3,-2)^\mathsf{T}. Karena itu, versi identitas memetakan (1,1)T(1,1)^\mathsf{T} ke (1,0)T(1,0)^\mathsf{T}.

Rank sebuah matriks menghitung arah keluarannya yang independen. Pada contoh identitas ini, rank W1W_1 dan W2W_2 sama-sama dua, begitu pula rank hasil kalinya. Jika lebar tersembunyi jaringan adalah rr, rank bagian linear dari komposisi afin tidak bisa melebihi rr, karena faktornya hanya melewati rr koordinat. Jika salah satu matriks memiliki rank lebih rendah, rank komposisinya bisa lebih rendah lagi. Semua ini adalah batas atas: lapisan sempit dapat menjadi hambatan, tetapi lebarnya saja tidak menentukan rank tertentu.

ReLU membuat pemetaannya afin sepotong-sepotong

ReLU mengubah koordinat tersembunyi menjadi nol saat pra-aktivasinya negatif. Pada setiap wilayah tempat tanda semua nilai pra-aktivasi tetap, kumpulan unit aktif juga tetap. Misalkan DD adalah matriks diagonal dengan nilai 11 untuk setiap unit ReLU aktif dan 00 untuk unit yang tidak aktif. Di wilayah tersebut, bagian linear lokal dari jaringan dua lapis adalah

J=W2DW1.J=W_2DW_1.

Untuk masukan contoh tadi, z=(−0.5,0.5)Tz=(-0.5,0.5)^\mathsf{T}, sehingga D=[0001]D=\begin{bmatrix}0&0\\0&1\end{bmatrix}. Maka

J=[12−11][0001][1−111]=[2211],rank⁡(J)=1.J= \begin{bmatrix}1&2\\-1&1\end{bmatrix} \begin{bmatrix}0&0\\0&1\end{bmatrix} \begin{bmatrix}1&-1\\1&1\end{bmatrix} =\begin{bmatrix}2&2\\1&1\end{bmatrix}, \qquad \operatorname{rank}(J)=1.

Di sekitar masukan ini, kedua skor keluaran berubah menurut kombinasi masukan yang sama, x1+x2x_1+x_2; arah selisih (1,−1)(1,-1) tidak berpengaruh selama unit pertama tetap tidak aktif. Matriks JJ menjelaskan perubahan lokal di wilayah aktivasi ini, bukan satu matriks global untuk keseluruhan jaringan. Pada batas ReLU saat pra-aktivasi sama dengan nol, fungsi memiliki titik sudut dan tidak ada Jacobian dari satu wilayah pun yang dapat menjelaskan kedua sisinya.

Lebar tersembunyi dan bobot juga membatasi apa yang dapat dinyatakan jaringan. Dalam contoh khusus ini, dua garis dengan nilai pra-aktivasi nol membagi bidang masukan menjadi beberapa wilayah dengan pola unit aktif berbeda; setiap wilayah memiliki aturan afin, dan melintasi sebuah garis dapat mengubah aturan itu. Secara lebih umum, aktivasi nonlinear memungkinkan fungsi nonlinear, tetapi tidak menjamin setiap pilihan bobot mampu menyatakannya. Sebuah unit tersembunyi mungkin terus tidak aktif untuk masukan yang diperhatikan, atau matriks dapat meruntuhkan arah. Bentuk matriks, rank, offset bias, dan pola aktivasi sama-sama memengaruhi perilaku jaringan.

Itulah sebabnya nilai keluaran saja hanya memberi petunjuk yang terbatas saat melakukan debugging. Telusuri bentuk untuk menemukan sambungan yang tidak cocok, bandingkan zz dengan hh untuk melihat fitur mana yang ditahan, dan periksa rank lapisan atau Jacobian lokal untuk mengenali arah yang hilang. Jika langkah fitting terpisah meminta Anda menyelesaikan Ax≈bAx\approx b, Pelajaran 025 menjelaskan mengapa solver numerik menghindari risiko membentuk A−1A^{-1}. Forward pass jaringan itu sendiri menggunakan perkalian matriks; proses ini tidak memerlukan inversi bobot yang dipelajari.

Setelah pemetaan dan arahnya jelas, pertanyaan berikutnya adalah seberapa besar sebuah vektor. Pelajaran 039 memperkenalkan norma untuk mengukur besar vektor, membandingkan skala embedding, dan menjelaskan penalti parameter.

Periksa pemahaman Anda

Question 1

Untuk jaringan dalam pelajaran ini, sebutkan bentuk x, W₁, b₁, z, h, W₂, b₂, dan y. Mengapa W₂ dapat menerima h?

Show the step-by-step solution

xx berbentuk (2,)(2,), W1W_1 berbentuk (2,2)(2,2), b1b_1 berbentuk (2,)(2,), sedangkan zz dan hh masing-masing berbentuk (2,)(2,). Matriks kedua W2W_2 berbentuk (2,2)(2,2) dengan bias b2b_2 berbentuk (2,)(2,), sehingga menghasilkan yy berbentuk (2,)(2,). Dimensi dalam W2W_2 adalah dua dan cocok dengan dua entri di hh; karena itu, matriks tersebut memetakan vektor tersembunyi menjadi dua skor keluaran.

Question 2

Dengan x = (1, 1)ᵀ, hitung z, h, dan y menggunakan matriks serta ReLU dalam pelajaran ini. Tunjukkan langkah bias dan aktivasi.

Show the step-by-step solution

Pertama, W1x=(0,2)TW_1x=(0,2)^\mathsf{T}, sehingga penambahan b1=(−0.5,−1.5)Tb_1=(-0.5,-1.5)^\mathsf{T} menghasilkan z=(−0.5,0.5)Tz=(-0.5,0.5)^\mathsf{T}. ReLU diterapkan per koordinat dan memberikan h=(0,0.5)Th=(0,0.5)^\mathsf{T}. Berikutnya, W2h=(1,0.5)TW_2h=(1,0.5)^\mathsf{T}; setelah ditambah b2=(0.5,−1)Tb_2=(0.5,-1)^\mathsf{T}, hasilnya y=(1.5,−0.5)Ty=(1.5,-0.5)^\mathsf{T}.

Question 3

Mengapa menghilangkan aktivasi tersembunyi tetap menghasilkan pemetaan afin? Temukan matriks dan bias gabungannya untuk contoh ini.

Show the step-by-step solution

Substitusikan aturan afin pertama ke dalam aturan kedua: W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)W_2(W_1x+b_1)+b_2=(W_2W_1)x+(W_2b_1+b_2). Perkalian matriksnya adalah W2W1=[3102]W_2W_1=\begin{bmatrix}3&1\\0&2\end{bmatrix}. Selain itu, W2b1=(−3.5,−1)TW_2b_1=(-3.5,-1)^\mathsf{T}, sehingga penambahan b2=(0.5,−1)Tb_2=(0.5,-1)^\mathsf{T} menghasilkan bias gabungan (−3,−2)T(-3,-2)^\mathsf{T}. Hasilnya satu pemetaan afin karena tetap berbentuk Ax+cAx+c.

Question 4

Untuk x = (1, 1)ᵀ, keluaran apa yang dihasilkan versi dengan langkah tersembunyi identitas? Bagaimana perbandingannya dengan hasil ReLU?

Show the step-by-step solution

Dengan langkah identitas, gunakan pemetaan gabungan dari jawaban sebelumnya: [3102](1,1)T+(−3,−2)T=(1,0)T\begin{bmatrix}3&1\\0&2\end{bmatrix}(1,1)^\mathsf{T}+(-3,-2)^\mathsf{T}=(1,0)^\mathsf{T}. Dengan ReLU, keluarannya (1.5,−0.5)T(1.5,-0.5)^\mathsf{T} karena pra-aktivasi tersembunyi pertama negatif lalu menjadi nol, sedangkan yang kedua tetap 0.50.5. Perbedaannya berasal dari aktivasi per koordinat tersebut.

Question 5

Sebuah jaringan memetakan 5 masukan melalui lapisan tersembunyi selebar 3 menuju 4 keluaran tanpa aktivasi. Berapa rank maksimum yang mungkin untuk bagian linearnya? Bagaimana jika rank matriks bobot pertama 2 dan yang kedua 3?

Show the step-by-step solution

Matriks komposisinya difaktorkan melalui tiga koordinat tersembunyi, sehingga rank-nya paling tinggi tiga. Rank-nya juga tidak bisa melebihi dimensi masukan lima atau dimensi keluaran empat. Jika matriks pertama memiliki rank dua dan matriks kedua rank tiga, rank hasil kalinya paling tinggi adalah batas terkecil di antara angka-angka itu, yaitu dua. Ini adalah batas atas; hasil kali aktual bisa memiliki rank yang lebih rendah jika arah keduanya tidak selaras.

Question 6

Pada masukan contoh, unit ReLU pertama tidak aktif dan unit kedua aktif. Hitung rank Jacobian lokal dan jelaskan maknanya.

Show the step-by-step solution

Mask aktivasi adalah D=diag⁡(0,1)D=\operatorname{diag}(0,1). Perkalian menghasilkan J=W2DW1=[2211]J=W_2DW_1=\begin{bmatrix}2&2\\1&1\end{bmatrix}. Kolom keduanya sama dengan kolom pertama, jadi hanya ada satu kolom independen dan rank-nya satu. Di wilayah aktivasi ini, perubahan kecil masukan pada satu arah tidak mengubah keluaran; kedua skor bergantung pada kombinasi masukan yang sama. Ini pernyataan lokal karena pergantian unit ReLU mengubah matriks DD.

Question 7

Apa yang berubah saat nilai pra-aktivasi ReLU tepat nol? Dapatkah Jacobian dari salah satu wilayah di sebelahnya dipakai sebagai turunan tunggal di titik tersebut?

Show the step-by-step solution

ReLU memiliki sudut pada nol: kemiringannya nol tepat di sebelah kiri dan satu tepat di sebelah kanan. Ketika nilai pra-aktivasi tepat nol, fungsi pada koordinat itu tidak terdiferensialkan, sehingga tidak ada satu Jacobian biasa yang menggambarkan kedua sisinya. Keluaran jaringan tetap terdefinisi; yang gagal adalah satu pendekatan linear lokal melintasi batas tersebut.

Question 8

Satu batch memiliki 8 contoh dengan 4 fitur per contoh. Apa bentuk masukan dan keluaran untuk PyTorch Linear(4, 3), dan bagaimana bentuk bobotnya?

Show the step-by-step solution

Masukan batch berbentuk (8,4)(8,4), dengan delapan baris dan empat fitur masukan. PyTorch menyimpan bobot lapisan dalam bentuk (out features,in features)(\text{out features},\text{in features}), sehingga bobotnya berbentuk (3,4)(3,4) dan biasnya (3,)(3,). Lapisan mengembalikan bentuk (8,3)(8,3): dimensi batch tetap sama, sedangkan dimensi fitur terakhir diganti dengan tiga keluaran.

Sumber

  1. Mathematics for Machine Learning book PDF, Chapter 2
  2. NumPy documentation: numpy.matmul
  3. PyTorch documentation: torch.nn.Linear
  4. PyTorch documentation: torch.nn.ReLU