Desain Program Fenotropik


15

Baru-baru ini saya menemukan ide yang diajukan oleh Jaron Lanier yang disebut "pemrograman fenotropik."

Idenya adalah menggunakan antarmuka 'permukaan' alih-alih antarmuka titik tunggal dalam program komputer yang menggunakan statistik untuk menghilangkan kesalahan kecil yang biasanya akan menyebabkan program "klasik" hancur berantakan.

Deskripsi dua baris ada di sini:

Menurut Jaron, 'perbedaan nyata antara ide perangkat lunak saat ini, yaitu kepatuhan protokol, dan ide yang sedang dia diskusikan, pengenalan pola, berkaitan dengan jenis kesalahan yang kita buat' dan jika 'kita tidak "Kami tidak akan menemukan cara berpikir yang berbeda tentang dan membuat perangkat lunak, kami tidak akan menulis program yang lebih besar dari sekitar 10 juta baris kode, tidak peduli seberapa cepat prosesor kami."

Penjelasan yang sedikit lebih panjang ada di sini . Dan penjelasan yang lebih panjang ada di sini .

Jadi, pertanyaannya, melihat melewati konotasi robot-tuan yang jelas yang cenderung dipilih orang, bagaimana orang benar-benar merancang dan menulis "program fenotropik?"


1
Jangan tersinggung tetapi artikel yang Anda tautkan sangat kabur & naif. Bisakah Anda lebih tepat dengan apa yang Anda pahami phenotropic program?
Simon Bergot

Baca yang lebih lama. Ini menggambarkannya dengan detail berdarah.
adv

4
Saya pikir satu-satunya cara untuk menjawab ini adalah dengan mendefinisikan apa itu "program fenotropik". Dalam hal ini jawabannya menjadi berbasis opini. Jadi sebelum bertanya bagaimana cara menulis "program fenotropik", tanyakan apa itu "program fenotropik".
Euforia

1
@Simon: Pertanyaannya pada dasarnya menanyakan hal yang sama, jadi saya tidak tahu bahwa permintaan Anda dimungkinkan tanpa OP yang benar-benar menjawab pertanyaan itu sendiri.
Robert Harvey

1
Topik terkait (pertimbangkan penulis teks): mail-archive.com/fonc@vpri.org/msg03808.html
Thiago Silva

Jawaban:


23

Lanier telah menemukan kata 50 sen dalam upaya untuk melebarkan jaring di sekitar seperangkat ide tertentu yang menggambarkan model komputasi untuk membuat program komputer yang memiliki karakteristik tertentu yang dapat diidentifikasi.

Kata itu berarti:

Mekanisme untuk interaksi komponen yang menggunakan pengenalan pola atau kognisi buatan sebagai pengganti pemanggilan fungsi atau pesan.

Idenya sebagian besar berasal dari biologi. Mata Anda berinteraksi dengan dunia, bukan melalui fungsi seperti See(byte[] coneData), tetapi melalui permukaan yang disebut retina. Itu bukan perbedaan sepele; komputer harus memindai semua byte dalam coneDatasatu per satu, sedangkan otak Anda memproses semua input secara bersamaan.

masukkan deskripsi gambar di sini

Lanier mengklaim bahwa antarmuka yang terakhir lebih toleran terhadap kesalahan, karena itu (satu bit yang tergelincir coneDatadapat merusak seluruh sistem). Dia mengklaim bahwa itu memungkinkan pencocokan pola dan sejumlah kemampuan lain yang biasanya sulit untuk komputer, yang memang demikian.

Mekanisme "fenotropis" klasik dalam sistem komputer adalah Jaringan Syaraf Tiruan (JST). Dibutuhkan "permukaan" sebagai input, bukan Antarmuka yang ditentukan. Ada teknik-teknik lain untuk mencapai beberapa ukuran pengenalan pola, tetapi jaringan saraf adalah yang paling selaras dengan biologi. Membuat ANN itu mudah; sulit untuk melakukan tugas yang ingin Anda lakukan dengan andal itu sulit, karena sejumlah alasan:

  1. Seperti apa tampilan dan permukaan "tampilan"? Apakah mereka stabil, atau apakah mereka bervariasi dalam ukuran dari waktu ke waktu?
  2. Bagaimana Anda mendapatkan struktur jaringan yang benar?
  3. Bagaimana Anda melatih jaringan?
  4. Bagaimana Anda mendapatkan karakteristik kinerja yang memadai?

Jika Anda ingin berpisah dengan biologi, Anda dapat membuang model biologis (yang mencoba mensimulasikan operasi neuron biologis yang sebenarnya) dan membangun jaringan yang lebih erat bersekutu dengan "neuron" sebenarnya dari sistem komputer digital (logika). gerbang). Jaringan-jaringan ini disebut Adaptive Logic Networks (ALN). Cara kerjanya adalah dengan membuat serangkaian fungsi linier yang memperkirakan kurva. Prosesnya terlihat seperti ini:

masukkan deskripsi gambar di sini

... di mana sumbu X mewakili beberapa input ke ALN, dan sumbu Y mewakili beberapa output. Sekarang bayangkan jumlah fungsi linier meluas sesuai kebutuhan untuk meningkatkan akurasi, dan bayangkan proses yang terjadi di dimensi yang sewenang-wenang, diimplementasikan seluruhnya dengan gerbang logika AND dan OR, dan Anda memiliki gambaran seperti apa bentuk ALN.

ALNs memiliki karakteristik tertentu yang sangat menarik:

  1. Mereka cukup mudah dilatih,
  2. Mereka sangat dapat diprediksi, yaitu sedikit perubahan dalam input tidak menghasilkan perubahan liar dalam output,
  3. Mereka cepat kilat, karena mereka dibangun dalam bentuk pohon logika, dan beroperasi seperti pencarian biner.
  4. Arsitektur internal mereka berkembang secara alami sebagai hasil dari rangkaian pelatihan

Jadi program fenotropik akan terlihat seperti ini; itu akan memiliki "permukaan" untuk input, arsitektur dan perilaku yang dapat diprediksi, dan itu akan toleran terhadap input berisik.

Bacaan Lebih Lanjut
Pengantar Jaringan Adaptif Logika Dengan Aplikasi untuk Mengaudit Penilaian Risiko
"Berorientasi Objek" vs "Berorientasi Pesan," oleh Alan Kay


1
Koreksi saya jika saya salah, tetapi input "permukaan" terdengar seperti kumpulan - komponen independen (atau sebagian besar independen). Dalam contoh mata, itu mungkin terlihat seperti ini See(List<Cone> cones)(di mana masing Cone- masing independen satu sama lain), ya?
FrustratedWithFormsDesigner

1
@ Frustasi Anda jelas dapat mensimulasikan permukaan dengan array byte, tetapi kembali ke definisi Lanier, yang menggantikan passing pesan dan pemanggilan fungsi dengan pengenalan kognisi dan pola. Itu terkait dengan masalah skalabilitas yang dijelaskan di sini . Toleransi kesalahan juga merupakan bagian dari persamaan. Pikirkan "Antarmuka yang lebih cerdas."
Robert Harvey

3
Re: "lebih toleran terhadap kesalahan". Pernahkah Lanier melihat ilusi optik? Pernahkah ia melihat ke dalam psikologi otak. Otak akan SELALU berusaha memahami apa yang dikatakan oleh inputnya, TIDAK PEDULI BAGAIMANA KESALAHAN MEREKA. Cara otak bekerja sangat salah. Jadi, selama tidak masalah jika kerusakan program cukup sering, seperti manusia biasa, maka saya kira model yang dimaksud baik-baik saja. Namun, sebagian besar waktu orang mengharapkan komputer menjadi benar. Akan sulit untuk menjual mobil yang digerakkan komputer yang menghindari kecelakaan hampir sepanjang waktu.
Dunk

2
@Dunk: ... tetapi masih legal untuk membuat dan menjual mobil untuk pengemudi manusia yang berhasil menghindari kecelakaan hampir sepanjang waktu.
Doc Brown

2
@Dunk intinya bukanlah adanya kesalahan - kalau tidak kita akan pergi rute matematika klasik untuk membuktikan segalanya. Intinya adalah 1: ruang lingkup dampak kegagalan (alam semesta tidak runtuh jika saya salah mengira seekor kelinci untuk gorila - pada kenyataannya, saya masih berfungsi sebagai manusia setelah itu, begitu juga otak saya, dan juga putranya), 2 : entitas fisik / biologis ruang harus pulih, memberikan umpan balik dan menyelidiki alternatif yang "membuat semuanya berjalan - bahkan dengan cara yang tidak optimal"; dan 3: gagasan bahwa karakteristik-karakteristik itu memaksa kita untuk menginginkannya dalam sistem buatan kita
Thiago Silva

1

Saya pikir kita berada di awal dari salah satu langkah yang diperlukan untuk sampai ke sana dan itu mengumpulkan banyak data dalam format yang dapat dianalisis. Internet, pencarian Google, Fitbit (Setiap langkah yang Anda ambil, setiap langkah yang Anda lakukan, saya akan mengawasi Anda.), FourSquare, lokasi geo ponsel pintar, posting Facebook, dan data pertanyaan SO semuanya dikumpulkan. Kita tidak berada di dekat jumlah data sensorik yang dikompilasi rata-rata manusia sepanjang hidup, tapi kita semakin dekat.

