Нейронные сети яндекс


CatBoost — новый метод машинного обучения от Яндекса — Блог Яндекса

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

Многие привычные нам вещи, например лента социальной сети, прогноз погоды или картинка «под Ван Гога» в чьём-нибудь инстаграме, — результат применения машинного обучения. И речь не только об интернете. Банкам машинное обучение помогает своевременно пополнять купюрами банкоматы. Магазинам — прогнозировать спрос на товары. Металлургам — выявлять дефекты проката стали и определять соотношение примесей в сплавах.

Нейронные сети в Яндексе

Яндекс тоже использует нейронные сети: например, они задействованы в распознавании голоса и поиске похожих картинок. Нейросети также поставляют факторы для Матрикснета. Они соотносят смысл поискового запроса и заголовка документа — так работает алгоритм «Палех».

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

С 2009 года Яндекс развивает собственный метод машинного обучения — Матрикснет. Он был разработан для ранжирования результатов поиска, но используется и в других сервисах Яндекса: например, в Почте — для фильтрации спама, в Картах и Навигаторе — для расчёта времени в пути, в Директе — для подбора релевантных рекламных объявлений. Матрикснет устойчив к переобучению и позволяет использовать множество факторов и их комбинаций.

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

Методы на основе градиентного бустинга отлично подходят для работы с разнородными данными

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

Тренируемся на кошках

Название CatBoost придумано в Яндексе. Это сокращение от categorical boosting, то есть бустинг с учётом категориальных признаков.

Сегодня Яндекс представляет преемника Матрикснета — новый метод машинного обучения CatBoost. В нём также используется градиентный бустинг, но CatBoost, во-первых, превосходит Матрикснет по точности предсказаний, а во-вторых, способен учитывать так называемые категориальные признаки — то есть признаки, которые принимают одно из конечного количества значений. Так, облака могут быть кучевыми, перистыми, перисто-кучевыми и так далее. Жанры музыки включают рок, рэп, классику, альтернативу, метал. Пудель, овчарка, спаниель и эрдельтерьер — породы собак. Подобные данные больше не нужно выражать в числах: CatBoost воспринимает их в исходном виде. Обученные с его помощью модели позволяют использовать всё многообразие доступных данных, не тратя время на их перевод в числовую форму.

Мы уже опробовали CatBoost в сервисах Яндекса. В Дзене его задействовали для ранжирования ленты рекомендаций, а в Погоде — для расчёта прогноза с помощью технологии Метеум. Во всех случаях он показал себя лучше Матрикснета.

В градиентном бустинге используются деревья принятия решений (на картинке). Сама по себе модель довольно слаба, но когда они строятся последовательно и минимизируют ошибки друг друга, это даёт хорошие результаты

С разнородными данными, в том числе и выраженными в нечисловой форме, сталкиваются во всех отраслях, от финансов до сельского хозяйства. Поэтому мы решили выложить библиотеку машинного обучения CatBoost в открытый доступ. Она доступна на языках программирования Python и R. Версии библиотеки для Windows, macOS и Linux и программу визуализации CatBoost Viewer — она позволяет следить за процессом обучения на графиках — можно скачать в репозитории на GitHub. Выкладывая CatBoost в открытый доступ, мы надеемся, что сообщество оценит алгоритм по достоинству и поможет нам сделать его ещё лучше.

Метод машинного обучения CatBoost уже нашёл первое применение за пределами Яндекса — в Европейском центре ядерных исследований (ЦЕРН). CatBoost используется для обработки данных эксперимента LHCb, который проходит на одноименном детекторе Большого адронного коллайдера. Задача эксперимента — исследование асимметрии материи и антиматерии во взаимодействиях тяжёлых прелестных кварков. Детектор LHCb включает несколько субдетекторов — каждый из них реагирует на разные свойства частиц. CatBoost помогает объединить данные с разных детекторов, чтобы учёные могли получить максимально полное представление о частицах. Результаты CatBoost оказались существенно лучше результатов, получаемых с использованием других алгоритмов.

yandex.ru

Яндекс запустил гибридную систему перевода — Блог Яндекса

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

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

Статистический перевод

Есть много способов обучить машину переводу с одного языка на другой. Например, можно дать ей словари и грамматики разных языков: с их помощью она освоит правила. Или можно показать ей много параллельных текстов. Сравнивая их, машина научится находить соответствия — например, поймёт, что слова dog и собака являются вероятными переводами друг друга. В основе такого подхода лежат не правила, а статистика, поэтому он называется статистическим.

С момента запуска Яндекс.Переводчик использует статистическую систему. При переводе она разделяет предложения на кусочки (отдельные слова и фразы) и для каждого кусочка подбирает все возможные переводы с указанием их вероятности. Затем система составляет из переведённых фрагментов разные варианты нового предложения. Выбирают тот вариант, который содержит переводы с высокими вероятностями и в котором фрагменты хорошо сочетаются друг с другом.

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

Нейросетевой перевод

С сегодняшнего дня наряду со статистической системой мы используем в Яндекс.Переводчике нейронную сеть. Модели на нейронных сетях отлично справляются с обработкой естественной информации, например голоса или картинок. Задача перевода — превратить текст на одном языке в текст на другом языке, сохранив содержание и смысл. Текст — это тоже естественная информация, поэтому для нейронной сети такая задача вполне по силам.

Как и статистический переводчик, нейронная сеть анализирует массив параллельных текстов и учится находить в них закономерности. Сам перевод, однако, устроен по-другому. Нейросеть работает не со словами и фразами, а с более крупными единицами — предложениями. Она получает на вход предложение на одном языке, а на выходе выдаёт предложение на другом языке. Дробления на слова и фразы не происходит — в нём нет необходимости.

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

Модель языка

Модель языка содержит список всех употребляемых в языке слов и словосочетаний с указанием частоты их использования. Она обеспечивает связность текста и в статистическом, и в нейронном переводе. Её можно использовать и для задач, не связанных с переводом. Когда вы печатаете сообщение с помощью Яндекс.Клавиатуры, машина пытается предсказать, какое слово вы наберёте следующим. Например, если вы набрали «привет, как», она поймёт, что продолжением могут быть слова «дела» или «ты». Это тоже результат работы модели языка.

Поскольку нейросеть работает не с фрагментами, а с предложениями целиком, перевод получается более связным и «гладким». Чтобы избежать несогласований — например, папа пошла или сильный боль, — Яндекс.Переводчик проводит дополнительную проверку. Предложение, переведённое нейросетью, проходит через модель языка — так называют свод знаний о языке, накопленный системой. Если в перевод вкрались грамматические ошибки, модель их исправит.

Гибридная система

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

Кроме того, нейросеть не всегда хорошо справляется с переводом мало распространённых имён, топонимов и других редких слов. Зато для статистического перевода, как вы помните, это нетрудная задача — если слово было в параллельных текстах, машина его запомнит. Мы решили объединить два подхода и создать гибридную систему, которая объединяет статистический и нейросетевой перевод. Работая вместе, две системы компенсируют недостатки друг друга.

Когда Яндекс.Переводчик получает от пользователя текст, он отдаёт его на перевод обеим системам — и нейронной сети, и статистическому переводчику. Затем алгоритм, основанный на методе обучения CatBoost, оценивает, какой перевод лучше. При выставлении оценки учитываются десятки факторов — от длины предложения (короткие фразы лучше переводит статистическая модель) до синтаксиса. Перевод, признанный лучшим, показывается пользователю.

Сейчас гибридная система используется для переводов с английского языка на русский. Это самое популярное направление: на него приходится около 80% всех запросов к Яндекс.Переводчику. В ближайшие месяцы мы включим систему и для других направлений. Чтобы было интереснее, мы добавили в веб-версию Переводчика переключатель — с его помощью можно сравнить гибридный и статистический переводы и понять, чем они различаются.

yandex.ru

как научить нейронную сеть светской беседе. Лекция в Яндексе / Блог компании Яндекс / Хабрахабр

