Kursus Matematika untuk AI · Pelajaran 25 dari 180
Penyelesaian Numerik untuk AI: Gunakan solve Tanpa Invers Eksplisit
Selesaikan sistem pemulihan parameter AI dengan NumPy, lalu gunakan residual, bilangan kondisi, dan pemeriksaan singularitas untuk menilai apakah jawabannya dapat dipercaya.
Sebuah langkah kalibrasi AI mungkin perlu memulihkan dua parameter yang tidak diketahui dari dua respons terukur. Persamaannya cukup kecil untuk ditulis di papan tulis, tetapi kode produksi tetap harus menentukan cara menyelesaikannya dan cara memeriksa jawabannya. Vektor yang tampak masuk akal bukan bukti bahwa data menentukannya secara andal.
Pelajaran ini mengembangkan keputusan tersebut dengan NumPy. Anda akan menyelesaikan sistem linear persegi, membandingkan numpy.linalg.solve dengan jalur invers eksplisit, menghitung residual, mengukur pengondisian, dan mengenali batas singular ketika estimasi parameter unik tidak ada.
Hasil belajar: Gunakan numpy.linalg.solve dan jelaskan mengapa inversi eksplisit biasanya dihindari.
Pelajaran 22: Transformasi identitas dan invers menunjukkan makna invers secara matematis. Pelajaran 24: Bentuk eselon baris mengungkap struktur menunjukkan bagaimana pivot dan variabel bebas mengungkap apa yang dapat ditentukan oleh sebuah sistem. Di sini, kita menghubungkan aljabar eksak itu dengan komputasi berpresisi hingga. Situs pendamping resmi Mathematics for Machine Learning menempatkan pekerjaan ini di Bagian 2.3 dari PDF buku; skenario kalibrasi, angka, kode, visual, dan asesmen di bawah ini adalah karya orisinal.
Sistem linear adalah kontrak pemulihan parameter
Tuliskan vektor parameter yang tidak diketahui sebagai
Vektor ini memiliki dua koordinat, sehingga setiap baris matriks koefisien harus memuat dua koefisien. Jika dua pengamatan menghasilkan vektor ruas kanan , sistem pemulihan parameter berbentuk
Untuk kepala kalibrasi kecil, bisa menjadi skala yang diterapkan pada satu sinyal dan menjadi koreksi mirip offset yang diterapkan pada sinyal lain. Secara lebih umum, notasi yang sama menggambarkan lapisan linear kecil, koreksi sensor, atau submasalah pemulihan parameter di dalam pipeline AI yang lebih besar. Baris-baris adalah pola koefisien yang diamati; berisi respons yang seharusnya dihasilkan oleh pola tersebut.
Jika persegi dan invertibel, aljabar dari pelajaran sebelumnya memberi
Identitas itu berguna untuk penalaran. Identitas itu tidak berarti program harus terlebih dahulu membangun setiap kali membutuhkan .
Contoh kerja: pulihkan dua parameter kalibrasi
Pertimbangkan sistem yang sengaja dibuat kecil berikut
Kedua persamaannya adalah
Selesaikan dengan substitusi sebelum meminta NumPy melakukan pekerjaan yang sama. Persamaan pertama memberi . Substitusikan ungkapan itu ke persamaan kedua:
Kemudian , sehingga
Periksa kedua persamaan asli, bukan hanya persamaan yang sudah diubah susunannya:
Mengapa solve biasanya merupakan langkah antara yang tepat
Ekspresi matematis langsung menyembunyikan dua tugas komputasi yang berbeda:
| Jalur | Apa yang dihitung | Mengapa penting untuk satu ruas kanan |
|---|---|---|
np.linalg.solve(A, b) | Memfaktorkan dan menerapkan faktor-faktornya pada | Hanya menghitung vektor yang diminta. |
np.linalg.inv(A) @ b | Membangun setiap kolom , lalu mengalikannya dengan | Menghitung informasi jauh lebih banyak daripada yang diperlukan satu penyelesaian ini. |
Untuk satu ruas kanan, solve menghindari materialisasi seluruh invers. Untuk beberapa ruas kanan yang disimpan sebagai kolom-kolom , gunakan np.linalg.solve(A, B) sehingga matriks koefisien yang sama dapat difaktorkan sekali sementara semua solusi yang diminta dihitung. Simpan invers hanya jika aplikasi memang membutuhkan invers itu sendiri; invers bukan pengganti default untuk solve.
Dokumentasi NumPy saat ini untuk solve menyatakan bahwa matriks koefisien harus persegi dan berpangkat penuh, serta mendokumentasikan bahwa rutin tersebut menggunakan implementasi LAPACK _gesv. Dokumentasi inv juga memperingatkan bahwa matriks yang terkondisi buruk dapat menghasilkan keluaran tidak akurat meskipun inversi tidak memunculkan galat. Karena itu, pilihan implementasi dan diagnosis perlu berada dalam model mental yang sama.
Perbedaan runtime bergantung pada perangkat keras dan pustaka, sehingga bukan benchmark yang portabel. Sebagai ilustrasi, pengujian di host penulisan berikut menggunakan matriks acak tetap berukuran , lima pengulangan waktu, dan dua puluh pemanggilan per pengulangan:
from timeit import repeat
rng = np.random.default_rng(7)
A_timing = rng.normal(size=(64, 64)) + 64 * np.eye(64)
b_timing = rng.normal(size=64)
solve_time = min(
repeat(lambda: np.linalg.solve(A_timing, b_timing), repeat=5, number=20)
) / 20
inverse_time = min(
repeat(lambda: np.linalg.inv(A_timing) @ b_timing, repeat=5, number=20)
) / 20
print(solve_time * 1e6, inverse_time * 1e6, inverse_time / solve_time)
Run yang telah diverifikasi mencetak kira-kira 15.2 µs, 52.2 µs, dan 3.43× untuk waktu solve, waktu jalur invers, dan rasionya. Anggap angka-angka itu sebagai bentuk perbandingan yang dapat direproduksi, bukan janji performa: alasan algoritmis untuk memilih solve adalah karena ia menghindari penghitungan matriks yang tidak digunakan, dan pustaka BLAS atau ukuran matriks yang berbeda dapat mengubah rasio tersebut.
Residual adalah pemeriksaan kecocokan, bukan sertifikat kepercayaan
Untuk contoh kerja, hitung residual dari jalur langsung:
Program floating-point melaporkan norma mendekati , bukan tepat nol. Itu merupakan bukti kuat bahwa vektor yang dikembalikan cocok dengan ini. Namun, bayangkan koefisien atau respons berasal dari pengukuran sensor yang dibulatkan. Solver dapat menemukan vektor yang sangat cocok dengan nilai yang telah dibulatkan itu, tetapi vektor tersebut tetap dapat berubah besar ketika pengukuran diubah dalam batas ketidakpastiannya.
Pengondisian mengukur sensitivitas
Bilangan kondisi membandingkan seberapa besar matriks dapat memperkuat perubahan input relatif. Untuk matriks invertibel dan norma-2,
dengan dan adalah nilai singular terbesar dan terkecil. Bilangan kondisi yang mendekati menunjukkan arah yang seimbang. Nilai besar berarti perubahan kecil tertentu pada input dapat menyebabkan perubahan relatif yang jauh lebih besar pada solusi. Jika nilai singular terkecil adalah nol, matriksnya singular dan bilangan kondisinya tak terhingga.
Untuk ruas kanan yang terganggu, batas yang berguna berbentuk
dengan asumsi-asumsi umum untuk sistem nonsingular. Ketaksamaan ini adalah peringatan tentang kemungkinan penguatan, bukan janji bahwa setiap gangguan akan mencapai kasus terburuk.
Sekarang gunakan baris-baris yang hampir bergantung:
Baris kedua hampir merupakan salinan baris pertama. Dengan persis seperti yang ditampilkan, solve memulihkan . Ubah hanya respons kedua sebesar , lalu solve lagi. NumPy melaporkan
condition number: 40002.000074915224
original solution: [ 2. -1.]
perturbed solution: [ 1.99 -0.99]
relative input change: 7.071421374297804e-07
relative solution change: 0.006324555320519327
perturbed residual norm: 0.0
Input berubah sekitar secara relatif, sedangkan vektor parameter berubah sekitar secara relatif. Itu kira-kira sensitivitas sebesar bilangan kondisi empat orde magnitudo. Solusi yang terganggu tetap memiliki residual nol untuk data yang terganggu: ia menyelesaikan persamaan baru dengan benar, tetapi data tersebut tidak mengidentifikasi vektor parameter yang stabil.
Peta stabilitas statis
Residual kecil dapat menyembunyikan solusi yang sensitif
Residual memeriksa persamaan yang sudah diselesaikan. Bilangan kondisi memperingatkan seberapa jauh solusi dapat berubah ketika data masukan berubah.
| Kasus | Bilangan kondisi | Perubahan masukan relatif → perubahan solusi | Residual dan interpretasi |
|---|---|---|---|
| Kondisi baik | 2.62 | 1.2 × 10⁻⁷ → 2.0 × 10⁻⁷ | Residual sekitar 10⁻¹⁵; kedua jalur sepakat untuk contoh berkondisi baik ini. |
| Kondisi buruk | 4.0002 × 10⁴ | 7.1 × 10⁻⁷ → 6.3 × 10⁻³ | Residual 0 untuk data yang terganggu, tetapi perubahan masukan 7,1 × 10⁻⁷ menggeser x sebesar 6,3 × 10⁻³. |
| Singular | ∞ | Tidak berlaku | κ₂(A) tak terhingga; solve dan inverse menghasilkan galat matriks singular, bukan jawaban unik. |
Baca kedua diagnosis bersama-sama: residual bertanya “apakah x ini cocok dengan b?”; kondisi bertanya “seberapa jauh x berubah jika b atau A sedikit berbeda?”
Visual tersebut memisahkan kedua pertanyaan. Residual bertanya apakah kandidat cocok dengan persamaan yang sedang ada di memori. Bilangan kondisi bertanya apakah perubahan kecil pada persamaan dapat menggeser kandidat itu. Sistem kalibrasi AI membutuhkan kedua jawaban.
Kasus batas: singular berarti “tidak ada penyelesaian unik”
Pertimbangkan
Baris kedua adalah dua kali baris pertama, sehingga rank adalah , bukan . Dengan , persamaannya konsisten tetapi memiliki tak terhingga banyak solusi: setiap yang memenuhi dapat digunakan. Dengan , persamaannya tidak konsisten karena persamaan kedua meminta ruas kiri dua kali ruas kiri pertama tetapi memberikan ruas kanan yang berbeda.
Tidak satu pun situasi tersebut memiliki vektor unik untuk dikembalikan oleh np.linalg.solve. Pada runtime yang disertakan, np.linalg.solve(C, [3, 6]) dan np.linalg.inv(C) sama-sama memunculkan numpy.linalg.LinAlgError: Singular matrix. Dokumentasi NumPy solve menetapkan syarat rank penuh dan menunjuk ke numpy.linalg.lstsq ketika solusi kuadrat terkecil sesuai untuk masalah non-persegi atau rank-deficient. Itu adalah pertanyaan yang berbeda dari menyelesaikan sistem persegi yang invertibel, jadi jangan diam-diam mengganti satu metode dengan metode lain.
Alur kerja NumPy yang disiplin untuk sistem AI
Untuk submasalah pemulihan parameter kecil, alur kerja yang dapat dipertanggungjawabkan adalah:
- Periksa kontraknya. Pastikan dimensi , , dan vektor parameter yang dimaksud sesuai.
- Selesaikan secara langsung. Gunakan
np.linalg.solve(A, b)untuk sistem persegi berpangkat penuh; gunakan metode yang dirancang untuk kuadrat terkecil jika masalahnya tidak teridentifikasi dengan baik. - Ukur residual. Hitung
np.linalg.norm(A @ x - b)dan bandingkan dengan skala , bukan hanya dengan ambang absolut sembarang. - Periksa pengondisian. Hitung
np.linalg.cond(A)dan bandingkan sensitivitas yang mungkin terjadi dengan presisi pengukuran serta jumlah digit yang akan digunakan di tahap berikutnya. - Anggap kegagalan sebagai informasi. Galat singular, bilangan kondisi yang sangat besar, atau residual yang besar relatif terhadap harus memicu penyelidikan terhadap data, fitur, penskalaan, atau desain model.
Dalam tugas kalibrasi atau pemulihan parameter, alur kerja ini mengubah vektor bobot menjadi hasil yang dapat diaudit. Residual kecil dapat mendukung klaim bahwa implementasi menyelesaikan persamaan yang diberikan. Bilangan kondisi sedang dan pemeriksaan perturbasi memberi bukti bahwa persamaan tersebut cukup kuat mengikat parameter untuk penggunaan yang dimaksud. Tidak satu pun diagnosis membuktikan bahwa sistem AI yang lebih luas akurat; keduanya menjawab pertanyaan implementasi yang lebih sempit dan dapat diuji.
Pelajaran berikutnya meninggalkan algoritme numerik sejenak dan menanyakan operasi aljabar mana yang valid pada sistem bilangan yang digunakan tensor AI umum. Untuk sekarang, ingat aturan praktisnya: selesaikan sistem yang ada, periksa residual yang diperoleh, dan tanyakan melalui pengondisian apakah sistem yang berdekatan akan menceritakan kisah parameter yang berbeda.
Uji pemahaman
Pertanyaan 1
Untuk A di R^(m×n), x di R^n, dan b di R^m, apa yang diminta Ax = b untuk ditemukan oleh program?
Tampilkan solusi langkah demi langkah
Program diminta mencari vektor dengan koordinat yang, ketika dikalikan dengan matriks berukuran , menghasilkan vektor dengan koordinat. Pemeriksaan bentuk dilakukan lebih dulu: setiap baris harus memiliki entri agar hasil dot product dengan terdefinisi, dan harus ada satu persamaan hasil untuk setiap entri .
Pertanyaan 2
Selesaikan 3x_1 + x_2 = 8 dan x_1 + 2x_2 = 1 dengan tangan.
Tampilkan solusi langkah demi langkah
Dari persamaan pertama, . Substitusikan ke persamaan kedua: , sehingga dan . Kemudian . Solusinya adalah , yang dapat diperiksa pada kedua persamaan asli: dan .
Pertanyaan 3
Sebuah vektor terhitung memiliki residual r = [0.0001, -0.0002]. Apa yang diberitahukan norma residual kepada Anda, dan apa yang tidak diberitahukannya?
Tampilkan solusi langkah demi langkah
Norma residual adalah
Norma tersebut memberi tahu seberapa dekat kandidat memenuhi persamaan yang diberikan. Norma itu tidak memberi tahu apakah parameter sebenarnya dekat, apakah matriks berkondisi baik, atau apakah pengukurannya akurat. Pertanyaan-pertanyaan itu membutuhkan pemeriksaan pengondisian, skala data, dan pemodelan.
Pertanyaan 4
Mengapa solve(A, b) dan inv(A) @ b dapat sepakat secara matematis sementara solve(A, b) tetap menjadi jalur kode yang lebih disukai?
Tampilkan solusi langkah demi langkah
Jika invertibel, identitas membuktikan bahwa kedua jalur menargetkan vektor matematis yang sama. Jalur implementasinya berbeda: solve memfaktorkan dan menerapkan faktor-faktor itu pada ruas kanan yang diminta, sedangkan inv terlebih dahulu membangun setiap kolom invers lalu mengalikannya. Karena itu, jalur invers melakukan pekerjaan tambahan dan membuat matriks perantara yang tidak diperlukan oleh satu penyelesaian.
Pertanyaan 5
Sebuah sistem memiliki bilangan kondisi sekitar 40.000. Haruskah residual nol membuat Anda nyaman melaporkan banyak digit x?
Tampilkan solusi langkah demi langkah
Tidak. Residual nol hanya mengatakan bahwa yang dilaporkan cocok dengan yang diberikan dalam aritmetika saat ini. Bilangan kondisi mendekati mengatakan bahwa perubahan relatif kecil pada atau dapat diperkuat kira-kira sebesar skala tersebut pada arah terburuk. Laporkan presisi yang sesuai dengan ketidakpastian pengukuran, periksa nilai singular atau pengondisian, dan uji perturbasi sebelum menganggap banyak digit bermakna.
Pertanyaan 6
Apa perbedaan antara sistem singular dengan tak terhingga banyak solusi dan sistem singular tanpa solusi?
Tampilkan solusi langkah demi langkah
Keduanya memiliki baris yang bergantung, sehingga matriks koefisien tidak dapat menentukan vektor unik. Jika ruas kanan memiliki ketergantungan yang sama, seperti untuk , persamaan konsisten dan memiliki tak terhingga banyak solusi. Jika ruas kanan memutus ketergantungan tersebut, seperti , reduksi baris menghasilkan kontradiksi seperti , sehingga tidak ada solusi. Tidak satu pun kasus merupakan masukan yang valid untuk hasil solve yang unik.
Pertanyaan 7
Dalam kepala kalibrasi AI, bukti apa yang akan Anda catat setelah memanggil np.linalg.solve(A, b)?
Tampilkan solusi langkah demi langkah
Catat bentuk matriks dan vektor, vektor parameter yang dikembalikan, norma residual , serta diagnosis pengondisian seperti np.linalg.cond(A). Catat juga satuan, penskalaan, atau ketidakpastian pengukuran jika detail itu memengaruhi interpretasi. Residual mendukung klaim tentang pencocokan persamaan yang diberikan; pengondisian dan pemeriksaan perturbasi mendukung klaim terpisah tentang sensitivitas parameter.
Pertanyaan 8
Sebuah tinjauan kode mengusulkan np.linalg.inv(A) @ b untuk setiap permintaan, termasuk matriks yang mungkin rank-deficient. Apa yang harus Anda ubah?
Tampilkan solusi langkah demi langkah
Ganti jalur default dengan np.linalg.solve(A, b) setelah memeriksa bahwa masalahnya memang ditujukan sebagai sistem persegi berpangkat penuh. Tangkap atau tampilkan LinAlgError, jangan menyembunyikannya, dan hitung residual setelah solve. Tambahkan np.linalg.cond(A) atau pemeriksaan pengondisian yang setara ketika sensitivitas input penting. Jika datanya persegi panjang atau rank-deficient, pilih dan dokumentasikan formulasi kuadrat terkecil atau teregularisasi, alih-alih berpura-pura bahwa invers ada.