На початку цього року Метт Велш оголосив, що програмування добігає кінця. Він написав у ACM Communications:
Я вважаю, що традиційна ідея «написання програм» вмирає, по суті, для всіх, крім дуже спеціалізованих додатків, якими ми його знаємо, більшість програмного програмування буде замінено навченими системами штучного інтелекту. У деяких випадках, коли потрібні тільки «прості» програми (адже не для всіх потрібні моделі з сотнями мільярдів параметрів, що працюють на кластерах GPU), самі програми будуть генеруватися безпосередньо ШІ, а не кодуватися вручну .
Через кілька тижнів у своїй промові Уельс розширив свої спостереження за смертю. У могилу йде не тільки мистецтво програмування, а й інформатика в цілому. Вся інформатика «приречена». (На зображенні нижче наведено скріншот виступу.) )
Ті, хто виголошує ці сумні звістки, здається, не переповнені горем. Незважаючи на те, що Велш став викладачем і практиком інформатики (в Гарварді, Google, Apple та інших університетах), він, схоже, прагне перейти до наступного кроку. «У будь-якому випадку, написання коду – це відстій!» – заявив він.
Я не настільки оптимістично дивлюся на майбутнє постпрограмування. По-перше, я налаштований скептично. Я не думаю, що ми переступили поріг того, щоб машини навчилися самостійно розв'язувати цікаві обчислювальні задачі. Я не думаю, що ми ще наблизилися до цього, або ми рухаємося в правильному напрямку. Більше того, якщо виявляється, що моя точка зору неправильна, мій імпульс полягає не в тому, щоб погодитися, а в тому, щоб чинити опір. З одного боку, я не вітаю нашого нового повелителя ШІ. Навіть якщо вони виявляться кращими програмістами, ніж я, я все одно продовжуватиму використовувати свій редактор коду та компілятор, дякую. «Програмування – це відстій?» Для мене це вже давно стало джерелом радості та натхнення. Я вважаю, що це також цінний інструмент для розуміння світу. Я ніколи не впевнений, чи зрозумію це, поки не зможу звести ідею до коду. Щоб отримати користь від цього навчального досвіду, мені довелося написати програму, а не просто сказати кілька чарівних слів і викликати джина з лампи штучного інтелекту Аладдіна.
Велика мовна модель
Ідея про те, що програмовані машини можуть писати власні програми, глибоко вкорінена в історії комп'ютерної техніки. Чарльз Беббідж натякнув на цю можливість ще в 1836 році, коли обговорював свій план аналітичної машини. Коли Fortran був представлений у 1957 році, його офіційна назва була «Система автоматичного кодування FORTRAN». Його заявлена мета полягає в тому, щоб комп'ютери «кодували проблеми для себе і створювали програми, які були б такими ж хорошими (але без помилок), як і люди-кодери».
Fortran не усуває хитрощі (або помилки) програмування, але робить процес менш виснажливим. Пізніші мови та інші інструменти принесли подальші вдосконалення. І мрія про повністю автоматизоване програмування ніколи не була зруйнована. Машини, здається, краще пристосовані для програмування, ніж більшість. Комп'ютери методичні, прив'язані до правил, вибагливі і буквальні - всі ці риси (правильні чи неправильні) асоціюються з досвідченими програмістами.
За іронією долі, системи штучного інтелекту, які зараз готові до виконання завдань програмування, як не дивно, не схожі на комп'ютери. Їхні особистості більше схожі на Діану Трой, ніж на командора Дата. Логічна послідовність, причинно-наслідкові міркування та ретельна увага до деталей не є їхніми сильними сторонами. У них бувають неймовірно блискучі моменти, коли вони, здається, розмірковують над глибокими думками, але вони також мають потенціал для дивовижних невдач – кричущих, нахабних помилок розуму. Вони нагадують мені старий дотеп: люди помиляються, і для того, щоб все зіпсувати, потрібен комп'ютер.
Новітня система штучного інтелекту називається Big Language Model (LLM). Як і більшість інших нещодавніх винаходів штучного інтелекту, вони побудовані на штучних нейронних мережах, багатошаровій структурі, натхненній структурою мозку. Вузли мережі схожі на біологічні нейрони, а зв'язки між вузлами діють як синапси – точки з'єднання, де сигнали передаються від одного нейрона до іншого. Тренувальна мережа може регулювати силу або вагу з'єднання. У мовній моделі навчання здійснюється шляхом примусового введення великої кількості тексту в мережу. Коли процес завершено, з'єднані ваги кодують детальну статистику про мовні особливості навчального тексту. У найбільшій моделі кількість ваг становить 100 мільярдів і більше.
У цьому випадку термін модель може ввести в оману. Цей термін не відноситься до масштабних моделей або мініатюрних моделей, таких як авіамоделі. Натомість це стосується прогностичних моделей, таких як математичні моделі, які зазвичай зустрічаються в науці. Подібно до того, як атмосферні моделі передбачають завтрашню погоду, мовні моделі передбачають наступне слово в реченні.
Найвідомішою масштабною мовною моделлю є ChatGPT, який був оприлюднений восени минулого року та привернув велику увагу. Абревіатура GPT Gee Pee Tee: Мій язик постійно спотикається об ці три римовані склади. Інші продукти штучного інтелекту мають милі імена, такі як Барт, Клод, Лама; Я хотів би перейменувати GPT у тому ж дусі. Я б назвав його Джеппетто, і він перегукується зі схемою приголосних. GPT розшифровується як Generative Pre-Trained Transformer (генеративний попередньо навчений трансформатор); Чат-версія системи оснащена розмовним HMI. ChatGPT був розроблений компанією OpenAI, яка була заснована в 2015 році, щоб звільнити ШІ від контролю кількох багатих технологічних компаній. OpenAI успішно виконав цю місію до такої міри, що став багатою технологічною компанією.
ChatGPT викликає захоплення та шок своїм формулюванням, здатністю добре говорити, вільним володінням англійською та іншими мовами. Чат-бот може імітувати відомих авторів, розповідати анекдоти, писати любовні листи, перекладати вірші, писати спам, «допомагати» учням з домашніми завданнями та вигадувати дезінформацію для політичної дезінформації. Добре це чи погано, але ці мовні здібності являють собою дивовижний технологічний прогрес. Комп'ютери, які колись намагалися скласти зрозуміле речення, раптом стали майстрами слова. Те, що говорить GPT, може бути правдою, а може й ні, але воно майже завжди добре сформульоване.
Невдовзі після виходу ChatGPT я був здивований, виявивши, що його володіння мовою поширилося на мови програмування. Навчальний набір моделі, схоже, включає не тільки кілька природних мов, але й велику кількість вихідного коду програм із публічних репозиторіїв, таких як GitHub. На основі цього ресурсу GPT вміє писати нові програми на основі команд. Мене це здивувало, тому що комп'ютери дуже прискіпливі і невблаганно ставляться до своїх даних. Хоча комп'ютери іноді допускають невеликі помилки, такі як орфографічні помилки, читачам-людям важко зрозуміти речення. Але якщо комп'ютер отримує вхідні дані хоча б з однією комою або невідповідними дужками, він буде блювота спотворена. Мовні моделі з потенційно статистичними або імовірнісними властивостями навряд чи збережуть необхідну точність після декількох рядків.
Я знову помилився в цьому питанні. Ключове нововведення у великих мовних моделях - механізм уваги - вирішує цю проблему. Коли я сам почав експериментувати з ChatGPT, то швидко виявив, що він дійсно може генерувати програми без необережних граматичних помилок.
Але далі були й інші проблеми.
Підйом по словесній драбині
Коли ви сідаєте поспілкуватися з машиною, ви відразу стикаєтеся з незручним питанням: «Про що нам говорити?». Я шукаю тему, яка справедливо вимірює можливості програмування ChatGPT. Я хочу задачу, яку можна вирішити обчислювальними засобами, але для цього не потрібно багато арифметики, що вважається однією зі слабких сторін великих мовних моделей. Я вибрав гру з анаграмою, винайдену Льюїсом Керроллом 150 років тому і детально проаналізовану Дональдом Е. Кнутом в 90-х роках 20 століття.
У наведеній нижче розшифровці кожен обмін з мого боку позначений як BR; Розетка – це логотип OpenAI, який вказує на реакцію ChatGPT.
Коли я побачила, як ці речення розгортаються на екрані — чат-бот друкує їх слово в слово, трохи хаотично, ніби зупиняючись, щоб розібратися в думках, — я одразу була вражена можливостями системи англійською мовою. GPT перераховує всі основні особливості слова драбина в простій потужній прозі: це гра або головоломка, де ви переходите від слова до слова, змінюючи по одній букві за раз, кожна сходинка драбини повинна бути англійським словом, а мета полягає в тому, щоб знайти найкоротшу можливу послідовність від початкового слова до цільового слова. Я сам не можу пояснити це краще. Найбільш корисним є робочий приклад COLD-> WARM.
Не тільки окремі речення справляють враження мовних здібностей. Речення організовані в абзаци, які нанизуються разом, утворюючи зв'язний дискурс. Це чудово!
Також примітна здатність робота обробляти нечіткі та неакуратні введення. Мій початковий запит був сформульований як запитання «так» чи «ні», але ChatGPT правильно інтерпретував його як прохання: «Розкажіть мені, що ви знаєте про слово драбина». Моя друга інструкція ігнорує будь-які друкарські репліки, які вказують на те, що СВИНЕЦЬ і ЗОЛОТО слід розуміти як слова, а не як метал. Чат-бот мав надати мені рецепти алхімії, але надав відсутні цитати.
Однак, відкинувши всю цю лінгвістичну та риторичну складність, що я дійсно хотів перевірити, так це здатність програми розв'язувати проблему зі словесними сходами. Обидва приклади зі стенограми вище можна знайти в Інтернеті, тому вони, ймовірно, з'являться в навчальних даних ChatGPT. Іншими словами, великі мовні моделі можуть просто запам'ятовувати рішення, а не будувати їх. Тому я подав ще складніше завдання:
На перший погляд, здається, що ChatGPT знову переміг, вирішивши головоломку, з якою, я впевнений, він ніколи раніше не стикався. Але придивіться. MARSH -> MARIS ВИМАГАЄ ЗАМІНИ З ДВОХ БУКВ, ЯК І PARIL -> КВІТНЯ. Статус MARIS і PARIL як «дійсних слів» також може бути поставлений під сумнів. Я поскаржився:
Оце так! Робот пропонує слизькі зізнання та вибачення, але «правильна» драбина божевільніша, ніж будь-коли. Схоже, ми граємо в Scrabble з Humpty Dumpty у дитячому віршику Mother Goose, а також заявляємо: «Я кажу, APRCHI — це слово, він — слово!» Потім розігнати всю плитку.
Це не окремий, унікальний провал. Усі мої спроби розгадати словесну драбину за допомогою ChatGPT пішли не за планом, хоч і не завжди однаково. В одному випадку я попросив драбину від REACH до GRASP. Експерти зі штучного інтелекту пропонують таке рішення:
Тепер ми лепечемо, як маленькі діти, які тільки навчилися рахувати: «Раз, два, три, чотири, чотири, чотири, чотири, сім, синій, десять!» "
Усі результати, які я показав досі, задокументовані за допомогою ChatGPT версії 3.5. Також я спробував нову покращену версію 4.0, яка вийшла в березні. Оновлений робот випромінює таку ж доброзичливу впевненість, але, боюся, він має ті ж тенденції, впадаючи в випадкову непослідовність:
Сходи добре починається з чотирьох сходинок, дотримуючись всіх правил. Але потім ШІ відволікається. ПЕРЕХІД ВІД PLAGE ДО СТОРІНОК ВИМАГАЄ ЗАМІНИ З ЧОТИРЬОХ БУКВ. КРІМ ТОГО, Є PASES, ЯКИЙ НЕ Є СЛОВОМ (НАСКІЛЬКИ Я ЗНАЮ) І ТУТ ВСЕ ОДНО НЕ ПОТРІБЕН, ОСКІЛЬКИ ПОСЛІДОВНОСТІ МОЖУТЬ ПЕРЕХОДИТИ БЕЗПОСЕРЕДНЬО ВІД СТОРІНОК ДО PARES. Далі було ще більше дурниць. Тим не менш, я ціную інформаційну замітку про PLAGE.
Нещодавно мені також випала нагода спробувати Llama 2, LLM, опубліковану Meta (люди з Facebook). Хоча ця модель була розроблена незалежно від GPT, вона, схоже, має деякі з тих самих психологічних особливостей, таких як створення правил, а потім їх ігнорування. Коли я попросив сходи, що з'єднує REACH і GRASP, Llama 2 запропонував наступне:
Метт Велш згадує два режими роботи обчислювальних систем, побудованих на великих мовних моделях. Досі ми працювали в так званому режимі пророцтва, коли ви ставите запитання, а комп'ютер повертає відповідь. Ви надаєте пару слів, і система знаходить драбину, яка їх з'єднує, і виконує будь-які обчислення, необхідні для того, щоб дістатися туди. Ви доставляєте коробку з-під взуття з фінансовими документами, а комп'ютер заповнює вашу форму 1040. Ви збираєте історичні кліматичні дані, а комп'ютер прогнозує середню глобальну температуру в 2050 році.
Альтернативою оракулам штучного інтелекту є AI Code Monkey. У другому режимі машина безпосередньо не відповідає на ваші запитання і не виконує ваші обчислення; Замість цього він створює програму, яка може запускатися на звичайному комп'ютері. Замість словесної драбини від вашого бота ви повертаєте програму, яка генерує сходи слів, написану на обраній вами мові програмування. Замість того, щоб заповнювати повну податкову декларацію, ви отримуєте програмне забезпечення для підготовки податкової звітності; Кліматичні моделі замінюють прогнози температури.
Давайте спробуємо це з ChatGPT 3.5:
Ви можете використовувати функцію wordLadder, щоб розв'язувати головоломки зі сходами. Ось приклад використання:
Його вихід становить:
Зауважте, що це базова демонстрація, і для більших сходів або складніших сценаріїв можуть знадобитися додаткові оптимізації або алгоритми, такі як пошук по ширині.
Знову ж таки, побіжний погляд на вихідні дані показує, що виступ пройшов успішно. ChatGPT, здається, так само вільно володіє Java, як і англійською. Він знає синтаксис операторів if, while і for, а також усі метушливі правила пунктуації та дужок. Здається, що машинні програми поєднують всі ці компоненти для виконання заданого завдання. Також зверніть увагу на велику кількість пояснювальних коментарів, які безумовно для нашої користі, а не для неї. Аналогічно, імена описових змінних (currentWord, newWord, ladder).
ChatGPT також активно включає інструкції щодо запуску програми на конкретному прикладі (з березня по квітень), і він роздруковує результат, який збігається з відповіддю, наданою в нашому попередньому обміні. Чи генерується цей результат фактичним запуском програми? ChatGPT не говорить про це прямо, але стверджує, що якщо ви запустите програму відповідно до інструкцій, ви отримаєте відображені результати (у всій безглуздій красі).
Ми можемо перевірити цей оператор, завантаживши програму у веб-браузер або інше середовище виконання Java. Висновок: спіймали! Програма запустилася, але не видала заданого результату. РЕАЛЬНИЙ РЕЗУЛЬТАТ ПРОГРАМИ: БЕРЕЗЕНЬ -> AARCH -> APRCH -> APRIH -> КВІТЕНЬ. Така послідовність не така вже й дивна, адже вона дотримується правила зміни лише однієї літери за раз, а всі «слова» мають рівно п'ять букв. З іншого боку, в англійських словниках не можна знайти проміжного «слова».
ІСНУЄ ПРОСТИЙ АЛГОРИТМ, ЯКИЙ ГЕНЕРУЄ ПОСЛІДОВНОСТІ БЕРЕЗЕНЬ -> AARCH -> APRCH -> APRIH -> APRIL. Просто пройдіться по початковому слову крок за кроком зліва направо, змінюючи букву в кожній позиції, щоб вона відповідала відповідній букві в цільовому слові. Дотримуючись цього правила, будь-яку пару слів з п'яти букв можна розташувати покроково не більше ніж за п'ять кроків. БЕРЕЗЕНЬ-> КВІТЕНЬ робить лише чотири кроки, тому що літеру R посередині не потрібно змінювати. Я не можу уявити собі простішого способу зробити словесну драбину – припускаючи, звичайно, що ви готові зробити так, щоб будь-яка суміш букв вважалася одним словом.
Програма, створена ChatGPT, може використовувати цю швидку та брудну рутину, але вона робить щось набагато більш виснажливе: будує всі можливі сходи, перша з яких є початковим словом, і продовжує розширювати ці сходи, поки не натрапить на ту, яка містить цільове слово. Це марнотратний алгоритм перебору. Кожну букву початкового слова можна змінити 25 способами. Таким чином, слово з 5 букв має 125 можливих наступників. Коли ви досягаєте п'ятиступінчастої драбини, відкривається 190 мільйонів можливостей. (ПРИКЛАДИ, ЯКІ Я ТУТ НАВІВ, ТАКІ ЯК БЕРЕЗЕНЬ -> КВІТЕНЬ І REACH-> GRAMP, МАЮТЬ ІНВАРІАНТНУ ЛІТЕРУ, ТОМУ РІШЕННЯ ЗАЙМАЄ ЛИШЕ ЧОТИРИ КРОКИ.) Спроба обчислити повне рішення з п'яти кроків виснажила моє терпіння. )
Кодова мавпа 4-го покоління
Давайте спробуємо ту саму вправу з кодування з ChatGPT 4. З огляду на ту саму підказку, новий бот відповідає так:
Програма має однакову загальну структуру (цикл while з двома вкладеними циклами for всередині) і використовує ту саму алгоритмічну стратегію (генерує всі рядки, які відрізняються від заданого слова, в одному місці). Але у версії GPT-4 є велика новинка: розпізнавання списку слів має важливе значення. Завдяки цій зміні ми нарешті маємо надію створити сходи справжніх слів.
Хоча GPT-4 визнає потребу в списку, він надає лише заповнювач, послідовність із 10 слів, яку він налаштовує для прикладу REACH-> GRASP, наведеного вище. Заглушки цього списку слів не приносять користі, навіть для регенерації фальшивої драбини «ДОТЯГНУТИСЯ до РОЗУМІННЯ». Якщо ви спробуєте це зробити, програма повідомить, що ніякої драбини не існує. У такому результаті немає нічого поганого, тому що задані 10 слів не утворюють ефективного шляху до зміни лише однієї літери за крок.
Навіть якщо слова в списку підібрані ретельно, словниковий запас 10 дуже незначний. Створення більших списків слів здається легким завданням для мовних моделей. Адже LLM навчається на величезному корпусі текстів, де майже всі англійські слова, швидше за все, з'являться хоча б один раз, тоді як звичайні слова з'являються мільйони разів. Невже робот не може взяти репрезентативну вибірку цих слів? Відповідь однозначно негативна. Хоча можна сказати, що GPT «прочитав» весь цей текст, він не зберігає ці слова в будь-якій легкодоступній формі. (Те ж саме стосується і читачів-людей.) Чи можете ви скласти список з 10 найпоширеніших слів з п'яти букв у вашому словниковому запасі, озираючись на досвід читання протягом усього життя?
Коли я попросив ChatGPT 4 згенерувати список слів, він вибачливо заперечив: «Вибачте за плутанину, але як штучний інтелект, розроблений OpenAI, я не можу безпосередньо отримати доступ до бази даних слів або отримати можливість отримувати дані із зовнішніх джерел...» Тому я спробував деякі хитрощі і попросив робота написати історію на 1000 слів, а потім відсортувати слова історії за частотою. Трюк спрацював, але зразок виявився занадто маленьким, щоб принести багато користі. Поки я дотримуюся його, я, можливо, зможу отримати прийнятний список від GPT, але я вибираю короткий шлях. Адже я не штучний інтелект, розроблений компанією OpenAI, і маю доступ до зовнішніх ресурсів. Я привласнив список з 5757 англійських слів з п'яти букв, складений Кнутом для його експерименту зі сходами слів. У цьому списку програми, написані на GPT-4, знайдуть наступну схему сходів з дев'яти ступенів:
ДОТЯГНУТИСЯ -> ПЕРСИК -> СПОКІЙ -> МІСЦЕ -> ЛІТАК -> ПЛАНИ -> ГОЛІВКА -> СКЛО -> ТРАВА -> ХАПАТИСЯ
Цей результат точно збігається з результатом власної програми Кнута, яку він опублікував 30 років тому в Stanford Graphbase.
На даний момент я повинен визнати, що з невеликою сторонньою допомогою ChatGPT нарешті виконав моє прохання. Він пише програму, яка може побудувати дійсну словесну драбину. Але у мене все одно є застереження. Хоча GPT-4 і Knuth пишуть програми, які виробляють однаковий результат, самі програми не є еквівалентними або навіть подібними.
Кнут підійшов до цієї проблеми в протилежному напрямку, почавши не з набору всіх можливих рядків з п'яти букв (яких налічується менше 12 мільйонів), а зі свого набагато меншого списку з 5757 поширених англійських слів. Потім він будує граф (або мережу), де кожне слово є вузлом, а два вузли з'єднані ребрами тоді і тільки тоді, коли відповідні слова відрізняються на одну букву. На наступній ілюстрації показаний фрагмент такої діаграми.
На схемі словесна драбина - це ряд ребер від початкового вузла до цільового вузла. Найкраща драбина - це найкоротший шлях, що перетинає найменшу кількість сторін. Наприклад, найкращий шлях від повідця до відрижки - це повідець -> вилуговування -> дотягнутися -> відрижка, але є й довші шляхи, такі як повідець -> вилуговування -> пляж -> персик -> досягніть -> відрижка. Щоб знайти найкоротший шлях, Кнут використовував алгоритм, розроблений Едсгером В. Дейкстрою в 50-х роках 20-го століття.
Програма «Сходи слів» Кнута вимагає початкових інвестицій, щоб перетворити простий список слів на діаграму. З іншого боку, він дозволяє уникнути марнотратного генерування тисяч або мільйонів рядків з п'яти букв, які не можуть бути елементами останніх. Розв'язуючи задачу REACH-> GRASP, програма GPT-4 створила 219 180 таких рядків; Лише 2 792 з них (трохи більше 1%) є справжніми словами.
Якщо різні описані мною процедури словесної драбини будуть представлені учнями, то я поставлю незадовільну оцінку версії без списку слів. Програма GPT-4 зі списком пройде, але заради ефективності та елегантності я лише поставлю програмі Knuth найвищі оцінки.
Чому чат-боти віддають перевагу гіршим алгоритмам? Ви можете просто загуглити «програму сходи слів», щоб отримати підказки. Майже всі результати з найвищим рейтингом надійшли з таких сайтів, як Leetcode, GeeksForGeeks і RosettaCode. Ці сайти явно призначені для пошуку роботи та конкурентів у змаганнях з програмування, з рішеннями, які вимагають генерації всіх 125 однобуквених варіантів кожного слова, як і програми GPT. Оскільки таких сайтів дуже багато – здається, сотні – вони важливіші за інші джерела, такі як книга Кнута (якщо текст таки з'явиться в навчальному наборі). Чи означає це, що ми повинні звинувачувати Leetcode у неправильному виборі алгоритму, а не GPT? Замість цього хотілося б вказати на неминучі слабкі місця протоколу, найпоширенішими з яких є правильна відповідь за замовчуванням.
Щоразу, коли я думаю про те, що великі мовні моделі пишуться для всього нашого програмного забезпечення, мене переслідує інше пов'язане з цим занепокоєння. Звідки беруться нові алгоритми? Мовна модель коледжу може бути креативною в реміксуванні елементів існуючих проектів, але я не бачу жодного способу, як вона може винайти щось абсолютно нове і краще.
** Досить слова драбина! **
Зізнаюся, я зайшов занадто далеко, замучивши ChatGPT занадто великою кількістю варіантів конкретної (і неактуальної) проблеми. Можливо, мовні моделі коледжу краще справляються з іншими обчислювальними завданнями. Я спробував кілька, і результати були неоднозначними. Я просто хочу обговорити одну з них, і я вважаю зусилля ChatGPT досить гострими.
З ChatGPT 3.5 я прошу значення 100-го числа Фібоначчі. Зверніть увагу, що моє запитання було поставлено в режимі Oracle; Я прошу цю цифру, а не програму, яка її обчислює. Тим не менш, ChatGPT добровільно пише програму Фібоначчі, а потім рендерить вихідні дані цієї програми.
Алгоритм, реалізований цією програмою, математично правильний; Це безпосередньо випливає з визначення послідовності Фібоначчі, яка є членом послідовності, що починається з {0, 1}, де кожен наступний елемент дорівнює сумі перших двох елементів. Дана відповідь також правильна: 354224848179261915075 дійсно є 100-м числом Фібоначчі. Так в чому ж проблема? Це середнє речення: «Коли ви запустите цей код, він виведе 100-е число Фібоначчі». Це не так. Якщо ви запустите код, ви отримаєте неправильне значення 354224848179262000000. Останні версії Java надають тип даних BigInt для вирішення цієї проблеми, але BigInt повинен бути явно вказаний, чого не роблять програми ChatGPT. Причина цієї аномалії полягає в тому, що Java використовує арифметику з плаваючою комою, навіть для цілих значень. Відповідно до стандарту IEEE з плаваючою комою, максимальне ціле число, яке може бути представлено без втрати точності, дорівнює 253−1; 100-е число Фібоначчі дорівнює приблизно 268. Це те, що я називаю гострим мисленням: ChatGPT дає правильну відповідь, але метод, який, як стверджується, використовується для обчислення цієї відповіді, її не забезпечує. Бот, мабуть, знайшов правильне значення якимось іншим способом, але точний спосіб так і не був виявлений.
Давши те саме завдання ChatGPT 4.0, ми вирушимо в подорож, яка є ще дивнішою. У наступній взаємодії я активував Code Interpreter, плагін ChatGPT, який дозволяє системі тестувати та запускати частину коду, який вона пише. Судячи з усього, робот скористався цією особливістю, спочатку придумавши програму, яка дала збій з невідомих причин:
Тут ChatGPT написаний на Python, основній мові програмування, яку підтримує Code Interpreter. Перша спроба написати програму була заснована на піднесенні до степеня матриць Фібоначчі:
Це відомий і ефективний метод, і програма реалізує його правильно. Однак із загадкових причин інтерпретатор коду не може виконати програму. (Код добре працює в стандартному середовищі Python і повертає правильну відповідь.) )
У цей момент робот повернеться в абсолютно новому напрямку і злетить, пропонуючи обчислити необхідне значення Фібоначчі за математичною тотожністю, яка називається формулою Біне. Він писав математичні вирази, але потім передумав. Він правильно передбачає задачу чисельної точності: при точному значенні квадратного кореня з 5 формула дасть точний результат, але це неможливо.
Тож тепер ChatGPT обрав іншу стратегію, використовуючи той самий ітераційний алгоритм, що й версія 3.5. Цього разу ми отримали правильну відповідь, тому що Python (на відміну від Java) не має жодних проблем із великими цілими числами.
Я був вражений цим виступом не тільки правильною відповіддю, а й мужньою наполегливістю системи. Незважаючи на негаразди ChatGPT, він вистояв, спантеличений несподіваними труднощами, але відмовився здаватися. "Що ж, цей матричний метод має працювати. Але, в будь-якому випадку, давайте спробуємо формулу Біне... Ой, стривайте, я забув... У всякому разі, не потрібно так вигадливо ставитися до цього. Давайте зробимо це очевидним, повільним способом. Я відчуваю, що це дуже людяний підхід до вирішення проблем. Дивно бачити таку поведінку в машинах.
Рекордні показники успішності та невдачі
Мій маленький експеримент змусив мене засумніватися в твердженні, що оракули штучного інтелекту та мавпи коду ШІ ось-ось витіснять людей-програмістів. Я бачив певний успіх, але скоріше провал. Цей похмурий запис був складений на відносно простих обчислювальних задачах, розв'язки яких добре відомі та широко опубліковані.
Інші зробили більш широку і глибоку оцінку генерації коду LLM. У бібліографії в кінці цієї статті я наводжу п'ять таких досліджень. Я хотів би коротко підсумувати деякі результати, про які вони повідомили.
Два роки тому Марк Чен і понад 50 колег з OpenAI доклали багато зусиль, щоб виміряти точність Codex, відгалуження ChatGPT 3, присвяченого написанню коду. (З тих пір Codex став рушієм, який живить GitHub Copilot, «помічника програміста».) ) створив набір із 164 завдань, які можна виконати, написавши програми на Python. Ці завдання в основному є вправами з підручників, змаганнями з програмування та типами в (приголомшливій) літературі про те, як добре пройти співбесіду з кодування. Більшість завдань можна виконати лише кількома рядками коду. Приклад: Обчисліть кількість голосних у даному слові, визначте, чи є ціле число простим чи складеним.
Команда професора Чена також поміркувала над критеріями визначення успіху та невдачі. Оскільки процес LLM є недетермінованим (вибір слів базується на ймовірності), модель може згенерувати недосконалу програму з першої спроби, але в кінцевому підсумку дасть правильну відповідь, якщо спробу буде продовжено. Параметр, який називається температурою, контролює ступінь невизначеності. При нульовій температурі модель завжди вибирає найбільш ймовірне слово на кожному кроці; З підвищенням температури вводиться випадковість, що дозволяє вибирати малоймовірні слова. Чен та ін. Розглянемо можливість цієї зміни, прийнявши три критерії успіху:
pass@1: LLM генерує правильну програму з першої спроби
pass@10: Принаймні одна з 10 згенерованих програм правильна
pass@100: Принаймні одна зі 100 згенерованих програм правильна
Pass@1 тести проводяться при нульовій температурі, тому модель завжди дає найкраще припущення. Випробування pass@10 і pass@100 проводяться при більш високих температурах, що дозволяє системі досліджувати більш широкий спектр потенційних рішень.
Автори оцінили кілька версій Кодексу за всіма 164 завданнями. Для найбільшої та найпотужнішої версії Кодексу показник pass@1 становить близько 29%, показник pass@10 – 47%, а pass@100 досягає 72%. Чи повинні ми бути вражені чи шоковані, коли бачимо ці цифри? Чи варто відзначати, що Кодекс правий з першої спроби майже в третині випадків (коли температура встановлена на нуль)? Або, якщо ви були готові переглянути 100 запропонованих планів, щоб знайти потрібний, рівень успіху зріс майже до трьох чвертей? Моя особиста думка така: якщо ви подивитеся на нинішнє покоління LLM як на новаторську спробу в довгостроковій дослідницькій програмі, результати будуть обнадійливими. Але якщо ви думаєте, що ця технологія може негайно замінити програмне забезпечення з ручним кодуванням, надії мало. Ми ще далекі від необхідного рівня надійності.
Інші дослідження дали в цілому схожі результати. Фредріко Кассано та ін. Оцінювати продуктивність кількох LLM, що генерують код на різних мовах програмування; Вони повідомляють про широкий діапазон показників pass@1, але лише два з них перевищують 50%. Алессіо Бушемі протестував ChatGPT 3.5 на 40 завданнях кодування, вимагаючи програм, написаних 10 мовами та повторюючи кожен запит 10 разів. З 4 000 випробувань 1 833 створили код, який можна було скомпілювати та виконати. Лю Чжицзе та ін. Їхня оцінка ChatGPT ґрунтується на запитаннях, розміщених на сайті Leetcode. Оцініть результати, надіславши згенерований код до автоматизованого процесу оцінювання Leetcode. Середній рівень прийняття всіх питань коливався від 31% для програм, написаних на C, до 50% для програм на Python. Лю та ін. Ще одне цікаве спостереження: ChatGPT отримав набагато гірші бали на запитання, опубліковані після вересня 2021 року (встановленого терміну навчання GPT). Вони припускають, що робот може бути краще здатний вирішувати попередні проблеми, оскільки він вже бачив рішення під час навчання.
Нещодавня стаття, опублікована Лі Чжуном і Цзилун Ваном, виходить за рамки основного питання правильності програми та розглядає надійність і міцність. Чи правильно реагує згенерована програма на неправильно сформовані вхідні дані або зовнішні помилки, наприклад, при спробі відкрити файл, якого не існує? Незважаючи на те, що запит LLM містив приклад, що показує, як правильно справлятися з такими проблемами, Чжун і Ван виявили, що згенерований код не справлявся з цим у 30-50 відсотках випадків.
Крім цих невтішних результатів, у мене самого більше сумнівів. Майже всі тести проводяться за допомогою коротких фрагментів коду. LLM, який має труднощі з написанням 10-рядкової програми, може мати більші труднощі з написанням 100-рядкової або 1,000-рядкової програми. Крім того, проста оцінка «склав/не склав» є дуже приблизним показником якості коду. Розглянемо тест простоти в груповому наборі бенчмарків Чена. Це одна з програм, написаних на Codex:
Цей код оцінюється правильно – він повинен бути правильним, оскільки він ніколи не класифікує прості числа як складені числа, і навпаки. Однак, коли n велике, у вас може не вистачити терпіння або життя, щоб дочекатися вердикту. Алгоритм намагається розділити n на кожне ціле число від 2 до n−1.
Нетрадиційна практичність LLM
Для великих мовних моделей ще рано. ChatGPT був випущений менше року тому; Базовій технології всього близько шести років. Хоча я майже впевнений, що стверджую, що LLM не готова завоювати світ кодування, я не можу з такою впевненістю передбачити, що вони ніколи цього не зроблять. Ці моделі обов'язково вдосконалюватимуться, і ми будемо використовувати їх краще. Вже існує індустрія, що розвивається, яка пропонує рекомендації «точно в строк інжинірингу» як спосіб отримати максимальну віддачу від кожного запиту.
Іншим способом підвищення продуктивності LLM може бути створення гібрида з іншою обчислювальною системою, оснащеною інструментами логіки та міркувань, а не інструментами аналізу чистої мови. Напередодні своєї недавньої смерті Даг Ленат запропонував об'єднати LLM з Cyc, величезною базою даних здорового глузду, над створенням якої він витратив чотири десятиліття. Стівен Вольфрам працює над інтеграцією ChatGPT у Wolfram|В Альфа Вольфрам|Alpha — це онлайн-колекція відібраних даних та алгоритмів.
Тим не менш, деякі перешкоди, які заважають створенню курсу LLM, здаються важкими для подолання.
Мовні моделі творять свою магію простим способом: у процесі написання речення або абзацу LLM вибирає наступне слово на основі попереднього слова. Це все одно, що написати текстове повідомлення на телефоні: ви набираєте «Я побачу тебе...», а програма пропонує альтернативні продовження: «завтра», «скоро», «пізніше». У LLM кожному кандидату присвоюється ймовірність, яка розраховується на основі аналізу всього тексту в модельному навчальному наборі.
Понад століття тому російський математик А. А. Марков вперше дослідив ідею генерації тексту на основі цього статистичного аналізу. Його процес тепер відомий як n-грамова модель, де n — кількість слів (або символів, або інших символів), які слід враховувати при виборі наступного елемента послідовності. Я давно захоплююся процесом n-грами, хоча в основному через його комедійні можливості. (У статті, опублікованій 40 років тому, я назвав це «мистецтвом перетворювати літературу на тарабарщину».) ")
Звичайно, ChatGPT та інші останні LLM – це більше, ніж n-метамоделі. Їхня нейронна мережа фіксує лінгвістичні статистичні особливості, що виходять далеко за межі послідовності з n послідовних символів. Особливе значення має механізм уваги, який відстежує залежності між обраними символами на довільних відстанях. У природних мовах цей засіб корисний для підтримки узгодженості підмета та присудка або для асоціювання займенників з об'єктом, до якого вони відносяться. У мовах програмування механізм уваги забезпечує цілісність багаточастинних синтаксичних структур, таких якщо... то... else, і він зберігає дужки належним чином поєднаними та вкладеними.
Однак, навіть з урахуванням цих удосконалень, LLM по суті є інструментом для побудови нового тексту на основі ймовірності появи слів в існуючому тексті. На мою думку, це не мислення. Це щось більш поверхневе, зосереджене на словах, а не на ідеях. З огляду на цей грубий механізм, я був одночасно здивований і спантеличений тим, як багато вдалося досягти LLM.
Протягом десятиліть архітектори ШІ вважали, що справжній інтелект, природний чи штучний, вимагає ментальної моделі світу. Для того, щоб зрозуміти, що відбувається навколо вас (і всередині вас), вам потрібно мати інтуїцію про те, як все працює, як вони поєднуються один з одним, що відбувається далі, причинно-наслідкові зв'язки. Лінант наполягає на тому, що найважливіші знання – це знання, які ви отримуєте задовго до того, як почнете читати. Ви дізнаєтеся про силу тяжіння, падаючи. Коли ви виявляєте, що вежу з будівельних блоків легко зруйнувати, але важко відновити, ви розумієте ентропію. Перш ніж мова почне вкорінюватися, ви дізнаєтеся про біль, страх, голод і любов у дитинстві. Мозок у коробці не може отримати доступ до цього досвіду, тому що він не може безпосередньо отримати доступ до фізичного чи соціального всесвіту.
Двісті п'ятдесят років тому швейцарський годинникар П'єр Жаке-Дроз побудував механічний автомат, який міг писати пером. Цей годинниковий пристрій має сотні кулачків і шестерень і одягнений у вигляді маленького хлопчика, що сидить на табуретці. Після активації хлопчик вмочив ручку в чорнило і написав коротке послання, в першу чергу картезіанський афоризм «Я мислю, отже, я існую». Як смішно! Але навіть у 18 столітті ніхто не вірив, що ляльки-графіті справді мислять. Скептики LLM ставлять ChatGPT в одну категорію.
Я скажу вам, яка з цих протилежних теорій менталітету LLM правильна? Я ні. Жоден з варіантів мені не сподобався. Якщо Бендер та інші мають рацію, то ми повинні зіткнутися з тим фактом, що гаджет, який не має здатності міркувати чи відчувати, не має досвіду фізичного всесвіту чи соціальної взаємодії, не має самосвідомості, пише студентські роботи, пише реп-пісні, дає поради закоханим. Знання, логіка, емоції нічого не варті; Слизький язик – це все. Це підривна пропозиція. Якщо ChatGPT може обдурити нас цим нестивним шоу, можливо, ми теж брехуни, а їхні голоси та гнів безглузді.
З іншого боку, якщо Суцкевер має рацію, то більшу частину людського досвіду, який нам дорогий, – почуття особистості, яке повільно розвивається в міру того, як ми ростемо і живемо – можна дізнатися, прочитавши ці слова в Інтернеті. Якщо це так, то мені насправді не потрібно терпіти невимовний біль молодшої школи, мені не потрібно робити всі дурні помилки, які викликають такий душевний біль і труднощі; Не потрібно зачіпати свою самооцінку, зіткнувшись зі світом. Я міг би прочитати все це, не встаючи з крісла; Лише слова можуть привести мене до стану зрілості з ясним розумом, не відчуваючи всіх каменів спотикання та болю в долині, яка формує мою душу.
У мене все ще є дві думки (а може, і більше двох!) про статус і вплив великих мовних моделей на інформатику. )。 Ентузіасти штучного інтелекту можуть мати рацію. Ці моделі можуть взяти на себе програмування, а також багато інших видів роботи та навчання. Або вони можуть зазнати невдачі, як у випадку з іншими перспективними інноваціями штучного інтелекту. Я не думаю, що нам потрібно чекати занадто довго, щоб отримати відповідь.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Заключний розділ у галузі штучного інтелекту та програмування
Першоджерело: CSDN
На початку цього року Метт Велш оголосив, що програмування добігає кінця. Він написав у ACM Communications:
Я вважаю, що традиційна ідея «написання програм» вмирає, по суті, для всіх, крім дуже спеціалізованих додатків, якими ми його знаємо, більшість програмного програмування буде замінено навченими системами штучного інтелекту. У деяких випадках, коли потрібні тільки «прості» програми (адже не для всіх потрібні моделі з сотнями мільярдів параметрів, що працюють на кластерах GPU), самі програми будуть генеруватися безпосередньо ШІ, а не кодуватися вручну .
Через кілька тижнів у своїй промові Уельс розширив свої спостереження за смертю. У могилу йде не тільки мистецтво програмування, а й інформатика в цілому. Вся інформатика «приречена». (На зображенні нижче наведено скріншот виступу.) )
Я не настільки оптимістично дивлюся на майбутнє постпрограмування. По-перше, я налаштований скептично. Я не думаю, що ми переступили поріг того, щоб машини навчилися самостійно розв'язувати цікаві обчислювальні задачі. Я не думаю, що ми ще наблизилися до цього, або ми рухаємося в правильному напрямку. Більше того, якщо виявляється, що моя точка зору неправильна, мій імпульс полягає не в тому, щоб погодитися, а в тому, щоб чинити опір. З одного боку, я не вітаю нашого нового повелителя ШІ. Навіть якщо вони виявляться кращими програмістами, ніж я, я все одно продовжуватиму використовувати свій редактор коду та компілятор, дякую. «Програмування – це відстій?» Для мене це вже давно стало джерелом радості та натхнення. Я вважаю, що це також цінний інструмент для розуміння світу. Я ніколи не впевнений, чи зрозумію це, поки не зможу звести ідею до коду. Щоб отримати користь від цього навчального досвіду, мені довелося написати програму, а не просто сказати кілька чарівних слів і викликати джина з лампи штучного інтелекту Аладдіна.
Ідея про те, що програмовані машини можуть писати власні програми, глибоко вкорінена в історії комп'ютерної техніки. Чарльз Беббідж натякнув на цю можливість ще в 1836 році, коли обговорював свій план аналітичної машини. Коли Fortran був представлений у 1957 році, його офіційна назва була «Система автоматичного кодування FORTRAN». Його заявлена мета полягає в тому, щоб комп'ютери «кодували проблеми для себе і створювали програми, які були б такими ж хорошими (але без помилок), як і люди-кодери».
Fortran не усуває хитрощі (або помилки) програмування, але робить процес менш виснажливим. Пізніші мови та інші інструменти принесли подальші вдосконалення. І мрія про повністю автоматизоване програмування ніколи не була зруйнована. Машини, здається, краще пристосовані для програмування, ніж більшість. Комп'ютери методичні, прив'язані до правил, вибагливі і буквальні - всі ці риси (правильні чи неправильні) асоціюються з досвідченими програмістами.
За іронією долі, системи штучного інтелекту, які зараз готові до виконання завдань програмування, як не дивно, не схожі на комп'ютери. Їхні особистості більше схожі на Діану Трой, ніж на командора Дата. Логічна послідовність, причинно-наслідкові міркування та ретельна увага до деталей не є їхніми сильними сторонами. У них бувають неймовірно блискучі моменти, коли вони, здається, розмірковують над глибокими думками, але вони також мають потенціал для дивовижних невдач – кричущих, нахабних помилок розуму. Вони нагадують мені старий дотеп: люди помиляються, і для того, щоб все зіпсувати, потрібен комп'ютер.
Новітня система штучного інтелекту називається Big Language Model (LLM). Як і більшість інших нещодавніх винаходів штучного інтелекту, вони побудовані на штучних нейронних мережах, багатошаровій структурі, натхненній структурою мозку. Вузли мережі схожі на біологічні нейрони, а зв'язки між вузлами діють як синапси – точки з'єднання, де сигнали передаються від одного нейрона до іншого. Тренувальна мережа може регулювати силу або вагу з'єднання. У мовній моделі навчання здійснюється шляхом примусового введення великої кількості тексту в мережу. Коли процес завершено, з'єднані ваги кодують детальну статистику про мовні особливості навчального тексту. У найбільшій моделі кількість ваг становить 100 мільярдів і більше.
У цьому випадку термін модель може ввести в оману. Цей термін не відноситься до масштабних моделей або мініатюрних моделей, таких як авіамоделі. Натомість це стосується прогностичних моделей, таких як математичні моделі, які зазвичай зустрічаються в науці. Подібно до того, як атмосферні моделі передбачають завтрашню погоду, мовні моделі передбачають наступне слово в реченні.
Найвідомішою масштабною мовною моделлю є ChatGPT, який був оприлюднений восени минулого року та привернув велику увагу. Абревіатура GPT Gee Pee Tee: Мій язик постійно спотикається об ці три римовані склади. Інші продукти штучного інтелекту мають милі імена, такі як Барт, Клод, Лама; Я хотів би перейменувати GPT у тому ж дусі. Я б назвав його Джеппетто, і він перегукується зі схемою приголосних. GPT розшифровується як Generative Pre-Trained Transformer (генеративний попередньо навчений трансформатор); Чат-версія системи оснащена розмовним HMI. ChatGPT був розроблений компанією OpenAI, яка була заснована в 2015 році, щоб звільнити ШІ від контролю кількох багатих технологічних компаній. OpenAI успішно виконав цю місію до такої міри, що став багатою технологічною компанією.
ChatGPT викликає захоплення та шок своїм формулюванням, здатністю добре говорити, вільним володінням англійською та іншими мовами. Чат-бот може імітувати відомих авторів, розповідати анекдоти, писати любовні листи, перекладати вірші, писати спам, «допомагати» учням з домашніми завданнями та вигадувати дезінформацію для політичної дезінформації. Добре це чи погано, але ці мовні здібності являють собою дивовижний технологічний прогрес. Комп'ютери, які колись намагалися скласти зрозуміле речення, раптом стали майстрами слова. Те, що говорить GPT, може бути правдою, а може й ні, але воно майже завжди добре сформульоване.
Невдовзі після виходу ChatGPT я був здивований, виявивши, що його володіння мовою поширилося на мови програмування. Навчальний набір моделі, схоже, включає не тільки кілька природних мов, але й велику кількість вихідного коду програм із публічних репозиторіїв, таких як GitHub. На основі цього ресурсу GPT вміє писати нові програми на основі команд. Мене це здивувало, тому що комп'ютери дуже прискіпливі і невблаганно ставляться до своїх даних. Хоча комп'ютери іноді допускають невеликі помилки, такі як орфографічні помилки, читачам-людям важко зрозуміти речення. Але якщо комп'ютер отримує вхідні дані хоча б з однією комою або невідповідними дужками, він буде блювота спотворена. Мовні моделі з потенційно статистичними або імовірнісними властивостями навряд чи збережуть необхідну точність після декількох рядків.
Я знову помилився в цьому питанні. Ключове нововведення у великих мовних моделях - механізм уваги - вирішує цю проблему. Коли я сам почав експериментувати з ChatGPT, то швидко виявив, що він дійсно може генерувати програми без необережних граматичних помилок.
Але далі були й інші проблеми.
Коли ви сідаєте поспілкуватися з машиною, ви відразу стикаєтеся з незручним питанням: «Про що нам говорити?». Я шукаю тему, яка справедливо вимірює можливості програмування ChatGPT. Я хочу задачу, яку можна вирішити обчислювальними засобами, але для цього не потрібно багато арифметики, що вважається однією зі слабких сторін великих мовних моделей. Я вибрав гру з анаграмою, винайдену Льюїсом Керроллом 150 років тому і детально проаналізовану Дональдом Е. Кнутом в 90-х роках 20 століття.
У наведеній нижче розшифровці кожен обмін з мого боку позначений як BR; Розетка – це логотип OpenAI, який вказує на реакцію ChatGPT.
Не тільки окремі речення справляють враження мовних здібностей. Речення організовані в абзаци, які нанизуються разом, утворюючи зв'язний дискурс. Це чудово!
Також примітна здатність робота обробляти нечіткі та неакуратні введення. Мій початковий запит був сформульований як запитання «так» чи «ні», але ChatGPT правильно інтерпретував його як прохання: «Розкажіть мені, що ви знаєте про слово драбина». Моя друга інструкція ігнорує будь-які друкарські репліки, які вказують на те, що СВИНЕЦЬ і ЗОЛОТО слід розуміти як слова, а не як метал. Чат-бот мав надати мені рецепти алхімії, але надав відсутні цитати.
Однак, відкинувши всю цю лінгвістичну та риторичну складність, що я дійсно хотів перевірити, так це здатність програми розв'язувати проблему зі словесними сходами. Обидва приклади зі стенограми вище можна знайти в Інтернеті, тому вони, ймовірно, з'являться в навчальних даних ChatGPT. Іншими словами, великі мовні моделі можуть просто запам'ятовувати рішення, а не будувати їх. Тому я подав ще складніше завдання:
Це не окремий, унікальний провал. Усі мої спроби розгадати словесну драбину за допомогою ChatGPT пішли не за планом, хоч і не завжди однаково. В одному випадку я попросив драбину від REACH до GRASP. Експерти зі штучного інтелекту пропонують таке рішення:
ДОСЯГАТИ -> ВЧИТИ -> ПЕРСИК -> МИР -> ТЕМПИ -> ПАРИ -> РОЗБІР -> РОЗБІР -> РОЗБІР -> ПАРСЕ -> ПАРКИ -> ПАРКИ -> ПАРКИ -> ПАРКИ -> ПАРИ -> ХАПАТИ.
А це:
МЕЧ -> SWARD -> НАГОРОДА -> ПЕРЕМАЛЬОВУВАННЯ -> REDREW -> REDREW -> REDREW -> REDREW -> REDRAW -> ПОГАШЕНО -> РЕМОНТ -> PEACE
Тепер ми лепечемо, як маленькі діти, які тільки навчилися рахувати: «Раз, два, три, чотири, чотири, чотири, чотири, сім, синій, десять!» "
Усі результати, які я показав досі, задокументовані за допомогою ChatGPT версії 3.5. Також я спробував нову покращену версію 4.0, яка вийшла в березні. Оновлений робот випромінює таку ж доброзичливу впевненість, але, боюся, він має ті ж тенденції, впадаючи в випадкову непослідовність:
Нещодавно мені також випала нагода спробувати Llama 2, LLM, опубліковану Meta (люди з Facebook). Хоча ця модель була розроблена незалежно від GPT, вона, схоже, має деякі з тих самих психологічних особливостей, таких як створення правил, а потім їх ігнорування. Коли я попросив сходи, що з'єднує REACH і GRASP, Llama 2 запропонував наступне:
ДОТЯГНУТИСЯ -> НАВЧИТИ -> ВИРВАТИСЯ -> ВИЛУГОВУВАННЯ -> МОВА -> СИДІТИ -> ФУТІВ -> ХАПАТИСЯ
Метт Велш згадує два режими роботи обчислювальних систем, побудованих на великих мовних моделях. Досі ми працювали в так званому режимі пророцтва, коли ви ставите запитання, а комп'ютер повертає відповідь. Ви надаєте пару слів, і система знаходить драбину, яка їх з'єднує, і виконує будь-які обчислення, необхідні для того, щоб дістатися туди. Ви доставляєте коробку з-під взуття з фінансовими документами, а комп'ютер заповнює вашу форму 1040. Ви збираєте історичні кліматичні дані, а комп'ютер прогнозує середню глобальну температуру в 2050 році.
Альтернативою оракулам штучного інтелекту є AI Code Monkey. У другому режимі машина безпосередньо не відповідає на ваші запитання і не виконує ваші обчислення; Замість цього він створює програму, яка може запускатися на звичайному комп'ютері. Замість словесної драбини від вашого бота ви повертаєте програму, яка генерує сходи слів, написану на обраній вами мові програмування. Замість того, щоб заповнювати повну податкову декларацію, ви отримуєте програмне забезпечення для підготовки податкової звітності; Кліматичні моделі замінюють прогнози температури.
Давайте спробуємо це з ChatGPT 3.5:
Знову ж таки, побіжний погляд на вихідні дані показує, що виступ пройшов успішно. ChatGPT, здається, так само вільно володіє Java, як і англійською. Він знає синтаксис операторів if, while і for, а також усі метушливі правила пунктуації та дужок. Здається, що машинні програми поєднують всі ці компоненти для виконання заданого завдання. Також зверніть увагу на велику кількість пояснювальних коментарів, які безумовно для нашої користі, а не для неї. Аналогічно, імена описових змінних (currentWord, newWord, ladder).
ChatGPT також активно включає інструкції щодо запуску програми на конкретному прикладі (з березня по квітень), і він роздруковує результат, який збігається з відповіддю, наданою в нашому попередньому обміні. Чи генерується цей результат фактичним запуском програми? ChatGPT не говорить про це прямо, але стверджує, що якщо ви запустите програму відповідно до інструкцій, ви отримаєте відображені результати (у всій безглуздій красі).
Ми можемо перевірити цей оператор, завантаживши програму у веб-браузер або інше середовище виконання Java. Висновок: спіймали! Програма запустилася, але не видала заданого результату. РЕАЛЬНИЙ РЕЗУЛЬТАТ ПРОГРАМИ: БЕРЕЗЕНЬ -> AARCH -> APRCH -> APRIH -> КВІТЕНЬ. Така послідовність не така вже й дивна, адже вона дотримується правила зміни лише однієї літери за раз, а всі «слова» мають рівно п'ять букв. З іншого боку, в англійських словниках не можна знайти проміжного «слова».
ІСНУЄ ПРОСТИЙ АЛГОРИТМ, ЯКИЙ ГЕНЕРУЄ ПОСЛІДОВНОСТІ БЕРЕЗЕНЬ -> AARCH -> APRCH -> APRIH -> APRIL. Просто пройдіться по початковому слову крок за кроком зліва направо, змінюючи букву в кожній позиції, щоб вона відповідала відповідній букві в цільовому слові. Дотримуючись цього правила, будь-яку пару слів з п'яти букв можна розташувати покроково не більше ніж за п'ять кроків. БЕРЕЗЕНЬ-> КВІТЕНЬ робить лише чотири кроки, тому що літеру R посередині не потрібно змінювати. Я не можу уявити собі простішого способу зробити словесну драбину – припускаючи, звичайно, що ви готові зробити так, щоб будь-яка суміш букв вважалася одним словом.
Програма, створена ChatGPT, може використовувати цю швидку та брудну рутину, але вона робить щось набагато більш виснажливе: будує всі можливі сходи, перша з яких є початковим словом, і продовжує розширювати ці сходи, поки не натрапить на ту, яка містить цільове слово. Це марнотратний алгоритм перебору. Кожну букву початкового слова можна змінити 25 способами. Таким чином, слово з 5 букв має 125 можливих наступників. Коли ви досягаєте п'ятиступінчастої драбини, відкривається 190 мільйонів можливостей. (ПРИКЛАДИ, ЯКІ Я ТУТ НАВІВ, ТАКІ ЯК БЕРЕЗЕНЬ -> КВІТЕНЬ І REACH-> GRAMP, МАЮТЬ ІНВАРІАНТНУ ЛІТЕРУ, ТОМУ РІШЕННЯ ЗАЙМАЄ ЛИШЕ ЧОТИРИ КРОКИ.) Спроба обчислити повне рішення з п'яти кроків виснажила моє терпіння. )
Давайте спробуємо ту саму вправу з кодування з ChatGPT 4. З огляду на ту саму підказку, новий бот відповідає так:
Хоча GPT-4 визнає потребу в списку, він надає лише заповнювач, послідовність із 10 слів, яку він налаштовує для прикладу REACH-> GRASP, наведеного вище. Заглушки цього списку слів не приносять користі, навіть для регенерації фальшивої драбини «ДОТЯГНУТИСЯ до РОЗУМІННЯ». Якщо ви спробуєте це зробити, програма повідомить, що ніякої драбини не існує. У такому результаті немає нічого поганого, тому що задані 10 слів не утворюють ефективного шляху до зміни лише однієї літери за крок.
Навіть якщо слова в списку підібрані ретельно, словниковий запас 10 дуже незначний. Створення більших списків слів здається легким завданням для мовних моделей. Адже LLM навчається на величезному корпусі текстів, де майже всі англійські слова, швидше за все, з'являться хоча б один раз, тоді як звичайні слова з'являються мільйони разів. Невже робот не може взяти репрезентативну вибірку цих слів? Відповідь однозначно негативна. Хоча можна сказати, що GPT «прочитав» весь цей текст, він не зберігає ці слова в будь-якій легкодоступній формі. (Те ж саме стосується і читачів-людей.) Чи можете ви скласти список з 10 найпоширеніших слів з п'яти букв у вашому словниковому запасі, озираючись на досвід читання протягом усього життя?
Коли я попросив ChatGPT 4 згенерувати список слів, він вибачливо заперечив: «Вибачте за плутанину, але як штучний інтелект, розроблений OpenAI, я не можу безпосередньо отримати доступ до бази даних слів або отримати можливість отримувати дані із зовнішніх джерел...» Тому я спробував деякі хитрощі і попросив робота написати історію на 1000 слів, а потім відсортувати слова історії за частотою. Трюк спрацював, але зразок виявився занадто маленьким, щоб принести багато користі. Поки я дотримуюся його, я, можливо, зможу отримати прийнятний список від GPT, але я вибираю короткий шлях. Адже я не штучний інтелект, розроблений компанією OpenAI, і маю доступ до зовнішніх ресурсів. Я привласнив список з 5757 англійських слів з п'яти букв, складений Кнутом для його експерименту зі сходами слів. У цьому списку програми, написані на GPT-4, знайдуть наступну схему сходів з дев'яти ступенів:
ДОТЯГНУТИСЯ -> ПЕРСИК -> СПОКІЙ -> МІСЦЕ -> ЛІТАК -> ПЛАНИ -> ГОЛІВКА -> СКЛО -> ТРАВА -> ХАПАТИСЯ
Цей результат точно збігається з результатом власної програми Кнута, яку він опублікував 30 років тому в Stanford Graphbase.
На даний момент я повинен визнати, що з невеликою сторонньою допомогою ChatGPT нарешті виконав моє прохання. Він пише програму, яка може побудувати дійсну словесну драбину. Але у мене все одно є застереження. Хоча GPT-4 і Knuth пишуть програми, які виробляють однаковий результат, самі програми не є еквівалентними або навіть подібними.
Кнут підійшов до цієї проблеми в протилежному напрямку, почавши не з набору всіх можливих рядків з п'яти букв (яких налічується менше 12 мільйонів), а зі свого набагато меншого списку з 5757 поширених англійських слів. Потім він будує граф (або мережу), де кожне слово є вузлом, а два вузли з'єднані ребрами тоді і тільки тоді, коли відповідні слова відрізняються на одну букву. На наступній ілюстрації показаний фрагмент такої діаграми.
Програма «Сходи слів» Кнута вимагає початкових інвестицій, щоб перетворити простий список слів на діаграму. З іншого боку, він дозволяє уникнути марнотратного генерування тисяч або мільйонів рядків з п'яти букв, які не можуть бути елементами останніх. Розв'язуючи задачу REACH-> GRASP, програма GPT-4 створила 219 180 таких рядків; Лише 2 792 з них (трохи більше 1%) є справжніми словами.
Якщо різні описані мною процедури словесної драбини будуть представлені учнями, то я поставлю незадовільну оцінку версії без списку слів. Програма GPT-4 зі списком пройде, але заради ефективності та елегантності я лише поставлю програмі Knuth найвищі оцінки.
Чому чат-боти віддають перевагу гіршим алгоритмам? Ви можете просто загуглити «програму сходи слів», щоб отримати підказки. Майже всі результати з найвищим рейтингом надійшли з таких сайтів, як Leetcode, GeeksForGeeks і RosettaCode. Ці сайти явно призначені для пошуку роботи та конкурентів у змаганнях з програмування, з рішеннями, які вимагають генерації всіх 125 однобуквених варіантів кожного слова, як і програми GPT. Оскільки таких сайтів дуже багато – здається, сотні – вони важливіші за інші джерела, такі як книга Кнута (якщо текст таки з'явиться в навчальному наборі). Чи означає це, що ми повинні звинувачувати Leetcode у неправильному виборі алгоритму, а не GPT? Замість цього хотілося б вказати на неминучі слабкі місця протоколу, найпоширенішими з яких є правильна відповідь за замовчуванням.
Щоразу, коли я думаю про те, що великі мовні моделі пишуться для всього нашого програмного забезпечення, мене переслідує інше пов'язане з цим занепокоєння. Звідки беруться нові алгоритми? Мовна модель коледжу може бути креативною в реміксуванні елементів існуючих проектів, але я не бачу жодного способу, як вона може винайти щось абсолютно нове і краще.
**
Досить слова драбина! **
Зізнаюся, я зайшов занадто далеко, замучивши ChatGPT занадто великою кількістю варіантів конкретної (і неактуальної) проблеми. Можливо, мовні моделі коледжу краще справляються з іншими обчислювальними завданнями. Я спробував кілька, і результати були неоднозначними. Я просто хочу обговорити одну з них, і я вважаю зусилля ChatGPT досить гострими.
З ChatGPT 3.5 я прошу значення 100-го числа Фібоначчі. Зверніть увагу, що моє запитання було поставлено в режимі Oracle; Я прошу цю цифру, а не програму, яка її обчислює. Тим не менш, ChatGPT добровільно пише програму Фібоначчі, а потім рендерить вихідні дані цієї програми.
Давши те саме завдання ChatGPT 4.0, ми вирушимо в подорож, яка є ще дивнішою. У наступній взаємодії я активував Code Interpreter, плагін ChatGPT, який дозволяє системі тестувати та запускати частину коду, який вона пише. Судячи з усього, робот скористався цією особливістю, спочатку придумавши програму, яка дала збій з невідомих причин:
У цей момент робот повернеться в абсолютно новому напрямку і злетить, пропонуючи обчислити необхідне значення Фібоначчі за математичною тотожністю, яка називається формулою Біне. Він писав математичні вирази, але потім передумав. Він правильно передбачає задачу чисельної точності: при точному значенні квадратного кореня з 5 формула дасть точний результат, але це неможливо.
Тож тепер ChatGPT обрав іншу стратегію, використовуючи той самий ітераційний алгоритм, що й версія 3.5. Цього разу ми отримали правильну відповідь, тому що Python (на відміну від Java) не має жодних проблем із великими цілими числами.
Я був вражений цим виступом не тільки правильною відповіддю, а й мужньою наполегливістю системи. Незважаючи на негаразди ChatGPT, він вистояв, спантеличений несподіваними труднощами, але відмовився здаватися. "Що ж, цей матричний метод має працювати. Але, в будь-якому випадку, давайте спробуємо формулу Біне... Ой, стривайте, я забув... У всякому разі, не потрібно так вигадливо ставитися до цього. Давайте зробимо це очевидним, повільним способом. Я відчуваю, що це дуже людяний підхід до вирішення проблем. Дивно бачити таку поведінку в машинах.
Мій маленький експеримент змусив мене засумніватися в твердженні, що оракули штучного інтелекту та мавпи коду ШІ ось-ось витіснять людей-програмістів. Я бачив певний успіх, але скоріше провал. Цей похмурий запис був складений на відносно простих обчислювальних задачах, розв'язки яких добре відомі та широко опубліковані.
Інші зробили більш широку і глибоку оцінку генерації коду LLM. У бібліографії в кінці цієї статті я наводжу п'ять таких досліджень. Я хотів би коротко підсумувати деякі результати, про які вони повідомили.
Два роки тому Марк Чен і понад 50 колег з OpenAI доклали багато зусиль, щоб виміряти точність Codex, відгалуження ChatGPT 3, присвяченого написанню коду. (З тих пір Codex став рушієм, який живить GitHub Copilot, «помічника програміста».) ) створив набір із 164 завдань, які можна виконати, написавши програми на Python. Ці завдання в основному є вправами з підручників, змаганнями з програмування та типами в (приголомшливій) літературі про те, як добре пройти співбесіду з кодування. Більшість завдань можна виконати лише кількома рядками коду. Приклад: Обчисліть кількість голосних у даному слові, визначте, чи є ціле число простим чи складеним.
Команда професора Чена також поміркувала над критеріями визначення успіху та невдачі. Оскільки процес LLM є недетермінованим (вибір слів базується на ймовірності), модель може згенерувати недосконалу програму з першої спроби, але в кінцевому підсумку дасть правильну відповідь, якщо спробу буде продовжено. Параметр, який називається температурою, контролює ступінь невизначеності. При нульовій температурі модель завжди вибирає найбільш ймовірне слово на кожному кроці; З підвищенням температури вводиться випадковість, що дозволяє вибирати малоймовірні слова. Чен та ін. Розглянемо можливість цієї зміни, прийнявши три критерії успіху:
pass@1: LLM генерує правильну програму з першої спроби
pass@10: Принаймні одна з 10 згенерованих програм правильна
pass@100: Принаймні одна зі 100 згенерованих програм правильна
Pass@1 тести проводяться при нульовій температурі, тому модель завжди дає найкраще припущення. Випробування pass@10 і pass@100 проводяться при більш високих температурах, що дозволяє системі досліджувати більш широкий спектр потенційних рішень.
Автори оцінили кілька версій Кодексу за всіма 164 завданнями. Для найбільшої та найпотужнішої версії Кодексу показник pass@1 становить близько 29%, показник pass@10 – 47%, а pass@100 досягає 72%. Чи повинні ми бути вражені чи шоковані, коли бачимо ці цифри? Чи варто відзначати, що Кодекс правий з першої спроби майже в третині випадків (коли температура встановлена на нуль)? Або, якщо ви були готові переглянути 100 запропонованих планів, щоб знайти потрібний, рівень успіху зріс майже до трьох чвертей? Моя особиста думка така: якщо ви подивитеся на нинішнє покоління LLM як на новаторську спробу в довгостроковій дослідницькій програмі, результати будуть обнадійливими. Але якщо ви думаєте, що ця технологія може негайно замінити програмне забезпечення з ручним кодуванням, надії мало. Ми ще далекі від необхідного рівня надійності.
Інші дослідження дали в цілому схожі результати. Фредріко Кассано та ін. Оцінювати продуктивність кількох LLM, що генерують код на різних мовах програмування; Вони повідомляють про широкий діапазон показників pass@1, але лише два з них перевищують 50%. Алессіо Бушемі протестував ChatGPT 3.5 на 40 завданнях кодування, вимагаючи програм, написаних 10 мовами та повторюючи кожен запит 10 разів. З 4 000 випробувань 1 833 створили код, який можна було скомпілювати та виконати. Лю Чжицзе та ін. Їхня оцінка ChatGPT ґрунтується на запитаннях, розміщених на сайті Leetcode. Оцініть результати, надіславши згенерований код до автоматизованого процесу оцінювання Leetcode. Середній рівень прийняття всіх питань коливався від 31% для програм, написаних на C, до 50% для програм на Python. Лю та ін. Ще одне цікаве спостереження: ChatGPT отримав набагато гірші бали на запитання, опубліковані після вересня 2021 року (встановленого терміну навчання GPT). Вони припускають, що робот може бути краще здатний вирішувати попередні проблеми, оскільки він вже бачив рішення під час навчання.
Нещодавня стаття, опублікована Лі Чжуном і Цзилун Ваном, виходить за рамки основного питання правильності програми та розглядає надійність і міцність. Чи правильно реагує згенерована програма на неправильно сформовані вхідні дані або зовнішні помилки, наприклад, при спробі відкрити файл, якого не існує? Незважаючи на те, що запит LLM містив приклад, що показує, як правильно справлятися з такими проблемами, Чжун і Ван виявили, що згенерований код не справлявся з цим у 30-50 відсотках випадків.
Крім цих невтішних результатів, у мене самого більше сумнівів. Майже всі тести проводяться за допомогою коротких фрагментів коду. LLM, який має труднощі з написанням 10-рядкової програми, може мати більші труднощі з написанням 100-рядкової або 1,000-рядкової програми. Крім того, проста оцінка «склав/не склав» є дуже приблизним показником якості коду. Розглянемо тест простоти в груповому наборі бенчмарків Чена. Це одна з програм, написаних на Codex:
Для великих мовних моделей ще рано. ChatGPT був випущений менше року тому; Базовій технології всього близько шести років. Хоча я майже впевнений, що стверджую, що LLM не готова завоювати світ кодування, я не можу з такою впевненістю передбачити, що вони ніколи цього не зроблять. Ці моделі обов'язково вдосконалюватимуться, і ми будемо використовувати їх краще. Вже існує індустрія, що розвивається, яка пропонує рекомендації «точно в строк інжинірингу» як спосіб отримати максимальну віддачу від кожного запиту.
Іншим способом підвищення продуктивності LLM може бути створення гібрида з іншою обчислювальною системою, оснащеною інструментами логіки та міркувань, а не інструментами аналізу чистої мови. Напередодні своєї недавньої смерті Даг Ленат запропонував об'єднати LLM з Cyc, величезною базою даних здорового глузду, над створенням якої він витратив чотири десятиліття. Стівен Вольфрам працює над інтеграцією ChatGPT у Wolfram|В Альфа Вольфрам|Alpha — це онлайн-колекція відібраних даних та алгоритмів.
Тим не менш, деякі перешкоди, які заважають створенню курсу LLM, здаються важкими для подолання.
Мовні моделі творять свою магію простим способом: у процесі написання речення або абзацу LLM вибирає наступне слово на основі попереднього слова. Це все одно, що написати текстове повідомлення на телефоні: ви набираєте «Я побачу тебе...», а програма пропонує альтернативні продовження: «завтра», «скоро», «пізніше». У LLM кожному кандидату присвоюється ймовірність, яка розраховується на основі аналізу всього тексту в модельному навчальному наборі.
Понад століття тому російський математик А. А. Марков вперше дослідив ідею генерації тексту на основі цього статистичного аналізу. Його процес тепер відомий як n-грамова модель, де n — кількість слів (або символів, або інших символів), які слід враховувати при виборі наступного елемента послідовності. Я давно захоплююся процесом n-грами, хоча в основному через його комедійні можливості. (У статті, опублікованій 40 років тому, я назвав це «мистецтвом перетворювати літературу на тарабарщину».) ")
Звичайно, ChatGPT та інші останні LLM – це більше, ніж n-метамоделі. Їхня нейронна мережа фіксує лінгвістичні статистичні особливості, що виходять далеко за межі послідовності з n послідовних символів. Особливе значення має механізм уваги, який відстежує залежності між обраними символами на довільних відстанях. У природних мовах цей засіб корисний для підтримки узгодженості підмета та присудка або для асоціювання займенників з об'єктом, до якого вони відносяться. У мовах програмування механізм уваги забезпечує цілісність багаточастинних синтаксичних структур, таких якщо... то... else, і він зберігає дужки належним чином поєднаними та вкладеними.
Однак, навіть з урахуванням цих удосконалень, LLM по суті є інструментом для побудови нового тексту на основі ймовірності появи слів в існуючому тексті. На мою думку, це не мислення. Це щось більш поверхневе, зосереджене на словах, а не на ідеях. З огляду на цей грубий механізм, я був одночасно здивований і спантеличений тим, як багато вдалося досягти LLM.
Протягом десятиліть архітектори ШІ вважали, що справжній інтелект, природний чи штучний, вимагає ментальної моделі світу. Для того, щоб зрозуміти, що відбувається навколо вас (і всередині вас), вам потрібно мати інтуїцію про те, як все працює, як вони поєднуються один з одним, що відбувається далі, причинно-наслідкові зв'язки. Лінант наполягає на тому, що найважливіші знання – це знання, які ви отримуєте задовго до того, як почнете читати. Ви дізнаєтеся про силу тяжіння, падаючи. Коли ви виявляєте, що вежу з будівельних блоків легко зруйнувати, але важко відновити, ви розумієте ентропію. Перш ніж мова почне вкорінюватися, ви дізнаєтеся про біль, страх, голод і любов у дитинстві. Мозок у коробці не може отримати доступ до цього досвіду, тому що він не може безпосередньо отримати доступ до фізичного чи соціального всесвіту.
Двісті п'ятдесят років тому швейцарський годинникар П'єр Жаке-Дроз побудував механічний автомат, який міг писати пером. Цей годинниковий пристрій має сотні кулачків і шестерень і одягнений у вигляді маленького хлопчика, що сидить на табуретці. Після активації хлопчик вмочив ручку в чорнило і написав коротке послання, в першу чергу картезіанський афоризм «Я мислю, отже, я існую». Як смішно! Але навіть у 18 столітті ніхто не вірив, що ляльки-графіті справді мислять. Скептики LLM ставлять ChatGPT в одну категорію.
Я скажу вам, яка з цих протилежних теорій менталітету LLM правильна? Я ні. Жоден з варіантів мені не сподобався. Якщо Бендер та інші мають рацію, то ми повинні зіткнутися з тим фактом, що гаджет, який не має здатності міркувати чи відчувати, не має досвіду фізичного всесвіту чи соціальної взаємодії, не має самосвідомості, пише студентські роботи, пише реп-пісні, дає поради закоханим. Знання, логіка, емоції нічого не варті; Слизький язик – це все. Це підривна пропозиція. Якщо ChatGPT може обдурити нас цим нестивним шоу, можливо, ми теж брехуни, а їхні голоси та гнів безглузді.
З іншого боку, якщо Суцкевер має рацію, то більшу частину людського досвіду, який нам дорогий, – почуття особистості, яке повільно розвивається в міру того, як ми ростемо і живемо – можна дізнатися, прочитавши ці слова в Інтернеті. Якщо це так, то мені насправді не потрібно терпіти невимовний біль молодшої школи, мені не потрібно робити всі дурні помилки, які викликають такий душевний біль і труднощі; Не потрібно зачіпати свою самооцінку, зіткнувшись зі світом. Я міг би прочитати все це, не встаючи з крісла; Лише слова можуть привести мене до стану зрілості з ясним розумом, не відчуваючи всіх каменів спотикання та болю в долині, яка формує мою душу.
У мене все ще є дві думки (а може, і більше двох!) про статус і вплив великих мовних моделей на інформатику. )。 Ентузіасти штучного інтелекту можуть мати рацію. Ці моделі можуть взяти на себе програмування, а також багато інших видів роботи та навчання. Або вони можуть зазнати невдачі, як у випадку з іншими перспективними інноваціями штучного інтелекту. Я не думаю, що нам потрібно чекати занадто довго, щоб отримати відповідь.