Language model biasanya tidak menghasilkan satu next token yang tak terelakkan. Berdasarkan prefix, model memberi skor pada banyak token yang mungkin. Algoritma decoding kemudian menentukan cara mengubah skor tersebut menjadi output berikutnya.

Tahap terakhir ini penting. Sampling yang terlalu bebas dapat membuat model bergeser ke continuation yang tidak mungkin. Sampling yang terlalu dibatasi dapat membuat output repetitif atau kehilangan variasi yang berguna. Parameter seperti temperature, top-k, dan top-p mengontrol bagian berbeda dari trade-off ini, sehingga memperlakukannya sebagai satu “creativity setting” akan menghasilkan perilaku yang membingungkan.

Bagian berikut menunjukkan apa yang diubah setiap kontrol, bagaimana interaksinya, mengapa setting yang sama berperilaku berbeda antar-prompt, dan cara melakukan tuning tanpa menganggap randomness sebagai sumber pengetahuan atau kebenaran.

Mulai dari distribusi next-token

Misalkan model melihat:

The service returned an HTTP

Untuk contoh sederhana, bayangkan probabilitas next-token adalah:

500   0.45
404   0.25
200   0.15
503   0.10
302   0.05

Angka ini hanya contoh pembelajaran. Language model nyata biasanya memilih dari vocabulary yang jauh lebih besar, dan token tidak selalu sesuai dengan kata atau angka lengkap.

Decoder greedy memilih token dengan probabilitas tertinggi, sehingga 500 selalu dipilih pada contoh ini. Decoder sampling justru mengambil token dari probability distribution. 500 tetap paling mungkin, tetapi token lain terkadang dapat dipilih.

Temperature, top-k, dan top-p tidak menambahkan pengetahuan ke model. Ketiganya mentransformasi atau membatasi distribusi yang digunakan decoder untuk memilih.

Temperature mengubah probabilitas relatif

Sebelum probabilitas dihasilkan, language model mengeluarkan skor numerik yang disebut logits. Softmax mengubah logits menjadi probabilitas. Temperature memodifikasi logits sebelum konversi:

p_i = exp(z_i / T) / sum_j exp(z_j / T)

di mana z_i adalah logit token i dan T adalah temperature positif.

Ketika T < 1, pembagian dengan temperature memperbesar selisih antar-logit. Setelah softmax, token berskor tinggi menerima probabilitas lebih besar dan token berskor rendah menerima lebih kecil. Distribusi menjadi lebih tajam.

Ketika T > 1, selisih logit mengecil. Distribusi menjadi lebih datar sehingga token berperingkat lebih rendah mendapat peluang lebih besar untuk di-sample.

Pada T = 1, temperature tidak mengubah logits.

Sebagai contoh, pertimbangkan tiga logits:

A: 2
B: 1
C: 0

Pada temperature 1, probabilitas softmax kira-kira:

A: 0.665
B: 0.245
C: 0.090

Pada temperature 0.5, effective logits menjadi 4, 2, 0, menghasilkan kira-kira:

A: 0.867
B: 0.117
C: 0.016

Ranking tidak berubah. Decoder hanya menjadi jauh lebih mungkin memilih token yang memang sudah lebih disukai.

Temperature bukan correctness dial

Temperature lebih rendah dapat membuat output lebih stabil ketika model sudah memberi probabilitas tinggi pada continuation yang baik. Namun, itu tidak membuktikan continuation tersebut benar. Jika model dengan percaya diri memilih kesalahan faktual, mempertajam distribusi dapat membuat kesalahan itu lebih konsisten.

Sebaliknya, menaikkan temperature tidak menjamin model bernalar lebih kreatif. Itu hanya meningkatkan probabilitas relatif alternatif berskor lebih rendah. Sebagian alternatif dapat berguna; lainnya dapat tidak koheren atau salah.

Top-k mempertahankan jumlah kandidat tetap

Top-k sampling mengurutkan candidate token berdasarkan probabilitas dan hanya mempertahankan k kandidat dengan ranking tertinggi. Probabilitas sisanya diatur menjadi nol, lalu probabilitas yang dipertahankan dinormalisasi ulang sebelum sampling.

Menggunakan distribusi sebelumnya:

500   0.45
404   0.25
200   0.15
503   0.10
302   0.05

dengan k = 3, hanya token berikut yang tersisa:

500   0.45
404   0.25
200   0.15

Probability mass awalnya berjumlah 0.85. Setelah renormalization, sampling probability menjadi kira-kira:

500   0.529
404   0.294
200   0.176

Jadi, top-k membatasi candidate set, bukan secara langsung mengubah relative score di antara token yang dipertahankan.

Nilai k kecil dapat mencegah long tail token yang tidak mungkin ikut di-sample. Keterbatasannya adalah fixed candidate count mengabaikan seberapa terkonsentrasi distribusi. Kadang model memiliki satu continuation yang sangat dominan; di tempat lain puluhan alternatif sama-sama masuk akal. Nilai k yang sama berlaku untuk keduanya.

