Apakah bisa dibayangkan mengajarkan mesin bagaimana memprogram dirinya sendiri ke spesifikasi yang ditentukan? [Tutup]

12

Seorang teman saya tanpa pengetahuan pemrograman bertanya kepada saya pertanyaan ini dan saya menemukan itu menarik.

Saya pikir itu tidak mungkin karena akan membutuhkan kecerdasan buatan yang benar-benar canggih yang mampu menganalisis teks masalah, memikirkan solusi dan memprogramnya. Hanya memikirkan mesin yang dapat memprogram kalkulator sederhana tampaknya cukup canggih bagi saya.

Tapi mungkin saya salah dan saya ingin tahu apa pendapat Anda tentang hal itu dan jika Anda mengetahui ada artikel / penelitian tentang subjek, atau jika sudah ada atau jika ada kemungkinan memilih spesifikasi, dan mendapatkan mesin untuk memprogram sendiri ke "spek ini?"

florian
sumber
4
Tentukan pemrograman. Saya bisa membangun program yang akan membuat program lain. Tetapi apakah itu benar-benar akan dipelajari?
Pieter B
Ya pertanyaannya bukan tentang pembuatan kode tetapi tentang pemrograman nyata seperti yang kita lakukan sebagai pengembang.
florian
Tergantung pada apa programnya. Program dengan banyak logika bisnis prosedural akan jauh lebih sulit (dan jauh lebih tidak layak) daripada sesuatu yang fungsional dan murni berbasis matematika. (Itu intuisi, sih, tapi aku tidak punya cara untuk mendukungnya, sayangnya.)
lunchmeat317
@ florian: Kita sendiri adalah mesin yang telah belajar bagaimana melakukan pemrograman (dengan asumsi alien / dewa menciptakan kita :-)). Tentu saja kami belum memperoleh kemampuan untuk memprogram urutan DNA dll, jadi jika Anda membuat mesin yang harus belajar bagaimana memprogram pada akhirnya, Anda harus memprogramnya untuk "berevolusi" dan akhirnya belajar bagaimana itu sendiri diprogram.
Nav
2
@maple_shaft: Saya membuat pertanyaan lebih objektif dengan menyelaraskannya dengan jawaban yang ada, dan bertanya-tanya apakah pertanyaan itu dapat dibuka kembali dalam bentuknya saat ini.
Tom Au

Jawaban:

15

Joel benar-benar menjawab yang ini beberapa tahun yang lalu . Arti sebenarnya dari "mengajarkan mesin bagaimana memprogram dengan sendirinya" adalah "mengajar mesin bagaimana mengambil spec dan membuat program yang sesuai dengan spec itu." Dan dengan itu dalam pikiran:

Masalahnya, di sini, sangat mendasar. Untuk membuktikan secara mekanis bahwa suatu program sesuai dengan beberapa spesifikasi, spesifikasi itu sendiri harus sangat rinci. Faktanya spec harus mendefinisikan segala sesuatu tentang program, jika tidak, tidak ada yang dapat dibuktikan secara otomatis dan mekanis. Sekarang, jika spec menentukan segalanya tentang bagaimana program akan berperilaku, maka, lihatlah, itu berisi semua informasi yang diperlukan untuk menghasilkan program! Dan sekarang Geeks tertentu pergi ke tempat yang sangat gelap di mana mereka mulai berpikir tentang secara otomatis mengkompilasi spesifikasi ke dalam program, dan mereka mulai berpikir bahwa mereka baru saja menemukan cara untuk memprogram komputer tanpa pemrograman.

Sekarang, ini adalah rekayasa perangkat lunak yang setara dengan mesin gerakan abadi. Ini adalah salah satu hal yang terus dilakukan oleh crackpots, tidak peduli seberapa banyak Anda memberi tahu mereka itu tidak akan pernah berhasil. Jika spec mendefinisikan dengan tepat apa yang akan dilakukan suatu program, dengan cukup detail sehingga dapat digunakan untuk menghasilkan program itu sendiri, ini hanya menimbulkan pertanyaan: bagaimana Anda menulis spec? Spesifikasi yang lengkap seperti itu sama sulitnya untuk ditulis dengan program komputer yang mendasarinya, karena sebanyak mungkin detail harus dijawab oleh penulis spec sebagai programmer. Untuk menggunakan terminologi dari teori informasi: spek itu membutuhkan bit entropi Shannon seperti halnya program komputer itu sendiri. Setiap bit entropi adalah keputusan yang diambil oleh penulis spec atau programmer.

