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.
Sebuah model membuat empat prediksi dan menghasilkan empat loss kuadrat: , , , dan . Satu langkah pelatihan membutuhkan satu tujuan, bukan empat angka yang terpisah. Menjumlahkan loss menghasilkan ; merata-ratakannya menghasilkan . 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 berarti “loss untuk contoh ”, 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, , berarti “menambahkan urutan suku”. Sebagai contoh,
ada empat bagian yang perlu dibaca:
- adalah indeks yang berubah;
- adalah batas bawah, tempat dimulai;
- adalah batas atas, tempat berhenti; dan
- adalah suku yang dihitung pada setiap indeks.
Kedua batas termasuk, sehingga ekspansinya adalah
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 sampai , sedangkan list Python memakai posisi sampai . Nilai stop Python tidak disertakan, sehingga range(1, n + 1) diperlukan agar 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, , berarti “mengalikan urutan suku”. Notasi ini menggunakan jenis indeks dan batas inklusif yang sama:
Untuk , , , dan ,
Loop yang bersesuaian dimulai dari , karena mengalikan dengan 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 dan hasil kali kosong adalah : 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 berulang | Notasi | Akumulator dimulai dari | Hasil kosong |
|---|---|---|---|
| Penjumlahan | |||
| Perkalian |
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:
Di sini adalah prediksi untuk contoh , sedangkan adalah targetnya. Definisikan loss kuadrat per contoh sebagai
Akumulator interaktif menampilkan keadaan antara yang diringkas oleh notasi sigma. Tabelnya tetap menjadi alternatif teks yang lengkap: baris mencantumkan , , loss kuadrat, dan apakah loss itu sudah masuk ke total kumulatif.
| Contoh | Prediksi | Target | Loss kuadrat | Keadaan akumulator |
|---|---|---|---|---|
| 1 | 2 | 1 | 1 | Ditambahkan sekarang |
| 2 | 0 | 2 | 4 | Menunggu |
| 3 | 4 | 5 | 1 | Menunggu |
| 4 | 5 | 2 | 9 | Menunggu |
- 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 . Membaginya dengan empat baris yang disertakan menghasilkan MSE . 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:
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]
| Ekspresi | Arah yang direduksi | Hasil yang tersisa |
|---|---|---|
np.mean(losses) | kedua sumbu | satu skalar untuk keenam loss |
np.mean(losses, axis=1) | kolom di setiap baris | satu nilai untuk setiap contoh |
np.mean(losses, axis=0) | baris di setiap kolom | satu 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 loss,
Rata-rata adalah jumlah yang diskalakan ulang, tetapi skalanya penting ketika ukuran batch berbeda. Empat contoh yang masing-masing memiliki loss mempunyai jumlah dan rata-rata ; delapan contoh seperti itu mempunyai jumlah dan rata-rata yang sama, . 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:
Evaluasi setiap suku berindeks sebelum menjumlahkannya:
Ada 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 . Suku yang hilang adalah .
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 membaca a[0] dan membaca a[n - 1], sehingga setiap suku dari sampai 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 , , dan :
Loop membutuhkan nilai sebelum melihat suku pertama. Memulai dari mempertahankan perkalian pertama karena . Memulai dari justru menghasilkan , 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:
Kuadratkan error tersebut untuk memperoleh loss per contoh:
Jumlahnya adalah . Ada tiga contoh, jadi
Angka desimal itu merupakan pendekatan; 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,
Untuk Batch B,
Jumlah menjadi dua kali lipat karena Batch B berisi dua kali lebih banyak contoh. Rata-rata tetap , 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 , jadi jumlah yang tidak menerima suku tetap . Nilai netral untuk perkalian adalah , jadi hasil kali yang tidak menerima suku tetap :
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 . 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.