Перевод поста Стивена Вольфрама (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, ну и так далее. Позвольте показать сайт, который у нас получился:

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 за последние пару лет.



Как только Вы поместите данные в 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 и сопутствующие технологии пока что ещё на стадии бета тестирования, однако вы можете, конечно, попробовать их. Во всяком случае, мне бы хотелось этого. Вам будет очень легко начать, и это не удивительно, потому что мы собрали большое количество разных новых идей, и тут есть чему поучиться, если Вы хотите получить лучший опыт использования данной технологии.

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

Комментарии (27)


  1. Arastas
    13.04.2015 06:08
    +14

    Почти каждый раз, когда я вижу презентации и примеры Wolfram, меня не оставляет вопрос: зачем? Число Пи с точностью до какого-то знака. Планеты по порядку. Видимость с небоскреба. Распознание породы кошки и поворот на 300 градусов. И так далее. Все это похоже на: смотрите, а я еще крестиком вышивать умею!
    Хотелось бы увидеть на хабре примеры использования этого самого-самого языка/пакета для решения каких-то хабровых задач. Например, я в удобной (естественной) форме задаю описание робота-манипулятора, а мне сразу выдают решение прямой и наброски к решению обратной задач кинематики. Я описываю несимметричную 5-ти колесную мобильную платформу, а мне выдаются формулы перехода от угловой-линейной скорости к скоростям каждого колеса. Я задаю электрическую схему, а мне выдают временные характеристики. Или даже лучше, я описываю характеристики, которые хочу получить, а мне предлагают варианты электрических схем. Я пишу нелинейные дифф. уравнения, а мне предлагают семейство функций Ляпунова. Я спрашиваю, какие есть функции сортировки упорядоченных подпоследовательностей (если что, то пример с потолка, я не программист), а мне выдается сравнительная таблица с характеристиками и примеры реализаций/библиотек на паре десятков ЯП.
    Где вот это все, где вычисления для IT? Где примеры использования в реальных (осмысленных) задачах? А то пока похоже на вычисления для… да я даже не знаю для кого. Для кого-то, кому скучно и любопытно одновременно, наверное.


    1. OsipovRoman Автор
      13.04.2015 08:53
      +1

      Статьи призваны в простой и ясной форме, на простых и ясных примерах продемонстрировать функционал системы. Специалист в своей области сразу сообразит как перевести идеи из какой-то, возможно, абстрактной статьи в свое русло.

      Когда в статье, скажем, говорится о том, что можно решать УрЧП на произвольных поверхностях и приводится в пример решение на поверхности, выглядящей как кролик, такие люди как вы скажут, что это бред, просто потому, что был взят кролик, а не какая-то конкретная шестерня или профиль крыла самолета. То же самое и с котами — показан простейший пример создания пользовательских форм ввода и API, напрямую из языка, без дополнительной разработки. Отсюда сразу ясно, как это можно использовать.

      Конечно согласен, что должны быть статьи и про какие-то узкоспециальные задачи. Через некоторое время мы их будем публиковать, это будут примеры решений в конкретных проектах в России, правда, ввиду соглашений о неразглашении, авторских прав и пр. почти всегда будет показываться только верхушка айсберга.


      1. Indemsys
        13.04.2015 09:37

        Эт точно.
        Есть проблема формулирования «реальных (осмысленных) задач» или постановка цели, а есть проблема решения.
        Никакая машина не решит за человека проблему формулирования и постановки цели.
        Поскольку цели человек ставит на основе своего незнания. А машина не в силах оценить насколько глубоко незнание человека.
        Она потенциально все знает.
        О чем Стивен и высказался в конце.

        Вот что интереснее было бы, это сравнение с Mаtlab-ом


      1. DreamWalker
        13.04.2015 11:31
        +4

        Согласен с Arastas. Поясню мысль на конкретном примере. Я занимаюсь дифференциальными уравнениями и динамическими системами (+стандартные статистики и визуализации). Все свои задачи я решаю на R. И я прекрасно помню почему я перешёл именно на R: я нашёл в сети множество примеров того, как люди легко и изящно решают на нём задачи из моей повседневной жизни. И мне сразу захотелось тоже так уметь: написал несколько простых строк — и всё заработало.
        Поймите меня правильно, Wolfram Language — безусловно потрясающий проект. Каждый раз с удовольствием читаю про него статьи. Несколько раз был на ваших выступлениях, надеюсь посетить будущее мероприятия. Но я ни разу так и не увидел примера, который бы меня воодушевил перейти на Wolfram. Ни разу во время программирования у меня не возникло мысли вида «А вот если бы я писал на Wolfram, то вот эту штуку было бы сделать проще». Я ни в коем случае не говорю, что Wolfram чем-то уступает R. Я просто говорю, что я не видел примеров того, как Wolfram превосходит R на моём стеке задач (мне не так часто нужны первые 1000 цифр числа Пи). Поэтому у меня нет мотивации, чтобы бросать всё и бежать изучать новый язык (того же мнения придерживаются многие мои коллеги). Возможно, если бы было больше узкоспециализированных постов про Wolfram из различных областей, то ситуация бы изменилась.


        1. Arastas
          13.04.2015 11:46
          +1

          Спасибо, именно эту мысль я и хотел донести!
          Мой стек задач — системы управления, немного робототехники. И тоже самое, ну нету во всех этих замечательных статьях примеров, которые я, как специалист, мог бы спроектировать на свою область.
          Пока что самое прикладное в IT, что я видел в публикациях Wolfram на хабре, — работа с распознаванием изображений. Я не спец в этой области, то демки впечатляют меня-дилетанта.


          1. Indemsys
            13.04.2015 12:22

            Вольфрам ясно себя позиционирует как блокнотный математический решатель.
            Проекты в нем размером с пару экранных страниц.
            Я обычно для таких дел использую Mathcad.
            Это вроде очень продвинутого калькулятора.
            Mathcad-ом я пользуюсь постоянно, хотя тоже разрабатываю комплексные системы управления, симулирую схемы, делаю анализ электромагнитных полей и излучений и т.д.
            И ясно, что Wolfram не заменит ни Simulink-а, ни ANSYS HFSS, ни COMSOL просто потому что в этих мощных пакетах огромную часть работы занимает рутинное забивание физического описания объектов моделирования и расчета.
            Работа важная, но не интеллектуальная. Все силы брошены на борьбу с человеко машинным-интерфейсом. Как машине объяснить что надо решать.

            Wolfram же дает идеи как решить по другому. Как вообще иначе подойти к проблеме. Сгенерировать идею.
            Требовать от Wolfram-а сложных прикладных решений это равно как покупая краски и кисточки обязательно требовать примеры их применения и чтоб было изображено обязательно то, что вы хотите нарисовать.



            1. Arastas
              13.04.2015 12:35
              +1

              Вольфрам ясно себя позиционирует как блокнотный математический решатель. Проекты в нем размером с пару экранных страниц.

              Мне кажется, представители Wolfram с Вами не согласятся. Даже моего беглого знакомства с пакетом Mathematica достаточно, чтобы с Вами не согласиться.

              И ясно, что Wolfram не заменит ни Simulink-а

              Люди, работающие с SystemModeler, могут считать иначе.

              Основная претензия к Роману была, что имея такой прекрасный инструмент, он (они?) популяризируют его на профильном IT ресурсе как-то… легкомысленно, что ли.


              1. Indemsys
                13.04.2015 13:16

                А я было решил, что обсуждаем по содержанию статьи Стивена Вольфрама.

                SystemModeler даже не смотрел. Тогда впрочем странно звучат претензии по поводу отсутствия конкретных примеров.
                Там примеров хоть отбавляй.

                Но даже эта статья меня завела.
                Обязательно скачаю Mathematica для пробы.


          1. DreamWalker
            13.04.2015 12:26
            +1

            Я занимаюсь распознаванием изображений, так что могу немного прокомментировать. В реальной жизни для применения каких-то простых фильтров отлично подходит любой вменяемый профессиональный графический редактор. ИМХО, для маленьких экспериментов — самый лучший путь. А если писать что-то серьёзное, то это чаще всего алгоритмы на базе opencv, реализованные на чём-нибудь вроде C++/Python/C#, чтобы можно было результаты работы нормально распространять. В общем, не вижу как мне Wolfram может помочь в области CV.


            1. OsipovRoman Автор
              13.04.2015 12:29

              Посмотрите видео Андрея Макаренко ниже. Он довольно хорошо объясняет, чем именно может помочь Wolfram Language.


        1. mephistopheies
          13.04.2015 11:57

          отличный пример, я в предыдущих постах автора спрашивал про анализ данных, но он обычно не отвечает на такие вопросы


    1. mephistopheies
      13.04.2015 11:55

      я тоже постоянно у автора спрашиваю где, где же кроме учебных заведений используется все это дело, но ни разу ответа не получил, к сожалению


      1. OsipovRoman Автор
        13.04.2015 11:56
        -4

        Я вам список компаний давал, с которыми только лишь я работал лично.


        1. mephistopheies
          13.04.2015 11:57

          список компаний != примеры задача и способы решения


          1. OsipovRoman Автор
            13.04.2015 12:09

            Приходите на наш семинар, я вам расскажу лично многое seminars.softline.ru/event/9212/detail

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

            О части проектов я рассказывал, скажем, здесь «Разработка практических приложений на основе Wolfram технологий»:



            Также будет полезно выступление Андрея Макаренко «Цифровая обработка сигналов в Mathematica»:


            1. mephistopheies
              13.04.2015 12:13

              вово уже интереснее, спс за видяхи

              а вообще раз нельзя что то из реальных примеров рассказывать тут, почему бы не взять любую задачу из http://archive.ics.uci.edu/ml/datasets.html и в статье не решить ее, это и будет отличным практическим примером (думаю ораторы из предыдущих коментов тоже могут накидать из своих тем кучу ссылок на задачи, получилась бы серия постов о том как решать реальные задачи, а не о том какие крутые и бесполезные фишечки есть у вас в системе)


              1. OsipovRoman Автор
                13.04.2015 12:22

                Мы постараемся писать больше «конкретных» постов.

                Также, много видео из цикла «success story» вы сможете найти здесь www.wolfram.com/solutions/?source=nav Также там вы сможете найти списки компаний по направлениям, которые активно используют Wolfram Language.


              1. OsipovRoman Автор
                13.04.2015 12:24

                Также не могу не отметить запись выступления Леонида Шифрина «Разработка больших приложений в Mathematica», одного из разработчиков ядра Wolfram Language, автора RLink для Wolfram Language и многого другого.


          1. OsipovRoman Автор
            13.04.2015 12:11
            +2

            Я думаю, что в скором будущем мы напишем большой пост о том, что я и коллеги делаем в России, опираясь на Wolfram Language. Думаю, это будет как раз то, что нужно многим.


    1. LeonidShifrin
      13.04.2015 17:33
      +5

      Не оспаривая большинство Ваших тезисов, со многими из которых я согласен, я бы хотел обратить внимание на эволюционную составляющую при сравнении разных пакетов и языков программирования. Wolfram Mathematica начала свой путь как система компьютерной алгебры плюс символьный язык программирования, построенный на очень общих принципах. Ее авторы выбрали бизнес-модель платной системы с закрытым кодом, что было вполне оправдано на мой взгляд, по крайней мере на момент создания и первичного развития системы. То, что происходит с системой сейчас, лично я рассматриваю как переход от нишевого продукта к системе и языку программирования общего назначения (с определенными оговорками, но тем не менее). Первоначальный характер системы и требование поддержки общности ее языка привели к определенному отставанию по функционалу, по сравнению с другими системами (Matlab, R), которое сейчас сокращается достаточно быстрыми темпами. Советую почитать весьма нейтральный и беспристрастный блог человека, работающего со всеми крупными системами и имеющего возможность провести сравнение:

      How many MATLAB toolboxes make a Mathematica 8?
      How many MATLAB toolboxes make a Mathematica 9?
      A random walk through Mathematica 10

      Как программист и разработчик, я (будучи безусловно пристрастен) считаю сердцем любой системы ее язык программирования. Я профессионально работал и работаю с рядом языков, таких как С, Java, Matlab, R (в меньшей степени), Python, Javascript, и Mathematica. Могу сказать по своему опыту, что ни один из других языков не давал мне той степени гибкости и интерактивности, и той скорости разработки, что Mathematica — разумеется, в тех областях, где Mathematica оптимальна (выкладки, расчеты, вычисления, определенные типы работы с данными, быстрое создание прототипов и пользовательских интерфейсов). В прошлом я занимался наукой (астрофизика, квантовая оптика, квантовая теория поля, случайные матрицы, мат. физика), и без Mathematica мне бы пришлось сильно тяжелее.

      Многие языки и системы пошли по в каком-то смысле более простому пути, упрощая дизайн основного языка. При этом, язык может быть легче в освоении, но изначально ставит определенные, часто довольно серьезные, ограничения на то, что может быть достигнуто с его помощью, а также на «потолок» собственного развития. Очень ярким примером тут является, с моей точки зрения, Matlab. Я в свое время с него начинал, и написал в нем довольно много кода, так что имею свое мнение на этот счет. Основной язык Matlab не отличается, опять же с моей точки зрения, хорошим дизайном или поддержкой мощных абстракций, но зато предельно практичен и дает в руки профессионалов инструменты для работы здесь и сейчас. Но, с эволюционной точки зрения, ИМХО это тупик. Сейчас это осознано многими, кто переходит на использование Python и / или R, и даже привело к серьезным усилиям по созданию языков следующего поколения типа Julia. То есть, несмотря на то, что Matlab во многих областях является стандартом на данный момент, я не стал бы рекомендовать его изучение для человека, имеющего долгосрочные планы по работе в области technical computing, хотя с чисто прагматической точки зрения вполне допускаю ситуации, когда сам бы воспользовался им без раздумий, скажем при наличии там трудно-воспроизводимого функционала для решения конкретной задачи, отсутствующего в других системах. На эту тему есть весьма информативный блог:

      Abandon MATLAB

      автор которого опирался на обширный личный опыт, и с мнением которого я в целом полностью согласен.

      Я выбрал Matlab не для того, чтобы очернить его, и признаю наличие у него массы сильных сторон для практика — профессионала на данный момент. Просто это яркий пример общей проблемы долгосрочного выбора основного инструментария для работы. Те же самые вопросы можно задавать и про другие языки и системы (R, Python, Julia, etc). Во всех этих языках, выбор определенного дизайна, модели развития, etc обусловил их сильные и слабые стороны. В контексте языков программирования общего назначения, об этом хорошо написал Paul Graham, в своем известном эссе

      The Hundred-Year Language.

      Возвращаясь к Wolfram Mathematica, имеет смысл спросить, где в этом ряду стоит она, и когда будет достигнут ее «потолок». Я не знаю точного ответа, но идеология Mathematica, а также многие аспекты ее языка программирования, близки к языкам семейства LISP. В частности, Mathematica построена на очень общих принципах, имеет гибкий язык с обширными возможностями мета-программирования, плюс самую мощную поддержку символьного программирования из всех известных мне языков. Что это значит на практике? Например, то, что опытный пользователь Mathematica имеет практически неограниченные возможности автоматизировать свою собственную работу, «выращивая» свой собственный диалект языка для решения того класса задач, которые его интересуют. Это значит в свою очередь, что чем больше опыт работы с языком, тем эффективнее пользователь может его использовать. Еще одним очень существенным преимуществом Mathematica является возможность синтетического мышления для решения сложных задач. За счет доступности «из коробки» большого количества готового функционала, разработанного в единой системе принципов, соглашений etc, плюс символьной парадигмы, можно быстро создавать решения, использующие сразу несколько существенно различных областей знания. Символьная парадигма и единство принципов здесь играют ключевую роль, так как позволяют работать на высоком уровне абстракции без переключений — и в этом смысле Mathematica ИМО далеко впереди всего остального, что есть на данный момент.

      Есть еще одно применение Woflram Mathematica, которое как мне кажется имеет очень большой и пока что совсем еще не раскрытый потенциал — как системы-интегратора технологий сверх-высокого уровня. Степень интерактивности системы позволяет использовать ее как некий лабораторный стенд, подключая туда различные языки и системы с их функционалом, и получая возможности быстрого тестирования и кросс-тестирования идей в символьной среде с мощными возможностями визуализации. Уже сейчас Wolfram Mathematica имеет линки к другим языкам и системам (C, Java, .Net, R, Matlab), и скорее всего число таких линков будет расти в будущем. Мне это представляется очень перспективным направлением.

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

      • Определенная сложность в освоении, особенно для людей, не знакомых с функциональной и / или символьной парадигмой, и особенно на уровне продвинутого пользователя / эксперта
      • Большой пробел и сильное отставание профессиональной литературы и других источников информации о системе, в частности и в особенности на русском языке
      • Отсутствие большого количества проектов с открытым кодом, на примере которых можно было бы учиться идиоматической работе с системой
      • Отсутствие определенных ключевых библиотек, в частности в области мета-программирования
      • Недостаточно большое и сильное сообщество профессиональных пользователей и программистов, особенно в нашей стране, но и в целом в мире
      • Недостаточная доступность опций для развертывания приложений на базе Wolfram Mathematica


      Тем не менее, с моей точки зрения, большая часть этих сложностей временная, и связана с тем переходом из нишевого продукта в систему общего назначения, о котором я говорил выше. Есть надежда, что большая часть этих проблем будет решена в достаточно скором вре


      1. Arastas
        13.04.2015 18:44
        +2

        Леонид, я, видимо, плохо сформулировал свой первый комментарий, раз сторонники Wolfram Mathematica (WM) его воcприняли как нападки на WM. Я сам очень хорошо отношусь к WM, хоть и знаком с ней очень поверхностно. Я регулярно пользуюсь Alfa для необъемных символьных вычислений. И в моем списке ToDo стоит более глубокое освоение WM, особенно в области символьных вычислений. Более того, если ко мне придет студент и спросит, какой пакет для символьных вычислений ему изучать, то я его отправлю к WM. /*Другой вопрос, что когда студент спросит меня, какой пакет ему изучать для работы в области Control Systems Design, то я, если опустить вопрос цены, без колебаний укажу ему на Matlab и, на мой взгляд, буду совершенно прав. И на сейчас, и с точки зрения развития. Естественно, не ограничиваться знанием одного только его, но Matlab — в первую и главную очередь. */
        Так вот, смысл моего первого комментария — ну сколько же можно переводить выступления Стивена, рассчитанные на «широкую аудиторию»? Где блестящие примеры использования WM в чем-то более IT-специализированном? Да один только Ваш комментарий вызывает, на мой взгляд, у хабр-сообщества больше интереса к WM, чем три подряд перевода «общей тематики»! Я не к тому, что Роман зря переводит, нет. Но я (мы?) устал от некоторой однообразности. У нас у всех плотный рабочий график, много точек обучения, рыскать почти вслепую через документацию и демонстрашки нет, по большому счету, ни сил ни времени. Как правильно сказал DreamWalker, покажите, как я с помощью WM могу эффективно решать свою задачу, и я начну инвестировать в WM свое время. Покажите мне, как отсортировать планеты и оценить дальность обзора с небоскреба, и я скажу «ну да, прикольно. Наверное, кто-то этим воспользуется.»
        Несколько эмоционально, но, я думаю, общий смысл понятен.


        1. LeonidShifrin
          13.04.2015 20:27
          +1

          Да, смысл вполне понятен. Собственно говоря, я Вас понял правильно изначально. Как я уже сказал, я в общем с Вами согласен по большей части, в том плане что я прекрасно понимаю желание профессионалов в различных технических дисциплинах увидеть на понятных и близких им примерах, как решать те или иные задачи из их области интересов. Это вполне правомерные пожелания, и я уверен что они будут учтены, и на этом блоге появятся и более специализированные технические посты с конкретными примерами.

          Что касается моего комментария, я просто постарался дополнить картину некоторыми не всем известными деталями. Ситуация с системой с огромным потенциалом и мощью (на мой взгляд), которая часто в целях маркетинга преподносится как универсальное решение для всех и на все случаи жизни, но при этом не предоставляет достаточного количества примеров и иллюстраций таких заявлений для профессионалов, вызывает недоумение у тех, кто мало с ней знаком, и досаду у тех, кто, как Вы, знакомы с ней в большей степени, и понимают необходимость таких материалов. Мой комментарий был призван объяснить, что ситуация не вполне обычная, поскольку система претерпевает бурное развитие (экстенсивная фаза роста) в последнее время, после длительного периода интенсивного (в смысле направленности) развития, и проходит в данный момент некий процесс фазового перехода. Это не очень типичное явление в сфере IT — систем, которые обычно к такому почтенному возрасту ( > 25 лет) уже достигают некоторого состояния насыщения. Для того, кто смотрит на это со стороны, это может не быть понятно, но если проследить историю развития системы как процесс, то многие нынешние дефекты роста становятся более объяснимыми.

          Пока что, советую посмотреть видео — материалы с первой и второй Российских конференций по Wolfram — технологиям, там есть описание достаточно интересных примеров. В частности, я рассказывал об одном примере из моей научной практики, результаты которого вошли в оригинальные публикации. Вот ссылка:

          Некоторые новые результаты для аналитического интегрирования функций Бесселя

          Роман и Андрей Макаренко в своих выступлениях приводили ряд других примеров практического использования Mathematica.


      1. Arastas
        13.04.2015 18:50

        Кстати, раз уж есть возможность задать вопрос разработчику. Вот скажите, а умеет ли Wolfram работать с матрицами без перечисления элементов? Скажем, я пишу функцию f=A*B+B*A и указываю, что A и B это матрицы некоторой размерности n на n, не перечисляя их поэлементно. И далее при всех операциях должно учитываться, что A*B не равно B*A, если только я не указал их симметричность, осуществляться контроль размерностей и так далее. Я такой возможности пока не нашел, к сожалению, ни в одном пакете символьных вычислений.


        1. LeonidShifrin
          13.04.2015 20:47
          +1

          В готовом виде есть только операция некоммутативного умножения, NonCommutativeMultiply. Она не покрывает все Ваши требования, но достаточно несложно будет написать программу, которая научит Mathematica всему тому, что Вы указали. Мне приходилось во время научной работы реализовывать конструкции такого типа в Mathematica, и я уверен что Mathematica — подходящий инструмент для этого. Хотя вообще говоря, это в любом случае нетривиальная задача, и вопрос достойный. Вот ссылка с обсуждением похожих тем:

          Symbolic linear algebra

          Есть еще достаточно недавно появившийся функционал тензоров, в котором такого рода вещи частично реализованы

          Symmetric tensors

          Еще один пример, который всплыл в памяти, хотя и не совсем на ту же тему — реализация алгебры операторов рождения — уничтожения для гармонического осциллятора (квантовая механика).


    1. kraidiky
      13.04.2015 19:48

      Топ-программист конторы в которой я работаю в качестве хобби на Вольфраме пишет систему имитации физических испытаний разных конструкций. Когда увидел впервые — сильно удивился.


  1. xvilka
    13.04.2015 15:01
    +1

    Несмотря на всё удобство получившейся системы, я не считаю, что это действительно прорыв в математике и программировании. Действительно прорыв, имхо — это создание HoTT, вероятностного программирования и языка Church, создание языка с зависимыми типами Idris и повсеместное распространие разнообразных солверов, например SMT. Ну и нахождение более тесных связей между топологией, геометрией, теорией чисел и теорией групп.


    1. xvilka
      13.04.2015 15:05

      Забыл добавить о практическом применении вероятностого программирования — вот, довольно забавный пример — probmods.org