Хороший виртуальный ассистент должен не только решать задачи пользователя, но и разумно отвечать на вопрос «Как дела?». Реплик без явной цели очень много, и заготовить ответ на каждую проблематично. Neural Conversational Models — сравнительно новый способ создания диалоговых систем для свободного общения. Его основа — сети, обученные на больших корпусах диалогов из интернета. Борис hr0nix Янгель рассказывает, чем хороши такие модели и как их нужно строить.

Под катом — расшифровка и основная часть слайдов. Спасибо, что пришли. Меня зовут Боря Янгель, я в Яндексе занимаюсь применением deep learning к текстам на естественном языке и диалоговыми системами. Я сегодня вам хочу рассказать про Neural Conversational Models. Это сравнительно новая область исследований в deep learning, задача которой — научиться разрабатывать нейронные сети, которые с собеседником разговаривают на некоторые общие темы, то есть ведут то, что можно условно назвать светской беседой. Говорят «Привет», обсуждают, как у тебя дела, ужасную погоду или фильм, который ты недавно посмотрел. И сегодня я хочу рассказать, что в этой области уже было сделано, что можно делать на практике, пользуясь результатами, и какие остались проблемы, которые только предстоит решить. Мой доклад будет устроен примерно следующим образом. Сперва мы немножко поговорим о том, зачем может понадобиться учить нейронные сети светской беседе, какие данные и нейросетевые архитектуры нам для этого будут нужны, и как мы будем обучать, чтобы решить эту задачу. В конце немного поговорим о том, как оценить, что у нас в результате получилось, то есть о метриках. Зачем учить сети разговаривать? Кто-то может подумать, что мы учим, чтобы сделать искусственный интеллект, который кого-нибудь когда-нибудь поработит.

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

Вместо этого мы ставим перед собой цель делать более интересные голосовые и диалоговые продукты. Есть такой класс продуктов, который называется, например, голосовые ассистенты. Это такие приложения, которые в формате диалога вам помогают решить какие-то насущные задачи. Например, узнать, какая погода сейчас, или вызвать такси или узнать, где находится ближайшая аптека. Про то, как делаются такие продукты, вы узнаете на втором докладе моего коллеги Жени Волкова, а меня сейчас интересует вот какой момент. Хочется, чтобы в этих продуктах, если пользователю ничего сейчас не нужно, он мог с системой о чем-нибудь поболтать. И продуктовая гипотеза состоит в том, что если с нашей системой можно будет иногда поболтать, причем эти диалоги будут хорошими, интересными, уникальными, не повторяющимися — то к такому продукту пользователь будет возвращаться чаще. Такие продукты хочется делать.

Как их можно делать?

Есть путь, которым пошли, например, создатели Siri — можно взять и заготовить много реплик ответов, какие-то реплики, которые часто говорит пользователь. И когда вы произносите одну из этих реплик и получаете созданный редакторами ответ — все замечательно, это здорово выглядит, пользователям нравится. Проблема в том, что стоит вам сделать шажок в сторону от этого сценария, и вы тут же видите, что Siri — это не более чем глупая программа, которая может в одной реплике употребить какую-то фразу, а в следующей же реплике сказать, что ей неизвестен смысл этой фразы — что, по меньшей мере, странно. Вот пример похожего по структуре диалога с ботом, который я сделал с помощью методов, о которых я вам сегодня буду рассказывать. Он, может быть, никогда не отвечает так же интересно и витиевато, как Siri, но зато ни в какой момент времени он не производит впечатление совсем уж глупой программы. И кажется, что это может быть лучше в каких-то продуктах. А если это совместить с подходом, который используется в Siri и отвечает редакторскими репликами, когда вы можете иначе делать fallback на такую модель, — кажется, что получится еще лучше. Наша цель — делать такие системы. Какие данные нам понадобятся? Давайте я чуть забегу вперед и сперва скажу, с какой постановкой задачи мы будем работать, потому что это важно для обсуждения нашего вопроса. Мы хотим по репликам в диалоге до текущего момента, а также, возможно, какой-то другой контекстной информации о диалоге — например, где и когда этот диалог происходит — предсказать, какой должна быть следующая реплика. То есть — предсказать ответ.

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

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

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

В литературе, то есть в статьях про Neural Conversational Models, очень любят два датасета. Первый из них — Open Subtitles. Это просто субтитры из огромного числа американских фильмов и сериалов. Какие плюсы этого датасета? В нем очень много жизненных диалогов, прямо таких, которые нам нужны, потому что это фильмы, сериалы, там люди часто говорят друг другу: «Привет! Как дела?», обсуждают какие-то жизненные вопросы. Но поскольку это фильмы и сериалы, то здесь же кроется и минус датасета. Там много фантастики, много фэнтези, которое аккуратно нужно вычищать, и много довольно своеобразных диалогов. Я помню, первая модель, которую мы обучили на Open Subtitles, она к месту и не к месту очень много про вампиров почему-то говорила. На вопрос «Откуда ты?» иногда отвечала: «Я, мать твою, из ФБР». Кажется, что не каждый захочет, чтобы его диалоговый продукт вел себя таким образом.

Это не единственная проблема датасета с субтитрами. Он как сформирован? Надеюсь, многие из вас знают, что такое srt-файлы. Фактически авторы датасета просто взяли srt-файлы этих фильмов и сериалов, все реплики оттуда и записали в огромный текстовый файл. Вообще говоря, в srt-файлах ничего не понятно о том, кто какую реплику говорит и где заканчивается один диалог и начинается другой. Можно пользоваться разными эвристиками: например, предполагать, что две последовательные реплики всегда говорят разные спикеры, или, например, что если между репликами прошло больше 10 секунд, то это разные диалоги. Но подобные предположения выполняются в 70% случаев, и это создает много шума в датасете.

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

Мораль какая? С субтитрами нужно быть осторожным. На них, наверное, можно предобучать модели, но учить до конца с учетом всех этих минусов я не советую.

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

Какие минусы у Твиттера? В первую очередь он, очевидно, смещен в сторону размещения и обсуждения ссылок. Но оказывается, что если убрать все диалоги, в которых корневой твит содержит ссылку, то оставшееся — оно во многом, не всегда, но часто напоминает ту самую светскую беседу, которую мы пытаемся смоделировать. Однако также оказывается, что диалоги на светские темы, по крайней мере в русском Твиттере —за английский ручаться не буду — ведутся в основном школьниками.

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

Эти два датасета любят в научной литературе. А если вы собираетесь делать что-то на практике, то вы во многом ограничены разве что своей фантазией и названием компании, на которую вы работаете. Например, если вы Facebook, то вам повезло иметь свой мессенджер, где огромное количество диалогов как раз на те темы, которые нас интересуют. Если вы не Facebook, у вас все еще есть какие-то возможности. Например, можно достать данные из публичных чатов в Telegram, в Slack, в каких-то IRC-каналах, можно распарсить какие-то форумы, поскрепить какие-то комментарии в социальных сетях. Можно скачать сценарии фильмов, которые на самом деле следуют некоторому формату, который в принципе можно распарсить автоматически — и даже понять, где там кончается одна сцена, где кончается другая и кто автор конкретной реплики. Наконец, можно какие-то транскрипты телепередач найти в интернете, и я на самом деле уверен, что я перечислил только малую часть всевозможных источников для диалогового корпуса. Мы поговорили про данные. Теперь давайте к самой главной части перейдем. Какие же нам нейронные сети надо на этих данных учить, чтобы у нас получилось что-то, что может разговаривать? Я напомню вам постановку задачи. Мы хотим по предыдущим репликам, которые были сказаны до текущего момента в диалоге, предсказать, какой же должна быть следующая реплика. И все подходы, которые решают эту задачу, можно условно разделить на два. Я их называю «порождающий» и «ранжирующий». В порождающем подходе мы моделируем условное распределение на ответ при фиксированном контексте. Если у нас такое распределение есть, то, чтобы отвечать, мы берем его моду, допустим, или просто сэмплируем из этого распределения. А ранжирующий подход — это когда мы обучаем некоторую функцию уместности ответа при условии контекста, который необязательно имеет вероятностную природу. Но, в принципе, это условное распределение из порождающего подхода тоже может быть с этой функцией уместности. А потом берем некоторый пул кандидатов ответов и выбираем из него лучший ответ для заданного контекста с помощью нашей функции уместности.

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

