Kursus Matematika untuk AI · Pelajaran 6 dari 180

Notasi Sigma untuk AI: Bagaimana Loss Menjadi Satu Tujuan Pelatihan

Pelajari notasi sigma dan hasil kali, uraikan batas menjadi loop, lalu gunakan penjumlahan dan rata-rata NumPy untuk mengubah error per contoh menjadi tujuan error kuadrat rata-rata.

Bagikan artikel ini

Sebuah model membuat empat prediksi dan menghasilkan empat loss kuadrat: 11, 44, 11, dan 99. Satu langkah pelatihan membutuhkan satu tujuan, bukan empat angka yang terpisah. Menjumlahkan loss menghasilkan 1515; merata-ratakannya menghasilkan 3.753.75. Keduanya merupakan reduksi yang valid, tetapi menjawab pertanyaan yang berbeda dan menghasilkan skala yang berbeda dalam kode.

Notasi sigma mengubah penjumlahan berulang itu menjadi satu ekspresi ringkas. Pada akhir pelajaran ini, Anda akan dapat menguraikan jumlah atau hasil kali dari batasnya, menerjemahkannya menjadi loop, menghitung error kuadrat rata-rata (MSE) di NumPy, serta menemukan reduksi yang memakai batas, penyebut, atau sumbu yang salah.

Pelajaran ini dibangun di atas nilai berindeks pada Pelajaran 5: setelah i\ell_i berarti “loss untuk contoh ii”, tugas berikutnya adalah menggabungkan semua loss berindeks. Situs pendamping Mathematics for Machine Learning resmi adalah halaman utama sumber buku referensi kursus ini; bab pengantarnya memotivasi jalur dari data numerik menuju model dan tujuan pembelajaran.

Batas memberi tahu kapan jumlah dimulai dan berhenti

Huruf kapital Yunani sigma, \sum, berarti “menambahkan urutan suku”. Sebagai contoh,

i=25ai\sum_{i=2}^{5} a_i

ada empat bagian yang perlu dibaca:

  • ii adalah indeks yang berubah;
  • 22 adalah batas bawah, tempat ii dimulai;
  • 55 adalah batas atas, tempat ii berhenti; dan
  • aia_i adalah suku yang dihitung pada setiap indeks.

Kedua batas termasuk, sehingga ekspansinya adalah

i=25ai=a2+a3+a4+a5.\sum_{i=2}^{5} a_i=a_2+a_3+a_4+a_5.

Ekspansi itu juga merupakan sebuah algoritme. Total kumulatif dimulai dari nol dan menerima satu suku setiap kali:

a = [10, 20, 30, 40, 50]
n = 5
total = 0

for i in range(1, n + 1):
    total += a[i - 1]

print(total)
150

Indeks matematika berjalan dari 11 sampai nn, sedangkan list Python memakai posisi 00 sampai n1n-1. Nilai stop Python tidak disertakan, sehingga range(1, n + 1) diperlukan agar nn ikut dihitung. Menulis range(1, n) diam-diam menghilangkan suku terakhir. Ekspresi a[i - 1] menerjemahkan indeks matematika yang dimulai dari satu menjadi posisi list yang dimulai dari nol, seperti diperkenalkan pada Pelajaran 5.

Notasi hasil kali mengubah nilai awal dan operasinya

Huruf kapital Yunani pi, \prod, berarti “mengalikan urutan suku”. Notasi ini menggunakan jenis indeks dan batas inklusif yang sama:

i=25ai=a2a3a4a5.\prod_{i=2}^{5} a_i=a_2a_3a_4a_5.

Untuk a2=2a_2=2, a3=3a_3=3, a4=1a_4=1, dan a5=4a_5=4,

i=25ai=2×3×1×4=24.\prod_{i=2}^{5}a_i=2\times3\times1\times4=24.

Loop yang bersesuaian dimulai dari 11, karena mengalikan dengan 11 tidak mengubah angka:

values = [2, 3, 1, 4]
product = 1

for value in values:
    product *= value

print(product)
24

Memulai product dari 0 akan membuat setiap hasil berikutnya menjadi nol. Perbedaan ini juga menjelaskan kasus kosong yang baku. Jumlah kosong adalah 00 dan hasil kali kosong adalah 11: masing-masing menggunakan nilai awal netral yang tidak mengubah penjumlahan atau perkalian berikutnya. NumPy mendokumentasikan konvensi yang sama untuk np.sum dan np.prod.

