Перевод поста Стивена Вольфрама (Stephen Wolfram) "Frontiers of Computational Thinking: A SXSW Report".
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.
На прошлой неделе я выступал на SXSW Interactive 2015 в Остине, штат Техас. Вот несколько отредактированная стенограмма моего выступления:
Содержание
Наиболее продуктивный год
Язык Wolfram Language
Язык для реального мира
Философия Wolfram Language
Программы размером в один твит
Вычислительное мышление для детей
Ввод запросов на естественном языке
Масштабная идея: Символьное программирование
Язык для развёртывания
Автоматизация программирования
Масштабные программы
Интернет вещей
Машинное обучение
Исследования Вычисляемой Вселенной
Вычислять, подобно тому, как это делает мозг
Язык как символьное представление
Пост-лингвистические понятия
Древняя история
Чем будет заниматься искусственный интеллект?
Бессмертие и за его пределами
Коробка триллиона душ
Обратно в 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 просто выдаст “Oкей, 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, ну и так далее. Позвольте показать сайт, который у нас получился:
Вы можете ввести свою дату рождения в каком-нибудь формате, затем произойдут вычисления и будет выдана позиция, на которой встречается эта комбинация цифр. Вот, собственно, программа нашла дату моего рождения на некоторой позиции, и сгенерировала под мою дату изображение. Теперь я могу заказать футболку с ним.
И, на самом деле, ни один программист не привлекался для создания этого. Всю работу сделал наш арт-директор ко дню числа Пи, после чего сотни тысяч футболок с индивидуальными рисунками разошлись среди любителей по всему миру.
Масштабные программы
Разработка масштабных программ на 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 за последние пару лет.
Как только Вы поместите данные в Data 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 и сопутствующие технологии пока что ещё на стадии бета тестирования, однако вы можете, конечно, попробовать их. Во всяком случае, мне бы хотелось этого. Вам будет очень легко начать, и это не удивительно, потому что мы собрали большое количество разных новых идей, и тут есть чему поучиться, если Вы хотите получить лучший опыт использования данной технологии.
Ну, вот пожалуй и все, что что бы я хотел сейчас сказать. Я надеюсь, что мне удалось донести некоторые захватывающие вещи, которые происходят прямо сейчас, а так же те, которые являются весьма новыми в сфере вычислительного мышления и сопутствующих технологий. Большое спасибо!