Стівен Вольфрам: Рубежі обчислювального мислення (звіт з фестивалю SXSW)


Переклад поста Стівена Вольфраму (Stephen Wolfram) "Frontiers of Computational Thinking: A SXSW Report".
Висловлюю величезну подяку Кирилу Гузенко за допомогу в перекладі.


минулого тижня я виступав на SXSW Interactive 2015 в Остіні, штат Техас. Ось кілька відредагована стенограма мого виступу:


Зміст
Найбільш продуктивний рік
Мова Wolfram Language
Мова для реального світу
Філософія Wolfram Language
Програми розміром в один твіт
Обчислювальне мислення для дітей
Enter запитів на природній мові
Масштабна ідея: Символьне програмування
Мова для розгортання
Автоматизація програмування
Масштабні програми
Інтернет речей
Машинне навчання
Дослідження Обчислюваної Всесвіту
Обчислювати, подібно до того, як це робить мозок
Мова як символьне уявлення
Пост-лінгвістичні поняття
Стародавня історія
Чим буде займатися штучний інтелект?
Безсмертя і за його межами
Коробка трильйона душ
Назад у 2015 рік

Найбільш продуктивний рік
Знову здрастуйте! Я, взагалі-то, говорив про обчисленнях тричі ("Впроваджуючи обчислення всюди" (Статтю на Хабрахабре), "Talking about the Computational Future at SXSW 2013", "Computation and Its Impact on the Future") тут, на фестивалі SXSW. І я повинен сказати, що коли я вперше погодився виступити з промовою, я хвилювався, що я не зможу сказати нічого нового. Але, насправді, є величезна кількість нових і цікавих речей. Цей рік, ймовірно, став найбільш продуктивним у моєму житті. І я радий, що у мене є можливість поговорити з вами сьогодні тут про деякі речі, які я зрозумів останнім часом.

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

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

Я радий сказати, що багато людей використовували як наукові, так і технологічні рішення, створені нашою компанією. Але я думаю, що ми маємо зараз набагато більше, ніж раніше. Насправді, розмовляючи з людьми за останні пару днів на SXSW я дійсно вражений, тому що, мабуть, приблизно 3/4 людей, з якими я говорив, радикально змінили спосіб робити те, що вони роблять завдяки речам, які ми створили.

Мова Wolfram Language
Ок. Тепер я вам розповім про те, як їм це може вдатися. Все починається з мови Wolfram Language. Два роки тому ми вперше заговорили про нього тут, на SXSW.

Мова Wolfram Language — це величезний амбітний проект, який одночасно є ключовою технологією, репозитарием і реалізацією безлічі фундаментальних ідей. Ви можете почати використовувати його прямо зараз, безкоштовно, в інтернеті. Насправді, він працює майже скрізь: в хмарі, настільних комп'ютерах, серверах, суперкомп'ютерах, вбудованих процесорах, приватних хмарах, на чому завгодно!



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

Я працював над створенням Wolfram Language близько тридцяти років. Як у системі Mathematica і Wolfram|Alpha безліч людей вже використали безліч прототипів тих речей, які у нас зараз з'явилися.

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

Отже, давайте подивимося його в дії. Почнемо з невеликого знайомства з мовою в документі системи Mathematica, званому нами блокнотом (ноутбуком), який ми винайшли 26 років тому. Давайте зробимо що-небудь просте.



