Bir makineye kendini tanımlanmış bir spesifikasyona nasıl programlayacağını öğretmek akla yatkın mı? [kapalı]


12

Programlama bilgisi olmayan bir arkadaşım bana bu soruyu sordu ve ilginç buldum.

Bence bu mümkün değil çünkü bir sorunun metnini analiz edebilen, bir çözümü düşünebilen ve programlayabilen gerçekten gelişmiş bir yapay zeka gerektirecekti. Sadece basit bir hesap makinesi programlayabilen bir makineyi düşünmek benim için oldukça gelişmiş görünüyor.

Ama belki yanılıyorum ve bu konuda ne düşündüğünüzü ve konuyla ilgili herhangi bir makale / araştırmanın farkındaysanız veya zaten varsa veya bir spesifikasyon seçme ve elde etme olasılığının olup olmadığını bilmek istiyorum. makine bu "spec?"


4
Programlamayı tanımlar. Başka programlar yapacak bir program oluşturabilirim. Ama gerçekten öğrenecek mi?
Pieter B

Evet soru kod üretimi değil, geliştiriciler olarak yaptığımız gibi gerçek programlama ile ilgili.
florian

Programın ne olduğuna bağlıdır. Prosedürel iş mantığına sahip bir program, işlevsel ve tamamen matematik tabanlı bir şeyden çok daha zor (ve daha az uygulanabilir) olacaktır. (Bu zaten bir sezgi, ama maalesef bunu destekleyecek bir yolum yok.)
lunchmeat317

@florian: Biz kendimiz programlama yapmayı öğrenen makineleriz (uzaylıların / tanrının bizi yarattığını varsayalım :-)). Tabii ki henüz DNA dizilerini programlama yeteneğini edinmedik, bu yüzden sonunda nasıl programlanacağını öğrenmek zorunda olan bir makine oluşturursanız, bunu "evrimleşmek" ve nihayetinde nasıl programlandığını öğrenmek için programlamanız gerekir.
Nav

2
@maple_shaft: Soruyu mevcut cevaplarla aynı çizgiye getirerek daha objektif hale getirdim ve mevcut haliyle yeniden açılabileceğini merak ediyordum.
Tom Au

Yanıtlar:


15

Joel bunu birkaç yıl önce yanıtladı . "Bir makineye kendi kendine nasıl programlanacağını öğretin" asıl anlamı "bir makineye nasıl spesifikasyon alacağını öğretmek ve o spesifikasyona karşılık gelen bir program oluşturmaktır." Ve bunu göz önünde bulundurarak:

Burada sorun çok temel. Bir programın bazı spesifikasyonlara karşılık geldiğini mekanik olarak kanıtlamak için spesifikasyonun kendisinin son derece ayrıntılı olması gerekir. Aslında, spesifikasyon programla ilgili her şeyi tanımlamak zorundadır, aksi takdirde hiçbir şey otomatik ve mekanik olarak kanıtlanamaz. Şimdi, eğer spec programın nasıl davranacağına dair herşeyi tanımlıyorsa, o zaman, bu programı oluşturmak için gerekli tüm bilgileri içerir! Ve şimdi bazı geekler, özellikleri programlara otomatik olarak derlemeyi düşünmeye başladığı çok karanlık bir yere gidiyorlar ve bilgisayarları programlamadan programlamanın bir yolunu icat ettiklerini düşünmeye başlıyorlar.

Şimdi, bu sürekli hareket makinesinin yazılım mühendisliği eşdeğeri. Çatlakların ne kadar işe yarayacağını söyleseniz de, yapmaya devam eden şeylerden biri. Spesifikasyon, bir programın ne yapacağını tam olarak tanımlarsa, programın kendisini oluşturmak için kullanılabilecek yeterli ayrıntıya sahipse, bu sadece şu soruyu akla getirir: spesifikasyonu nasıl yazıyorsunuz? Böyle bir tam spesifikasyonun temelini oluşturan bilgisayar programı kadar yazmak zordur, çünkü birçok detayın programcı olarak spec yazarı tarafından cevaplanması gerekir. Bilgi teorisinden terminolojiyi kullanmak için: spec, bilgisayar programının kendisininki kadar Shannon entropisinin de bitine ihtiyaç duyar. Her entropi biti spec-yazarı veya programcı tarafından alınan bir karardır.