Итак, рекуррентные сети — это такая нейросетевая архитектура для работы с последовательностями произвольной длины. Работает она следующим образом.

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

На самом деле такими формулами обновления никто не пользуется, потому что если обучать такие нейронные сети, возникает очень много неприятных проблем. Пользуются более продвинутыми архитектурами. Например, LSTM (Long short-term memory) и GRU (Gated recurrent units). Дальше, когда мы будем говорить «рекуррентная сеть», мы будем предполагать что-то более продвинутое, чем простые рекуррентные сети. Порождающий подход. О нашей задаче генерации реплики в диалоге по контексту можно думать как о задаче генерации строки по строке. То есть представим, что мы возьмем весь контекст, все предыдущие сказанные реплики, и просто сконкатенируем их, разделяя реплики разных спикеров некоторым специальным символом. Получается задача генерации строки по строке, а такие задачи неплохо изучены в машинном обучении, в частности — в машинном переводе. И стандартная архитектура в машинном переводе — так называемая sequence-to-sequence. И state of the art в машинном переводе — это все еще модификация подхода sequence-to-sequence. Он был предложен Суцкевером в 2014 году, а позже как раз адаптирован его соавторами для нашей задачи, Neural Conversational Models.

Что такое sequence-to-sequence? Это рекуррентная архитектура encoder-decoder, то есть это две рекуррентных сети: encoder и decoder. Encoder прочитывает исходную строку и генерирует некоторое ее конденсированное представление. Это конденсированное представление подается на вход декодеру, который уже должен сгенерировать выходную строку или для каждой выходной строки сказать, какая же у нее вероятность в этом условном распределении, которое мы пытаемся смоделировать. Выглядит это следующим образом. Желтенькое — сеть encoder. Допустим, у нас есть диалог двух спикеров из двух реплик «Привет» и «Здаров», для которого мы хотим сгенерировать ответ. Реплики спикеров мы разделим специальным символом end-of-sentense, eos. На самом деле не всегда разделяют предложение, но исторически его называют именно так. Каждое слово мы сперва погрузим в некоторое векторное пространство, сделаем то, что называется vector embedding. Затем этот вектор для каждого слова мы подадим на вход сети encoder, и последнее состояние сети encoder после того, как она обработает последнее слово, как раз и будет нашим конденсированным представлением контекста, которое мы подадим на вход в decoder. Мы можем, например, инициализировать первое скрытое состояние сети decoder этим вектором или, в качестве альтернативы, например, подать его на каждый timestamp вместе со словами. Сеть decoder на каждом шаге генерирует очередное слово реплики и на вход получает предыдущее слово, которое она сгенерировала. Это позволяет действительно лучше моделировать условное распределение. Почему? Я не хочу вдаваться сейчас в детали.

Генерирует decoder все до тех пор, пока не сгенерирует токен end-of-sentence. Это значит, что «Все, хватит». А на вход на первом шаге decoder, как правило, тоже получает токен end-of-sentence. И непонятно, что ему на вход нужно подать. Обычно такие архитектуры обучаются с помощью обучения maximum likelihood. То есть мы берем условное распределение на ответы при известных нам контекстах в обучающей выборке и пытаемся сделать известные нам ответы как можно более вероятными. То есть максимизируем, допустим, логарифм такой вероятности по параметрам нейронной сети. А когда нам нужно сгенерировать реплику, у нас параметры нейронной сети уже известны, потому что мы их обучили и зафиксировали. И мы просто максимизируем условное распределение по ответу или сэмплируем из него. На самом деле точно его промаксимизировать нельзя, поэтому приходится пользоваться некоторыми приближенными методами. Например, есть метод стохастического поиска максимума в таких архитектурах encoder-decoder. Называется beam search. Что это такое, я тоже сейчас рассказать не успею, но ответ на данный вопрос легко найти в интернете.

Все модификации этой архитектуры, которые были придуманы для машинного перевода, можно попробовать применить и для Neural Conversational Models. Например, encoder и decoder, как правило, многослойные. Они работают лучше, чем однослойная архитектура. Как я уже сказал, это, скорее всего, LSTM- или GRU-сети, а не обычные RNN.

Encoder, как правило, двунаправленный. То есть на самом деле это две рекуррентные сети, которые проходятся по последовательности слева направо и справа налево. Практика показывает, что если идти только с одного направления, то пока вы дойдете до конца, сеть уже забудет, что там было сначала. А если идти с двух сторон, то у вас есть информация и слева, и справа в каждый момент. Это работает лучше.

Потом в машинном переводе есть такой трюк, прием, который называется attention. Его идея примерно в следующем. Каждый раз, когда ваш декодер генерирует очередное слово, вы можете еще дополнительно посмотреть на все слова или на скрытое представление на каждом timestamp в encoder и как-то их взвесить согласно тому, что вам сейчас нужно. Например, для генерации очередного слова вам нужно найти какой-нибудь следующий предлог во входной последовательности или понять, какая именованная сущность там определялась. Механизм attention помогает это сделать, и он немного помогает в Neural Conversational Models, но на самом деле намного меньше, чем в машинном переводе. Кажется, так происходит потому, что в машинном переводе в большинстве случаев для перевода очередного слова нужно посмотреть на одно слово в исходной последовательности. А при генерации реплики нужно посмотреть на много слов. И возможно, здесь будут работать лучше какие-то приемы, аналогичные тем, которые используются в memory networks. Типа multi-hole potential.

На самом деле того, что я вам сейчас рассказал, уже достаточно для создания некой Neural Conversational Model — при условии, что у вас есть данные. И она как-то будет разговаривать. Не могу сказать, что прямо очень плохо, но если вы будете с ней говорить, вы неизбежно столкнетесь с рядом проблем.

Первая проблема, которую вы увидите, — так называемая проблема слишком «общих» реплик. Это известная проблема модели encoder-decoder sequence-to-sequence, которая заключается в следующем. Такие модели склонны генерировать некие очень общие короткие по длине фразы, которые подходят к большому числу контекстов. Например, «Я не знаю», «Окей», «Я не могу сказать» и т. д. Почему так происходит? Можно, например, почитать статью, где авторы попытались формализовать некоторым образом это явление и показали, что в таких архитектурах оно будет происходить неизбежно.

В литературе про Neural Conversational Models предложен ряд решений или, я бы сказал, «костылей» для решения этой проблемы. Все они основаны на том, что мы по-прежнему обучаем модели в режиме максимизации правдоподобия, но когда генерируем реплику, то максимизируем не правдоподобие, а некоторый модифицированный функционал, который в себе это правдоподобие содержит. Первая идея, которая появилась в литературе, — вместо правдоподобия максимизировать взаимную информацию между ответом и контекстом.

Что это значит на практике? Вот было такое выражение, которое мы максимизировали по ответу. А теперь давайте добавим к нему такой член. Это некий коэффициент, умноженный на априорную вероятность ответа. На самом деле это некое обобщение взаимной информации между ответом и контекстом. Такой коэффициент равен единице — получается как раз взаимная информация. Если он равен нулю, то получается исходный функционал. Но он может принимать этот параметр и промежуточные значения, чтобы вам можно было что-нибудь настроить в своем методе.

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