Jadi, intinya adalah jika benar-benar ada cara mekanis untuk membuktikan hal-hal tentang kebenaran suatu program, yang dapat Anda buktikan adalah apakah program itu identik dengan beberapa program lain yang harus mengandung jumlah entropi yang sama. sebagai program pertama, jika tidak beberapa perilaku akan tidak terdefinisi, dan dengan demikian tidak terbukti. Jadi sekarang penulisan spec sama sulitnya dengan menulis program, dan semua yang telah Anda lakukan adalah memindahkan satu masalah dari sini ke sana, dan tidak menyelesaikan apa pun.

Satu-satunya cara untuk menyiasatinya adalah dengan menghasilkan komputer sapient yang sebenarnya dengan cukup intuisi untuk melakukan semua pengisian-kosong yang Anda dan saya lakukan secara otomatis, setiap saat, ketika memproduksi perangkat lunak ... dalam hal ini Anda akan berakhir dengan komputer yang memprogram dirinya sendiri serta pengembang manusia. ;)

Mason Wheeler
sumber
7
Saya dapat menulis spesifikasi lengkap untuk algoritme pengurutan jauh lebih mudah daripada yang saya dapat dengan menyortir, menyortir cepat, atau menyortir. Namun Anda mengklaim mudah untuk mengubah yang pertama menjadi yang kedua.
raptortech97
Joel ... Sudah cukup! ;-) Saya mengerti bahwa untuk melakukan itu, kita perlu spek dalam bahasa yang diberikan. Tetapi saya tidak sepenuhnya yakin tentang argumen bahwa spek harus sangat rinci. Kami, sebagai pengembang, mampu mengembangkan program tanpa memiliki spesifikasi yang sangat rinci. Tidak bisakah kita mengembangkan kecerdasan buatan yang mampu mengambil keputusan "acak" tentang desain suatu program?
florian
6
@ florian Jadi Anda ingin program melakukan tugas yang ditafsirkan oleh pemrogram manusia? Kemudian itu menjadi masalah kuno "AI kuat", yang telah diteliti oleh banyak orang cerdas selama beberapa dekade tanpa ada kemajuan yang ditunjukkan. Ada perdebatan filosofis yang memanas apakah AI bahkan mungkin secara metafisik, jauh kurang praktis di masa depan, dan dalam pengalaman saya, tak seorang pun kecuali penjual ular yang memprediksi AI kuat dalam waktu dekat.
Saya tidak benar-benar menginginkannya. Saya bertanya pada diri sendiri (seperti teman saya bertanya kepada saya) apakah itu mungkin. Saya sangat memahami bahwa AI tidak benar-benar ada dan hanya turun ke beberapa pilihan terprogram yang "acak".
florian
2
@ raptortech97: Tidak, Anda tidak bisa. Tidak 'lengkap' dalam arti pertanyaan ini. Agar spek Anda begitu lengkap sehingga mampu ditransformasikan secara mekanis menjadi program yang dapat dieksekusi, pada dasarnya harus ditulis dalam bahasa pemrograman. Jika tidak, spec Anda akan memiliki perilaku yang tidak terdefinisi, atau Anda hanya menulis kode dalam dokumen MSWord.
whatsisname
4

Tentu, kita melakukan ini semua dengan waktu (untuk subset sangat terbatas masalah). Cukup sepele untuk membayangkan mengambil satu atau dua langkah lagi dan mengikat sesuatu seperti Siri ke dalam input pembuat kode ini (atau sesuatu seperti Wolfram Alpha) yang pada gilirannya menulis kode dan menyelesaikan masalah Anda. Saya berharap sesuatu sudah ada di suatu tempat untuk melakukan hal-hal yang paling mendasar.