Sonuç olarak, bir programın doğruluğu hakkında bir şeyleri kanıtlamanın mekanik bir yolu olsaydı, kanıtlayabileceğiniz tek şey, bu programın aynı miktarda entropi içermesi gereken başka bir programla aynı olup olmadığıdır. ilk program olarak, aksi takdirde bazı davranışlar tanımlanmayacak ve bu nedenle kanıtlanmayacaktır. Şimdi, teknik özelliklerin yazılması bir program yazmak kadar zor ve yaptığınız tek şey bir problemi oradan oraya taşımak ve hiçbir şeyi başaramamak.

Bunu aşmanın tek yolu, yazılım üretirken sizin ve benim otomatik olarak yaptığımız tüm boşlukları doldurmak için yeterli sezgiye sahip gerçek bir sapient bilgisayar üretmek olacaktır ... bu durumda bir insan geliştiricinin yanı sıra kendisini programlayan bir bilgisayarla sonuçlanacaktı. ;)


7
Ekleme sıralama, hızlı sıralama veya kova sıralama ile gelebileceğimden çok daha kolay bir sıralama algoritması için tam bir özellik yazabilirim. Ancak birincisini ikinciye dönüştürmenin kolay olduğunu iddia ediyorsunuz.
raptortech97

Joel ... Yeter dedim! ;-) Bunu yapabilmek için belirli bir dilde bir spesifıkasyona ihtiyacımız olacağını anlıyorum. Ancak, spesifikasyonun çok ayrıntılı olması gerektiği iddiası konusunda tam olarak ikna olmadım. Geliştiriciler olarak, çok detaylı bir spesifikasyona sahip olmadan bir program geliştirebiliyoruz. Bir programın tasarımı hakkında "rastgele" bir karar alabilecek yapay bir zeka geliştiremez miyiz?
florian

6
@florian Yani programın insan programcıların gerçekleştirdiği özel yorumlama görevini yapmasını mı istiyorsunuz? Daha sonra, çok sayıda zeki insanın onlarca yıldır gösterecek hiçbir gelişme göstermeden araştırdığı, "güçlü AI" nin eski problemi haline gelir. Yapay zekanın metafiziksel olarak mümkün olup olmadığı, uzak gelecekte çok daha az pratik olarak mümkün olup olmadığı konusunda ateşli bir felsefi tartışma var ve benim tecrübelerime göre, snakeoil satıcıları dışında kimse yakın gelecekte güçlü AI tahmin etmiyor.

Gerçekten istemiyorum kendime (arkadaşım bana sorduğu gibi) mümkün olup olmadığını soruyordum. Yapay zekanın gerçekten var olmadığını ve sadece "rastgele" programlanmış seçeneklere geldiğini çok iyi anlıyorum.
florian

2
@ raptortech97: Hayır, yapamazsın. Bu sorunun anlamında 'tam' değil. Spesifikasyonunuzun mekanik olarak yürütülebilir bir programa dönüştürülebilecek kadar eksiksiz olması için, temel olarak bir programlama dilinde yazılması gerekir. Aksi takdirde, spesifikasyonunuz tanımlanmamış davranışa sahip olacak veya sadece bir MSWord belgesine kod yazıyorsunuz.
whatsisname

4

Tabii, biz bunu bu her zaman (sorunlarının son derece sınırlı alt grupları için). Bir iki adım daha atmayı ve Siri gibi bir şeyi bu kod üreticilerinin (veya Wolfram Alpha gibi bir şeyin) girişine bağlamayı hayal etmek oldukça önemlidir , bu da kod yazıp sorununuzu çözer. Bir şeyin zaten en temel şeyleri yapmak için bir yerde var olmasını beklerdim .