Чтобы этим методом воспользоваться, вам теперь нужно не только обучить модель sequence-to-sequence, которая выдает указанную вероятность, но и обучить некоторую языковую модель на всевозможных ответах — чтобы получить эту вероятность. То есть возникает минус — нужно две модели. Есть альтернативный способ переписать этот функционал, а точнее — записать другой функционал, который равен предыдущему с точностью до константы. Он факторизован немножко по-другому. Здесь все еще есть наша условная вероятность ответа при условии контекста, а еще есть вероятность контекста при условии ответа. Это можно проинтерпретировать следующим образом. Мы хотим не только ответы, уместные в данном контексте, но и такие ответы, по которым легко восстановить исходный контекст. То есть если ответ слишком общий, «Окей» или «Я не знаю», то совершенно непонятно, в каком контексте это было сказано. И такие ответы мы хотим штрафовать. Чтобы таким приемом воспользоваться, вам нужна и модель sequence-to-sequence, которая ответ генерирует по контексту, и модель sequence-to-sequence, которая контекст генерирует по ответу. То есть вам всё ещё нужны две модели.

Сравнительно недавно в статье, которую подали на ICLR, был предложен метод, в котором нужна всего одна модель. Тут идея такая. Мы при генерации реплики случайно выбираем сколько-то контекстов из нашего пула — допустим, из обучающей выборки. Затем наш функционал меняется следующим образом. Мы вычитаем из него такую пронормированную вероятность ответа при условии случайного контекста. Тут идея примерно такая же, как и на предыдущем слайде. Если наш ответ уместен для какого-то значительного числа случайных контекстов — это плохо, это значит, что он слишком общий. И на самом деле, если посмотреть на это формально, то перед нами всего лишь оценка Monte Carlo для MMI, который был записан на предыдущем слайде. Но ее прелесть в том, что дополнительная модель вам не нужна, и эмпирически почему-то это работает даже лучше, чем честный MMI.

Например, у честного MMI есть такое неприятное свойство, что этот член штрафует не только слишком общие ответы, но и грамматически корректные ответы, потому что грамматически корректные ответы более вероятны, чем грамматически некорректные. В результате, если неаккуратно подстроить коэффициент А, то сеть начинает разговаривать совершенно некогерентно. Это плохо. Следующая проблема, с которой вы столкнетесь, — проблема консистентности ответов. Заключается она в следующем. Сеть на одни и те же вопросы, сформулированные по-разному или заданные в разных контекстах, будет давать разные ответы. Почему? Потому что сеть обучали на всем датасете в режиме максимизации правдоподобия, то есть она обучилась отвечать правильно в среднем по датасету. Если какой-то ответ часто встречается в датасете, значит, так можно отвечать. У сети нет никакого понятия о собственной личности и о том, что все ее ответы должны быть когерентными.

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

Вот одно из решений, которое было предложено в литературе, в статье «A Persona-Based Neural Conversation Model»: давайте мы каждому спикеру дополнительно сопоставим вектор в некотором латентном пространстве спикеров. Так же, как мы слова погружаем в латентное пространство, мы и этот вектор будем подавать на вход декодеру в надежде, что при обучении мы туда запишем какую-то информацию, которая нужна, чтобы генерировать ответы от имени данного спикера. То есть, грубо говоря, запишем туда его пол, возраст, какие-то лексические особенности и т. д. И тут же у нас появится некий инструмент контроля поведения модели. Другими словами, мы компоненты этого вектора потом как-то сможем настраивать и, возможно, добиваться от сети желаемого поведения. Но выглядит это в архитектуре sequence-to-sequence примерно следующим образом: все как раньше, только тут добавляется еще один вектор, который подается на каждый timestamp декодера. Например — конкатинируется с этим embedding-вектором слова.

В моделях с латентными переменными обычно есть проблема: тот факт, что мы хотим, чтобы в этот вектор записалась какая-то информация о спикере, еще не означает, что так действительно произойдет при обучении. В общем, нейронная сеть вправе распорядиться вектором как угодно. Ее представления необязательно совпадают с нашими. Но если обучить такую модель, а потом нарисовать, допустим, это пространство спикеров на плоскости с помощью алгоритма t-SNE или чего-нибудь подобного и поискать в нем какую-нибудь структуру, окажется, что она есть. Например, можно нарисовать это пространство и отметить на нем возраст спикеров. Здесь светлые точки — это, грубо говоря, школьники, а красные точки — люди, которым больше 30 лет, если я не ошибаюсь. То есть видно, что это пространство слоистое, и сверху там находятся в основном школьники. Дальше идут студенты, потом молодые профессионалы и, наконец, люди, которым больше 30 или скольки-то лет. Другими словами, какая-то структура есть. Хорошо. Можно сделать еще так. Я для некоторого числа пользователей Твиттера посмотрел, фолловят ли они некоторые аккаунты либеральных политиков или не фолловят, и это тоже нарисовал в указанном пространстве. Те, кто фоловят, оказались в основном в правом нижнем углу пространства. Это еще одно свидетельство, что там присутствует некоторая структура. Сами авторы в статье приводят такую табличку, которая иллюстрирует, что их сеть научилась отвечать на вопросы консистентно. Тут ей задается ряд вопросов про ее домашний город, про то, откуда она, из какой страны, чем она занималась в колледже и т. д. И вроде как она консистентно отвечает. И вообще они там приводят, скажем, сравнение log-likelihood у моделей, в которых есть информация о спикере и в которых нет. Утверждается, что log-likelihood у моделей, которые знают про спикера, лучше.

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

Тут идея такая: вместо того, чтобы генерировать ответ с помощью какого-то вероятностного распределения, мы будем ранжировать ответы из некоторого пула согласно функции уместности ответа при условии контекста, которую мы обучим. Какие плюсы у такого подхода? Вы полностью контролируете пул ответов. Вы можете исключить грамматически некорректные ответы или ответы с обсценной лексикой, например. Тогда вы их никогда не сгенерируете, и вы меньше рискуете, чем при использовании порождающей модели, о которой я говорил раньше. Обучение таких архитектур происходит на порядки быстрее, и меньше проявляется проблема общих ответов — потому что она, скорее, свойственна архитектурам sequence-to-sequence encoder-decoder.

А минус, очевидно, такой: множество реплик, которые вы можете сказать, ограничено. И там, скорее всего, окажется реплика не на каждую ситуацию. Как только вам понадобится нечто не совсем тривиальное, скорее всего, его в вашем пуле не окажется. Как обычно устроены ранжирующие модели? Примерно следующим образом. Есть две сети, которые тут уже называются — и та сеть, и другая — encoder. Задача одной сети — получить некоторое конденсированное векторное представление контекста, другой — векторное представление ответа. Дальше уместность контекста при условии ответа считается с помощью некоторой функции сравнения двух векторов, но и получается в итоге некоторое число, которое говорит об уместности. Такая архитектура стала популярной после статьи Microsoft Research про DSSM, Deep Structure Semantic Models, в 2013 году. И впоследствии указанная архитектура тоже была не раз адаптирована во множестве разных статей для Neural Conversational Models.

Сети encoder, в принципе, могут быть любыми, если они по набору слов могут получить вектор. Например, это тоже могут быть рекуррентные сети — как и в архитектурах sequence-to-sequence. Или можно пойти более простым путем: это могут быть полносвязанные сети поверх усредненных эмбединговых слов. Тоже на удивление неплохо работает.

Как правило, функция уместности ответа в контексте — что-то простое, ведь нам нужно просто сравнить два вектора, скалярное произведение или косинусное расстояние, например.

Как обучаются такие модели? Поскольку они не порождающие, то тут уже положительных примеров недостаточно, нужны отрицательные. Если вы хотите, чтобы что-то отранжировалось высоко согласно вашей функции, вам нужно сказать, что должно отранжироваться низко.

Где брать отрицательные примеры? Классический подход — random sampling, когда вы просто берете случайные реплики в вашем датасете, говорите, что с большой вероятностью они неуместны и на это предположение опираетесь. Есть чуть более нетривиальный подход, который называется hard negative mining. Там идея такая: вы выбираете случайные реплики, но потом из случайных выбираете те, на которых сейчас модель сильнее всего ошибается.