Masalah dengan menulis perangkat lunak yang kompleks untuk bisnis tidak membuat program untuk menulis kode - itu menulis program untuk mendapatkan persyaratan.

Telastyn
sumber
Terima kasih atas tautannya. Meskipun Yacc & Xamarin adalah pembuat kode yang murni deterministik. Mereka tidak membuat barang dari awal.
florian
@ florian - tidak ada yang membuat barang dari awal. Selalu ada beberapa input, mereka hanya lebih pilih-pilih daripada kebanyakan.
Telastyn
1
@ Telastyn: membandingkan input / output untuk generator parser dengan input / output untuk pikiran manusia sebagai "lebih pilih-pilih" itu tidak jujur.
whatsisname
2

Saya pikir jawaban @Mason Wheeler memegang ide kunci. Bunyinya seperti ini:

Entropi Shannon dari Tic-tac-toe sangat kecil. Jadi kami menyebut tic-tac-toe permainan "diselesaikan" atau "deterministik". Ini tidak terlalu menarik setelah Anda lulus sekolah dasar. Checker memiliki entropi yang lebih tinggi, jika Anda mempertimbangkan entropi dari semua game yang mungkin Anda mainkan. Tetapi catur juga merupakan permainan yang "diselesaikan" atau "deterministik". Jika Anda bergerak lebih dulu, Anda seharusnya hanya menang atau seri. Catur memiliki entropi yang jauh lebih tinggi, tetapi tidak ada manusia yang mengalahkan pemain komputer terbaik sejak tahun 2006. Jadi, komputer telah menguasai catur dengan cara yang tidak bisa dilakukan manusia. Big Blue menganalisis wikipedia, dan kemudian memainkan Jeopardy melawan pemain manusia, dan mengalahkan mereka dengan baik.

Apa berikutnya? Apa entropi sebuah novel, atau soneta Shakepeare?

Demikian pula, di ruang pemrograman, apa yang mungkin akan muncul adalah peningkatan kompetensi. Prolog membahas sekumpulan masalah komputer tempat Anda menyiapkan masalah dan komputer menyelesaikan jawabannya. Seseorang mungkin akan menemukan kelas-kelas masalah pemrograman sederhana yang dapat dipenuhi oleh sebuah komputer, dll. Kemudian seseorang akan membangunnya untuk menghasilkan "kustomisasi permintaan" dalam beberapa ruang masalah. Dan begitulah seterusnya.

Saya pikir pertanyaannya berubah menjadi, berapa lama waktu yang dibutuhkan AI untuk menguasai jumlah entropi tertentu ... dan berapa banyak sumber daya komputasi yang dibutuhkan? Saya pikir tidak dapat dibayangkan bahwa komputer tidak dapat menguasai entropi yang dikuasai oleh otak manusia terbaik - tidak ada keajaiban tentang otak - tetapi pertanyaannya adalah, berapa banyak inti yang Anda butuhkan, dan berapa abad yang dibutuhkan untuk sampai di sana?

Tapi ... apakah komputer bisa melakukan pekerjaan saya ? Tak terbayangkan!

rampok
sumber
Saya pikir itu adil untuk mengatakan bahwa Jeopardy adalah sedikit kasus khusus: itu bermuara pada mengingat dan mengaitkan fakta. Ambil bahkan spesialis terbaik, dan akan ada nugget bahkan pengetahuan publik yang mereka tidak sadari, atau tidak dapat mengingat di bawah tekanan. Di sisi lain, untuk komputer yang mampu menganalisis ensiklopedia (seperti Wikipedia, Encyclopedia Britannica, atau lainnya), tidak ada fakta yang menyatakan bahwa ensiklopedia lebih (atau kurang) eksotis daripada yang lain.
CVn
1

Ini sulit dijawab karena, seperti halnya dengan kecerdasan buatan, setelah kita menyelesaikan ini, itu karena kita akan menulis sebuah program yang melakukannya. Dan kritikus akan berkata, "Yah, mesin ini tidak benar-benar pemrograman itu sendiri! Itu hanya mengikuti persis program yang Anda berikan itu!"