Mulai kategorikan jutaan gambar burung dan dapatkan umpan balik dari orang-orang yang mengatakan kepada Anda bahwa itu bukan burung dan Anda dapat mulai membuat algoritma. Dari sana kesan yang lebih kabur (saya akan menyebutnya model, tapi itu terlalu tepat untuk apa yang kami coba kode.) Dapat dibuat.

class Birdish

Bagaimana anjing peliharaan tahu banyak tentang pemiliknya? Karena itu sangat memperhatikannya. Anjing telah mendengarkan mobil yang masuk ke jalan masuk dan menghubungkannya dengan pemilik yang membuka pintu depan yang terlihat seperti anjing dapat mengenali mobil dari suaranya. Kami bisa melakukan ini juga, tetapi kami tidak melihat alasan untuk melakukan ini. Dan itulah yang salah dengan perangkat lunak saat ini, tidak memperhatikan apa yang dilakukan pengguna. Itu hanya menunggu pengguna untuk melakukan apa yang diharapkan pengguna.

Sesuatu yang sederhana seperti menyetel jam alarm dapat dilakukan dengan sedikit pengamatan / analisis kebiasaan saya saat ini. Kami menyerah pada pengaturan pengatur waktu VCR sebelum teknologi digantikan oleh digital. Dan apakah itu akan terjadi secepat kita bisa menghubungkan TV Guide dengan VCR? Saya telah menonton acara TV yang sama 4 minggu berturut-turut pada saat yang sama, tetapi yang ke 5 saya bahkan tidak menyalakan TV. Jelas saya ingin itu direkam. Tidak bisakah Anda memberi tahu bahwa saya tinggal lembur di tempat kerja untuk menulis posting ini dan dengan perjalanan pulang pergi yang khas tidak akan sampai tepat waktu? Anda sudah mendapatkan datanya, lakukan perhitungannya.

Kumpulkan lebih banyak data dan kemudian Anda bisa menemukan cara yang lebih baik untuk menganalisis, mengenali, dan menyamarkannya. Kita melampaui apa yang bisa menjadi input hanya dari keyboard dengan kamera ponsel kita dan segera kamera kaca mata. Ini hanya permulaan.


1

Berikut ini adalah set slide untuk mendefinisikan Bahasa Pemrograman Probabilistik di Scala .

Ini adalah contoh implementasi pertama yang layak untuk beberapa komponen inti ke sistem yang diusulkan Jaron Lanier.


Ini terlihat sangat bagus. Mungkin saya akan mencoba merancang perpustakaan untuk Java yang melakukan hal yang sama.
adv

@ adv, bagaimana kami menemukannya, jika Anda melakukannya?
Aleksandria Baru

1
Saya akan memposting tautan ke repo github ketika saya sempat membuatnya.
adv

-1

Sebuah pemikiran yang saya miliki baru-baru ini:

Jika Anda menggunakan ide tingkat tinggi seperti Haskell's Maybe Monad untuk membungkus panggilan prosedur jarak jauh ke sistem lain. Anda mengirim permintaan ke server. Tapi tidak ada yang kembali (server rusak). Atau Janji kembali (server sedang sibuk) dan program Anda terus bekerja dengan nilai Tidak Ada atau yang Dijanjikan itu. Itu seperti toleransi kesalahan yang dicari Lanier.

Mungkin ada cara untuk merangkum peristiwa-peristiwa lain. Misalnya panggilan jarak jauh yang kembali dengan perkiraan yang semakin disempurnakan dari waktu ke waktu oleh semacam negosiasi latar belakang. yaitu. apa yang muncul kembali adalah sesuatu seperti Janji tetapi tidak hanya "terus bertahan dan bekerja dengan ini dan nilai yang tepat akan segera muncul" tetapi "terus bertahan dan bekerja dengan ini dan perkiraan yang lebih baik akan segera muncul". (Dan lagi, dan lagi). Ini akan dapat menyembunyikan banyak kesalahan dari programmer, seperti halnya protokol jaringan menyembunyikan banyak kegagalan jaringan level rendah dari programmer.


bagaimana ini menjawab pertanyaan yang diajukan?
nyamuk

Jika saya mengerti dengan benar, Phenotropic Programming adalah cara untuk memprogram sistem yang besar (seringkali multi-komputer), yang tangguh. Masalahnya adalah, semua metafora biologis membuatnya kabur dan sulit diterjemahkan ke dalam istilah pemrograman praktis. Di sini saya menyarankan bahwa konstruksi pemrograman tertentu yang tidak kabur (mis. Monad, Janji, dll.) Mungkin merupakan cara untuk membuat beberapa gagasan konkret Lanier dan praktis dapat diprogram.)
interstar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.