Kursus Matematika untuk AI · Pelajaran 3 dari 180

Domain dan kodomain: kontrak input yang dibutuhkan setiap fungsi AI

Pelajari bagaimana domain dan kodomain menetapkan input model yang valid dan tipe output yang dijanjikan, lalu diagnosis kegagalan bentuk, rentang, dan operasi yang tidak terdefinisi.

Bagikan artikel ini

Pelajaran 2 menjelaskan fungsi sebagai aturan yang menetapkan satu output untuk setiap input yang diizinkan. Kata diizinkan memiliki bobot yang lebih besar daripada yang tampak pada awalnya.

Pengklasifikasi teks tidak dapat menerima blok byte sembarang dengan aman ketika mengharapkan ID token. Perkalian matriks tidak dapat menerima bentuk yang tidak kompatibel. Logaritma tidak dapat menghasilkan nilai real untuk input negatif. Aturan hanyalah sebagian dari kontrak fungsi; himpunan input yang valid dan himpunan output yang dijanjikan adalah bagian lainnya.

Di akhir pelajaran ini, Anda akan mampu menuliskan fungsi bersama domain dan kodomainnya, membedakan kodomain dari nilai yang benar-benar dicapai, dan menjelaskan kegagalan input AI yang umum sebagai pelanggaran kontrak matematika.

Panah membawa informasi tipe

Deklarasi fungsi yang ringkas terlihat seperti ini:

f:AB.f:A\to B.

Bacalah “ff memetakan dari AA ke BB”.

  • AA adalah domain, himpunan input yang diizinkan.
  • BB adalah kodomain, himpunan tempat setiap output dijanjikan berada.
  • Aturan memberi tahu kita elemen BB mana yang ditetapkan untuk setiap elemen AA.

Notasi xAx\in A berarti “xx adalah elemen AA”. Notasi ini memungkinkan kita menulis kontrak dan evaluasi secara bersamaan:

xAf(x)B.x\in A \quad\Longrightarrow\quad f(x)\in B.
Fungsi menjanjikan pemetaan dari himpunan masukan yang diizinkan ke himpunan keluaran. Fungsi tidak menjanjikan bahwa setiap keluaran benar-benar akan muncul.
Peta domain, fungsi, dan kodomainTiga masukan fitur numerik yang valid dipetakan melalui fungsi skor risiko menjadi keluaran antara nol dan satu. Masukan teks berada di luar domain dan ditolak sebelum evaluasi.Domain0.10.50.9riskScoref(x)Kodomain [0, 1]0.180.500.82“high” berada di luar domain
Alternatif teks untuk diagram pemetaan
MasukanValid?Keluaran
0.1Ya0.18
0.5Ya0.50
0.9Ya0.82
“high”Tidak—tipe masukan salahTidak dievaluasi

Input teks “high” pada diagram bukan prediksi numerik yang gagal. Input itu tidak diizinkan untuk fungsi numerik ini, jadi evaluasi tidak seharusnya dimulai.

Kodomain adalah janji, bukan daftar output yang diamati

Perhatikan fungsi kuadrat pada bilangan real:

q:RR,q(x)=x2.q:\mathbb{R}\to\mathbb{R}, \qquad q(x)=x^2.

Di sini R\mathbb{R} berarti himpunan bilangan real. Setiap input real dapat dikuadratkan dan setiap hasilnya juga real, sehingga deklarasinya valid.

Namun q(x)q(x) tidak pernah negatif. Himpunan nilai yang benar-benar dicapai fungsi adalah

[0,)={yR:y0}.[0,\infty)=\{y\in\mathbb{R}:y\ge 0\}.

Himpunan yang dicapai ini disebut image atau range. Himpunan ini dapat lebih kecil daripada kodomain yang dinyatakan.

KonsepUntuk q:RRq:\mathbb{R}\to\mathbb{R}, q(x)=x2q(x)=x^2
DomainSemua bilangan real
KodomainSemua bilangan real
ImageBilangan real nonnegatif