Baiklah. Apa pun yang akan kita capai dengan komputer, kita akan lakukan dengan memberikannya beberapa program dan akan menjalankannya. Jika itu argumen yang menentang, maka kita tidak bisa mencapai apa pun. Namun, pada titik tertentu, orang-orang berpikir komputer bermain catur akan jelas-jelas cerdas. Sekarang mereka bisa, dan kami tahu persis bagaimana, dan kami tidak berpikir itu cerdas. Kapal selam masih belum bisa berenang.

Jadi - perhatikan beberapa contoh.

Sejak puluhan tahun, kami memiliki generator parser . Anda memberi mereka deskripsi bahasa, itu diproses dan hasilnya adalah kode untuk parser untuk bahasa itu. Kita tahu persis bagaimana itu dilakukan, tetapi bukankah itu pemrograman komputer itu sendiri?

Editor kedua yang memberi tahu Anda bahwa Anda membuat kesalahan (kesalahan sintaks, variabel yang tidak ada, dll.). Itu tidak memprogram apa pun itu sendiri, tetapi dapat memberitahu Anda bahwa Anda melakukan sesuatu yang salah. Ini sangat banyak di permukaan saja.

Bahasa tempat Anda cukup mengeklik dan menarik kontrol UI, dan kode yang benar-benar membuatnya berfungsi dihasilkan secara otomatis.

Kompiler JIT. Perangkat lunak yang dapat mengenali hotspot dalam perangkat lunak yang saat ini berjalan dan menggantinya dengan kode terkompilasi yang sangat dioptimalkan, secara optimal mengoptimalkan dirinya saat dijalankan. Saya pikir ini adalah contoh dari apa yang tampaknya menjadi pemrograman mesin itu sendiri, sampai Anda tahu persis bagaimana hal itu terjadi, dan kemudian ternyata hanya melakukan apa yang dikatakan oleh programmer, seperti biasa.

Bermain game umum. Ini adalah bidang penelitian yang menarik, di mana para peneliti menulis program yang dapat membaca deskripsi aturan permainan, yang kemudian dimainkan oleh program-program tersebut. Jadi alih-alih program tic-tac-toe atau program catur, ini adalah program yang membaca aturan tic-tac-toe atau catur atau permainan baru yang dibuat di tempat, dan kemudian dapat memainkannya. Program ini tidak memprogram dirinya sendiri, tetapi bermain catur tanpa aturan catur yang telah dikodekan. Ada saat ketika ini jelas akan dianggap komputer yang mengajarkan sesuatu.

Kami telah mengambil banyak langkah kecil ke arah umum.

Tapi saya tidak bisa memikirkan program apa pun yang menulis ulang sendiri berdasarkan hasil dari berjalan sebelumnya, atau yang dapat mengenali rutinitas usang atau tidak efisien dalam kode mereka sendiri. Saya pikir suatu hari nanti kita akan memilikinya, dan kita akan menganggapnya tidak ada yang istimewa sama sekali, karena itu hanya beberapa fitur dari kompiler terbaru ...

RemcoGerlich
sumber
0

Tidak saat ini dan tidak di masa mendatang karena Anda membutuhkan semua kompleksitas otak manusia yang luar biasa untuk membuat program. Dan meskipun begitu, otak-otak itu harus sangat terlatih agar dapat melakukannya dengan benar, dan bahkan pada saat itu tidak semua dari mereka mampu melakukan tugas itu meskipun orang dapat berpendapat bahwa dengan waktu yang cukup Anda dapat melatih siapa saja untuk memprogram.

Saya mengambilnya dari cara Anda mengutarakan pertanyaan Anda sehingga Anda tidak berbicara tentang tugas sederhana yang ditiru.

Anda meminta artikel dan artikel Science Blog ini tentang Mengembangkan Kecerdasan menjawab pertanyaan itu dalam banyak cara.

Ian Macintosh
sumber