İşletmeler için karmaşık yazılımlar yazmayla ilgili sorun kodu yazmak için bir program yapmıyor - gereksinimleri almak için bir program yazıyor.


Bağlantılar için teşekkürler. Yacc ve Xamarin tamamen deterministik kod üreteçleri olmasına rağmen. Sıfırdan bir şeyler yaratmazlar.
florian

@florian - hiçbir şey sıfırdan bir şey yaratmaz. Her zaman bir girdi vardır, çoğudan daha seçici olurlar.
Telastyn

1
@Telastyn: bir ayrıştırıcı üreteci için giriş / çıkış ile insan aklının giriş / çıkışını "daha seçici" olarak karşılaştırmak en iyi ihtimalle ayrık değildir.
whatsisname

2

Sanırım @Manow Wheeler'ın cevabı kilit bir fikir. Bu böyle devam ediyor:

Tic-tac-toe Shannon entropisi gerçekten küçük. Bu yüzden tic-tac-toe'ye "çözülmüş" veya "deterministik" bir oyun diyoruz. İlkokuldan sonra gerçekten ilginç değil. Oynayabileceğiniz tüm olası oyunların entropisini düşünüyorsanız, dama daha yüksek bir entropiye sahiptir. Ancak dama da "çözülmüş" veya "deterministik" bir oyundur. Önce taşınırsanız, sadece kazanmanız veya berabere kalmanız gerekir. Satranç çok, çok daha yüksek bir entropiye sahiptir, ancak hiçbir insan 2006'dan bu yana en iyi bilgisayar oyuncularını yenmemiştir. Yani, bir bakıma bilgisayarlar satrançta insanların yapamayacağı şekilde ustalaşmıştır. Big Blue wikipedia'yı analiz etti ve sonra insan oyunculara karşı Jeopardy oynadı ve onları sağlıklı bir şekilde dövdü.

Sıradaki ne? Bir romanın veya Shakepeare'in sonetlerinin entropisi nedir?

Benzer şekilde, programlama alanında muhtemelen ortaya çıkacak olan, artan bir yetkinlik setidir. Prolog, sorunu ayarladığınız ve bilgisayarın yanıtı çözdüğü bir dizi bilgisayar sorununu ele aldı. Birisi muhtemelen bir bilgisayarın tatmin edebileceği, basit programlama problemleri sınıfları, vb bulacaksınız. Sonra birisi bazı sorun alanı içinde "istek üzerine özelleştirme" üretmek için üzerine inşa edecek. Ve böylece gider.

Bence soru ortaya çıkıyor, belirli bir miktarda entropi konusunda ustalaşmak bir yapay zeka ne kadar sürüyor ... ve kaç bilgi işlem kaynağına ihtiyaç var? Bence bir bilgisayarın en iyi insan beyninin hakim olduğu entropiye hakim olamayacağı düşünülemez - beyinler hakkında sihir yoktur - ama soru şu, kaç tane çekirdeğe ihtiyacınız var ve oraya kaç yüzyıl var?

Ama ... bir bilgisayar işimi yapabilecek mi? Düşünülemez!


Bence Jeopardy'nin özel bir durum olduğunu söylemek doğru: gerçeği hatırlamak ve ilişkilendirmek için kaynar. En iyi uzmanları bile alın, farkında olmadıkları veya baskı altında hatırlayamadıkları kamusal bilginin bile külçeleri olacaktır. Öte yandan, bir ansiklopedi analiz edebilen bir bilgisayara (Wikipedia, Encyclopedia Britannica veya başka herhangi bir gibi), ansiklopedinin diğerlerinden daha fazla (veya daha az) egzotik olduğu söylenemez.
CVn

1