Operasi berulangNotasiAkumulator dimulai dariHasil kosong
Penjumlahan\sum0000
Perkalian\prod1111

Produk akan menjadi sangat penting saat kursus mencapai probabilitas gabungan. Untuk saat ini, kebiasaan implementasi yang utama adalah mencocokkan akumulator dan nilai awalnya dengan notasi.

Empat error prediksi menjadi satu error kuadrat rata-rata

Misalkan model regresi memprediksi satu angka untuk masing-masing dari empat contoh:

y^=(2,0,4,5),y=(1,2,5,2).\hat{\boldsymbol{y}}=(2,0,4,5), \qquad \boldsymbol{y}=(1,2,5,2).

Di sini y^i\hat y_i adalah prediksi untuk contoh ii, sedangkan yiy_i adalah targetnya. Definisikan loss kuadrat per contoh sebagai

i=(y^iyi)2.\ell_i=(\hat y_i-y_i)^2.

Akumulator interaktif menampilkan keadaan antara yang diringkas oleh notasi sigma. Tabelnya tetap menjadi alternatif teks yang lengkap: baris ii mencantumkan y^i\hat y_i, yiy_i, loss kuadrat, dan apakah loss itu sudah masuk ke total kumulatif.

Bangun tujuan pelatihan satu contoh demi satu. Jalankan urutannya atau gunakan tombol untuk berpindah.
Prediksi, target, loss kuadrat, dan keadaan akumulator
Contoh Prediksi Target Loss kuadratKeadaan akumulator
1211 Ditambahkan sekarang
2024 Menunggu
3451 Menunggu
4529 Menunggu
Jumlah kumulatif1
Suku yang disertakan
1
Rata-rata saat ini
1 ÷ 1 = 1.00

Langkah 1 dari 4: jumlah parsialnya adalah 1.

Setelah keempat baris masuk ke akumulator, jumlah kumulatifnya adalah 1515. Membaginya dengan empat baris yang disertakan menghasilkan MSE 3.753.75. Animasi tidak mengubah matematika; animasi membuat pembaruan berulang total = total + loss terlihat.

NumPy mencerminkan rumusnya

NumPy dapat mempertahankan loss per contoh agar tetap terlihat sebelum direduksi:

import numpy as np

y_true = np.array([1.0, 2.0, 5.0, 2.0])
y_pred = np.array([2.0, 0.0, 4.0, 5.0])

squared_losses = (y_pred - y_true) ** 2
total_squared_error = np.sum(squared_losses)
mse = np.mean(squared_losses)

print("per-example squared losses:", squared_losses)
print("sum:", total_squared_error)
print("mean squared error:", mse)
per-example squared losses: [1. 4. 1. 9.]
sum: 15.0
mean squared error: 3.75

Dokumentasi np.sum mendefinisikan reduksi atas elemen array. Dokumentasi np.mean mendefinisikan rata-rata aritmetika dan menyatakan bahwa, secara default, fungsi itu menggunakan array yang diratakan. Dalam contoh satu dimensi ini, perataan tidak mengubah apa pun: keempat entri direduksi.

Menyimpan squared_losses sebagai array bernama berguna untuk debugging. Kita bisa melihat apakah satu contoh mendominasi tujuan, dan tes dapat membandingkan implementasinya dengan empat perhitungan manual di atas.

Sumbu menentukan indeks mana yang hilang

Dengan array loss multidimensi, “ambil rata-rata” belum lengkap sampai sumbunya jelas. Pertimbangkan dua contoh, masing-masing dengan tiga loss keluaran:

L=[141904].L= \begin{bmatrix} 1 & 4 & 1\\ 9 & 0 & 4 \end{bmatrix}.

Baris adalah contoh dan kolom adalah keluaran. Argumen axis NumPy menyebut sumbu yang akan direduksi:

losses = np.array([
    [1.0, 4.0, 1.0],
    [9.0, 0.0, 4.0],
])

print("all six losses:", np.mean(losses))
print("one mean per example:", np.mean(losses, axis=1))
print("one mean per output:", np.mean(losses, axis=0))
all six losses: 3.1666666666666665
one mean per example: [2.         4.33333333]
one mean per output: [5.  2.  2.5]
EkspresiArah yang direduksiHasil yang tersisa
np.mean(losses)kedua sumbusatu skalar untuk keenam loss
np.mean(losses, axis=1)kolom di setiap barissatu nilai untuk setiap contoh
np.mean(losses, axis=0)baris di setiap kolomsatu nilai untuk setiap keluaran

