Mengapa ini terjadi? Model percaya ada emoji kuda laut, tentu saja, tetapi mengapa itu membuatnya mengeluarkan emoji *berbeda*? Berikut adalah petunjuk dari alat interpretabilitas favorit semua orang, Logit Lens! Di logit lens, kami menggunakan lm_head model dengan cara yang aneh. Biasanya, lm_head digunakan untuk mengubah residu (status internal yang dibangun di atas lapisan model) menjadi sekumpulan probabilitas token setelah lapisan akhir. Tetapi di logit lens, kita menggunakan lm_head setelah *setiap* lapisan - menunjukkan kepada kita token apa yang akan dikeluarkan model jika lapisan itu adalah lapisan terakhir. Untuk lapisan awal, ini menghasilkan keadaan yang sulit ditafsirkan. Tetapi saat kita bergerak melalui lapisan, model secara berulang menyempurnakan residu terlebih dahulu menuju konsep yang berguna untuk melanjutkan teks, dan kemudian menuju prediksi akhir. melihat gambar lagi, di lapisan terakhir, kita memiliki output model yang sebenarnya - ĠðŁ, IJ, ł - alias awalan byte emoji diikuti oleh emoji ikan lainnya. (Sepertinya omong kosong Unicode karena keanehan tokenisasi - jangan khawatir tentang itu. Jika Anda penasaran, tanyakan kepada Claude tentang baris kode ini: 'bytes([byte_decoder[c] untuk c di 'ĠðŁIJł']).decode('utf-8') == ' 🐠 '') Tapi lihat apa yang terjadi di lapisan tengah - kita tidak hanya mendapatkan byte emoji! Kami mendapatkan *konsep* itu, khususnya konsep kuda laut. Misalnya, pada layer 52, kita mendapatkan "kuda laut". Kemudian, di top-k, kita mendapatkan campuran "laut", "kuda", dan awalan emoji itu, "ĠðŁ". Jadi apa yang dipikirkan modelnya? Kuda laut + emoji! itu mencoba membangun representasi sisa emoji kuda laut. mengapa itu melakukan itu? Nah, mari kita lihat bagaimana lm_head sebenarnya bekerja. lm_head adalah matriks besar vektor berukuran sisa yang terkait dengan ID token. Ketika residu diteruskan ke dalamnya, itu akan membandingkan residu itu dengan setiap vektor token, dan berkoordinasi dengan sampler, pilih ID token dengan vektor yang paling mirip dengan residu. (lebih teknis: ini adalah lapisan linier tanpa bias, jadi v @ w.t melakukan produk titik dengan setiap vektor yang tidak disematkan, lalu sampel log_softmax dan argmax/temperature.) Jadi, jika model ingin mengeluarkan kata "halo", model perlu membuat residu yang mirip dengan vektor untuk token keluaran "halo" yang dapat diubah oleh lm_head menjadi ID token hello. Dan jika model ingin mengeluarkan emoji kuda laut, ia perlu membuat residu yang mirip dengan vektor untuk token keluaran emoji kuda laut - yang secara teori bisa berupa nilai sewenang-wenang, Namun dalam praktiknya adalah Seahorse + emoji, gaya word2vec. Satu-satunya masalah adalah emoji kuda laut tidak ada! Jadi ketika sisa Kuda Laut + Emoji ini menyentuh lm_head, ia melakukan produk titiknya di semua vektor, dan sampler memilih token terdekat - emoji ikan. Sekarang, diskretisasi itu adalah informasi yang berharga! Anda dapat melihat dalam contoh Gencatan Laut bahwa ketika token ditempatkan kembali ke dalam konteks secara regresif otomatis, model dapat mengatakan itu bukan emoji kuda laut. Jadi ia mencoba lagi, menggoyangkan sisa dan mendapatkan emoji yang sedikit berbeda, bilas dan ulangi sampai menyadari apa yang sedang terjadi, menyerah, atau kehabisan token keluaran. Tetapi sampai model mendapatkan token keluaran yang salah dari lm_head, ia tidak tahu bahwa tidak ada emoji kuda laut di lm_head. Ini mengasumsikan bahwa Seahorse + emoji akan menghasilkan token yang diinginkannya. ------------------ untuk berspekulasi (bahkan lebih banyak), saya bertanya-tanya apakah ini bagian dari manfaat RL - ini memberi model informasi tentang lm_head mereka yang sulit didapatkan karena berada di ujung tumpukan lapisan. (ingat bahwa model dasar tidak dilatih pada output / peluncuran mereka sendiri - itu hanya terjadi di RL.)