Bunu cevaplamak zordur, çünkü tıpkı yapay zeka gibi, bunu başardığımızda bunu yapacak bir program yazacağımız için olacaktır. Ve eleştirmenler, "peki, bu makine gerçekten kendini programlamıyor! Verdiğiniz programı tam olarak takip ediyor!"

İyi evet. Bilgisayarlarla ne başaracak olursak olalım, ona bir program vererek yapacağız ve onu çalıştıracağız. Eğer bu bir argümansa, hiçbir şey başaramayız. Ve yine de, bir noktada, insanlar bilgisayarla oynanan bir satrancın açıkça akıllı olacağını düşündüler. Şimdi yapabilirler ve nasıl olduğunu tam olarak biliyoruz ve bunun akıllı olduğunu düşünmüyoruz. Denizaltılar hala yüzemiyor.

Yani - birkaç örnek düşünün.

On yıllardan beri ayrıştırıcı jeneratörlerimiz var . Onlara bir dil açıklaması verirsiniz, işlenir ve sonuç o dil için bir ayrıştırıcının kodudur. Nasıl yapıldığını tam olarak biliyoruz, ancak bu bir bilgisayarın kendisini programlaması değil mi?

Sana bir hata yaptığınızı söyleyen ikinci editörler (sözdizimi hatası, var olmayan değişken vb.). Hiçbir şeyi programlamaz, ancak yanlış bir şey yaptığınızı söyleyebilir. Sadece yüzeyde çok fazla.

Kullanıcı Arabirimi denetimlerini tıklayıp sürükleyebileceğiniz ve onları gerçekten çalıştıracak kod otomatik olarak oluşturulur.

JIT derleyicileri. Şu anda çalışan yazılımdaki etkin noktaları tanıyabilen ve bunlardan bazılarını yüksek düzeyde optimize edilmiş derlenmiş kodla değiştirebilen, çalışırken kendini optimize eden yazılım. Bence bu, tam olarak nasıl olduğunu öğrenene kadar bir makine programlama gibi görünen şeyin bir örneği ve daha sonra her zaman olduğu gibi programlayıcının söylediklerini yapmak olduğu ortaya çıkıyor.

Genel oyun oynama. Bu, araştırmacıların oyun kurallarının açıklamalarını okuyabilen, daha sonra programların birbirlerine karşı oynadığı programlar yazdığı ilginç bir araştırma alanıdır. Bu nedenle, tic-tac-toe programı veya satranç programı yerine, bunlar tic-tac-toe veya satranç kurallarını okuyan veya yerinde oluşturulan yeni bir oyun olan programlardır. Program kendisini programlamıyor, ancak satranç kuralları kodlanmadan satranç oynuyor. Bilgisayarın kendisine bir şeyler öğrettiği açıkça düşünülecek bir zaman vardı .

Genel yönde birçok küçük adım attık.

Ancak , önceki çalışmaların sonuçlarına göre kendilerini yeniden yazan veya kendi kodlarındaki eski veya verimsiz rutinleri tanıyabilen herhangi bir program düşünemiyorum . Sanırım bir gün buna sahip olacağız ve bunu en son derleyicinin bir özelliği olacağı için özel bir şey olarak düşünmeyeceğiz ...


0

Şu anda değil ve öngörülebilir gelecekte değil, çünkü bir program oluşturmak için insan beyninin tüm müthiş karmaşıklığına ihtiyacınız var. Ve o zaman bile, beynin bunu düzgün bir şekilde yapabilmesi için son derece eğitilmiş olması gerekir ve o zaman bile hepsi görevi yerine getiremez, ancak bir kişi programlamak için yeterli zamanla birini eğitebileceğinizi iddia edebilir.

Basit öykünmüş görevlerden bahsetmediğinizi sorunuzu ifade ettiğiniz yoldan aldım.

Makaleler ve bu Bilim Blogları makalesinde İstihbarat Geliştirme makalesini birçok yönden yanıtladınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.