Top-p mempertahankan cukup kandidat untuk mencakup probability mass

Top-p sampling, juga disebut nucleus sampling, menyesuaikan jumlah kandidat dengan bentuk distribusi.

Decoder mengurutkan token dari probabilitas terbesar ke terkecil, lalu mempertahankan leading set terkecil yang cumulative probability-nya mencapai setidaknya p. Set tersebut dinormalisasi ulang lalu digunakan untuk sampling.

Dengan contoh yang sama dan p = 0.8:

500   0.45   cumulative 0.45
404   0.25   cumulative 0.70
200   0.15   cumulative 0.85

Dua kandidat pertama belum cukup karena hanya mencakup probability mass 0.70. Menambahkan 200 menaikkan cumulative mass menjadi 0.85, sehingga nucleus berisi tiga token.

Sekarang pertimbangkan distribusi yang jauh lebih terkonsentrasi:

500   0.92
404   0.03
200   0.02
503   0.02
302   0.01

Dengan p = 0.8, token pertama saja sudah melewati threshold. Nucleus karena itu dapat hanya berisi 500.

Perilaku adaptif ini merupakan perbedaan utama dari top-k. Top-k menetapkan jumlah kandidat. Top-p menetapkan jumlah probability mass awal yang harus dicakup candidate set.

Boundary token ikut dipertahankan

Kesalahan implementasi umum adalah membuang token yang membuat cumulative probability melewati threshold. Pada contoh pertama p = 0.8, hal itu akan salah karena hanya mempertahankan 500 dan 404, yang cumulative probability-nya 0.70.

Definisi nucleus yang umum mempertahankan prefix terkecil yang cumulative mass-nya setidaknya threshold. Perilaku API yang tepat tetap harus diperiksa karena serving library dapat memiliki filtering rule tambahan atau semantik parameter khusus.

Kontrol dapat digabungkan

Pipeline decoding dapat menerapkan temperature dan truncation bersama. Secara konseptual, urutan umum adalah:

model logits
    -> divide logits by temperature
    -> convert to probabilities
    -> restrict candidates with top-k and/or top-p
    -> renormalize
    -> sample

Karena temperature diterapkan lebih dulu, temperature dapat mengubah token mana yang masuk ke top-p nucleus dengan mengubah probabilitas sebelum cumulative mass dihitung.

Temperature tinggi dapat meratakan distribusi sehingga lebih banyak token diperlukan untuk mencapai p = 0.9. Temperature rendah dapat memusatkan sebagian besar probabilitas pada sedikit token sehingga nucleus mengecil.

Top-k dan top-p juga dapat digunakan bersama. Dalam hal ini, effective candidate set dibatasi oleh kedua aturan. Urutan tepat dan semantik parameter merupakan detail implementasi, jadi aplikasi harus mengikuti dokumentasi inference system yang benar-benar digunakan daripada menganggap setiap API menerapkan filter secara identik.

Pisahkan deterministic decoding dari low-randomness sampling

Developer sering menyebut temperature rendah sebagai “deterministic”, padahal keduanya berbeda.

Jika implementasi tetap melakukan sampling dari distribusi dengan beberapa token, repeated run masih dapat menghasilkan output berbeda walaupun temperature rendah. Temperature rendah hanya memusatkan probabilitas lebih besar pada token berskor tinggi.

Perilaku benar-benar deterministik bergantung pada decoding algorithm dan serving implementation. Greedy decoding memilih kandidat dengan skor tertinggi daripada mengambil sampel acak. Sebagian API menyediakan nilai temperature khusus atau opsi terpisah yang memetakan ke deterministic decoding, sedangkan yang lain memiliki constraint berbeda. Jangan menganggap nilai numerik tertentu memiliki semantik API universal.

Bahkan deterministic token selection tidak selalu berarti reproduksi bit-for-bit di semua environment. Revisi model, numerical kernel, hardware, batching, dan perubahan serving dapat memengaruhi hasil kecuali provider secara eksplisit menjamin reproducibility dalam kondisi tertentu.

Tune sampling berdasarkan biaya kegagalan aplikasi

Tidak ada temperature, k, atau p universal yang benar untuk semua task. Proses tuning yang berguna dimulai dari jenis variasi yang dapat ditoleransi aplikasi.

Untuk structured extraction, prompt mirip classification, atau code transformation dengan expected output sempit, variasi sampling yang tidak perlu sering membuat evaluasi dan debugging lebih sulit. Greedy atau tightly constrained decoding dapat menjadi baseline yang lebih baik. Jika output harus mengikuti schema, grammar-constrained atau structured decoding dapat menangani validity secara lebih langsung daripada sekadar menurunkan temperature.