Menggunakan axis=0 ketika model membutuhkan satu loss per contoh adalah bug semantik. Kode berjalan dan angkanya tampak masuk akal, tetapi indeks yang tersisa berarti “keluaran”, bukan “contoh”. Dokumentasi langsung NumPy untuk jumlah dan rata-rata menyatakan bahwa axis=None mereduksi seluruh array, sedangkan bilangan bulat memilih sumbu tempat reduksi dilakukan.

Jumlah dan rata-rata memiliki skala yang berbeda

Untuk koleksi tetap yang tidak kosong dan terdiri dari nn loss,

mean(1,,n)=1nsum(1,,n).\operatorname{mean}(\ell_1,\ldots,\ell_n) =\frac{1}{n}\operatorname{sum}(\ell_1,\ldots,\ell_n).

Rata-rata adalah jumlah yang diskalakan ulang, tetapi skalanya penting ketika ukuran batch berbeda. Empat contoh yang masing-masing memiliki loss 22 mempunyai jumlah 88 dan rata-rata 22; delapan contoh seperti itu mempunyai jumlah 1616 dan rata-rata yang sama, 22. Jumlah mengukur total loss koleksi. Rata-rata mengukur loss per item yang disertakan.

Dalam pelatihan model, aturan prediksi menghasilkan satu atau lebih loss untuk setiap contoh. Reduksi mengubah nilai-nilai itu menjadi tujuan skalar yang digunakan untuk menilai parameter saat ini. Karena itu, pilihan antara jumlah, rata-rata, atau varian bermask dan berbobot merupakan bagian dari kontrak matematika model, bukan sekadar format kode.

Pelajaran 7 akan menggunakan pangkat dan akar untuk menalar skala model. Sampai pelajaran itu tersedia, halaman kursus Math for AI adalah tempat tepercaya untuk melanjutkan sesuai urutan publikasi. Notasi yang dipelajari di sini akan kembali di seluruh kursus: jumlah membangun kombinasi berbobot dan tujuan, sedangkan hasil kali membangun faktor yang berulang.

Periksa pemahaman Anda

Pertanyaan 1

Uraikan jumlah dari i = 3 sampai i = 6: Σᵢ₌₃⁶ (2i − 1). Lalu hitung nilainya.

Tampilkan solusi langkah demi langkah

Batas bawahnya adalah 3 dan batas atasnya 6, jadi kedua titik ujung muncul:

i=36(2i1)=(231)+(241)+(251)+(261).\sum_{i=3}^{6}(2i-1) =(2\cdot3-1)+(2\cdot4-1)+(2\cdot5-1)+(2\cdot6-1).

Evaluasi setiap suku berindeks sebelum menjumlahkannya:

5+7+9+11=32.5+7+9+11=32.

Ada 63+1=46-3+1=4 suku. Jika hanya menghitung tiga, berarti salah satu titik ujung telah dihilangkan.

Pertanyaan 2

Sebuah loop Python dimaksudkan untuk mengimplementasikan Σᵢ₌₁ⁿ aᵢ tetapi menggunakan for i in range(1, n). Suku apa yang hilang, dan bagaimana loop itu harus mengindeks list a yang dimulai dari nol?

Tampilkan solusi langkah demi langkah

Python tidak menyertakan nilai stop dari range, sehingga range(1, n) menghasilkan 1,2,,n11,2,\ldots,n-1. Suku yang hilang adalah ana_n.

Sertakan batas atas matematika dengan berhenti di n + 1, lalu kurangi 1 ketika mengakses list yang dimulai dari nol:

total = 0
for i in range(1, n + 1):
    total += a[i - 1]

Sekarang i=1i=1 membaca a[0] dan i=ni=n membaca a[n - 1], sehingga setiap suku dari a1a_1 sampai ana_n muncul tepat satu kali.

Pertanyaan 3

Uraikan ∏ₖ₌₂⁴ (k + 1), hitung nilainya, dan jelaskan mengapa akumulator loop harus dimulai dari 1.

Tampilkan solusi langkah demi langkah

Batas inklusif memberikan indeks 22, 33, dan 44:

k=24(k+1)=(2+1)(3+1)(4+1)=3×4×5=60.\prod_{k=2}^{4}(k+1)=(2+1)(3+1)(4+1)=3\times4\times5=60.

Loop membutuhkan nilai sebelum melihat suku pertama. Memulai dari 11 mempertahankan perkalian pertama karena 1×3=31\times3=3. Memulai dari 00 justru menghasilkan 0×3×4×5=00\times3\times4\times5=0, sehingga semua suku terhapus.

Pertanyaan 4

Untuk target (3, 1, 2) dan prediksi (1, 2, 2), hitung setiap loss kuadrat, jumlahnya, dan MSE.

Tampilkan solusi langkah demi langkah

Kurangi target dari prediksi untuk setiap contoh:

(13,  21,  22)=(2,1,0).(1-3,\;2-1,\;2-2)=(-2,1,0).

Kuadratkan error tersebut untuk memperoleh loss per contoh:

(1,2,3)=((2)2,12,02)=(4,1,0).(\ell_1,\ell_2,\ell_3)=((-2)^2,1^2,0^2)=(4,1,0).

Jumlahnya adalah 4+1+0=54+1+0=5. Ada tiga contoh, jadi

MSE=13i=13i=531.667.\operatorname{MSE}=\frac{1}{3}\sum_{i=1}^{3}\ell_i =\frac{5}{3}\approx1.667.

Angka desimal itu merupakan pendekatan; 5/35/3 adalah nilai tepatnya.

Pertanyaan 5

Batch A memiliki loss (2, 2). Batch B memiliki loss (2, 2, 2, 2). Bandingkan jumlah dan rata-rata keduanya. Reduksi mana yang mempertahankan skala per contoh?

Tampilkan solusi langkah demi langkah

Untuk Batch A,

sum(A)=2+2=4,mean(A)=42=2.\operatorname{sum}(A)=2+2=4, \qquad \operatorname{mean}(A)=\frac{4}{2}=2.

Untuk Batch B,

sum(B)=2+2+2+2=8,mean(B)=84=2.\operatorname{sum}(B)=2+2+2+2=8, \qquad \operatorname{mean}(B)=\frac{8}{4}=2.

Jumlah menjadi dua kali lipat karena Batch B berisi dua kali lebih banyak contoh. Rata-rata tetap 22, jadi rata-rata mempertahankan skala loss per contoh dalam perbandingan ini.

Pertanyaan 6

Berapakah jumlah kosong dan hasil kali kosong, dan bug implementasi apa yang terjadi jika kedua loop akumulator dimulai dari 0?

Tampilkan solusi langkah demi langkah

Nilai netral untuk penjumlahan adalah 00, jadi jumlah yang tidak menerima suku tetap 00. Nilai netral untuk perkalian adalah 11, jadi hasil kali yang tidak menerima suku tetap 11:

iai=0,iai=1.\sum_{i\in\varnothing}a_i=0, \qquad \prod_{i\in\varnothing}a_i=1.

Memulai akumulator jumlah dari 0 adalah benar. Memulai akumulator hasil kali dari 0 adalah bug: bahkan urutan yang tidak kosong menjadi nol karena setiap pembaruan berbentuk 0×ai=00\times a_i=0. Akumulator hasil kali harus dimulai dari 1.

Pertanyaan 7

Sebuah array loss berbentuk (32, 5), diatur sebagai contoh × keluaran. Ekspresi NumPy mana yang menghasilkan satu rata-rata untuk setiap contoh? Jelaskan apa yang dikembalikan sumbu yang salah.

Tampilkan solusi langkah demi langkah

Setiap baris berisi lima loss keluaran untuk satu contoh. Untuk menggabungkan kolom di setiap baris, reduksi sumbu 1:

per_example_loss = np.mean(losses, axis=1)

Sumbu 1 berukuran 5 dan menghilang, sehingga tersisa bentuk (32,): satu nilai untuk masing-masing dari 32 contoh.

Menggunakan axis=0 justru mereduksi sumbu yang berisi 32 contoh. Hasilnya berbentuk (5,), berisi satu rata-rata untuk setiap posisi keluaran di seluruh batch. Angka-angka tersebut bisa valid, tetapi menjawab pertanyaan yang salah.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.sum
  4. NumPy documentation: numpy.prod
  5. NumPy documentation: numpy.mean