Чи можна уявити машину, як програмувати себе на визначені специфікації? [зачинено]


12

Мій друг без знань про програмування задав мені це запитання, і мені це було цікаво.

Я думаю, що це неможливо, тому що це потребує дійсно вдосконаленого штучного інтелекту, здатного аналізувати текст проблеми, продумати рішення та запрограмувати його. Думаю, що машина може програмувати простий калькулятор, мені здається досить передовою.

Але, можливо, я помиляюся, і я хотів би знати, що ви думаєте про це, і якщо вам відомі якісь статті / дослідження з цього питання, або якщо вони вже є, або якщо існує можливість вибору специфікації та отримання машина для самопрограмування на цю "специфікацію?"


4
Визнач програмування. Я міг би створити програму, яка б робила інші програми. Але чи справді це було б навчитися?
Пітер Б

Так, питання не в генерації коду, а в реальному програмуванні, як ми, як розробники.
флоріан

Це залежить від програми. Програма з великою кількістю процедурних бізнес-логік була б набагато складнішою (і набагато менш здійсненною), ніж чимось функціональним і суто математичним. (Це все-таки інтуїція, але, на жаль, у мене немає ніякого способу підкріпити це.)
lunchmeat317

@florian: Ми самі - машини, які навчилися робити програмування (припускаючи, що прибульці / бог створив нас :-)). Звичайно, ми ще не набули здатності програмувати послідовності ДНК тощо. Отже, якщо ви створили машину, яка повинна навчитися програмувати зрештою, ви повинні запрограмувати її "еволюціонувати" і врешті-решт дізнатися, як вона сама була запрограмована.
Nav

2
@maple_shaft: Я зробив це питання більш об'єктивним, привівши його у відповідність до існуючих відповідей, і мені було цікаво, чи можна його знову відкрити в теперішній формі.
Том Ау

Відповіді:


15

Джоел насправді відповів на це кілька років тому . Справжнє значення "навчити машину програмувати самостійно" - це "навчити машину приймати специфікацію та створити програму, яка відповідає цій специфікації". І маючи це на увазі:

Проблема тут дуже фундаментальна. Для того, щоб механічно довести, що програма відповідає певним специфікаціям, сама специфікація повинна бути надзвичайно детальною. Насправді специфікація повинна визначити все про програму, інакше нічого і неможливо довести автоматично і механічно. Тепер, якщо специфікація визначає все про те, як програма буде вести себе, то, ось, ось вона містить всю інформацію, необхідну для створення програми! А тепер певні вундерки вирушають у дуже темне місце, де починають замислюватися над автоматичним складанням специфікацій у програми, і вони починають думати, що вони просто винайшли спосіб програмування комп'ютерів без програмування.

Тепер це еквівалент програмної інженерії вічної машини. Це одна з тих речей, яку тріскачки намагаються робити, скільки б ви не говорили їм, це ніколи не може спрацювати. Якщо специфікація точно визначає, чим буде займатися програма, з достатньою деталізацією, що її можна використовувати для генерації самої програми, це просто ставить питання: як ви пишете специфікацію? Таку повну специфікацію так само важко написати, як і основну комп'ютерну програму, тому що так само детально потрібно відповісти письменнику-спеціалісту, як і програмісту. Для використання термінології з теорії інформації: специфікації потрібно стільки ж бітів ентропії Шеннона, скільки й самої комп'ютерної програми. Кожен шматочок ентропії - це рішення, яке приймає спец-письменник або програміст.

Отже, суть полягає в тому, що якби дійсно існував механічний спосіб довести речі щодо правильності програми, все, що ви могли б довести, - чи є ця програма ідентичною іншій програмі, яка повинна містити стільки ж ентропії як перша програма, інакше деякі форми поведінки будуть невизначені і, таким чином, недоведені. Отже, написання специфіки так само важко, як і написання програми, і все, що ви зробили, - це перенести одну проблему звідси на туди, і нічого не робити.

Єдиним способом обійти це було б створити власний комп’ютер sapient з достатньою інтуїцією, щоб робити всі заповнення заготовок, які ви і я робимо автоматично, весь час, коли виробляєте програмне забезпечення ... у цьому випадку ви Я закінчую комп'ютер, який програмує себе, а також людський розробник. ;)


