Перевод блог-поста Стивена Вольфрама (Stephen Wolfram) "Roaring into 2018 with Another Big Release: Launching Version 11.3 of the Wolfram Language & Mathematica".



Содержание


Поток выпуска версий
Что нового?
Блокчейн
Системное моделирование
Новое в ноутбуках
Документация рабочего процесса
Инструменты для презентаций
Wolfram Чат
Удобства языка
Обновления визуализации
Чтение текста
Вычисления по лицам
Нейронные сети
Асимптотический анализ
«Элементарная» алгебра
Доказательства
Растущая база знаний
Сообщения и почта
Операции на системном уровне
Что не упоминалось


Поток выпуска версий


В сентябре прошлого года мы выпустили версию 11.2 языка Wolfram Language и Mathematica — с различным новым функционалом, включая более 100 совершенно новых функций. Версия 11.2 была большой версией. Но сегодня у нас есть еще больший релиз: версия 11.3, которая, помимо прочего, включает почти 120 совершенно новых функций.

23 июня будет 30 лет с момента выпуска версии 1.0, и я очень горжусь тем, что мы смогли поддерживать ускоряющиеся темпы инноваций и развития теперь не менее трех десятилетий. Ключевым моментом в этом является тот факт, что мы используем язык Wolfram Language для разработки языка Wolfram Language — и действительно, большинство вещей, которые мы теперь можем добавить в версию 11.3, возможны только потому, что мы используем огромный стек технологий, который мы систематически строим более 30 лет.

Мы постоянно работаем над большим потоком R&D проектов, и наша стратегия для версий .1 заключается в том, чтобы использовать их для выпуска всего, что готово в определенный момент времени. Иногда то, что находится в версии .1, может не полностью заполнить новую область, а некоторые из функций могут быть помечены как «экспериментальные». Но наша цель с релизами версий .1 заключается в том, чтобы как можно быстрее предоставить последние результаты наших исследований и разработок. Целочисленные версии (.0) — более систематичны и обеспечивают полный охват новых областей, завершая то, что было добавлено постепенно в версиях .1.

В дополнение ко всем новым функциям в 11.3, в наш процесс вошел новый элемент. Начиная пару месяцев назад, мы начали проводить живую трансляцию наших совещаний по просмотру дизайна, которые я начал проводить, когда мы работали над версией 11.3. Поэтому для тех, кто интересуется «тем, как производится колбаса», в настоящее время собрано почти 122 часа записанных собраний, из которых вы можете точно узнать, как изначально были изобретены некоторые из вещей, которые вы теперь видите в версии 11.3. И в этом блог-посте я собираюсь делать ссылки к определенным записанным живым трансляциям, связанными с функциями, которые я обсуждаю.

Что нового?


ОК, так что нового в версии 11.3? Ну, много чего. И, кстати, версия 11.3 доступна сегодня как на рабочем столе (Mac, Windows, Linux), так и на Wolfram Cloud. (И да, для достижения одновременных выпусков такого рода требуется крайне нетривиальная разработка программного обеспечения, управление и обеспечение качества.)

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

Вот облако тегов новых функций, добавленных в версии 11.3:



Блокчейн


Нужно рассказать так много вещей о 11.3 что трудно понять, с чего начать. Но начнем с чего-то актуального: блокчейн. Как я буду объяснять в будущих блог-постах, язык Wolfram Language с его встроенной способностью говорить о реальном мире оказывается уникальным для определения и выполнения вычислительных умных контрактов. Фактическое вычисление языка Wolfram Language для этих контрактов будет (на данный момент) происходить без блокчейн, но важно, чтобы язык мог подключаться к блокчейну, и это то, что добавляется в версии 11.3. [Живая трансляция обсуждения дизайна]

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



Теперь мы можем взять одну из транзакций в этом блоке и изучить ее:



И тогда мы можем начать работать с данными или провести какой-либо анализ о структуре и содержании блокчейн. Для первоначального выпуска версии 11.3 мы поддерживаем Bitcoin и Ethereum, хотя вскоре будут добавлены другие открытые блокчейны.

Но уже в версии 11.3 мы поддерживаем частный (основанный на Bitcoin) Wolfram Blockchain, который размещен в нашем Wolfram Cloud. Мы будем периодически публиковать хэши из этого блокчейна в мир (возможно, в таких вещах, как физические газеты). И также можно будет запускать его версии в частных облаках Wolfram Cloud.

Очень легко написать что-то в Wolfram Blockchain (и, да, он взимает небольшое количество Cloud Credits):



Результатом является хеш транзакции, который затем можно найти в блокчейне:



Вот круг назад из блокчейна:



Кстати, функция Hash в языке Wolfram Language была расширена в 11.3, чтобы немедленно поддерживать виды хэшей (к примеру «RIPEMD160SHA256»), которые используются в блокчейнах криптовалюты. И, используя Encrypt и связанные с ним функции, можно начать создавать некоторые сложные вещи в блокчейне — и вскоре их будет еще больше.

Системное моделирование


Хорошо, теперь давайте поговорим о чем-то действительно большом и новом — по крайней мере, в экспериментальной форме в версии 11.3. Одна из наших долгосрочных целей в языке Wolfram Language — это возможность вычислить что угодно в мире. И в версии 11.3 мы добавляем новый класс вещей, которые мы можем вычислить: сложные инженерные (и другие) системы. [Живая трансляция наших совещаний по просмотру дизайна 1 и 2]

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

То, что мы добавляем (экспериментально) в версии 11.3, является встроенной возможностью для языка Wolfram Language для запуска моделей из SystemModeler — или фактически любой модели, описанной на языке Modelica.

Начнем с простого примера. Это извлекает определенную модель из нашего встроенного репозитория моделей:



Если вы нажмете [+], вы увидите более подробную информацию:



Но место, где это становится действительно интересным — то, что вы действительно можете запустить эту модель. SystemModelPlot создает график «стандартной симуляции» модели:



Какова на самом деле модель внутри? Это набор уравнений, описывающих динамику поведения компонентов системы. И для такой простой системы эти уравнения уже довольно сложны:



Часть работы моделирования реальных систем состоит, как правило, из работы со множеством компонентов и сложных взаимодействий. SystemModeler настроен таким образом, чтобы люди проектировали произвольно сложные системы графически, иерархически соединяя вместе компоненты, представляющие физические или другие объекты. Но большая новость заключается в том, что как только у вас будет модель, то в версии 11.3 вы сможете сразу работать с ней на языке Wolfram Language.

Каждая модель имеет множество свойств:



Одно из этих свойств дает переменные, которые характеризуют систему. И да, даже в очень простой системе, подобной этой, их уже много:



Вот пример того, как одна из этих переменных ведет себя в симуляции:



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





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

В 11.3 уже включено более 1000 готовых моделей — электрических, механических, тепловых, гидравлических, биологических и других систем. Вот более сложный пример — основная часть автомобиля:



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



Это дает краткий обзор модели, показывающей, что она включает в себя 1110 переменных:



В дополнение к готовым к работе моделям также имеется более 6000 компонентов, включенных в 11.3, из которых могут быть построены модели. SystemModeler предоставляет полную графическую среду для сборки этих компонентов. Но это также можно сделать исключительно с помощью кода языка Wolfram Language, используя такие функции, как ConnectSystemModelComponents (которые в основном определяют график подключения соединителей разных компонентов):





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

Потребовалось много времени, чтобы построить все возможности моделирования систем, которые мы представляем в 11.3. И они опираются на множество сложных особенностей языка Wolfram Language, в том числе на крупномасштабные символические манипуляции, умение эффективно решать системы дифференциально-алгебраических уравнений, обработку величин и единиц и многое другое. Но теперь, когда системное моделирование интегрировано в язык Wolfram Language, оно открывает всевозможные важные новые возможности — не только в области разработки, но и во всех областях, которые могут быть легко смоделированы многокомпонентными системами реального мира.


Новое в ноутбуках


Мы впервые представили ноутбуки в версии 1.0 еще в 1988 году, поэтому к настоящему времени мы отлаживаем их работу не менее 30 лет. В версии 11.3 представлен ряд новых функций. Простым примером являются закрытые группы ячеек, которые теперь по умолчанию имеют «открывающую кнопку», а также их можно открывать с помощью скобок их ячеек:



Я нахожу это полезным, потому что в противном случае я иногда не замечаю закрытых групп с дополнительными ячейками внутри. (И да, если вам это не нравится, вы всегда можете отключить его в стилевом оформлении.)

Другим небольшим, но полезным изменением является введение «неопределенных меток In / Out». В ноутбуке, подключённом к работающему ядру, последовательные ячейки помечены как In [1], Out [1] и т. д. Но если вы больше не подключены к одному и тому же ядру (скажем, потому что вы сохранили и снова открыли ноутбук), In/Out нумерация больше не имеет смысла. Таким образом, в прошлом не было показано никаких меток In, Out. Но с версии 11.3 все еще есть метки, но они неактивны, и в них нет явных цифр:



Еще одна новая функция в версии 11.3 — Iconize. Вот основная проблема, которую она решает. Допустим, у вас есть большой объем данных или другой ввод, который вы хотите сохранить в ноутбуке, но вы не хотите, чтобы он визуально заполнял ноутбук. Одна вещь, которую вы можете сделать, это поместить ее в закрытые ячейки. Но тогда для использования данных вам нужно сделать что-то вроде создания переменной и так далее. Iconize обеспечивает простой встроенный способ сохранения данных в ноутбуке.

Вот как вы делаете свернутую версию выражения:



Теперь вы можете использовать эту свернутую форму вместо всего выражения; он сразу же выдает результат полного выражения:



Еще одно удобное использование Iconize — сделать код более удобным для чтения, но при этом все еще выполнимым. Например, рассмотрим что-то вроде этого:



Вы можете выбрать здесь варианты, затем перейти в контекстное меню и свернуть их:



В результате получается более простой для чтения фрагмент кода, который по-прежнему выполняется так же, как и раньше:



В версии 11.2 мы представили ExternalEvaluate для выполнения кода на внешних языках (первоначально Python и JavaScript) непосредственно из языка Wolfram Language. (Это поддерживается на десктопе и в частных облаках, по соображениям безопасности и выделения ресурсов открытого Wolfram Cloud работает только с чистым кодом языка Wolfram Language.)

В версии 11.3 теперь стало еще проще вводить внешний код в ноутбуки. Просто запустите ячейку ввода с помощью >, и вы получите внешнюю ячейку кода (вы можете легко выбрать нужный язык):



И да, то, что возвращается, является выражением языка Wolfram Language, которое вы можете вычислить:



Документация рабочего процесса


Мы уделяем большое внимание документированию языка Wolfram Language — и традиционно у нас в нашей документации было три вида компонентов: «справочные страницы», которые охватывают одну функцию, «страницы-руководство», в которых содержится сводка с ссылками на многие функции, и «учебные пособия», которые предоставляют повествовательные введения в области функциональности. С версии 11.3 есть четвертый вид компонента: (рабочий процесс) workflows — это куда вас ведут новые опции на сером фоне в нижней части «корневой справочной страницы».



Когда все, что вы делаете, представлено явным кодом языка Wolfram Language, парадигма In/Out ноутбуков — отличный способ показать, что происходит. Но если вы щелкаете мышью или, что еще хуже, используете внешние программы, этого недостаточно. И вот где подойдут workflows, потому что они используют всевозможные графические устройства для представления последовательности действий, которые не просто вводят в язык Wolfram Language.



Поэтому, если вы получаете координаты графика или развертываете сложную форму в интернете или добавляете баннер в ноутбук, то ожидается следование нашей новой документации workflow. И, кстати, вы найдете ссылки на соответствующие workflows со справочных страниц для функций.

Инструменты для презентаций


Еще одна важная вещь, связанная с интерфейсом в версии 11.3, — это Presenter Tools — полная среда для создания и запуска презентаций, которые включают интерактивную интерактивность. Что делает Presenter Tools возможными — это богатая система ноутбуков, которую мы создали за последние 30 лет. Но то, что они помогают делать, это добавить все функции, которые нужны для удобного создания и запуска презентаций.

Люди используют наш предыдущий формат SlideShow, для презентаций с ноутбуками Wolfram в течении 20 лет. Но это никогда не было полным решением. Да, это давало нам удобные функции ноутбука, такие как живое вычисление в среде слайд-шоу, но не использовало такие вещи как «в PowerPoint», такие как автоматическое масштабирование контента до разрешения экрана. Справедливости ради отметим, что мы ожидали, что операционные системы будут просто решать проблемы, такие как масштабирование контента. Но прошло уже 20 лет, и этого все еще нет. Итак, теперь мы создали новые Presenter Tools, которые решают такие проблемы, и добавляют целый ряд возможностей для создания отличных презентаций с ноутбуками как можно проще.

Для начала просто выберите File > New > Presenter Notebook. Затем выберите свой шаблон и тему, и начинайте работу:



Вот как это выглядит, когда вы редактируете презентацию (и вы можете менять темы, когда захотите):



Когда вы будете готовы, просто нажмите «Начать презентацию». Все идет в полноэкранном режиме и автоматически масштабируется до разрешения экрана, который вы используете. Но вот большое отличие от PowerPoint-подобных систем: все живое, интерактивное, редактируемое и прокручиваемое. Например, вы можете иметь Manipulate прямо внутри слайда, и вы можете немедленно взаимодействовать с ним. (О, и все может быть динамичным, скажем, воссоздать графику на основе данных, которые импортируются в реальном времени.) Вы также можете использовать такие вещи, как группы ячеек для организации контента в слайдах. И вы можете редактировать то, что находится на слайде, и, например, делать livecoding, запуская свой код на ходу.

Когда вы будете готовы перейти на новый слайд, просто нажмите клавишу (или ваш пульт сделает это за вас). По умолчанию эта клавиша Page Down (поэтому вы можете использовать клавиши со стрелками при редактировании), но вы можете установить другой ключ, если хотите. Вы можете заставить Presenter Tools показывать слайды на одном дисплее, а затем отображать заметки и элементы управления на другом дисплее. Когда вы делаете слайды, вы можете включить SideNotes и SideCode. SideNotes — текстовые заметки, похожие на PowerPoint. Но SideCode — это нечто другое. На самом деле это основано на том, что я делал на своих собственных презентациях годами. Это код, который вы заранее подготовили, и можете «волшебством» вставить в слайд в режиме реального времени во время презентации, и если желаете, с моментальным выводом результата.



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

Wolfram Чат


Пока мы обсуждаем возможности интерфейса, вот еще одна: Wolfram Chat. Когда люди интерактивно работают над чем-то, обычно слышно, что кто-то говорит «позвольте мне просто отправить вам часть кода» или «позвольте мне отправить вам Manipulate». Теперь, в версии 11.3 теперь есть очень удобный способ сделать это, и это встроено непосредственно в систему ноутбуков Wolfram, что и называется Wolfram Chat. [Живая трансляция совещания]

Просто выберите File > New > Chat; вас спросят, с кем вы хотите «пообщаться», и это может быть кто угодно и где угодно с Wolfram ID (хотя, конечно, они должны принять ваше приглашение):



Затем вы можете начать сеанс чата и, например, поставить его рядом с обычным ноутбуком:



Здорово то, что вы можете отправлять все, что может появиться в ноутбуке, включая изображения, код, динамические объекты и т. Д. (Хотя это «песочница», так что люди не могут отправлять «кодовые бомбы» друг другу).

Существует много очевидных приложений Wolfram Chat не только в сотрудничестве, но и в таких вещах, как учебные аудитории и техническая поддержка. И есть и другие приложения. Например, для livecoding соревнований. И на самом деле одним из способов, которым мы проводили нагрузочные испытания Wolfram Chat во время его разработки, это используя его для участия в livecoding соревновании на конференции Wolfram технологий прошлой осенью.

Можно подумать, что чат — это нечто простое и ясное. Но на самом деле это удивительно сложно, с поражающим количеством различных ситуаций и случаев для рассмотрения. Под капотом Wolfram Chat использует как Wolfram Cloud, так и новую структуру pub-sub channel, которую мы ввели в версии 11.0. В версии 11.3 Wolfram Chat поддерживается только для настольных ноутбуков Wolfram, но скоро они появятся в ноутбуках в интернете и на мобильных устройствах.

Удобства языка


Мы всегда совершенствуем язык Wolfram Language, чтобы сделать его более удобным и продуктивным в использовании. И один из способов сделать это — это добавить новые «удобные функции» в каждой версии языка. Зачастую эти функции делают простые вещи; задача (которая часто занимает много лет) заключается в том, чтобы придумать для них красивый и простой дизайн. (Вы можете увидеть довольно много обсуждений новых удобных функций в версии 11.3 в недавних живых трансляциях.)

Вот функция (удивительно, что мы не сделали ее раньше), которая просто строит выражение из ее головы и аргументов:



Чем это полезно? Ну, это может сохранить явное построение чистых функций с Function или &, например, в таком случае:



Другая функция, которая на каком-то уровне очень проста (но выбор имени этой функции был мучительным), является Curry. Curry (названный в честь «currying», который, в свою очередь, назван в честь Ха?скелл Брукс Ка?рри) по существу делает операторные формы, а Curry [f, n] «currying in» n аргументов:



Однопараметрическая форма самого Curry такова:



Почему это полезно? Ну, некоторые функции (например, Select) имеют встроенные «операторные формы», в которых вы даете один аргумент, затем вы «curry in» другие:



Но что, если вы хотите создать оператор самостоятельно? Ну, вы всегда можете явно построить его с помощью Function или &. Но с Curry вам не нужно это делать. Например, это операторная форма D, в которой второй аргумент задан как x:



Теперь мы можем применить эту операторную форму для дифференцирования по x:



Да, Curry на каком-то уровне довольно абстрактна. Но это приятное удобство, если вы это понимаете, и понимание этого — хорошее упражнение в понимании символической структуры языка Wolfram Language.

Кстати, говоря об операторных формах, NearestTo является аналогом операторной формы Nearest (однопараметрическая форма самого Nearest генерирует NearestFunction):



Вот пример того, почему это полезно. Это находит 5 химических элементов, плотность которых близка к 10 г / см3:



В версии 10.1 в 2015 году мы представили множество функций, которые работают с последовательностями в списках. Версия 11.3 добавляет еще пару таких функций. Одна из них — SequenceSplit. Это похоже на StringSplit для списков: он разбивает списки в позициях определенных последовательностей:



Также новым в «Sequence family» является функция SequenceReplace:



Обновления визуализации


Так же, как мы всегда совершенствуем основные функциональные возможности программирования в языке Wolfram Language, мы также всегда совершенствуем такие вещи, как визуализация.

В версии 11.0 мы добавили GeoHistogram, здесь показана «плотность вулканов» в США:



В версии 11.3 мы добавили GeoSmoothHistogram:



Также новым в версии 11.3 являются выноски (callouts) в 3D-графиках, здесь случайные слова отмечают случайные точки (но обратите внимание как расположены слова чтобы не перекрывать друг друга):



Мы можем сделать несколько более значимый график слов в 3D, используя новый FeatureSpacePlot3D на основе машинного обучения (обратите внимание, например, что «vocalizing» и «crooking» (означающие примерно одно и тоже — переводчик) соответственно заканчиваются вместе):



Чтение текста


Говоря о машинном обучении, версия 11.3 продолжает нашу агрессивную разработку автоматизированного машинного обучения, создавая как общие инструменты, так и конкретные функции, которые используют машинное обучение.

Интересным примером новой функции является FindTextualAnswer, который берет фрагмент текста и пытается найти ответы на текстовые вопросы. Здесь мы используем статью Википедии о «носороге», спрашивая, сколько весит носорог:



Это похоже на волшебство. Конечно, это не всегда работает и может делать то, что мы, люди, будем считать довольно глупым. Но это использует самую современную методологию машинного обучения, а также множество уникальных данных для обучения, основанных на Wolfram|Alpha. Мы можем видеть немного больше того, что это делает, если мы спросим не только о первом ответе о весе носорогов, но о 5:



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



Или в тоннах:



FindTextualAnswer не заменяет всю нашу обработку данных и стратегию по вычисляемым данным. Но это может быть полезным как способ быстро получить первое предположение об ответе, даже из полностью неструктурированного текста. И, да эта функция должна хорошо справляться с критическими упражнениями по чтению и, вероятно, может быть сделан для того, чтобы преуспеть в Jeopardy!

Вычисления по лицам


Мы много реагируем на человеческие лица, и с современным машинным обучением можно делать всевозможные вычисления, связанные с лицом, и в версии 11.3 мы добавили для этого систематические функции. Здесь FindFaces находит лица (известных физиков) с фотографии:



FacialFeatures использует методы машинного обучения для оценки различных атрибутов лиц (таких как наглядный возраст, наглядный пол и эмоциональное состояние):



Эти функции можно, например, использовать в качестве критериев в FindFaces, здесь выделяют физиков, которые выглядят моложе 40 лет:



Нейронные сети


В языке Wolfram Language существуют всевозможные функции, которые основаны на нейронных сетях (например, FacialFeatures). Но в течение нескольких лет мы также энергично строили целую подсистему на языке Wolfram Language, чтобы люди могли работать напрямую с нейронными сетями. Мы строим сверх низкоуровневых библиотек (в частности, MXNet, для которых мы были большими вкладчиками), поэтому мы можем использовать все новейшие графические процессоры и другие оптимизации. Но наша цель — создать символический слой высокого уровня, который позволяет максимально упростить вычисления нейронной сети. [Живая трансляция совещания 1, 2 и 3]

Это состоит из многих частей. Настройка автоматического кодирования и декодирования на стандартные конструкции языка Wolfram Language для текста, изображений, аудио и т. д. Быть в состоянии автоматически объединить отдельные операции нейронной сети, особенно те, которые касаются таких вещей как последовательность. Возможность максимально автоматизировать обучение, включая автоматическую оптимизацию гиперпараметров.

Но есть что-то еще более важное: наличие большой библиотеки существующих, обученных (и необученных) нейронных сетей, которые могут использоваться как непосредственно для вычислений, так для передачи обучения или как экстракторы признаков. И для этого мы создали наш репозиторий Neural Net Repository:



Здесь есть сети, которые делают всевозможные замечательные вещи. И мы добавляем новые сети каждую неделю. Каждая сеть имеет свою собственную страницу, которая включает примеры и подробную информацию. Сети хранятся в облаке. Но все, что вам нужно сделать чтобы вывести их в свои вычисления — это использовать NetModel:



Вот сеть, которую использует FindTextualAnswer:



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

В версии 11.3 есть некоторые новые типы слоев, такие как CTCLossLayer (особенно для поддержки аудио), а также множество обновлений и улучшений для существующих типов слоев (10-кратное ускорение LSTM на графических процессорах, автоматические свертки переменной длины, расширения многих слоев для поддержки произвольно-размерных вводов и т. д.). В версии 11.3 мы уделяли особое внимание рекуррентным сетям и генерации последовательности. И чтобы поддержать это, мы внедрили такие вещи, как NetStateObject, что в основном позволяет сети иметь персистентное состояние, которое обновляется в результате ввода данных, которые получает сеть.

При разработке нашей символической структуры нейронной сети мы на самом деле идем в двух направлениях. Во-первых, мы делаем все более автоматизированным, чтобы можно было проще и проще настроить системы нейронных сетей. Но во-вторых — иметь возможность легко обрабатывать все больше нейронных сетевых структур. И в версии 11.3 мы добавляем целую коллекцию функций «сетевой хирургии», таких как NetTake, NetJoin и NetFlatten, чтобы вы могли входить, настраивать и взламывать нейронные сети, как пожелаете. Конечно, наша система спроектирована так, что даже если вы это сделаете, вся наша автоматизированная система — с обучением и т. д. — продолжит отлично работать.

Асимптотический анализ


Более 30 лет наша миссия состоит в том, чтобы сделать как много больше математики вычислительной. И в версии 11.3 мы наконец-то раскусили важную, давно ожидаемую область: асимптотический анализ.

Вот простой пример: найти приближенное решение дифференциального уравнения вблизи x = 0:



Сначала это может выглядеть как решение в виде степенного ряда. Но будьте внимательнее: присутствует e (1 / x) фактор, который просто даст бесконечность в каждом порядке как степенной ряд по x. Но с версией 11.3 мы теперь получили функции асимптотического анализа, которые обрабатывают всевозможные масштабы роста и колебаний, а не только порядка.

В прошлом, когда я зарабатывал на жизнь будучи физиком, всегда казалось, что все самые темные силы сосредотачивались на методах возмущения. Были регулярные возмущения и сингулярные возмущения. Были такие вещи, как метод WKB, и метод пограничного слоя. Суть всегда заключалась в том, чтобы вычислить разложение по некоторому небольшому параметру, но для достижения этой цели в различных случаях всегда требовались различные хитрости. Но теперь, после нескольких десятилетий работы, наконец в версии 11.3 у нас имеется систематический способ решения этих проблем. Вот дифференциальное уравнение, где мы ищем решение для малого ?:



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

Это задание: 2^n^k асимптотически меньше (n^m)! при n-> ?? Результат: да, при определенных условиях:



«Элементарная» алгебра


Одной из особенностей Wolfram|Alpha, популярной среди учеников является ее функциональность «Show Steps», в которой она синтезирует «на лету» объяснения, показывающие как получить ответы, которые она дает. Но каковы на самом деле шаги, скажем, в результате действия Show Steps для алгебры? Они — «элементарные операции», такие как «добавить соответствующие стороны двух уравнений». И в версии 11.3 мы включаем функции, чтобы просто делать такие вещи:





И, ОК, похоже, что это действительно тривиальные функции, которые в основном просто работают над структурой уравнений. И это на самом деле то, что я думал, когда я сказал, что мы должны их реализовать. Но, как быстро указала команда R&D по алгебре, есть всяческие ловушки («что, если b отрицательно?» и т.д.). То есть то, где студенты часто ошибаются, но что со всей алгоритмической инфраструктурой в Wolfram Language нам легко получить правильно:



Доказательства


Язык Wolfram Language в основном связан с результатами вычислений. Но, получая результат, можно также спросить, почему это правильно: можно попросить какое-то доказательство, демонстрирующее то, что ответ верен. И вот уже более 20 лет я думал о том, как найти и представить общие доказательства полезным и вычислимым образом на языке Wolfram Language. И я очень рад, что, наконец, в версии 11.3 функция FindEquationalProof дает пример, который мы будем обобщать и брать за основу в будущих версиях. [Живая трансляция совещания]

Моей любимой историей успеха в автоматическом доказательстве теорем является крошечная (и на самом деле простейшая) система аксиом для булевой алгебры, которую я нашел в 2000 году. Это всего лишь одна аксиома с одним оператором, которую можно представить как соответствующей операции Nand. В течении 11 лет, FullSimplify фактически смог использовать автоматические методы проверки теорем внутри, чтобы иметь возможность вычислять вещи. Итак, здесь он начинается с моей аксиомы для булевой алгебры, а затем вычисляет, что Nand является коммутативным:



Но это просто говорит нам результат; он не дает никаких доказательств. Что ж, в версии 11.3 мы можем теперь получить доказательство:



Что такое объект доказательства? Из краткого сведения видно, что доказательство имеет 102 шага. Тогда мы можем попросить «граф доказательства». Зеленая стрелка наверху представляет собой начальную аксиому; красный квадрат внизу представляет доказанную вещь. Все узлы в середине являются промежуточными леммами, доказанными друг другом в соответствии с показанными соединениями.



Что на самом деле в доказательстве? Ну что ж, это сложно. Но вот набор данных, который дает все детали:



Вы можете получить несколько более повествовательную форму в виде ноутбука:



И тогда вы также можете получить «функцию доказательства», которая является частью кода и может быть выполнена для проверки результата:



Неудивительно, и неинтересно, это выдает True после запуска:



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

Растущая база знаний


База знаний Wolfram (Wolfram Knowledgebase) растет каждый день — частично через систематические каналы передачи данных, и частично через новые курированные данные и явно добавляющиеся домены. Если кто-то спросит, добавилось между версиями 11.2 и 11.3, это немного странная коллекция вещей. Появилось более 150 параметров об открытых компаниях. Также теперь есть более 900 новых характеристик для Плутона и Меркурия. Есть 16 000 новых анатомических структур, таких как нервные пути. Есть около 500 новых «значительных графиков». Есть тысячи новых гор, островов, примечательных зданий и других географических особенностей. Существует множество новых свойств продуктов и новых связей с болезнями. И многое другое.

Но с точки зрения обычного повседневного использования базы знаний Wolfram наиболее важной новой функцией в версии 11.3 является система предварительной выборки объектов. База знаний, естественно, большая, и она хранится в облаке. Но если вы используете настольную систему она «по волшебному» загружается вам.

Что ж, в версии 11.3, магия стала значительно сильнее. Поскольку теперь, когда вы запрашиваете один конкретный элемент, система будет пытаться выяснить что вы, возможно, попросите в следующий раз и она автоматически начнет асинхронно пре-загружать это, и поэтому, когда вы действительно попросите об этом, он уже будет на вашем компьютере — и вам не придется ждать его загрузки из облака. (Если вы хотите сделать предварительную выборку «вручную», для этого нужно использовать функцию EntityPrefetch. Обратите внимание: если вы используете язык Wolfram Language в облаке, база знаний уже «прямо там», поэтому нет необходимости для загрузки или предварительной выборки.)

Весь механизм предварительной выборки применяется вполне обобщенно. Например, если вы используете Interpreter для интерпретации некоторого ввода (например, сокращений штата США), информация о том, как делать интерпретации, также получит предварительную выборку, поэтому, если вы используете десктоп, интерпретации могут выполняться локально без общения с облаком.

Сообщения и почта


Вы можете отправлять электронные письма с языком Wolfram Language (используя SendMail) уже десятилетиями. Но начиная с версии 11.3, он может использовать полное форматирование HTML, и вы можете вставлять в него множество вещей — не только графику и изображения, но также облачные объекты, наборы данных, аудио и т. д. [Живая трансляция совещания]

Версия 11.3 также предоставляет возможность отправлять текстовые сообщения (SMS и MMS) с помощью SendMessage. Однако из соображений безопасности вы можете отправлять только на свой номер мобильного телефона, заданный значением $MobilePhone (и, да, безусловно, номер подтверждается).

Язык Wolfram Language уже давно позволяет импортировать электронную почту и почтовые ящики, и с функцией MailReceiverFunction также может отвечать на входящую почту. Но в версии 11.3 добавлено что-то новое, это возможность иметь дело с живыми почтовыми ящиками.

Сначала подключитесь к почтовому серверу (IMAP, на данный момент) (я не показываю диалоговое окно проверки подлинности):



Затем вы можете в основном использовать язык Wolfram Language как программируемый почтовый клиент. Это дает вам набор текущих непрочитанных сообщений в вашем почтовом ящике:



Теперь мы можем выбрать одно из этих сообщений, и мы получим символический объект MailItem, который, например, мы можем удалить:





Операции на системном уровне


Версия 11.3 поддерживает множество новых операций на системном уровне. Начнем с простого, но полезного: удаленное выполнение программы. Функция RemoteRun в основном похожа на Unix rsh: вы даете ей имя хоста (или IP-адрес), и команда выполняется там. Параметр Authentication позволяет указать имя пользователя и пароль. Если вы хотите удаленно запускать постоянную программу, вы можете сделать это с помощью RemoteRunProcess, который является удаленным аналогом локального RunProcess.

При работе с удаленными компьютерными системами аутентификация всегда является проблемой, и в течение нескольких лет мы постепенно строим улучшенную символическую систему аутентификации на языке Wolfram Language. В версии 11.3 есть новая функция AuthenticationDialog, в которой появляется целый ряд правильно настроенных диалоговых окон проверки подлинности. Затем есть GenerateSecuredAuthenticationKey, который генерирует объекты OAuth SecuredAuthenticationKey, которые пользователи могут использовать для аутентификации вызовов в Wolfram Cloud извне.

Также на системном уровне есть несколько новых форматов импорта/экспорта, таких как формат BSON (формат JSON-двоичной сериализации) и WARC (формат веб-архива). Существуют также форматы HTTPResponse и HTTPRequest, которые (среди многих других) можно использовать для написания веб-сервера на языке Wolfram Language несколькими строками кода.

Прошло уже несколько лет как мы представили объекты ByteArray в язык Wolfram Language, и мы постоянно поддерживаем их развитие. В версии 11.3 существуют BaseEncode и BaseDecode для преобразования между байтовыми массивами и строками Base64. Версия 11.3 также расширяет Hash (что, помимо всего прочего, работает на байт-массивах), добавляя различные типы хэширования (например, двойные SHA-256 и RIPEMD), которые используются для современных нужд как блокчейн и криптовалюты.

Мы всегда добавляем больше видов данных, которые мы можем сделать вычислимыми на языке Wolfram Language, а в версии 11.3 одним дополнением являются данные системных процессов, такие, как вы можете получить из команды Unix ps:



Излишне говорить, что вы можете делать довольно детальный поиск процессов с определенными свойствами. Вы также можете использовать SystemProcesses для получения явного списка символических объектов ProcessObject, которые вы можете запросить и обработать (например, с помощью KillProcess).



Конечно, потому что все вычислимо, легко сделать такие вещи, как делать графики начала процессов, выполняющихся на вашем компьютере (и, да, я последний раз перезагружался несколько дней назад):



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

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



Вы можете просмотреть каждый пакет; вот первый, который был записан:



Почему это интересно? Ну, я ожидаю, что вы будете использовать его для отладки достаточно регулярно — и это также полезно для изучения компьютерной безопасности, и не в последнюю очередь потому, что вы можете сразу же перевести все в стандартную визуализацию языка Wolfram Language, машинное обучение и другие функции.

Что не упоминалось


Это уже длинный блог-пост, но в 11.3 есть много других вещей, о которых я даже не упоминал. Например, появились всевозможные обновления для импорта и экспорта. Как намного более эффективный и надежный импорт XLS, CSV и TSV. Или экспорт анимационных PNG. Или поддержка метаданных в звуковых форматах, таких как MP3 и WAV. Или более сложное квантование цвета в GIF, TIFF и т. д. [Живая трансляция совещания 1 и 2.]

Мы представили символические Audio объекты в 11.0, и с тех пор мы развиваем функциональность аудио быстрыми темпами. Версия 11.3 сделала цифровую звукозапись более надежной (и впервые поддерживаем ее в Linux). Мы также ввели функции AudioPlay, AudioPause и AudioStop, которые управляют открытыми объектами AudioStream.

Также новым является AudioDistance, который поддерживает различные измерения расстояния для звука. Между тем AudioIntervals теперь может автоматически разбивать аудио на отрезки, разделенные молчанием. И в несколько иной области $VoiceStyles дает список возможных голосов, доступных для SpeechSynthesize.

Вот небольшая новая математическая функция, которая в этом случае дает последовательность из 0 и 1, в которой каждый блок длины-4 появляется ровно один раз:



Язык Wolfram Language теперь имеет сложную поддержку величин и единиц — как явных величин (например, 2,5 кг), так и символических «количественных переменных» («р, которые имеют единицы давления»). Но как только вы находитесь внутри, делая что-то вроде решения уравнения, вы обычно хотите «исключить единицы измерения». И в 11.3 теперь есть функция, которая систематически делает это: NondimensionalizationTransform. Существует также новый механизм в 11.3 для введения новых видов величин, используя IndependentPhysicalQuantity.

Большая часть встроенной базы знаний Wolfram Knowledgebase в конечном итоге представлена в терминах хранилищ объектов, а в версии 11 мы ввели явную конструкцию EntityStore для определения новых хранилищ сущностей. В версии 11.3 вводится функция EntityRegister, которая позволяет вам регистрировать хранилище сущностей, чтобы вы могли ссылаться на типы сущностей, которые она содержит, так же как вы ссылались бы на встроенные типы объектов (например, города или химические вещества).

Еще одна вещь, которая введена в качестве экспериментальной функции в версии 11.3, — это пакет MongoLink, который поддерживает подключение к внешним базам данных MongoDB. Мы сами используем MongoLink для управления наборами данных размерами в терабайты и больше для таких вещей, как машинное обучение. И на самом деле то, что MongoLink является частью наших полномасштабных усилий в области развития, результаты которых будут видны в будущих версиях, способствует беспрепятственной поддержке чрезвычайно больших объемов данных, хранимых во внешнем виде.

В версии 11.2 мы ввели ExternalEvaluate для запуска кода на внешних языках, таких как Python. В версии 11.3 мы экспериментируем с обобщением ExternalEvaluate для управления веб-браузерами, создавая структуру WebDriver. Вы можете давать всевозможные команды, имеющие тот же эффект, как и кликанье по странице веб-браузера, так и те, которые извлекают все, что вы можете видеть на странице.

Вот как вы можете использовать Chrome (мы поддерживаем его и Firefox), чтобы открыть веб-страницу, а затем захватить ее:



Ну, этот блог-пост становится длинным, но, конечно, я могу сказать больше. Ниже приведен более полный список функций, которые являются новыми или обновленными в версии 11.3:



Но для меня это удивительно, сколько есть в выпуске Wolfram Language .1, и это появилось всего за несколько месяцев со времени последней версии .1. Это благополучное указание на объем исследований и разработок, которые нам удается завершить, надстраивая над стэком технологий Wolfram Language, который мы создали. И, да, даже в 11.3 существует множество новых уголков для изучения. И я надеюсь, что многие люди сделают это, и будут использовать новейшие инструменты, которые мы создали для открытия и изобретения всевозможных новых и важных миру вещей.

С вопросами обращайтесь info-russia@wolfram.com

Бесплатная триал версия Mathematica
Бесплатный триал Wolfram|One

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


  1. Tortortor
    21.04.2018 10:26

    потрясающе. спасибо за перевод.


  1. youngmysteriouslight
    21.04.2018 15:59

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

    30 лет прошло. Стив решил, что пора бы более механизм закрытия группы сделать более заметным.

    Остальные изменения, как обычно, интересны.