С недавних пор в веб-ранжировании Яндекса существует алгоритм «Палех». Он во многом опирается на аналогичную архитектуру, и в статье на Хабрахабре написано, как этот hard negative mining может работать.

Теперь у вас есть положительные и отрицательные примеры. Что со всем этим делать? Нужна какая-то функция штрафа. Как правило, поступают очень просто: берут выходы этой функции Sim, которая является скалярным произведением или косинусным расстоянием, прогоняют через softmax и получают вероятностное распределение на ваш положительный пример и сколько-то отрицательных примеров, которые вы нагенерировали. А потом, как и в порождающих моделях, просто пользуются кроссэнтропийным лоссом, то есть хотят, чтобы вероятность правильного ответа была большой по сравнению с вероятностью неправильных. Есть всякие модификации на основе tripletloss. Это что-то типа подходов max margin, когда вы хотите, чтобы уместность вашего ответа при условии контакта была больше, чем уместность случайного ответа при условии контекста на некоторый margin, как в SVN. Про это тоже в интернете можно много всего интересного найти.

Как узнать, какая модель лучше? Как в машинном обучении обычно решают этот вопрос? У вас есть тестовая выборка, и вы по ней считаете какую-то метрику. Проблема в том, что здесь это не сработает, поскольку если ответ вашей модели не похож на ответ из тестовой выборки, это не говорит вообще ни о чем. Другими словами, даже на банальное «Привет» можно придумать десятки ответов, которые уместны, но у которых с ответом в тестовой выборке пара общих букв, не более того. Поэтому изначально все пытались использовать метрики из машинного перевода для решения этой задачи, которая сравнивает как-то ваш ответ с тем, что у вас было написано в тестовой выборке. Но все эти попытки провалились. Есть даже такая статья, где считается корреляция метрик, используемых в машинном переводе, с воспринимаемой людьми уместностью ответов. Корреляцию можно посчитать по тестовой выборке. И оказывается, что корреляции практически нет. Значит, этим способом лучше не пользоваться.

Каким же способом пользоваться тогда? Сейчас State of the art, если можно так сказать, подход — использовать краудсорсинг, то есть брать условный mechanical turk, и спрашивать у тёркеров: «Уместен ли данный ответ в данном контексте? Оцените по шкале от 0 до 5». Или: «Какой из данных ответов более уместен в этом контексте?». Если вы посмотрите литературу, в конечном итоге всем приходится сравнивать модели именно так. А что лучше: порождающие или ранжирующие модели? Вот мы взяли некоторую модель, которую обучили сами на Твиттере sequence-to-sequence, взяли ранжирующую DSSM-подобную модель и дальше на нашей краудсорсинговой платформе попросили работников оценить уместность каждого ответа при данном контексте, поставить одну из трех меток: bad, neutral или good. Bad значит, что ответ синтаксически некорректен, абсолютно неуместен или, например, содержит обсценную лексику. Neutral значит, что он уместен, но является общим и неинтересным. А good — что это синтаксически корректный и уместный ответ. И еще мы попросили людей сгенерировать сколько-то ответов, чтобы у нас был некий baseline, к которому можно стремиться. Вот какие получились цифры.

Что интересно, у людей есть 10% плохих ответов. Почему так происходит? Оказывается, в большинстве случаев люди пытались пошутить, но работники на краудсорсинговой платформе их шутку не поняли. Там, по-моему, в пуле был вопрос: «Какой главный ответ на все?». Ответ был «42», и видимо, никто не понял, что это значит. Там 9 из 10 — bad.

Что тут можно видеть? Очевидно, до людей еще далеко. Ранжирующие модели работают лучше — хотя бы потому, что в пуле много более интересных ответов и такой моделью проще ответ сгенерировать. А модели sequence-to-sequence работают хуже, но не то чтобы сильно хуже. Зато, как вы помните, они могут генерировать ответ в любой ситуации, так что, возможно, моделями sequence-to-sequence надо пользоваться. Или нужно комбинировать sequence-to-sequence и ранжирующие модели в виде какого-то ансамбля.

В заключение повторю основные поинты своего доклада. В последние пару лет Neural Conversational Models — по-настоящему горячая область исследований в deep learning, одна из таких областей. Ей очень много занимаются, в том числе крупные компании: Facebook, Google. Там происходит много интересного. В принципе, какими-то ее плодами можно пользоваться уже сейчас, но не следует ожидать, что у вас сразу получится искусственный интеллект. Осталось очень-очень много проблем, которые предстоит решать. И если у вас есть значительный опыт работы с текстами на естественном языке, опыт работы с диалоговыми системами или с deep learning в этой области — скорее всего, мы найдем что вам предложить.

Если вам интересно, вы можете, например, мне написать. У меня все. Спасибо.

habrahabr.ru

Яндекс использовал нейросеть и научился прогнозировать осадки с точностью до минут

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

Под катом я расскажу о том, что такое наукастинг и как мы над ним работали.Текущая погода влияет на огромное количество наших ежедневных решений. Если за окном сильный снегопад, мы раздумываем, как нам поехать на работу — на машине или на общественном транспорте. Глядя в окно, решаем, брать ли с собой зонт и нужна ли непромокаемая куртка. Даже стоя на выходе из метро в проливной дождь, мы гадаем, когда он кончится. Если через пять минут — то можно подождать и прийти на встречу в сухом костюме, а если через полчаса — то придётся либо промокнуть, либо опоздать. Для всех этих небольших, но важных решений нам нужна максимально точная информация о том, какая погода сейчас и как она будет меняться в ближайшей перспективе. Вы наверняка сталкивались с ситуацией, когда в одном районе города светит солнце, а в другом льёт проливной дождь с грозой.

Как это делалось раньше

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

Во-первых, метеостанции расположены далеко друг от друга и измеряют параметры в строго определённые промежутки времени. Казань, например, является огромным городом, а метеостанций там всего две: в центре и в аэропорту. Температура и другие показатели в этих точках и в соседних с ними районах могут кардинально различаться.

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

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

Ещё раз напомню, что в Яндекс.Погоде используется технология Метеум, основанная на метеорологических моделях и машинном обучении. Построенная на базе Матрикснета и обученная на больших массивах данных, наша формула оптимальным образом комбинирует подаваемые на вход факторы. В итоге прогноз получается заметно более точным.

А чтобы показать на сервисе нынешнюю погоду, мы (помимо прогнозов из математических моделей) подмешиваем в формулу измерения, недавно полученные на ближайших метеостанциях. Такой подход существенно лучше других вариантов решения поставленной задачи. Точность определения погоды в ближайшие часы сильно возрастает, и это неудивительно, поскольку мы учитываем наиболее оперативную и точную информацию. Наши метрики существенно возросли по сравнению с нашими же собственными прогнозами, построенными до того, как мы начали подмешивать свежие данные с метеостанций. В мае этого года, сразу после их добавления, мы расширили зону действия Метеума на всю Россию, а в ноябре-декабре — на Украину, Беларусь и Казахстан.

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

Нужно больше данных

Самым последним достижением науки и техники в области мониторинга осадков является метеорологический радиолокатор. Примерно раз в 10 минут он строит трёхмерный снимок атмосферы в радиусе 200 километров от своего местоположения по горизонтали и до 10 километров по вертикали. По принципу действия радиолокатор очень похож на авиационный радар, только на снимке видны не самолёты, а области атмосферы, где есть капли воды размером более 50 микрометров. Если такие капли и правда есть, то, скорее всего, из облака, в котором они находятся, выпадают осадки. Вот как выглядит сам радар и результаты его работы:

В России уже сейчас существует сеть метеорологических радаров достаточно высокого качества. Они установлены в наиболее населённых и интересных с метеорологической точки зрения регионах. Область покрытия радаров показана на карте:

Кстати, в незакрашенной области проживает более 40 процентов населения России. Данные радара имеют пространственное разрешение 2 на 2 километра на пиксель, что позволяет описывать текущую погоду с точностью до небольшого микрорайона.

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

Сегодня мы готовы представить технологию наукастинга — краткосрочного гиперлокального прогноза осадков. Наукастинг — слово, пришедшее к нам из английского языка, сложенное из двух слов: now и forecasting, то есть дословно «прогноз на сейчас». А на самом деле через продукты Яндекса теперь можно узнать о распределении осадков во временном промежутке от двух часов назад до двух часов вперёд.

Наш новый продукт основан на свёрточных нейронных сетях. С точки зрения математики задача формулируется следующим образом: необходимо по последовательности радарных снимков и релевантной метеорологической информации предсказать будущие карты осадков с временным разрешением в 10 минут на 2 часа вперёд.

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

Чтобы настроить фильтры свёрточной сети и веса между ними, мы формируем обучающую выборку достаточно большого объёма — сейчас она состоит более чем из 800 000 кадров с каждого радара, прошедших предварительную обработку. Обучение нейронной сети происходит на кластере из GPU.

Вот как выглядит эта сеть:

Архитектура сети

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

Что касается data flow — вот как его упрощённо описывает автор, nes8bit:

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

Метрики

Мы оцениваем точность продукта и настраиваем наш нейросетевой прогноз погоды по нескольким типам метрик.

Во-первых, нам важно, насколько правильно мы предсказали каждый следующий кадр нашего прогноза. Мы используем покадровую метрику f-score, которую можно определить как «точность предсказания текущего снимка».

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

Вот как выглядит f-мера для первой метрики в зависимости от горизонта:

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

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

Вместо послесловия

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

Сейчас это может показаться невероятным, но скоро наступит лето и все мы будем кататься на велосипедах, роликовых коньках, гулять в парках, отдыхать на природе. И с сегодняшнего дня можно строить планы на ближайшее время, глядя не на низкий или высокий полёт ласточек, а на страницу и приложения Яндекс.Погоды. Один всем вам знакомый персонаж уже так и делает.

habrahabr.ru

Чему в России обучают нейронные сети — The Village

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

Что такое нейронные сети?

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

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

По словам старшего научного сотрудника университета Иннополис Станислава Протасова, наиболее близким аналогом человеческого мозга являются сверточные нейронные сети, придуманные математиком Яном Лекуном. «Они лежат в основе многих приложений, претендующих на звание искусственного интеллекта, — например, в FindFace или Prisma», — отмечает он.

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

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

Александр Крайнов

глава службы компьютерного зрения «Яндекса»

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

В каком состоянии сейчас находится отрасль?

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

Сергей Негодяев

управляющий портфелем Фонда развития интернет-инициатив

Хотя ученые занимаются формализацией и разработкой нейросетей уже 70 лет, можно выделить два переломных момента в развитии этой технологии. Первый — 2007 год, когда в Университете Торонто создали алгоритмы глубокого обучения многослойных нейронных сетей. Второй момент, спровоцировавший сегодняшний бум, — это 2012 год, когда исследователи из того же университета применили глубинные нейросети и выиграли конкурс ImageNet, научившись распознавать объекты на фото и видео с минимумом ошибок. 

Сейчас компьютерных мощностей хватает для решения если не любых, то подавляющего большинства задач на базе нейросетей. Теперь главное препятствие — нехватка размеченных данных. Условно говоря, чтобы система научилась распознавать закат на видео или фотографиях, ей надо скормить миллион снимков заката, указав, где именно он находится в кадре. Например, когда вы загружаете в Facebook фотографию, ваши друзья распознают на ней котика в лучах закатного солнца, а социальная сеть видит в ней набор меток: «животное», «кот», «деревянный», «пол», «вечер», «оранжевый». У кого данных для обучения окажется больше, у того нейросеть и будет умнее.

Андрей Калинин

руководитель «Поиска Mail.Ru»

Развлекательные приложения на основе нейросетей — например, наши Artisto или Vinci — это только вершина айсберга, а заодно отличный способ продемонстрировать их возможности широкой аудитории. На самом деле нейросети способны решать целый ряд сложнейших задач. Наиболее «горячие» направления сейчас — это автопилоты, голосовые помощники, чат-боты и медицина.

Александр Крайнов

глава службы компьютерного зрения «Яндекса»

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

Перспективные сферы для внедрения нейросетей

  Транспорт

  Робототехника

  Биотехнологии

  Сельское хозяйство

  Интернет вещей

  Медиа и развлечения

  Лингвистика

  Безопасность

Влад Шершульский

директор программ технологического сотрудничества Microsoft в России

Сегодня уже случилась нейронная революция. Иногда даже трудно отличить фантастику от реальности. Представьте себе автоматизированный комбайн со множеством камер. Он делает по 5 тысяч снимков в минуту и через нейросеть анализирует, сорняк перед ним или зараженное вредителями растение, после чего решает, как поступить дальше. Фантастика? Уже не совсем.

Борис Вольфсон

директор по развитию HeadHunter

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

Чему учат нейронные сети в России?

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

Наука и медицина

Школа анализа данных «Яндекса» участвует в эксперименте CRAYFIS совместно с представителями «Сколково», МФТИ, ВШЭ и американских университетов UCI и NYU. Его суть состоит в поиске космических частиц сверхвысокой энергии с помощью смартфонов. Данные с камер передаются ускоренным нейросетям, способным зафиксировать следы слабо взаимодействующих частиц на снимках. 

Это не единственный международный эксперимент, в котором задействованы российские специалисты. Ученые университета Иннополис Мануэль Маццара и Леонард Йохард участвуют в проекте BioDynaMo. Заручившись поддержкой Intel и ЦЕРН, они хотят создать опытный образец, способный воспроизвести полномасштабную симуляцию мозговой коры. С его помощью планируется повысить эффективность и экономичность экспериментов, в которых требуется наличие живого человеческого мозга.

Профессор Иннополиса Ярослав Холодов участвовал в разработке компьютерной модели, способной в десятки раз быстрее предсказать образование белковых связей. С помощью этого алгоритма можно ускорить разработку вакцин и лекарств. В этой же сфере отметились разработчики из Mail.Ru Group, Insilico Medicine и МФТИ. Они использовали генеративные состязательные сети, обученные придумывать молекулярные структуры, для поиска веществ, которые могут оказаться полезными при различных болезнях — от онкологии до сердечно-сосудистых заболеваний.

Красота и здоровье

В 2015 году российская компания Youth Laboratories запустила первый международный конкурс красоты Beauty.AI. Фотографии участников в нем оценивались нейросетями. При определении победителей они учитывали пол, возраст, национальность, цвет кожи, симметричность лица и наличие или отсутствие у пользователей морщин. Последний фактор также подтолкнул организаторов к созданию сервиса RYNKL, позволяющего отследить, как старение влияет на кожу и как с ним борются различные препараты.

Также нейросети применяются в телемедицине. Российская компания «Мобильные медицинские технологии», управляющая проектами «Онлайн Доктор» и «Педиатр 24/7», тестирует бота-диагноста, который будет полезен как пациентам, так и врачам. Первым он подскажет, к какому специалисту обратиться при тех или иных симптомах, а вторым поможет определить, чем именно болен пришедший.

Оптимизация бизнес-процессов и рекламы

Российский стартап Leadza сумел применить нейросети для более эффективного распределения бюджета на рекламу в Facebook и Instagram. Алгоритм анализирует результаты прошедших кампаний, строит прогноз ключевых метрик и на их основе автоматически перераспределяет расходы таким образом, чтобы интернет-магазины смогли получить больше клиентов за меньшую стоимость.

Команда GuaranaCam задействовала технологии машинного обучения для оценки эффективности размещения товаров и рекламных материалов в офлайне. Система работает на базе облака Microsoft Azure и анализирует покупательское поведение по камерам видеонаблюдения. Владельцы бизнеса получают отчет о состоянии торговли в режиме реального времени. Проект уже применяется в торговом центре «Мега Белая Дача».

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