7
Я можу написати повну специфікацію для алгоритму сортування набагато простіше, ніж можу придумати сортування вставки, швидке сортування чи сортування відра. Однак ти стверджуєш, що перетворити перше на друге легко.
raptortech97

Джоель ... Досить сказано! ;-) Я розумію, що для цього нам потрібна специфікація даною мовою. Але я не зовсім переконаний у аргументі, що специфікація повинна бути дуже детальною. Ми, як розробники, здатні розробити програму, не маючи дуже детальних специфікацій. Чи не можемо ми розробити штучний інтелект, здатний прийняти якесь "випадкове" рішення щодо розробки програми?
флоріан

6
@florian Отже, ви хочете, щоб програма виконувала завдання з інтерпретації специфіки, які виконують людські програмісти? Тоді це стає віковою проблемою «сильного ШІ», яку численні розумні люди досліджували десятиліттями, не маючи прогресу для цього. Існує гостра філософська дискусія про те, чи можливо ІІ навіть метафізично можливий, тим менш менш практично можливий в далекому майбутньому, і на мій досвід, ніхто, крім продавців зміїних масел, не прогнозує сильний ШІ в найближчому майбутньому.

Я не дуже цього хочу, я запитував себе (як запитав мене друг), чи можливо це. Я прекрасно розумію, що AI насправді не існує і що він просто зводиться до деяких "випадкових" запрограмованих виборів.
флоріан

2
@ raptortech97: Ні, ти не можеш. Не є "завершеним" в значенні цього питання. Для того, щоб ваша специфікація була настільки повною, щоб була здатна механічно перетворитись на виконувану програму, вона по суті повинна бути написана мовою програмування. В іншому випадку у ваших специфікацій буде не визначена поведінка, або ви просто пишете код у документі MSWord.
whatsisname

4

Звичайно, ми робимо це все на час (для дуже обмежених підмножин проблем). Досить тривіально уявити собі зробити ще один крок або два і зав'язати щось на зразок Siri у вхід цих генераторів коду (або щось на зразок Wolfram Alpha), який, в свою чергу, пише код і вирішує вашу проблему. Я би сподівався, що десь вже є дещо, щоб зробити найосновніші речі.

Проблема з написанням складного програмного забезпечення для бізнесу полягає не в тому, щоб програма писала код - це написання програми для отримання вимог.


Дякуємо за посилання. Навіть незважаючи на те, що Yacc і Xamarin є суто детермінованими генераторами коду. Вони не створюють речі з нуля.
флоріан

@florian - нічого не створює речі з нуля. Завжди є якийсь вклад, вони просто більш вибагливі, ніж більшість.
Теластин

1
@Telastyn: порівнювати вхід / вихід для генератора аналізатора з входом / виходом для людського розуму як "більш вибагливим", в кращому випадку нечесним.
whatsisname

2

Я думаю, що відповідь @Mason Wheeler є ключовою ідеєю. Виходить так:

Ентропія Шеннона Тік-так-нога насправді невелика. Тому ми називаємо tic-tac-toe грою "вирішеною" або "детермінованою". Це не дуже цікаво, коли ти закінчиш школу минулого класу. Шашки мають більш високу ентропію, якщо врахувати ентропію всіх можливих ігор, в які можна грати. Але шашки теж є "вирішеною" чи "детермінованою" грою. Якщо ви рухаєтесь першими, вам слід лише виграти чи нічия. У шахах є набагато вища ентропія, але жодна людина не перемогла кращих комп'ютерних гравців з 2006 року. Таким чином, комп’ютери певним чином опанували шахи так, як люди не можуть. Білий Блакитний проаналізував вікіпедію, а потім зіграв небезпеку проти гравців і побив їх.

Що далі? Що таке ентропія роману чи сонети Шекспіра?

Аналогічно, в просторі програмування, можливо, з'явиться все більший набір компетенцій. Prolog вирішив набір комп'ютерних проблем, коли ви налаштували проблему, і комп'ютер вирішив відповідь. Хтось, ймовірно, знайде класи простих проблем з програмуванням, які комп’ютер зможе задовольнити і т. Д. Тоді хтось буде спиратися на це, щоб виробляти "на замовлення" на деякому проблемному просторі. І так воно йде.