Untuk brainstorming, alternative phrasing, atau menghasilkan beberapa kandidat untuk ranking berikutnya, sampling diversity dapat berguna. Aplikasi dapat secara sengaja menghasilkan beberapa kandidat dan mengevaluasinya daripada berharap satu random sample sekaligus beragam dan andal.

Untuk factual question answering, mengubah sampling setting bukan pengganti grounding, retrieval, tool use, atau verification. Sampling control memilih di antara continuation yang direpresentasikan distribution model; itu tidak memberi bukti bahwa sebuah pernyataan benar.

Eksperimen praktis dapat dilakukan seperti berikut:

  1. Bangun evaluation set representatif sebelum mengubah decoding parameter.
  2. Tetapkan baseline sederhana, seperti greedy decoding atau default terdokumentasi serving system.
  3. Ubah satu kontrol pada satu waktu agar efeknya dapat diamati.
  4. Ukur task quality serta output diversity, latency, dan failure rate jika relevan.
  5. Uji repeated sample untuk prompt yang randomness-nya diaktifkan.

Measurement yang tepat bergantung pada aplikasi. Exact-match accuracy mungkin penting untuk extraction, sedangkan candidate diversity dan downstream acceptance rate mungkin penting untuk ideation. Satu skor “creativity” generik jarang menangkap tujuan yang berbeda ini.

Waspadai kesalahan sampling umum

Mengubah beberapa kontrol sekaligus

Jika temperature, top-k, dan top-p semuanya berubah antar-eksperimen, sulit menentukan perubahan mana yang menyebabkan improvement atau regression. Mulai dari baseline yang diketahui dan ubah satu dimensi kecuali memang menjalankan joint parameter search.

Menggunakan temperature tinggi untuk memperbaiki output repetitif

Repetition dapat berasal dari model, prompt, context, stopping rule, atau decoding configuration. Temperature lebih tinggi mungkin mengurangi sebagian pola repetitif dengan menyebarkan probability mass, tetapi juga dapat meningkatkan error yang tidak terkait. Diagnosis failure sebelum menjadikan randomness sebagai solusi.

Menggunakan temperature rendah untuk mencegah hallucination

Temperature lebih rendah dapat membuat generation lebih konsisten, tetapi consistency dan factuality adalah properti berbeda. Continuation yang salah dengan confidence tinggi tetap dapat salah dengan confidence tinggi. Evaluasi factual failure secara langsung dan tambahkan grounding atau verification jika aplikasi membutuhkannya.

Membandingkan setting dengan satu generation per prompt

Sampling bersifat stochastic. Satu output dapat membuat setting terlihat sangat baik atau buruk hanya karena kebetulan. Saat membandingkan stochastic configuration, jalankan cukup banyak sample untuk mengkarakterisasi variasi yang penting bagi aplikasi.

Menganggap nama parameter berarti perilaku identik

Inference API berbeda-beda. Sebagian mengizinkan temperature dengan top-p, sebagian menyediakan top-k, sebagian memakai provider-specific default, dan sebagian mengimplementasikan deterministic mode secara terpisah. Gunakan konsep matematis di artikel ini sebagai mental model, lalu verifikasi actual API contract sebelum bergantung pada edge-case behavior.

Ketika decoding yang lebih sederhana sudah cukup

Sampling control berguna ketika Anda benar-benar perlu menukar concentration dengan diversity. Ia kurang berguna ketika output space sudah sempit dan correctness dapat dispesifikasikan secara langsung.

Jika task memiliki satu expected label, pilih dari allowed label daripada menambahkan randomness. Jika response harus memenuhi machine-readable schema, constrained generation atau validation dengan retry logic mungkin lebih sesuai. Jika Anda memerlukan beberapa ide berbeda, explicit multi-candidate generation dapat lebih mudah dievaluasi daripada berharap satu high-temperature sample berguna.

Strategi decoding paling sederhana yang memenuhi product requirement biasanya paling mudah diuji dan dioperasikan. Tambahkan sampling freedom karena aplikasi mendapat manfaat dari variasi, bukan karena language model diasumsikan membutuhkan randomness.

Kesimpulan

Temperature, top-k, dan top-p mengontrol tahap berbeda dalam token sampling. Temperature membentuk ulang relative probability, top-k membatasi candidate count, dan top-p menyesuaikan candidate set terhadap cumulative probability mass. Efeknya bergantung pada distribution model pada setiap generation step, sehingga numeric setting yang sama dapat berperilaku berbeda antar-prompt.

Gunakan kontrol ini sebagai decoding tool, bukan quality guarantee. Mulai dari baseline yang dapat diukur, tambahkan randomness hanya ketika variasi memiliki nilai, dan evaluasi failure yang penting bagi aplikasi. Memperlakukan ketiga kontrol sebagai operasi terpisah membuat perilakunya lebih mudah dianalisis daripada memperlakukannya sebagai satu creativity knob.