Mengubah domain dapat memperbaiki aturan yang tidak terdefinisi

Ekspresi

r(x)=1xr(x)=\frac{1}{x}

tidak mendefinisikan output real pada x=0x=0. Kita dapat menyatakan fungsi yang valid dengan mengecualikan nol:

r:R{0}R,r(x)=1x.r:\mathbb{R}\setminus\{0\}\to\mathbb{R}, \qquad r(x)=\frac{1}{x}.

Simbol \setminus berarti selisih himpunan. Domainnya adalah “bilangan real tanpa nol”. Demikian pula,

(x)=logx\ell(x)=\log x

memiliki domain bernilai real yang dibatasi pada input positif:

:(0,)R.\ell:(0,\infty)\to\mathbb{R}.

Ini bukan hiasan yang rewel. Notasi tersebut memberi tahu implementasi apa yang harus diperiksa sebelum evaluasi.

Domain AI mencakup bentuk dan struktur

Sejauh ini, domain tampak seperti interval angka. Input model sering berupa vektor atau matriks. Bentuknya merupakan bagian dari kontrak.

Misalkan

f:R3R2.f:\mathbb{R}^3\to\mathbb{R}^2.

Notasi R3\mathbb{R}^3 berarti daftar berurutan berisi tiga koordinat real, dan R2\mathbb{R}^2 berarti daftar berurutan berisi dua koordinat real. Salah satu input yang valid adalah

x=[0.21.03.4].x=\begin{bmatrix}0.2\\-1.0\\3.4\end{bmatrix}.

Vektor dengan dua koordinat berada di luar domain yang dinyatakan. Setiap elemennya boleh saja real, tetapi objeknya memiliki bentuk yang salah.

Inilah versi matematika dari kesalahan tensor yang umum:

def project_three_features(x):
    if x.shape != (3,):
        raise ValueError("expected exactly three features")
    return [x[0] + x[1], x[2] - x[1]]

Pemeriksaan tersebut melindungi domain. Fungsi mengembalikan dua angka, sesuai dengan bentuk kodomainnya.

Untuk model berbasis token, domain lengkap dapat lebih ketat lagi. Input mungkin memerlukan:

  • ID token bilangan bulat, bukan nilai real sembarang;
  • ID dalam rentang kosakata yang tetap;
  • panjang urutan maksimum;
  • bentuk batch dan mask perhatian yang saling sesuai; dan
  • pengodean gambar, audio, atau teks yang diharapkan model tertentu ini.

Mengatakan “model menerima tensor” menyembunyikan batasan tersebut. Antarmuka matematika dan perangkat lunak yang baik membuatnya terlihat.

Janji output membatasi kode downstream

Misalkan sebuah pengklasifikasi dideklarasikan sebagai

c:Rd[0,1]K.c:\mathbb{R}^{d}\to[0,1]^K.

Pengklasifikasi menerima dd fitur real dan mengembalikan KK angka, masing-masing antara nol dan satu. Kodomain itu saja tidak menjamin bahwa KK angka tersebut berjumlah satu. Jika output yang diinginkan adalah distribusi probabilitas atas KK kelas yang saling eksklusif, kodomain memerlukan syarat tambahan:

ΔK1={p[0,1]K:k=1Kpk=1}.\Delta^{K-1} = \left\{ p\in[0,1]^K: \sum_{k=1}^{K}p_k=1 \right\}.

Himpunan ini disebut simpleks probabilitas. Kita akan mempelajarinya nanti. Untuk saat ini, perhatikan bagaimana kodomain yang lebih kaya menyampaikan janji yang lebih kuat kepada kode downstream.

Daftar periksa untuk membaca fungsi model

Ketika menemukan pemetaan matematika baru, ajukan empat pertanyaan:

  1. Objek apa yang termasuk dalam domain?
  2. Objek apa yang secara eksplisit dikecualikan atau tidak terdefinisi?
  3. Himpunan output apa yang dijanjikan kodomain?
  4. Apakah aturan benar-benar mencapai seluruh kodomain, atau hanya image yang lebih kecil?