Добре. Давайте спробуємо щось інше. Ви знаєте, що в цю суботу був міжнародний день числа Пі: 3/14/15 (стаття Хабрахабре "3/14/15 9:26:53 Святкування «Дня числа» Пі " століття, а також розповідь про те, як отримати свою дуже особисте частинку числа пі"). І оскільки ми є компанією, яка, як я думаю, видала число Пі за запитами більше, ніж будь-яка інша в історії, ми влаштували невелику святкування в честь дня Пі. Так нехай Wolfram Language обчислить число Пі, припустимо, з точністю до 1000-го знака після коми:



Готове. Навіщо зупинятися на малому — давайте порахуємо з точністю до мільйона знаків. Це займе трохи більше часу…



… але ненабагато. А ось і результат. Він все йде і йде вниз… праворуч ви можете бачити смугу прокручування.

В якості іншого прикладу можемо взяти статтю з Вікіпедії про число Пі:



І зробити з неї хмара слів:



Само собою зрозуміло, у статті про число Пі, число Пі саме займає чільне місце.

Або давайте отримаємо зображення. Ось я:



Давайте підемо далі і зробимо що-небудь з цим зображенням. Приміром, застосуємо функцію пошуку кордонів (EdgeDetect). Знак відсотка % завжди означає використання попереднього результату обчислення, так що…



… ось результат пошуку країв на цьому зображенні. Або давайте зробимо, скажімо, морфологічний граф (MorphologicalGraph) з цього зображення, так що тепер у нас є щось на зразок мережі:



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



Або зробимо таблицю із зображень, отриманих при різних значеннях чутливості алгоритму:



А зараз, для прикладу, можемо скласти всі ці зображення в стопку і отримати 3D зображення:



Мова для реального світу
The Wolfram Language має величезну кількість вбудованих алгоритмів. У ньому так само є велика кількість фактичної інформації з реального світу. Так що, наприклад, я можу сказати просто “планети (PlanetData)":



Запит, який ми дали на природному мовою, був зрозумілий і оброблений. Давайте виведемо список планет:



Ось, власне, він. Відтепер можна отримати зображення:



А тепер дізнаємося їх маси:



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



Думаю, це просто прекрасно, що один рядок коду може видавати подібне.

Підемо далі. Це координати того місця (Here), де, як «вважає» інтернет, знаходиться мій комп'ютер в даний момент (GeoIP):



Можна зробити запит — у скільки сьогодні в цьому місці буде захід (Sunset)?



І скільки до нього залишилося c поточного моменту часу (Now)?



Добре. Давайте зробимо карту (GeoGraphics) околиці в 10 миль навколо центру (GeoDisk) Остіна:



Або, скажімо, отримаємо список, що містить карти околиць, радіуси яких будуть послідовними ступенями 10:



Або давайте зробимо те ж саме, але в масштабах планети. Запитаємо місце посадки Apollo 11 на Місяці і побудуємо область з радіусом в тисячу миль навколо:



Ми можемо робити найрізноманітніші речі. Давайте спробуємо що-небудь з іншої області. Наприклад, отримаємо список робіт Ван Гога:



І отримаємо зображення перших 20-ти з них:



А тепер, приміром, можемо дізнатися домінуючі кольори (DominantColors) на цих картинах:



І побудуємо ці кольори на кольоровій діаграмі (ChromaticityPlot3D) в 3D:



Філософія Wolfram Language
Дуже дивно те, як багато можна зробити, використовуючи такий крихітний код на Wolfram Language.

Це дійсно щось нове в програмуванні. Я маю на увазі кардинальні зміни. Традиційна ідея полягає у створенні відносно невеликого мови програмування для написання щодо великих програм для якихось потреб. Ідея Wolfram Language — зробити мову якомога більшою; вбудувати в нього все, що тільки можна; автоматизувати всі процеси в програмуванні, до яких дотягнуться руки.

Нижче представлені області, з якими Wolfram Language має справу:



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

Я витратив майже 30 років свого життя зберігаючи концепцію мови ясною і послідовною.

Це було дійсно цікаво, і результат дійсно радує, тому що тепер у нас є щось неймовірно потужне, що ми можемо використовувати, щоб розвивати сама мова прискореними темпами.

Програми розміром в один твіт
Нещодавно нами заради розваги було створено щось під назвою програми-твіти (стаття Хабрахабре "Компанія Wolfram Research відкрила сервіс Tweet-a-Program: цікавих програм на мові Wolfram Language, довжина яких не перевищує 140 символів").



Ідея полягає у відправці програми як твіти та отримання результату її виконання. На нашому стенді на виставці (мається на увазі на фестивалі SXSW — прим. пер.) Ви можете побачити галерею програм-твітів. А тут представлена online колекція найрізноманітніших програм-твітів. І найголовніше — всі вони містять не більш ніж 140 символів і роблять різні речі:



Ми вирішили відзначити цю справу і випустити гральні карти з кодами, кожна з яких містить програму-твіт:



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

Ви цілком можете припустити, що з цим можуть впоратися навіть діти. Знаєте, і Ви будете праві! І, насправді, я вважаю, що це важливий момент у програмуванні. Згадаємо, наприклад, що сталося з редагуванням відео: професіонали більше не мають якихось реальних переваг перед дітьми. Ми автоматизували наша мова настільки, що тепер і в програмуванні спостерігається схожа ситуація.

Зараз я дуже захоплений однією ідеєю: використовувати нашу мову як шлях до вивчення обчислювального мислення для якомога ширшого кола людей.

Скоро має вийти сервіс Wolfram Programming Lab — це безкоштовний інтернет-проект. Це щось на зразок проміжного мови для вивчення Wolfram Language, де у Вас є безліч маленьких працюючих фрагментів коду Wolfram Language. Ці фрагменти можна якось модифікувати, а потім запускати.



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

Давайте розглянемо кілька прикладів. Не так давно був день числа Пі, так що давайте поглянемо на урок «Намисто із знаків числа Пі»:



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

Можна розглянути ще один приклад. Давайте зробимо що-те, що пов'язане з реальним світом. Скажімо, як далеко можна пустити свій погляд з конкретного хмарочоса?



Програма видає область видимості з Емпайр-стейт-білдінг. Ми можемо піти далі, змінювати параметри і дивитися, що буде змінюватися, або ж повернутися назад і розібратися з іншими завданнями.



Я сподіваюся, що діти (та й не тільки діти) отримають задоволення від того, що ми зробили. Думаю, це здорово для навчання: якась суміш точного математичного та художньо-творчого. І, до речі, в Programming Lab ми можемо дивитися на програми, які намагаються написати користувачі, та проводити різного роду аналітику.

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



Вважаю, безліч дивовижних речей станеться, коли значно більша кількість людей освоять обчислювальне мислення разом з Wolfram Language.

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

Той прорив, який ми здійснили розуміння природної мови, став доступний завдяки нових видів алгоритмів, так і нашої величезної базі знань.

Ми використовуємо всі наші знання і обчислювальні потужності для створення автоматичних звітів по запитах користувачів.

Чи то питання щодо демографії:



Або про літаки — код нижче показує літаки, що перебувають наді мною (тобто над тим місцем, де інтернет визначив знаходження мого комп'ютера):



Або про геномних послідовностей. Система видасть, буде дана випадкова послідовність пар основ з'являтися десь в людському геномі:



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



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

Знаєте, можливість використовувати природний мова — одна з центральних ідей і Wolfram Language. Тому що, коли Ви хочете послатися на що-то з реального світу, скажімо, на місто (CityData) — Ви ж не можете кожен раз звертатися до документації, щоб записати його назву. Ви хочете ввести його природною мовою і отримати деяку вычисляемую інтерпретацію.

І це саме те, що ми зараз зробимо. Введемо, наприклад, щось на кшталт:



І отримаємо:



Система інтерпретує це як «New York City». І тепер ми можемо, наприклад, поцікавитися населенням міста:



Масштабна ідея: Символьне програмування
Є безліч речей, які змушують Wolfram Language працювати, і це не тільки десятки мільйонів рядків і терабайти вивірених даних, але і деякі масштабні ідеї.

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

Ось основна концепція: в Wolfram Language, абсолютно все — символьно. І мова йде не тільки про об'єкти з якимось конкретним значенням. Це може бути якась річ, поняття.

Якщо я просто зважаючи x у більшості мов програмування, вони видадуть щось на кшталт: «Допоможіть, я не знаю, що це за x ». А Wolfram Language просто видасть «Окей, x x; всі символьно».



І суть в тому, що практично все може бути представлена в такому вигляді. Якщо я через «Jupiter», це просто щось символьне:



Або, наприклад, якщо я додам картинку, то це теж буде символьний об'єкт:



У мене може бути який-небудь слайдер (Slider)елемент інтерфейсу — знову таки, він буде сприйматися як щось символьне:



І тепер, коли ви визначаєте, ви можете робити що завгодно з чим завгодно. Можна проводити операції з x:



Або із зображенням Юпітера:



Або зі слайдерами:



Або з чим завгодно.

Мені знадобилося дуже багато часу для розуміння того, наскільки потужна насправді ця ідея — ідея символьного програмування. З року в рік я розумію все більше.

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

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

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







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

Добре, значить, ми можемо працювати з Wolfram Language прямо в хмарі. І це дуже зручно. Але ви також можете вирішувати й інші завдання через хмару.

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



Тепер у нас є хмарний об'єкт з URL. Ми просто переходимо по посиланню і побачимо форму. Форма містить «розумне поле», яке розпізнає природний мову. У нашому конкретному випадку — опис котячих порід. Надрукуємо тепер, приміром, «сіамський». Код виконається, і ми отримаємо фотографію кота.



Ми можемо зробити наше додаток трохи більш складним. Давайте додамо ще одне поле:



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



Ось, власне, так ми можемо зробити веб додаток, яким зможемо користуватися на мобільних платформах. Ми так само можемо зробити для цього API. Використовуємо той же шматок коду. Насправді потрібно просто змінити в цьому коді FormFunction на APIFunction:



Те, що ми отримали є готовий API, який ми можемо передавати параметри; можемо поставити «cat=manx», «angle=300», запустити це і отримати інший результат.



Той API, який ми тільки що створили, може бути використаний ким завгодно через хмару. І ми можемо викликати API з чого завгодно: сайту, програми, тощо. І ми маємо можливість автоматично генерувати код на іншій мові для виклику, скажімо, в Java.



Так що в дійсності Ви можете користуватися функціоналом Wolfram Language всередині будь-якого проекту на будь-якій мові.

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

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

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

Автоматизація програмування
Знаєте, наша компанія має справу з питаннями автоматизації кожен день. Всі ці наші проекти, всі ті речі, що ми створюємо, величезна кількість всього… можна подумати, що у нас тисячі співробітників роблять все це. Однак ми автоматизуємо нашу діяльність, а те, що отримуємо, автоматизуємо знову, і так з разу в раз ось вже чверть століття. Таким чином, ми досі невелика приватна компанія з персоналом близько 700 осіб і з великим об'ємом автоматизованого.

Досить захоплююче спостерігати це: ось, ми автоматизуємо щось-скажімо, якийсь проект, пов'язаний з веб-розробкою. І цей трудомісткий проект, який би вимагав кількох місяців, реалізується тепер всього за один день. З управлінської точки зору це сильно підвищує рівень інноваційності того, що Ви робите!

Дозвольте мені навести Вам приклад двотижневої давності. Йшло обговорення — що б зробити такого в день числа Пі. І ми подумали, що було б добре створити такий сайт, де можна ввести дату свого дня народження і дізнатися, де в числі Пі зустрічається ця цифрова послідовність, а потім ще зробити класну футболку на основі всього цього.

Так, це не особливо важлива для компанії завдання. Але якщо це зовсім нескладно, то чому б це не зробити? З нашим рівнем автоматизації-це легке завдання. Нижче наведено код, який був написаний для створення цього сайту:



Код вийшов не дуже великий. Десь тут йде вивантаження в хмару, яка тут називається Zazzle API, ну і так далі. Дозвольте показати сайт, який у нас вийшов:

mypiday.com website

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



І, насправді, жоден програміст не залучався для створення цього. Всю роботу зробив наш арт-директор ко дню числа Пі, після чого сотні тисяч футболок з індивідуальними малюнками розійшлися серед любителів по всьому світу.

Масштабні програми
Розробка масштабних програм на Wolfram Language — вельми цікаве видовище. Тут представлена IDE, заснована на Eclipse, а незабаром ми збираємося випустити безліч елементів інтеграції з Git, які поки що використовуються тільки всередині компанії. Але одна річ, яка сильно відрізняється від інших мов, полягає в тому, що люди схильні писати код у блокнотах.



Вони можуть помістити свій код з усіма подробицями і додатками — з зображеннями, текстом і чому б то не було. Вони можуть використовувати блокноти для проведення структурованих тестів; нижче представлений блокнот для тестування з різними тестами, які ми можемо проводити, і всім супутнім:



Вони так само можуть використовувати блокноти для створення шаблонів обчислюваних документів, куди можна вбудовувати безпосередньо символьний код Wolfram Language і отримувати статичні/інтерактивні документи/звіти.

До речі, одне з чудових властивостей всієї цієї екосистеми полягає в тому, що якщо Ви бачите кінцевий результат — скажімо, інфографіку — у вас є стандартний спосіб включити відсилання до обчислень, яка буде вести до потрібного місця в тому блокноті, в якому вона була зроблена. Так що у Вас є доступ «під капот», де Ви можете самостійно працювати з даними. Це дуже корисно для роботи з дослідними/журналістськими даними.

Інтернет речей
Власне, якщо говорити про дані, то пару тижнів тому ми випустили те, що отримало назву Data Drop (стаття Хабрахабре "Wolfram Data Drop — новий сервіс Wolfram Research").



Ідея полягає в тому, щоб дозволити чого завгодно — в особливості пов'язаним пристроїв — легко відправляти дані в хмару, а потім робити ці дані осмисленими і доступними через Wolfram Language звідки завгодно.

Ось, наприклад, пристрій, який вимірює якісь різні параметри… хоча, як мені здається, ця штука вимірює тільки рівень освітленості… нуднувато.



Однак, в будь-якому випадку, воно підключено через wifi до нашого хмари. І всі виміряні дані направляються в Data Drop, в певний databin, поставлений у відповідність цього пристрою.



Ми використовуємо щось під назвою WDF — Wolfram Data Framework — для того, щоб пояснювати, що означають поступаемые з пристрою голі цифри. І тепер ми можемо виконувати всі види обчислень.

Взагалі, пристрій зібрало поки що зовсім небагато даних, але ми можемо рухатися далі і побудувати графік з того, що вже маємо:



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



Знаєте, у нас є всі ці дані про мир з нашої бази знань, інтегрованої прямо в нашу мову. І тепер з Data Drop Ви можете інтегрувати дані з будь-якого пристрою, з якого тільки захочете. У нас є цілий список всяких різноманітних пристроїв, які інтегровані з Wolfram Language за останні пару років.



Як тільки Ви помістіть дані Drop, Ви зможете використовувати їх скрізь, де використовується Wolfram Language: Wolfram|Alpha, Siri або в чому б то не було.

Це насправді важливо, що Wolfram Language може представляти різні типи даних стандартним способом, тому що це означає, що ви можете негайно почати проводити обчислення, працювати з databin — все що завгодно. Я повинен сказати, що можливість завантажувати дані через Wolfram Data Drop — це дійсно зручно.

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



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



Але зараз — з Data Drop — я починаю збирати ще більше даних. Я думаю, кількість моїх databins обчислюється вже двозначними числами. З цього databin можна дізнатися мій пульс у день числа Пі. Я думаю, що цей пік припадає саме на момент Пі.



Машинне навчання
Так що ж нам робити з усіма цими вступниками даними? Ну, у нас є вся міць візуалізації, класифікації і аналізу даних Wolfram Language. Одна з наших цілей — проводити аналіз даних автоматично (наука про даних), не віднімаючи часу у фахівців. І одна з областей, в якій ми добре попрацювали для вирішення цих завдань — машинне навчання.

Скажімо, Ви хочете сортувати картинки за критерієм день/ніч. Добре, ось у мене є маленький навчальний набір картинок, на яких зображені чи день, чи ніч. У мене є одна маленька вбудована функція Classify, яка видасть класифікатор, що визначає час доби на картинці.



Класифікатор отримано. Тепер я просто можу застосувати цей класифікатор до картинок, і він скаже мені, де він бачить день, а де ніч.



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

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

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

Так, давайте спробуємо розпізнати цей банан. От, зробимо знімок, і тепер подивимося, що станеться, якщо я введу ImageIdentify



Про! Відмінно!

Все вірно. Я продовжу спокушати долю і спробую кілька інших речей. Що це? Мабуть, це пластикова моделька трицератопса. Подивимося, що скаже система. Сподіваюся, все вийде.



Ой. Система говорить, що це козел! Ну, з того дивного ракурсу, здається, я розумію, чому система так вирішила.

Добре, давайте спробуємо ще одну річ.



Ох, нічого собі! Відмінно! І табличка у квітковому горщику говорить те ж саме! Цього я, звичайно, не знав. Це вражає!

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

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

Дослідження Обчислюваної Всесвіту
Я виявив, що якщо подивитися на всі ці програми, то виявиться повний «зоопарк» всіляких типів поведінки. Ось, тут наведені всі можливі типи клітинних автоматів. Кожен з них — певна програма зі своєю поведінкою.



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



Що ж, це відкриття привело мене до створення абсолютно нового виду науки (new kind of science; однойменну книгу я написав кілька років тому.



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

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



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

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

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

Проте зовсім нещодавно деякий поріг був пройдений. І, як у тому распознавателе зображень, що я показував використовуються практично ті ж ідеї, що і 35 років тому (у поєднанні з різними інженерними хитрощами і невеликим натяком на клітинні автомати). Але вражає те, що використовуючи всі ці очевидні речі, поєднуючи їх із сучасними технологіями, ми отримуємо те, що дійсно працює.

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

По мені так це і є відсутню ланку для створення ШІ. У світі так багато речей, з якими обчислювальні системи справляються значно краще людини. Наприклад, якщо Ви спробуєте змусити Wolfram|Alpha пройти тест Тьюринга, Ви з упевненістю зможете сказати, що це не людина — адже так багато і так швидко обчислювати людина не може.

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

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

Мова як символьне уявлення
Але це не все, що вміють робити люди. Є ще одна дуже важлива річ, вельми характерна для нашого виду. У нас є мова. У нас є спосіб спілкування за допомогою символів, і це дозволяє нам брати знання, набуті одним людиною, передавати це іншим людям. І ось як-то так ми і побудували нашу цивілізацію.

Так як же ми зробимо комп'ютери, засновані на тій же ідеї? Ну, у них повинен бути мова, за допомогою якого можна описувати навколишній світ, так і виробляти на ньому обчислення. Саме це і є вектор розвитку Wolfram Language; це і є те, над чим я працював останні 30 років.

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

Добре, що сталося те, що люди постаралися звести речі: описати світ як в символьному вигляді, так і з допомогою мови та мовних конструкцій. Ми досліджували світ, а потім ми придумали слова, щоб усе це описати. У нас є слово «птах», яке відноситься до абстрактно найрізноманітнішим видам птахів. І зараз в англійській мові близько 30 000 найбільш уживаних слів, які є елементами нашого мироописания.

У цьому ключі цікаво провести порівняння з Wolfram Language.

За тисячі років еволюції англійської мови ми маємо, можливо, дуже зручні мовні структури, але найчастіше досить безглузді. В Wolfram Language ми, а особливо я, працюючи протягом багатьох і багатьох років, зберігали структуру мови як можна більш логічною і послідовною. І зараз у нас є 5000 так званих “ключових слів" — функцій, і все це разом з великою кількістю інших слів, які описують певні речі.

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

Ви знаєте, ця ідея з символьним поданням, мабуть, дуже важлива компонента людського раціонального мислення. І дійсно цікаво усвідомлювати, що структура мови впливає на те, як люди думають про речі. Цей ефект злегка помітний у природних мовах, однак набагато більше проявляється саме в мовах комп'ютерних. І для мене, як творця мови, дуже цікаво спостерігати ті шаблони мислення, які відкриваються, коли люди починають дійсно розуміти Wolfram Language.

Деякі люди можуть сказати, “чому ми використовуємо саме комп'ютерні мови? Чому б просто не використовувати людський природний мову?" Ну, почнемо з того, що комп'ютери повинні якось взаємодіяти один з одним. Але одна з речей, над якою я старанно працюю в Wolfram Language, є створення таких умов, коли не тільки комп'ютерам буде зручно спілкуватися між собою, але і людям з комп'ютерами. Щось на зразок містка між собою.

І більше того, виявляється, є речі, які людський природний мову, в результаті своєї еволюції, не так вже й добре виражає. Просто подумайте про програми. Є деякі програми, які можуть бути легко представлені невеликим фрагментом тексту англійською, але багато програм дійсно незручно буде висловити англійською мовою. Але вони дуже добре виражаються в Wolfram Language. Тому я думаю, що нам потрібні обидві мови.

Деякі речі легше сказати англійською, деякі на Wolfram Language.

Пост-лінгвістичні поняття
Але повернемося до таких речей, як розпізнавання образів. Ось завдання, яке насправді трохи виходить за рамки того, про що ми тут говоримо — про візуальному світі і створення його символьного подання, про абстрактне описі за допомогою слів.

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

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

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

Так що наші машини відкриють масу категорій, які наша цивілізація ще не придумала. Я дав цьому поняттю досить претензійне ім'я: "пост-лінгвістичні виникають поняття" (post-linguistic emergent concepts), або PLEC для стислості. Я думаю, що ми можемо зробити деяку метаконструкцию для подібних речей всередині Wolfram Language. Але я думаю, що PLEC є частиною шляху, який наші комп'ютери можуть прокласти для справді масштабного розширення традиційного світогляду людини.

Однак, перш ніж ми доберемося до PLEC, нам потрібно вирішити деякі питання у сферах, з якими люди добре знайомі. Знаєте, в Wolfram Language міститься безліч знань про світ, і ми можемо представляти переважна більшість запитів, які люди надсилають в Wolfram|Alpha, точної символьної формулюванні. Але ми все ще не можемо зробити подібне з довільними людськими висловлюваннями.

Так як ми це зробимо? Ну, я думаю, ми повинні розбити їх на якісь «семантичні примітиви» — основні структури. Деякі примітиви, такі як фактичні твердження, у нас вже є в Wolfram Language. І деякі, як твердження про стан, на кшталт «я думаю» або «я хочу», у нас не містяться.

Стародавня історія
Є один цікавий момент. Деякий час я вже працюю над створенням подібного символьного мови. І звичайно, люди вже намагалися робити щось подібне. Але подібні питання не мали розвитку з дуже давніх пір. Так, у 13-му столітті жив чоловік на ім'я Раймунд Раймунд вікіпедія), який досліджував це питання; в 17-му столітті люди начебто Готфріда Лейбніца (стаття на Хабре: "Детальний погляд на спадщину Лейбніца") і Джона Уїлкінса вікіпедія).

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

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

Я міг би поговорити про деякі вельми актуальних технологіях, які ось вже будуть доступні починаючи з наступного тижня, для створення так званих програмованих мовних інтерфейсів (PLI, Programmable Linguistic Interfaces). Але замість цього, давайте детальніше поговоримо про ситуацію в цілому і про майбутнє.

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

Багато чого з того, що ми намагаємося вкласти в Wolfram Language, по суті, служить для спрощення постановки цілей людям. Тоді нам залишається просто зробити обчислення, створити якісь зовнішні запити API або що б то ні було для досягнення цих цілей.

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

Але суть ось у чому: уявіть, що у нас є якийсь ящик, який стоїть на нашому столі, і він в змозі здійснювати всі ті інтелектуальні дії, які людина може виконувати. Проблема в тому, що ж вирішить цей ящик робити? Він повинен створювати для себе якісь цілі і завдання. І справа в тому, що немає ніяких абсолютних цілей і завдань. Будь-яка людина може сказати: «мета життя полягає в тому, щоб зробити X». Але ми знаємо, що все це абсолютно суб'єктивно.

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

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

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

Хтось може заперечити: «Ми ніколи не зможемо передоручити машин творчість." насправді, деякі аспекти творчості як раз таки легше всього передоручати: ми можемо отримувати натхнення для музичного, образотворчого або будь-б то не було творчості, просто досліджуючи обчислювальний світ, і це лише питання часу — коли ж ми зможемо автоматично поєднувати ці речі зі знаннями і думками про нашому світі.

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

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

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

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

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

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

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

Другий шлях безсмертя полягає в завантаженні свідомості в певний цифровий пристрій. І, напевно, це щось, що буде відбуватися поступово. Спершу у нас би були цифрові системи, які безпосередньо з'єднуються з нашим мозком, потім можуть бути використані якісь технології — мабуть, мало чим відрізняються від функції ImageIdentify, яку я вам демонстрував раніше — щоб розпочати навчання від нашого мозку і завантажувати більше того досвіду, що у нас є. Це можна назвати "когнітивної завантаженням", завантаженням свідомості. Власне, поки в кінці кінців ми не отримаємо щось, що проявляє себе точно так само, як наш мозок.

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

Коробка трильйона душ
Так, добре, і до чого це призведе в підсумку? Я часто уявляю собі якусь "коробку трильйона душ" — свого роду останній притулок нашої цивілізації. І можна було б подумати: «О, це буде дуже вражаюче, з усім тим інтелектом, свідомостями, знаннями всередині.» Однак, боюся, я так не думаю.

Знаєте, одна з речей, яка випливає з моїх фундаментально-наукових принципів — це те, що я називаю принципом обчислювальної еквівалентності (Principle of Computational Equivalence). Він говорить про те, що починаючи з деякого мінімального порогу всі системи еквівалентні у складності виконуваних ними обчислень. Власне, це означає, що в цій коробці не буде нічого примітного. Вона просто буде робити обчислення на тому ж рівні, як і безліч інших систем у Всесвіті.

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

Зараз, звичайно, ми можемо пишатися тим, що наша коробка трильйона душ є особливою, тому що вона сталася від нас, містить всю нашу історію. Але що буде цікавого відбуватися в ній? Ну, для того, щоб визначити, що ж означає «цікаве», нам потрібні якісь орієнтири та цілі, в результаті коло замикається і все це перетворюється в досить складне філософське питання.

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

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

Ну, ось мабуть і все, що я хотів би зараз сказати. Я сподіваюся, що мені вдалося донести деякі захоплюючі речі, які відбуваються прямо зараз, а так само ті, які є досить новими в сфері обчислювального мислення і супутніх технологій. Велике спасибі!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.