[Перевод] Врываемся в 2018 год с очередным большим релизом: выпуск версии 11.3 языка Wolfram Language и Mathematica

yp-dzy7amwh7ox9papycgpmowkk.png

Перевод блог-поста Стивена Вольфрама (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:

0wgkcs8k3e7qsjhvnmdchzrmpem.png

Блокчейн

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

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

i2swd-sxepfifky9nwzl6x4i8a8.png

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

_23bwy6irsbg2zdbzhbtpwrqagy.png

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

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

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

opsyjqbcyqxggib2_ypepramuoe.png

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

iwxn0kwl2tyvvprhzhcjkk6hvyk.png

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

lrrkkrniesi8wl6kuyzljecmhtm.png

Кстати, функция 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.

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

uysrbngsibis04s7ieplysy5h0g.png

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

r81tuvdbf9vszwcnublds17rq4s.png

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

jcwxv5ktaiybch815m98c0zx928.png

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

tckqkyixfx5qoh4fddfkotd9gi4.png

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

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

gmnf6ex-t-hw0frvocjszz_ek28.png

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

1zsmjsrsdcmrar7vg4x-u9jlaqi.png

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

nypszh55nmdxpjwlxcl5kugzuam.png

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

qz0v7a5ol-uec-vmflyq5kdpnd4.png
k1jprwwxptq4z53xkjwg273uo2q.png

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

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

txdjotyxyen8--befl1fm1ulitg.png

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

cpgso18coidu4vxggcducswqchy.png

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

rooxe5ndbhvhpwvd90ifghdplig.png

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

ridr_ppw71nfcofbcfakgdfzwng.png
8uybo0ylhjszcmgp_ha19ngv4ju.png
zil7hs3csw2imungc2xcugwidui.png

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

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

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

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

5mgwm8iudb_ev_fardc8xjghu4a.png

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

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

3qy0yf-p3kepxnt64ng40mv8zec.png

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

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

9lriby7cmorw9izmy4fjqwqfw3u.png

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

jfr5mldfukyku4tn7tsxpost2lw.png

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

nnpwyqhfkg1q0w29s9zz4ukdpmw.png

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

gubeb3fl7xe-wk1defzycegh3yy.png

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

r5b9zan431rhaiuosywcslt5ge0.png

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

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

rxgknjvlhx4hfmnipusee8iuwf0.png

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

ami9iw3d1relkhmoh3_2hsylkl0.png

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

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

c_6euc7cwhunkmnmgxpbikhsmdy.png

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

lnxmm-lnu_ssjrzwguj-cw0k5f0.png

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

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

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

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

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

pn4cvocr7bx_g8v-urs6fj1iax0.png

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

n-lp7cd9k3hmgyd0ayczqs1vpfg.png

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

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

eqg-wiqkzzi6pgspcoyy0hcz79w.png

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

Wolfram Чат

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

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

j2gwf91bsg6g2ruv1hhqfiuez14.png

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

-yibaxxawytfr1fffazux26avni.png

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

Существует много очевидных приложений 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 в недавних живых трансляциях.)

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

dcdtowkrkfju7ba6ve7d30bf97a.png

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

hexgdaomqes-9bgzlurvt8le6s0.png

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

tv067fhd0p84zmgljod3v5xyt-y.png

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

dhwvqxob-x_3vo8wk8f5dvvbeey.png

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

j6tu1w5ddlzpxiypv4uco3rcbgy.png

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

adehbqghedfncz5g4y354wmhjm4.png

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

u-njjefucll8mnowonhvfh7c7q8.png

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

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

zg9xlznp6ycnpfuqbxcflsjp64o.png

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

dzhwxnsplrmhk-rurb393snmyjq.png

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

crn_smkdmnadfi2cquvxajmjgos.png

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

hv80mdvp9aiha1bowtnfjohsjwu.png

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

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

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

bdnkv5wropz78vnv39_jmak0vfq.png

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

dh0j7qc5wgkouxntfe9jsdwr2be.png

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

d2ii_mqo_uju8s5aa2oo96kacja.png

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

bvrkjeinwvyhqvfepoxtal42cms.png

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

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

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

nyzfplopl4yn9b6ogrjwozemles.png

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

qcjfmdmrai33jvq2and1a8fjbyu.png

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

hy_6e3nmow7o03huxi5jh9qy3ve.png

Или в тоннах:

r68rorf0c1ojajvyluomos2odqi.png

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

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

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

kmoufoqwnueg9qc7xyg1nau5acs.png

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

246k8eowqrr-ifhgaocrhufj268.png

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

0kpjpyji_31oi690c6889shcbbw.png

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

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

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

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

xxzkcbgsfivwji9wekdg5cqzzsm.png

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

qdat2unpxcrtihjrpbhg54cxwaq.png

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

k2bplt4ymuprsqwvvwv2czem20m.png

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

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

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

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

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

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

-xdzl8v-lzxlpaee7i2iygrx_x8.png

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

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

zwz4vkcce_mguo9js588xwnhpje.png

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

© Habrahabr.ru