Saya ingin melihat sama ada menjalankan soalan yang sama sebanyak 51 kali akan menjadikan jawapannya lebih boleh dipercayai. Saya mengambil sebuah LLM tempatan, memberinya sekeping kod produksi, dan meminta ulasan. Kemudian saya melakukannya lagi. Dan lagi. Sebanyak 51 kali secara keseluruhan, menggunakan undian majoriti untuk memilih respons "terbaik". Ideanya mudah: jika model tersilap dalam satu larian, mungkin kebijaksanaan orang ramai merentasi 51 penjanaan akan membatalkan hingar dan memunculkan analisis yang betul. Itulah yang tidak berlaku. Eksperimen tersebut menunjukkan bahawa undian majoriti tidak memilih ketepatan. Ia memilih apa sahaja yang paling degil bagi model tersebut.
Perbezaan ini penting kerana undian majoriti telah menjadi satu "hack" yang popular dalam saluran paip (pipeline) LLM. Polanya mudah. Anda menjalankan model beberapa kali pada prom yang sama, mengumpul output, dan mengekalkan jawapan yang paling kerap muncul. Dalam bidang seperti pengimejan perubatan atau pengesanan spam, kaedah ensemble berfungsi kerana model yang berbeza, atau pandangan data yang berbeza, menghasilkan ralat bebas yang sebenarnya boleh saling membatalkan. Model bahasa besar bukanlah pengundi yang bebas. Ia adalah satu sistem dengan satu sejarah latihan, satu set pemberat, dan satu alam semesta bias. Apabila anda bertanya soalan yang sama kepada model yang sama sebanyak lima puluh satu kali, anda bukan sedang mengadakan mesyuarat jawatankuasa. Anda sedang melakukan tinjauan terhadap responden yang sama dalam mood yang sedikit berbeza.
Masalah Keberterusan
Isu terasnya ialah ralat LLM jarang sekali bersifat rawak. Ia adalah corak yang tertanam dalam data latihan dan seni bina. Model yang salah membaca dekorator Python tertentu dalam satu larian berkemungkinan besar akan salah membacanya dalam larian seterusnya. Model yang berhalusinasi tentang kerentanan keselamatan kerana nama pemboleh ubah kelihatan seperti kata laluan berkemungkinan besar akan berhalusinasi lagi pada larian ke-empat puluh tujuh. Hingar yang anda cuba puratakan biasanya hanyalah variasi permukaan dalam penggunaan kata atau pemformatan. Penaakulan yang mendasari selalunya kekal tidak berubah.
Pertimbangkan contoh konkrit. Bayangkan satu fungsi yang menghuraikan fail log menggunakan ekspresi regular (regex). Regex tersebut adalah ketat dan selamat. Tetapi rentetan r'...' mengandungi aksara yang, dalam konteks yang berbeza, mungkin mengundang suntikan (injection). Minta LLM untuk menyemak ini. Jika model tersebut telah melihat beribu-ribu hantaran Stack Overflow yang memberi amaran terhadap suntikan regex dalam penghurai log, ia mungkin menandakan petikan selamat ini sebagai risiko. Jalankan sekali, anda mendapat positif palsu. Jalankan 51 kali, dan ada kemungkinan besar anda mendapat 51 positif palsu, atau sekurang-kurangnya majoriti yang kuat. Undian majoriti kini mengukuhkan halusinasi tersebut. Model itu bersifat tekal, jadi "konsensus" itu juga bersifat tekal.
Ini berlaku kerana temperatur dan trik pensampelan tidak mengubah apa yang diketahui oleh model. Ia hanya menyusun semula cara ia bercakap. Temperatur yang tinggi mungkin menjadikan penjelasan lebih berbual-bual atau ringkas. Ia mungkin menukar sinonim. Ia tidak tiba-tiba mengajar model bahawa regex tersebut sebenarnya tidak berbahaya. Variasi yang anda undi adalah kosmetik. Ralatnya adalah struktural.
Apa yang Didedahkan oleh 51 Larian
Apabila saya menyusun 51 output tersebut di atas meja saya, polanya sangat jelas. Model tersebut tidak meneroka 51 tafsiran berbeza tentang kod itu. Ia hanya mengulang tafsiran yang sama dalam suara yang sedikit berbeza. Segelintir larian terkeluar daripada skrip, mencadangkan pembaikan kes pinggir (edge-case) atau menyedari isu gaya yang tidak berkaitan. Tetapi kelompok dominan, majoriti yang jelas, terus kembali kepada dakwaan pusat yang salah yang sama. Dakwaan itu tidak betul. Ia cuma biasa didengar.
Matematik undian majoriti mengandaikan percubaan Bernoulli yang bebas. Anda memerlukan ralat yang tidak berkaitan supaya majoriti dapat mengatasi individu. Dalam eksperimen saya, ralat-ralat tersebut sangat berkaitan. Ia berkongsi punca akar yang sama: taburan latihan model memberi pemberat berlebihan kepada kiasan pengekodan tertentu. Oleh itu, undian majoriti tidak mengurangkan ralat. Ia menguatkan bias majoriti. Ia memberikan rasa kepastian yang palsu kepada analisis yang cacat.
Ini amat berbahaya dalam semakan kod kerana pembangun menganggap output AI yang sebulat suara atau hampir sebulat suara sebagai berautoriti. Cadangan tunggal yang teragak-agak mudah untuk diketepikan. Cadangan yang kekal teguh merentasi lima puluh satu larian terasa seperti kebenaran asas (ground truth). Ia bukan. Ia adalah ground loop.
Di Mana Undian Sebenarnya Berfungsi
Ini tidak bermakna anda tidak boleh menjalankan model lebih daripada sekali. Pengundian majoriti boleh membantu dalam situasi terhad di mana tugasan tersebut adalah cetek dan ralatnya benar-benar rawak. Meminta model untuk memilih antara dua format sintaks, memilih konvensyen penamaan pemboleh ubah, atau mengekstrak rentetan tarikh daripada baris log—tugasan berisiko rendah ini kadangkala mendapat manfaat daripada pensampelan berulang. Variasi tersebut adalah hingar yang tulen, dan undian pantas dapat membersihkannya.
Masalah bermula apabila tugasan memerlukan penaakulan tentang niat. Adakah semakan auth ini patut berada di sini? Adakah panggilan async ini selamat? Adakah perlanggaran kunci cache ini benar-benar boleh dieksploitasi? Soalan-soalan ini memerlukan pemahaman tentang konteks, bukan sekadar padanan corak. Pemadan corak sesebuah model adalah deterministik dalam biasnya. Ia akan cenderung kepada jawapan yang paling biasa daripada data latihannya, bukannya jawapan yang paling tepat untuk codebase anda.
Cara Lebih Bijak untuk Menggunakan Komputasi Anda
Lima puluh satu larian model tempatan memakan masa dan elektrik yang nyata. Terdapat cara yang lebih baik untuk melaburkan komputasi tersebut. Jika anda ingin meningkatkan kebolehpercayaan, kepelbagaian mengatasi kuantiti. Jalankan dua model yang berbeza dengan