Pertanyaan-pertanyaan ini mengubah banyak kesalahan samar berupa “bentuk tidak cocok”, “probabilitas tidak valid”, dan “loss tidak terdefinisi” menjadi pelanggaran kontrak yang presisi. Pelajaran berikutnya akan menggunakan himpunan untuk mendeskripsikan kumpulan data dan kejadian secara lebih sistematis.

Uji pemahaman

Pertanyaan 1

Untuk q(x) = x² yang dinyatakan sebagai q: R → R, tentukan domain, kodomain, dan image.

Tampilkan solusi langkah demi langkah

Deklarasi tersebut menyatakan bahwa domainnya adalah R\mathbb{R} dan kodomainnya juga R\mathbb{R}. Menguadratkan input real apa pun terdefinisi dan menghasilkan bilangan real.

Karena x20x^2\ge 0 untuk setiap real xx, nilai yang dicapai tepat berupa bilangan real nonnegatif:

image(q)=[0,).\operatorname{image}(q)=[0,\infty).

Jadi image adalah subset sejati dari kodomain.

Pertanyaan 2

Mengapa 0 berada di luar domain bernilai real dari r(x) = 1/x?

Tampilkan solusi langkah demi langkah

Substitusi nol meminta

r(0)=10.r(0)=\frac{1}{0}.

Tidak ada bilangan real yy yang memenuhi 0y=10\cdot y=1, sehingga pembagian itu tidak memiliki nilai real. Deklarasi yang benar mengecualikan nol:

r:R{0}R.r:\mathbb{R}\setminus\{0\}\to\mathbb{R}.

Pertanyaan 3

Sebuah fungsi mengharapkan elemen R³. Apakah [1, 2] valid jika kedua elemennya real? Jelaskan.

Tampilkan solusi langkah demi langkah

Keanggotaan dalam R3\mathbb{R}^3 mensyaratkan tepat tiga koordinat real yang berurutan. Vektor [1,2][1,2] termasuk R2\mathbb{R}^2, bukan R3\mathbb{R}^3.

Tipe nilai individualnya benar, tetapi bentuknya salah. Tipe nilai dan bentuk sama-sama merupakan bagian dari kontrak domain.

Pertanyaan 4

Sebuah pengklasifikasi mengembalikan [0.6, 0.6]. Masing-masing elemen berada dalam [0, 1]. Mengapa ini masih dapat melanggar kodomainnya?

Tampilkan solusi langkah demi langkah

Jika pengklasifikasi hanya menjanjikan [0,1]2[0,1]^2, vektor itu memenuhi kontrak yang lemah tersebut. Namun jika pengklasifikasi menjanjikan distribusi probabilitas atas dua kelas yang saling eksklusif, nilainya juga harus berjumlah satu.

Di sini, 0.6+0.6=1.210.6+0.6=1.2\ne1, sehingga vektor tersebut bukan anggota simpleks probabilitas. Apakah kodomain dilanggar bergantung pada himpunan output yang sebenarnya dinyatakan.

Pertanyaan 5

Sebuah implementasi mengganti log(p) dengan log(max(p, 0.000001)). Apakah implementasi itu menghitung fungsi yang persis sama untuk setiap p real?

Tampilkan solusi langkah demi langkah

Tidak. Untuk p0.000001p\ge0.000001, kedua ekspresi sama. Untuk pp positif yang lebih kecil, implementasi yang memotong nilai mengembalikan konstanta log(0.000001)\log(0.000001), bukan logp\log p. Untuk pp nol atau negatif, implementasi itu juga menghasilkan nilai terbatas di tempat logaritma real asli tidak terdefinisi.

Pemotongan dapat menjadi perlindungan numerik yang disengaja, tetapi mengubah fungsi di luar wilayah kesamaan. Penjelasan yang presisi harus menyatakan konvensi tersebut dan alasannya.

Sumber

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF