b belajar.myudak

Rata-rata bermasker

X berisi nilai per token dari n kalimat yang di-pad sampai panjang t. mask[i, j] = 1 berarti token itu asli, 0 berarti padding. Kembalikan rata-rata tiap baris hanya pada token asli. Jika satu baris tidak punya token asli, hasilnya 0.

X    = [[1, 2, 3], [4, 5, 6]]
mask = [[1, 1, 0], [1, 1, 1]]   →  [1.5, 5.0]

Axis

X.sum(axis=1) menjumlahkan sepanjang axis 1, sehingga axis itu hilang: (n, t) → (n,). Pakai keepdims=True kalau hasilnya akan di-broadcast lagi ke (n, t).

Padding dan mask

Satu batch berisi kalimat dengan panjang berbeda, jadi kalimat yang pendek di-pad. Setiap reduksi (rata-rata, softmax, loss) harus mengabaikan padding. Kalau tidak, model ikut belajar dari token palsu. Pola ini muncul lagi di attention: posisi yang dilarang diberi skor -inf sebelum softmax.

Penjelasan

Yang diminta. Rata-rata tiap baris X, tetapi hanya menghitung posisi yang mask-nya 1. Baris tanpa satu pun posisi aktif menghasilkan 0.

Ide kunci. Rata-rata = jumlah ÷ banyaknya. Mask membantu keduanya:

  • Jumlah: kalikan X * mask. Posisi padding menjadi 0 sehingga tidak ikut terjumlah.
  • Banyaknya: mask.sum(axis=1) menghitung berapa posisi yang aktif per baris.

Langkah di kode:

  1. total = (X * mask).sum(axis=1) berbentuk (n,).
  2. count = mask.sum(axis=1) berbentuk (n,).
  3. np.where(count > 0, total / np.maximum(count, 1), 0.0). Pembaginya np.maximum(count, 1) supaya tidak pernah membagi dengan 0 (yang akan memberi nan dan peringatan). np.where lalu memilih 0 untuk baris kosong.

Kenapa bukan X.mean(axis=1)? Karena itu membagi dengan t (panjang yang sudah di-pad), bukan banyaknya token asli. Baris [1, 2, pad] akan dihitung (1+2+0)/3 = 1, padahal jawabannya 1.5.

Yang dikembalikan: array (n,).

Topik
numpyreduksiaxismask
Petunjuk 1

Kalikan X dengan mask supaya posisi yang diabaikan menjadi 0, lalu jumlahkan per baris (axis=1).

Petunjuk 2

Bagi dengan jumlah mask per baris. Baris yang mask-nya semua 0 harus menghasilkan 0, bukan NaN.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.