Холдинг «Белфингрупп» пошел еще дальше. Его «дочка» BFG-soft создала облачную платформу BFG-IS, позволяющую управлять предприятием с помощью его виртуальной модели. Последняя строится автоматически на основании собранных системой данных о производстве и не только показывает, как лучше организовать процессы с учетом заданных целей, но и прогнозирует последствия любых изменений — от замены оборудования до введения дополнительных смен. В конце 2016 года Фонд развития интернет-инициатив решил вложить в компанию 125 миллионов рублей.

Рекрутинг и управление персоналом

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

Транспорт

Российский разработчик интеллектуальных систем Cognitive Technologies применяет нейронные сети для распознавания транспортных средств, пешеходов, дорожных знаков, светофоров и других объектов, попадающих в кадр. Также компания собирает данные для обучения нейросети для беспилотного автомобиля. Речь идет о десятках тысяч эпизодов, описывающих реакцию водителей на те или иные критические ситуации на дорогах. В итоге система должна сформулировать оптимальные сценарии поведения авторобота. Такие же технологии применяются и для создания умного сельскохозяйственного транспорта.

Кроме того, нейронные сети могут использоваться в сфере транспорта и другим образом. Летом 2016 года «Яндекс» добавил в принадлежащую ему доску объявлений «Авто.ру» функцию автоматического определения модели машины по ее фото. На тот момент система знала 100 марок.

Психология и безопасность

Российский стартап NTechLab, обошедший Google в международном конкурсе алгоритмов распознавания лиц The MegaFace Benchmark, использовал технологии машинного обучения в приложении FindFace. Оно позволяет найти человека в социальных сетях по фотографии. Зачастую пользователи обращаются к сервису для выявления фейков, но он может быть полезен и правоохранителям. С его помощью уже установили личность нескольких преступников, в том числе захватчика Ситибанка в Москве. Бизнес-версия FindFace.Pro предоставляется компаниям, заинтересованным в идентификации клиентов. Сейчас систему доучивают определять пол, возраст и эмоции окружающих, что может быть полезно не только при общении с клиентами, но и при управлении персоналом.  

Аналогичным образом нейросети применяются и еще одной российской компанией — VisionLabs. Она использует технологии распознавания лиц для обеспечения безопасности в банках и формирования специальных предложений для наиболее лояльных клиентов различных розничных точек.

В схожем направлении работает стартап «Эмотиан». Он дорабатывает систему определения эмоционального состояния городов. Пока нейросеть вычисляет наиболее счастливые районы по публикациям в социальных сетях, однако в дальнейшем компания собирается учитывать и биометрические данные с камер.

Медиа и творчество

Одним из основных игроков на российском рынке нейронных сетей является «Яндекс». Компания использует машинное обучение не только в своих поисковых сервисах, но и в других продуктах. В 2015 году она запустила рекомендательную систему «Дзен», которая формирует ленту из новостей, статей, фотографий и видео, основываясь на интересах конкретного пользователя. Чем чаще он обращается к отобранным алгоритмом материалам, тем точнее нейросеть определяет, что еще ему может понравиться.

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

Хобби и спорт

Нейронные сети нашли применение и в сугубо нишевых проектах. В начале 2017 года в России запустили сервис для рыбаков Deep.Fish. В ближайшее время уже представленный в нем каталог наиболее популярных мест для рыбалки дополнится инструментами прогнозирования клева и распознания пойманных рыб за счет технологий искусственного интеллекта. Инвестиции основателей в компанию составили миллион долларов.

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

Общение

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

Аналогичные технологии применяются в пермском роботе Promobot. Благодаря системе Cognitive Engine андроид способен запоминать собеседников и поддерживать с ними разговоры на русском, английском, немецком и китайском языках. Полученные им ответы служат основой для обучения нейросети.

В свою очередь, создатели ресторанного бота Luka, быстро обросшего новыми функциями, решили применить имеющиеся у них наработки для запуска другого проекта — Replika. Это мобильное приложение, которое позволяет создать собственную цифровую копию. По мере общения с пользователем реплика запоминает факты из его биографии и перенимает его манеры, чтобы однажды продолжить его жизнь после смерти. Запуск iOS-версии сервиса намечен на первый квартал 2017 года. В нем предварительно зарегистрировались более 150 тысяч человек.

обложка: фрагмент промовидео RYNKL

www.the-village.ru

1 сентября – день знаний. Узнайте всё необходимое про нейронные сети

Друзья!

Мы поздравляем всех наших подписчиков с днем знаний и желаем, чтобы знаний было больше, их приобретение – интересным, а сами знания – более полезными.

Чтобы воплотить эти пожелания в жизнь, мы предлагаем вашему вниманию видеозапись курса «Однодневное погружение в нейронные сети», который мы провели летом в рамках закрытой школы DevCon. Этот курс позволит за несколько часов погрузиться в тему нейронных сетей и «с нуля» научиться использовать их для распознавания изображений, синтеза речи и других интересных задач. Для успешного освоения курса будут полезны умение программировать на Python и базовые знания математики. Материалы курса и заготовки для практических заданий доступны на GitHub.

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

Что потребуется

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

Azure Notebooks — это технология, основанная на Jupyter, позволяющая вам комбинировать в едином документе естественно-языковый текст и код на каком-либо языке программирования. Для работы с Azure Notebooks понадобится Microsoft Account – если у вас его нет, создайте себе новый почтовый ящик на Outlook.com.

Завершающий пример с обучением нейросети на распознавание кошек или собак лучше выполнять на виртуальной машине с GPU, иначе будет слишком долго. Такую машину можно создать в облаке Microsoft Azure, если у вас есть подписка (только имейте в виду, что с бесплатной подпиской Azure Trial не всегда удаётся создать машину с GPU).

Начало работы

Очень важно в процессе просмотра видео параллельно пробовать примеры, а после просмотра курса — придумать себе какую-нибудь задачу для закрепления знаний. Поскольку материалы не являются онлайн-курсом (у нас пока не дошли руки), то мы не можем проверить вашу работу или ваши знания. Но очень рекомендуем не смотреть видео «просто так», поскольку это может оказаться впустую потраченным временем. Запустить и попробовать примеры очень просто!

Для начала работы зайдите в библиотеку материалов курса на Azure Notebooks и нажмите кнопочку Clone (клонировать). Таким образом вы получите свою копию всех материалов, и сможете на лету вносить изменения в код и смотреть, что получается. Откройте библиотеку в отдельном окне, и приступайте к просмотру видео.

Видео

Часть I
[0:00] Введение в искусственный интеллект в целом, когнитивные сервисы, Bot Framework, Azure Machine Learning. Это не имеет прямого отношения к нейросетям, но полезно для общего развития.[0:27] Введение в Azure Notebooks и базовые возможности Python, которые нам будут важны.[0:48] Однослойный персептрон и реализация простейшей нейросети «вручную».[1:10] Реализация простейшей нейросети на Microsoft Cognitive Toolkit (CNTK). Алгоритм обратного распространения ошибки.[1:48] Лабораторная работа: классификация ирисов.[2:27] Лабораторная работа: распознавание рукописных цифр.Тем, кому не терпится сразу перейти к делу — рекомендую смотреть с 1:10, где мы начинаем использовать Cognitive Toolkit для реализации простой задачи классификации. Основная идея состоит в следующем: нейросеть, которая схематически изображена на рисунке ниже, может математически представляться как произведение матрицы весов W на входные значения x, с учетом сдвига b: y = Wx+b.

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

features = input_variable(input_dim, np.float32) label = input_variable(output_dim, np.float32) W = parameter(shape=(input_dim, output_dim)) b = parameter(shape=(output_dim)) z = times(features,W)+b После этого фрейморк позволяет нам применять один из алгоритмов обучения, подстраивая веса матрицы W, чтобы нейросеть начинала всё лучше работать на обучающей выборке. При этом по заданной формуле фреймворк берет на себя все сложности по вычислению производных, необходимых для работы метода обратного распространения ошибки.

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

hidden_dim = 5 W1 = parameter(shape=(input_dim, hidden_dim),init=cntk.uniform(1)) b1 = parameter(shape=(hidden_dim),init=cntk.uniform(1)) y = cntk.sigmoid(times(features,W1)+b1) W2 = parameter(shape=(hidden_dim, output_dim),init=cntk.uniform(1)) b2 = parameter(shape=(output_dim),init=cntk.uniform(1)) z = times(y,W2)+b2 Используя более высокоуровневой синтаксис, тоже самое может быть записано более компактно в виде композиции слоёв:z = Sequential([ Dense(hidden_dim,init=glorot_uniform(),activation=sigmoid), Dense(output_dim,init=glorot_uniform(),activation=None) ])(features)

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

Часть II
[0:00] Распознавание рукописных цифр.[0:04] Свёрточные нейронные сети для распознавания изображений.[0:49] Лабораторная работа: повышение точности распознавания с помощью свёрточной сети.[1:07] Тонкости обучения: batch normalization, dropout и т.д. Сложные архитектуры сетей для решения специфических задач. Автоэнкодеры. Применение нейросетей в реальных проектах.Основная идея этой части состоит в том, чтобы рассказать, как из базовых блоков (нейронные слои, функции активации и т.д.) можно собирать более сложные архитектуры нейросетей для решения конкретных задач, на примере анализа изображений. Инструментарии (такие как Cognitive Toolkit/CNTK, Tensorflow, Caffe и др.) предоставляют основные функциональные блоки, которые затем можно комбинировать между собой.

Например, в свёрточных нейронных сетях (Convolutional Neural Network, CNN), применяемых для анализа изображений, используется пробегающее по изображению окно небольшого размера (3x3 или 5x5), которое как бы подается на вход небольшой нейросети, выделяющей из фрагмента изображения важные признаки. Из этих признаков получается «изображение» следующего слоя, который обрабатывается аналогичным образом — при этом этот слой отвечает за признаки более высокого уровня. Комбинируя таким образом множество (десятки и сотни) слоёв, мы получаем сети, способные распознавать объекты на изображении с точностью, не сильно уступающей человеческой. Вот, например, как многослойная свёрточная сеть видит цифру 5:

Во второй половине видео Андрей Устюжанин, руководитель проекта Яндекс-CERN и лаборатории Lambda НИУ ВШЭ, рассказывает о некоторых приёмах построения более сложных конфигураций нейросетей для специфических задач, а также об оптимизационных приёмах в обучении глубоких сетей, без которых невозможно существенное увеличение количества слоёв и параметров.

Часть III
[0:00] Рекуррентные нейронные сети.[1:09] Обучение нейронных сетей в облаке Microsoft Azure через Azure Batch.[1:36] Распознавание изображений «кошки против собак» и ответы на вопросы.Самое главное в этом разделе — рекуррентные нейросети, о которых рассказывает Михаил Бурцев, руководитель лаборатории глубокого обучения МФТИ. Это такая архитектура сети, при которой выход сети подаётся ей же на вход. Это позволяет анализировать последовательности переменной длины — например, за один проход обрабатывается одна буква текста или одно слово предложения, при этом «смысл» сохраняется в передаваемом рекуррентно «состоянии». На основе такого подхода работают системы машинного перевода, генераторы текстов, системы прогнозирования временных рядов и т.д.

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

used to the allow do one nine two city feature of demaware boake associet ofte rinoming have of the landization to stares as decudith vellant turking or a to t jectional ray storemy to one or countries a russiarnawe it and sentio edaph lawe t of while artell out prodication american scot their and statesly processed for zer to a revereing time in the music follows two two one kelanish liter

Вместо заключения

Надеюсь, мы вдохновили вас на изучение нейронных сетей! После просмотра курса самое время придумать себе какую-нибудь задачку или проект: например, сделать генератор стихов или псевдо-научных статей, или анализировать, на каких фотографиях люди присутствуют с закрытыми глазами. Главное — попытаться применить знания на практике!

Вы можете обучать простые сети прямо в Azure Notebooks, использовать Data Science Virtual Machine в облаке Azure, или установить CNTK на свой компьютер. Более подробная информация про CNTK есть на сайте http://cntk.ai, включая обучающие примеры моделей.

Желаю всем читателям тёплой осени и буду рад ответить на все ваши вопросы в комментариях!

habrahabr.ru

Нейросеть «Яндекса» записала альбом в стиле группы Nirvana

Не так давно нейросеть отечественной компании «Яндекс» записала альбом в стиле группы «Гражданская оборона». Многие расценили это как единичный случай для привлечения внимания к разработкам компании. Но, как оказалось, после записи на русском языке программисты пошли еще дальше и переключились на зарубежные группы. К примеру, буквально на днях было записано несколько треков в стиле американской рок-группы Nirvana.

За прошедшее время программисты «Яндекса» Иван Ямщиков (который на данный момент работает в Институте научной математики Общества Макса Планка в Лейпциге) и Алексей Тихонов научили свою нейронную сеть сочинять стихи на английском языке, похожие на тексты песен Курта Кобейна, лидера всемирно известного коллектива. Первый альбом нейросети в стиле группы «Гражданская оборона» был записан при помощи профессиональных музыкантов и носил название «Нейронная оборона». По аналогии с предыдущим проектом, к работе над записью альбома в стиле группы Nirvana привлекли профессионального американского музыканта Роба Кэррола, поклонника творчества Курта Кобейна и его рок-группы. А сам альбом получил название «Neurona».

Для того чтобы обучить нейросеть писать стихи на английском языке, Ивану Ямщикову пришлось собрать огромный архив современной и классической зарубежной поэзии общим объемом около 200 мегабайт. В ходе работы выяснилось, что научить нейросеть языку Шекспира гораздо сложнее, чем русскому. Дело в том, что в англоязычной поэзии гораздо меньше четко установленных правил и там не всегда работает «нормальная» грамматика. Поэтому команде экспертов пришлось удалить часть текстов из архива. После того как полученный результат удовлетворил ученых, они записали треки на старую аудиокассету с альбомом группы Nirvana. Финальный результат выложили в Сеть и даже опубликовали клип на одну из песен в YouTube. Как заверяют разработчики, алгоритмы работы нейросети и детали ее разработки будут в ближайшее время опубликованы в одном из научных журналов. Кроме того, российскому изданию РИА «Новости» удалось взять интервью у Ивана Ямщикова, полный текст которого, а также клип на один из треков за авторством нейросети вы можете найти ниже.

Иван, учитывая сложности, с которыми вы сталкивались при создании «Нейроны», пробовали ли вы сделать нечто похожее для текстов певицы Линды, известной необычным стилем своих стихов?

Год назад мы обучили нейросеть генерировать тексты в стиле Егора Летова. В принципе, ничто не мешает научить ее генерировать тексты и в стиле Линды.

Если нейросети теперь могут писать даже стихи и музыку, есть ли что-то, что они никогда не смогут сделать в принципе?

Это интересный вопрос, на который точного ответа нет. Главное помнить, что нейросеть — это не персонаж. Это просто тип алгоритма, инструмент, созданный для решения той или иной задачи. Как именно формулировать проблему, условия, ограничения, где брать данные для обучения? Со всеми этими вопросами, к примеру, сейчас работает человек.

Что именно заставило записать вас «Нейрону» на старую кассету с альбомами «Нирваны»?

Мы поступили так же с записями «Нейронной обороны». Это своего рода традиция. Есть что-то очень родное в звучании кассетного плеера. Не зря же по Сети постоянно ходит картинка с карандашом, старой кассетой и подписью «если ты знаешь, как эти предметы связаны друг с другом, ты жил в 90-е».

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

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

hi-news.ru


Смотрите также