Перевод поста Стивена Вольфрама (Stephen Wolfram) "The R&D Pipeline Continues: Launching Version 11.1".
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации
Содержание
— Небольшой релиз — тоже неплохо
— Визуальные изменения
— Множество новых функций
— Нейросети
— Машинное обучение
— Аудио
— Изображения и визуализация
— Больше данных
— Интегрированные внешние сервисы
— Больше математики, больше алгоритмов
— Детализация дат
— Настройка языка
— Язык хранения
— Программирование на низком уровне
— Укрепление инфраструктуры
— И еще кое-что
Небольшой релиз — тоже неплохо
Я рад сообщить о том, что сегодня вышла версия 11.1 языка Wolfram Language (и системы Wolfram Mathematica). На данный момент, версия 11.1 уже работает в Wolfram Cloud, а Desktop-версии уже доступны для загрузки для Mac, Windows и Linux.
Что нового в версии 11.1? На самом деле много чего. Если кратко:
В ней очень много нового. Можно подумать, что релиз .1 спустя почти 29 лет после выхода версии 1.0 вряд ли удивит. Однако в случае с нашей компанией дела обстоят иначе. С тех пор, как мы построили весь стек доступных сейчас технологий, мы лишь ускоряемся в своем развитии. И теперь даже в версии 11.1 представлено множество новых функциональных возможностей.
Визуальные изменения
Сразу бросается в глаза, что документация выглядит по-другому. Мы оптимизировали дизайн, который стал теперь адаптивным, поэтому окно выглядит хорошо даже тогда, когда оно открыто в узкой боковой панели в облаке или на смартфоне.
Мы также ввели некоторые новые элементы вроде окошка предпросмотра для блока детальной информации Details. Большинству пользователей хотелось бы видеть примеры сразу при попадании на страницу функции.
Множество новых функций
Вот облако слов из названий новых функций в версии 11.1:
В общей сложности в новой версии было введено 132 новые функции (вместе с другими 98, которые были существенно доработаны). Эти функции представляют собой готовую продукцию нашего R&D-конвейера за несколько месяцев, прошедших с момента выпуска версии 11.0 (см. перевод статьи на Хабрахабре).
Когда мы представляем «целочисленную» версию (номер которой — просто целое число), мы, как правило, вводим много новых структур. В (предположительно) незначительном обновлении вроде версии 11.1 мы не стремимся получить новые фреймворки. Вместо этого, как правило, к существующим фреймворкам добавляются новые функциональные возможности, причем зачастую вместе с несколькими (иногда «экспериментальными») намётками для новых, более крупных, структур. Ну, а если новый фреймворк оказывается закончен ко времени выпуска версии .1, он тоже включается в него.
Нейросети
Нейронные сети — важная и «горячая» область, в которой наша компания делает большие шаги вперед, в том числе — представленные сейчас в версии 11.1. Для меня чрезвычайно интересно следить за тем, как быстро эта область знания развивается во всем мире, и приятно осознавать, что все это время Wolfram Language находился на переднем крае этого развития.
Наша цель состоит в создании высокоуровневого интерфейса для нейронных сетей, полностью интегрированного в Wolfram Language. В версии 11.1 добавлены некоторые новые, недавно разработанные блоки: в частности, 30 новых типов слоев нейронных сетей (в два раза больше, чем в 11.0), совместно с автоматизированной поддержкой рекуррентных сетей. Идея состоит в том, чтобы позволить нейронной сети быть символьно определенной в Wolfram Language, с тем, чтобы дать языку автоматически заполнять детали с помощью низкоуровневых библиотек. Это очень удобно для обычных сетей с прямыми связями; однако для возвратных сетей (с последовательностями переменной длины и т. д.) это базовая потребность в случае, если вы хотите избежать низкоуровневого программирования.
Другой важнейшей особенностью нейронных сетей в языке Wolfram является то, что они настроены на автоматическое кодирование изображений, текста или чего угодно еще. В версии 11.1 функции NetEncoder и NetDecoder охватывают много новых случаев, расширяя список уже интегрированных в Wolfram Language.
Стоит отметить, что под всем интегрированным символическим интерфейсом в Wolfram Language используются эффективные низкоуровневые библиотеки (в настоящее время — MXNet), которые заботятся о том, чтобы новейшие процессоры и GPU-конфигурации использовались с максимальной производительностью. Кстати, с выходом версии 11.1 появилась возможность хранить полные спецификации нейронной сети в файлах .wlnet.
Много сил требует обработка нейронных сетей как символьных объектов. В 11.1 теперь есть функции (NetMapOperator и NetFoldOperator), которые символьно строят новые нейронные сети. И именно потому, что нейронные сети являются символьными, ими легко манипулировать: например, «разобрать» их, чтобы изнутри контролировать то, что они делают, или чтобы систематически сравнивать производительность различных элементов сети.
В версии 11.1 есть удобная функция — NetModel, созданная для работы с предобученными или неподготовленными нейросетевыми моделями. На сегодняшний день мы включили лишь небольшое количество известных нейронных сетей, однако мы планируем добавлять их каждую неделю, находя то, что разрабатывается в рамках научного сообщества, а также добавляя некоторые собственные идеи.
Вот простой пример работы NetModel:
Теперь примените какие-либо фактические данные и посмотрите, как сеть найдет правильный ответ:
Легко «заглянуть внутрь» и «посмотреть, о чем думает» такая сеть. Вот небольшая визуализация того, что происходит на каждом слое сети — и да: в конце концов, первый квадрат загорается красным цветом, что означает, что выход равняется 0:
Машинное обучение
Нейронные сети — важный метод машинного обучения. Но одним из основных принципов Wolfram Language является обеспечение высокой степени автоматизации функционала независимо от основных методов. И в версии 11.1 всего этого стало гораздо больше (как это часто бывает, по большей части для этого используются новейшие методы глубинного обучения нейронных сетей, но для пользователей важно то, ЧТО они делают, а не то, КАК они это делают).
Моим личным фаворитом среди новых функций машинного обучения в версии 11.1 является FeatureSpacePlot. Дайте ей любую коллекцию объектов, и она разместит их в соответствующем «пространстве признаков». Вот пример с флагами стран Европы:
Функция FeatureSpacePlot может сразу же выделять сложные признаки для конкретных классов ввода — фотографий, текстов и т. д. Теперь есть также функция FeatureNearest — аналогичная Nearest, но работающая в пространстве признаков. Да, и поскольку весь материал с NetModel и предварительно обученных сетевых моделей сразу же попадает в область действия этих функций, эксперименты с «пространствами значений» становятся обычным делом:
В частности, с NetModel можно построить различные полезные нейросетевые программы. Но в версии 11.1 появились также некоторые новые возможности машинного обучения. Яркими примерами являются функции ActiveClassification и ActivePrediction, которые строят классификаторы и предикторы путем активного сэмплирования пространства и обучения тому, как сделать это максимально эффективно. Будет еще много приложений для конечного пользователя на основе функций ActiveClassification и ActivePrediction, но для нас самое интересное — это то, что мы можем использовать эти функции для оптимизации всех видов мета-алгоритмов, встроенных в Wolfram Language.
Аудио
В версии 11.0 начался процесс интеграции аудио (как это было с изображениями) в Wolfram Language. Этот процесс продолжился и в версии 11.1. Например, для стационарных систем добавлена функция AudioCapture для записи звука с микрофона на компьютер (автоматическая обработка больших аудиосэмплов — это нетривиальная задача). Вот, например, я говорю «привет»:
Вы можете взять эту запись, и, скажем, сделать cepstrogram (да, это еще одна новая функция для работы с аудио в версии 11.1):
Изображения и визуализация
В версии 11.1 появился целый ассортимент новых возможностей для работы с изображениями и визуализацией. CurrentImage стала быстрее и лучше. В ImageEffect добавлено много новых эффектов. Есть новые функции и возможности для областей вычислительной фотографии и вычислительной микроскопии. А изображения стали еще более интегрированы в качестве абстрактных объектов языка, с которыми можно, например, сразу выполнять арифметические действия:
А вот и еще кое-что, что я уже давно хотел: способность брать растровое изображение и находить его приближённое представление в векторной форме:
Функция TextRecognize также была значительно усовершенствована и способна теперь различать структурные элементы текста: абзацы и столбцы и тому подобное.
О, а еще есть такие вещи, как GeoBubbleChart (здесь показано население крупнейших городов США):
Есть еще много маленьких (но симпатичных) нововведений: поддержка произвольных обозначений в круговых диаграммах, оптимизированная классификация дискретных гистограмм, а также полная поддержка масштабирования функций для Plot3D, и т. д.
Больше данных
В Wolfram Knowledgebase постоянно добавляются новые знания, и со времени выхода версии 11.0 было добавлено много совершенно новых вещей: 130000+ новых видов продуктов, 250000+ атомных спектральных линий, 12000+ новых гор, 10000+ новых известных зданий, 300+ типов нейронов, 650+ новых водопадов, 200+ новых экзопланет (потому что они недавно были обнаружены), и многое другое (не говоря уже о новом написании 7000+ слов). Так же, к примеру, появилось гораздо более высокое разрешение гео-данных высот, так что теперь мы можем сделать гораздо более подробную 3D-модель, скажем, горы Эверест:
Интегрированные внешние сервисы
Интегрированные внешние сервисы позволяют встроенным функциям работать с помощью вызова внешних API. Два примера — функции WebSearch и WebImageSearch. Вот изображения, найденные с помощью функции поиска в Интернете по запросу «красочные птицы»:
Давайте посмотрим, что думает о них ImageIdentify (в версии 11.1 функция ImageIdentify стала гораздо более полной):
Так как WebSearch и WebImageSearch используют внешние API, пользователи должны платить за них по отдельности. Но мы создали так называемые Service Credits, чтобы упростить этот процесс (доступные Service Credits можно посмотреть с помощью символа $ServiceCreditsAvailable).
В будущих версиях будет еще достаточно примеров интегрированных сервисов, а в версии 11.1 уже есть TextTranslation. Функция WordTranslation (появившаяся в версии 11.0) переводит отдельные слова с сотен языков; функция TextTranslation использует внешние сервисы для перевода полных фрагментов текста между несколькими десятками языков:
Больше математики, больше алгоритмов
Значительная часть наших усилий посвящена расширению границ математических и алгоритмических вычислений. Поэтому неудивительно, что в версии 11.1 были достигнуты определенные успехи во всех этих областях. Это и заполняющие пространство кривые, и фрактальные сетки, и способы равномерного распределения точек на сфере:
Появились новые виды пространственной, надежной и многомерной статистик. Преобразования Ханкеля, работа с обратными числами по заданному модулю, и многое другое. Даже в функции D (оператор дифференцирования) появилось кое-что новое: n-ная функции в общем виде:
И еще кое-что еще о дифференцировании: теперь появились функции RealAbs и RealSign, которые являются версиями Abs и Sign, которые определяются действительной осью, так что теперь можно свободно дифференцировать без необходимости давать какие-либо предположения о переменных.
В версии 10.1 мы ввели функцию AnglePath, которая вычисляет путь из последовательных отрезков с заданными длинами и углами. На каком-то уровне AnglePath походит на вариант Logo (или Scratch) из «turtle geometry». Однако функция AnglePath оказалась на удивление полезной, поэтому для версии 11.1 мы обобщили ее до AnglePath3D (и, да, там есть всякие тонкости, связанные с углами Эйлера и так далее).
Детализация дат
Когда мы говорим «23 июня 1988», что мы имеем в виду? Начало этого дня? Весь 24-часовой период от полуночи до полуночи? Или что? В версии 11.1 мы ввели понятие детализации для дат, так что вы можете решить, представляет ли дата год, день, или неделю, начиная с воскресенья.
Это хороший пример применения символьного характера Wolfram Language, и он хорошо решает все виды проблем при работе с датами и временем. Вот, например, как мы теперь представляем «текущую неделю»:
Нынешнее десятилетие:
Это — следующий месяц:
А здесь говорится, что мы хотим начать со следующего месяца, а затем добавляем 7 недель — и получаем другой месяц:
И вот результат детализации месяца:
Функцию Dated можно использовать как спецификатор, например, для свойств субъектов из базы знаний (ниже показан результат запроса о количестве жителей Нью-Йорка в 1970 году):
Настройка языка
Я очень горжусь тем, насколько Wolfram Language адаптивен. Мы всегда стараемся добавить маленькие удобства.
Один из наших принципов заключается в том, что, если люди производят одну и ту же вычислительную работу, она должен быть встроена в качестве функции. Очень простой пример из версии 11.1 — ReverseSort:
(можно было бы подумать: какой в этом смысл? Это же просто Reverse[Sort[...]]. Однако функцию ReverseSort часто применяют к куче объектов, и гораздо проще применить конструкцию ReverseSort/@..., а не Reverse[Sort[#]]&/@... или Reverse@*Sort/@...).
Еще одно маленькое удобство: для функции Nearest теперь существуют специальные способы задания значений, получаемых на выходе. Например, это конструкция дает значения 5 наименьших расстояний (от чисел в списке) до числа 2.7:
CellularAutomaton — функция с очень широкой сферой применения. В версии 11.1 у вас появилась возможность проще задавать её параметры, например, с помощью ассоциаций:
Мы всегда стараемся убедиться, что наши нововведения применяются настолько широко, насколько это возможно. Вы можете теперь использовать функцию UpTo во многих местах: например, в задании аргументов функции ImageSize.
Мы также всегда стремимся к максимальному обобщению. Так, IntegerString теперь работает не только со стандартным представлением целых чисел, но и с традиционными, используемыми по всему миру:
И IntegerName может теперь также работать с различными типами и языками имен:
Существует ещё множество примеров, каждый из которых делает опыт использования Wolfram Language немного более удобным.
Язык хранения
Если вы создадите список определений х = 7, или $TimeZone=11, то он будет сохраняться, пока вы не удалите его или пока сеанс не закончится. Но что, если вы хотите, чтобы определения сохранялись дольше — во время всех ваших сессий? В версии 11.1 это становится возможным благодаря PersistentValue.
PersistentValue позволяет указать имя (например, «Foo») и «место сохранения» (это также возможно с функциями PersistenceTime и ExpirationDate). «KernelSession» означает, что значение сохраняется только в течение одного сеанса. Однако вы также можете применить «FrontEndSession» или «Local» (связь с вашим компьютером), или «Cloud» (что означает синхронизацию через облако по всему миру).
Функция PersistentValue довольно общая. Это позволяет располагать значения в разных местах (например, в различных частных облаках); и, если $PersistencePath определяет порядок просмотра, то MergingFunction определяет, как (если это вообще нужно) эти значения объединяются.
Программирование на низком уровне
Одна из целей Wolfram Language — обеспечение возможности максимально широкого взаимодействия со всеми вычислительными экосистемами. В версию 11.1 была добавлена поддержка аудио формата M4A, .ubj двоичного формата JSON, а также файлов .ini и Java.properties. Среди новых функций стоит также назвать BinarySerialize, которая преобразует любое выражение Wolfram Language в новый двоичный файл ("WXF") в форме, оптимизированной для скорости или размера:
BinaryDeserialize позволяет получить его обратно:
В версии 11.0 был представлен WolframScript — интерфейс командной строки к Wolfram Language, работающий локально или в облаке. С помощью WolframScript вы можете создавать автономные программы Wolfram Language, которые запускаются из командной строки. В новой версии появилось несколько усовершенствований для WolframScript, и теперь есть новый пункт меню New > Script, который предоставляет вам интерфейс документа для создания файлов .wls (= «Wolfram Language Script»), которые будут выполняться с помощью WolframScript:
Укрепление инфраструктуры
Одним из основных способов развития Wolfram Language в последнее время является развертывание. Мы приложили огромное количество усилий для развития в этом направлении.
Мы постоянно делаем обновления для Wolfram Cloud, и очень часто (и незаметно) расширяем возможности производительности сервера и пользовательского интерфейса. В версии 11.1 мы сделали некоторые важные обновления.
Появилась функция AutoCopy, которая может быть применена к любому облачному объекту, и каждый раз, когда объект доступен, свежая копия будет автоматически сохраняться. Это очень полезно, если, например, вы хотите создать документ, который многие люди могут изменять по отдельности («исследуйте эти идеи; вот документ, с которого можно начать...» и т. д.)
CloudDeploy[APIFunction[...]] значительно упрощает процесс развертывания API. В версии 11.1 есть несколько вариантов автоматизации аспектов поведения API. Функция AllowedCloudExtraParameters позволяет сказать, могут ли быть автоматизированы такие параметры API-интерфейсов, как "_timeout" или "_geolocation". Есть также функция AllowedCloudParameterExtensions (нет, это не самое длинное имя в системе; эта честь в настоящее время принадлежит функции MultivariateHypergeometricDistribution). Функция AllowedCloudParameterExtensions позволяет вам сказать не просто х=value, а х__url = ..., или х__json = ....
Также в версии 11.1 появились различные функции для поддержки частных экземпляров Wolfram Cloud и нашей новинки Wolfram Enterprise Private Cloud. Например, в дополнение к $WolframID для Wolfram Cloud, существует также $CloudUserID, позволяющая производить проверку подлинности в частных облаках. И внутри системы поддерживаются все виды новых возможностей, связанных с «мультиоблачной идентификацией» (это сложно; однако символьный характер Wolfram Language позволяет красиво справиться со всеми затруднениями).
И еще кое-что
Я обобщил кое-что из того, что появилось в версии 11.1. Я мог бы рассказать намного больше. О новых функциях, новых возможностях, каждая из которых будет интересна кому-то. То, что я написал так много о таком небольшом обновлении, свидетельствует о мощности R&D проектов — и о том, сколько всего может быть сделано с тем, что мы создавали в языке Wolfram на протяжении последних 30 лет.
Мы всегда работаем с портфелем проектов: от маленьких, которые реализуются очень быстро, до тех, которые могут зреть десятилетие или больше. В версии 11.1 реализованы результаты нескольких многолетних проектов (в области машинного обучения, вычислительной геометрии и т. д.), а также великое множество «коротких» проектов. Я с нетерпением жду ваших рассказов о том, что вы делаете с новой версией.
Автор: Wolfram Research