Я думаю, що питання перетворюється на те , скільки часу потрібно, щоб AI засвоїв задану кількість ентропії ... і скільки обчислювальних ресурсів потрібно? Я думаю, що неможливо, що комп’ютер не зміг би засвоїти ентропію, освоєну найкращим людським мозком - в мозку немає нічого магічного - але питання полягає в тому, скільки ядер вам потрібно і скільки століть знадобиться, щоб потрапити туди?

Але ... чи зможе комп’ютер коли-небудь зробити свою роботу? Немислиме!


Я думаю, що справедливо сказати, що небезпека - це особливий випадок: воно зводиться до згадування та пов'язування фактів. Візьміть навіть найкращих спеціалістів, і там будуть самородки навіть публічних знань, про які вони не знають або не можуть згадати під тиском. З іншого боку, для комп'ютера, який здатний аналізувати енциклопедію (наприклад, Вікіпедію, Енциклопедію Британніку чи будь-яку іншу), жоден факт, зазначений у цій енциклопедії, є більш (або менш) екзотичним, ніж будь-який інший.
CVn

1

На це важко відповісти, тому що, як і зі штучним інтелектом, колись ми це зробимо, це буде тому, що ми написали програму, яка це робить. І критики скажуть: "ну, ця машина насправді не сама програмує! Вона точно відповідає програмі, яку ви їй дали!"

Ну так. Що б ми ніколи не робили з комп’ютерами, ми зробимо, надавши йому якусь програму, і вона виконає її. Якщо це аргумент проти, то ми нічого не можемо досягти. І все-таки в якийсь момент люди думали, що комп'ютер, що грає в шахи, буде очевидно розумним. Тепер вони можуть, і ми точно знаємо як, і не вважаємо, що це розумно. Підводні човни все ще не вміють плавати.

Отже - розглянемо кілька прикладів.

З десятиліть у нас були генератори парсеру . Ви даєте їм опис мови, вона обробляється, і результат - код для аналізатора для цієї мови. Ми точно знаємо, як це робиться, але хіба це не саме комп’ютерне програмування?

По-друге - редактори, які повідомляють, що ви допустили помилку (синтаксична помилка, неіснуюча змінна тощо). Він нічого не програмує сам, але може сказати вам, що ви щось зробили не так. Це дуже багато лише на поверхні.

Мови, на яких ви можете просто клацнути та перетягнути елементи управління інтерфейсом, а код, який фактично змусить їх працювати, генерується автоматично.

Компілятори JIT. Програмне забезпечення, яке може розпізнати гарячі точки в поточному програмному забезпеченні та замінити його на високооптимізований складений код, ефективно оптимізуючи себе під час його роботи. Я думаю, що це приклад того, що може здатися самим машинним програмуванням, поки ви точно не дізнаєтесь, як це відбувається, а потім виявляється просто робити те, що програміст сказав, як завжди.

Загальна гра. Це цікава сфера досліджень, в якій дослідники пишуть програми, які можуть читати описи правил ігор, щоб потім програми грали один проти одного. Тож замість програми «тик-так-нок» або шахової програми - це програми, які читають правила тик-так-ніг або шахи, або якась нова гра, складена на місці, і потім вони можуть грати в них. Програма сама по собі не програмує, але вона грає в шахи без того, щоб правила в шахи були жорстко закодовані. Був час, коли це, очевидно, вважатиметься комп'ютером, який сам щось навчає.

Ми зробили багато маленьких кроків у загальному напрямку.

Але я не можу придумати жодних програм, які переписують себе за результатами попередніх запусків, або які можуть розпізнати застарілі або неефективні підпрограми у власному коді. Я думаю, що одного разу у нас це буде, і ми вважатимемо це взагалі нічого особливим, оскільки це буде лише якась особливість останнього компілятора ...


0

Не зараз і не в осяжному майбутньому, тому що для створення програми вам потрібна величезна складність людського мозку. І навіть тоді цей мозок повинен бути високо навчений, щоб зробити це правильно, і навіть тоді не всі вони здатні виконати завдання, хоча можна стверджувати, що за достатнього часу ви можете навчити когось програмувати.

Я взяв це з того, як ви сформулювали своє запитання, що ви не говорите про прості емульовані завдання.

Ви запитували статті, і ця стаття Science Blogs про розвиток інтелекту відповідає на це питання багатьма способами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.