Satu jaringan
Satu jaringan untuk lukisan dan seluruh utas
Jaringan nyata, dibangun di sini dan dilatih di sini: bagian-bagian lukisan, kedalaman yang disarankan oleh cat, dan setiap huruf dari percakapan ini, dalam satu ruang bersama. Tidak ada yang dilatih sebelumnya.
Lukisan, bagian demi bagian
Jaringan melihat lukisan dalam bagian-bagian kecil, masing-masing dengan cahaya, warna, dan posisi tersendiri, lalu mempelajari kata-kata tersebut. Bobot yang sama membaca huruf-huruf dari utas tersebut.
- Langkah yang dilatih
- 0
- Kesalahan gambar
- —
- Kesalahan huruf
- —
- Kesalahan kedalaman
- —
- Potongan yang menemukan kata-katanya
- —
- Potongan cat
- 0
- Kata-kata di ruangnya
- 0
- Huruf yang dipelajari
- 0
- Karakter yang dikenal
- 0
Kata-kata yang dipelajarinya adalah apa yang bisa diajarkan oleh cat: seberapa terang suatu bagian, apa warnanya, di mana letaknya. Tugas teks mempelajari urutan huruf, bukan makna. Tidak ada yang dilatih sebelumnya di sini; gradien berjalan di tab ini.
Pelatihan, langsung
Ini dimulai sendiri saat halaman dibuka dan belajar tepat di sini, di tab ini. Setiap seratus langkah, ia mencatat apa yang diukurnya.
Menunggu jaringan dibangun…
Seluruh aplikasi, dalam Python dan JAX
Halaman ini dan program di bawah ini adalah satu jaringan. Program ini adalah keseluruhan aplikasi: jendela GTK4, gradien JAX, lukisan, thread, kedalaman yang diprediksi, dan ruang bersama. Salin atau simpan, lalu jalankan di mesin Anda sendiri.
- Bercak cat
- —
- Kata-kata yang dipelajari
- —
- Huruf yang dibaca
- —
- Berkas yang harus tetap bersama
- net_gtk.py
Apa yang dilakukan jendela ini
- Latih 300 atau 2.000 langkah, atau berhenti di tengah jalan; pembelajaran berjalan dalam thread sehingga jendela tetap aktif.
- Klik patch mana pun pada lukisan dan aplikasi akan memberi tahu kata-kata yang dimilikinya untuk patch tersebut.
- Tanyakan dalam kata-kata — emas hangat, biru tua — dan aplikasi akan menyalakan patch tempat pertanyaan tersebut mendarat.
- Berikan beberapa huruf dan aplikasi akan mencantumkan huruf yang diperkirakan berikutnya, beserta persentasenya.
- Tempel tulisan Anda sendiri dan tekan Pelajari ini sebagai gantinya: huruf baru mendapatkan baris baru di tabel yang sama, tidak ada yang sudah diketahui yang dibuang.
- Dua gambar di bawah lukisan: kedalaman yang diprediksi, dan satu ruang di mana titik adalah cat dan kotak adalah kata.
- Simpan bobotnya ke net_weights.json dan muat kembali lain kali.
Cara menjalankannya
Satu folder, satu berkas, dan lukisan bernama painting.jpg jika Anda memilikinya. Di Linux, di folder tersebut:
-
Instal paket Python
python3 -m pip install jax numpy pillow -
Instal GTK4 dan binding Python-nya
sudo apt install python3-gi gir1.2-gtk-4.0 -
Buka jendela
python3 net_gtk.py
Di Windows cara singkatnya adalah MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, lalu python -m pip install jax numpy pillow, lalu python net_gtk.py di terminal MSYS2 yang sama.
Di macOS: brew install pygobject3 gtk4, lalu python3 -m pip install jax numpy pillow, lalu python3 net_gtk.py.
Tidak ada tampilan? python3 net_gtk.py --selftest melatih di terminal dan mencetak angka yang sama.
Diukur dengan menjalankan file ini di terminal dengan JAX, pada lukisan dan thread ini: 400 langkah → 67% patch menemukan kata-katanya sendiri (kesalahan gambar 0,68), 2.000 langkah → 95% (0,53), 5.000 langkah → 97% (0,45). Kesalahan kedalaman berakhir pada 0,0003 dan kesalahan huruf turun dari 3,05 menjadi 2,90.
Browser tidak dapat menjalankan Python, jadi tab ini menampilkan berkas alih-alih jendela — jaringan yang sama berjalan secara langsung di atas. Kata-kata yang dipelajarinya adalah kata-kata yang dapat diajarkan oleh cat: lukisan ini tidak memiliki warna biru, jadi pertanyaan tentang biru akan mendarat di bercak emas. Bagian kepala huruf mengetahui urutan huruf, bukan makna.
Kompiler untuk Python dan JAX di atas
Kotak tersebut berisi forward pass dari satu jaringan. Kompiler membacanya, memeriksanya, dan menulisnya dua kali: Python untuk JAX, dan JavaScript yang berjalan di tab ini. Satu pohon, dua back end.
- Token
- —
- Node dalam pohon
- —
- Fungsi
- —
Apa yang dihitung
Pemeriksaan membandingkan angka-angka ini dengan program yang sama yang dijalankan di numpy dan JAX pada bobot seeded yang sama — diukur sebelum kartu ini ada, bukan ditebak.
Apa yang diizinkan oleh bahasa ini
- def name(a, b): dengan badan yang menjorok, name = ..., dan return ...
- Angka, nama, kurung, minus unary, dan + - * / @ untuk perkalian matriks.
- .T untuk transpose, dan panggilan tanh, sqrt, exp, log, sum, mean, maximum.
- Hal lainnya akan menghentikan kompiler dengan menunjukkan baris dan kolom daripada menebak.
Ini adalah kompiler nyata untuk bahasa kecil, bukan runtime Python: tidak ada loop, tidak ada kelas, tidak ada impor. Forward pass dari satu jaringan muat di dalamnya, itulah sebabnya teks yang sama dapat menjadi JAX di mesin Anda dan JavaScript di tab ini.
Mata virtual: ia hanya melihat piksel
Mata yang diarahkan ke monitor: ia mendapatkan gambar dan tidak ada yang lain — tidak ada halaman, tidak ada data, tidak ada jaringan. Dari piksel-piksel itu saja ia menemukan tepi, sudut, dan bagaimana setiap titik bergeser saat mata melangkah ke samping, dan dari situ ia membangun kembali posisi segala sesuatu di dalam ruang.
- Frame yang terlihat
- 0
- Sudut
- 0
- Dilacak
- 0
- Median gerakan
- —
- Kedalaman ditemukan
- —
- Titik-titik di ruang
- 0
- Satu frame
- —
Kedalamannya adalah geometri nyata, tetapi hanya sampai ukuran langkah mata, dan hanya di mana gambar memiliki tekstur — cat datar tidak memberikan apa pun untuk dipegang. Melihat di mana dinding berdiri bukanlah mengetahui bahwa itu adalah dinding, dan tidak ada yang di sini menciptakan dunia: ruangan di atas adalah piksel yang diukur.
Ide Anda, dan apa yang masih dibutuhkannya
- Mata pada monitor adalah antarmuka yang nyata: model yang membaca layar seperti cara manusia melakukannya tidak memerlukan plugin untuk setiap program — apa pun yang terlihat sudah menjadi input.
- Dari dua frame mata yang bergerak Anda mendapatkan geometri, yang mana merupakan hal yang harus disetujui oleh model dunia; bagian itu dilakukan secara nyata oleh kartu ini.
- Dunia yang dihasilkan secara real-time juga membutuhkan model yang menciptakan apa yang tidak dilihat siapa pun, menjaganya tetap konsisten saat Anda berputar, dan berjalan dalam hitungan milidetik — itu tidak ada di tab ini, dan sebuah halaman tidak dapat melatihnya.
- Batasan jujurnya: mata ini memulihkan di mana benda berada, bukan apa artinya. Kecepatan melihat bukanlah pemahaman, dan yang satu jauh lebih mudah daripada yang lain.
Gambar: pemindaian domain publik Perjamuan Terakhir karya Leonardo da Vinci, Wikimedia Commons.
