November 26th, 2015

2019

Лес за деревьями

Есть два уровня, на котором можно осознавать происходящее в deep learning:
-- от низкоуровневого "машинного кода", механизма работы backpropagation и особенностей ReLU в хитрых ситуациях.
-- от высокоуровневого разбирательства с весьма и весьма нетрадиционной парадигмы работы со знанием (инженерия обучения вместо инженерии знания), где прямо сейчас идёт что-то типа эпохи больших географических открытий.

Когда я читаю всякие "хабрахабры" типа вот этих "11 строчек на Python" с утверждениями "я лучше всего разбираюсь, когда пишу код", то очень хочется заметить: изучением листиков деревья не освоишь, изучением деревьев леса не заметишь. Нужно не только "снизу вверх" эту предметную область осваивать, но и "сверху вниз" -- от самой смены парадигмы "программирования" на "обучение", и на ломку представлений (ага, ломку привычных программистских representations -- у нас же representation learning).

Дальше текст написан для разбирающихся в предмете, просто подчеркнуть происходящее на верхнем уровне, отвлечь от текучки хотя бы на несколько минут для стратегирования. Не слишком разбирающимся можно предложить либо погуглить встречающиеся тут слова, либо тяжело вздохнуть и начать разбираться с листиками типа "нейросеть в 11 строчек на Python" -- http://habrahabr.ru/post/271563/ (и заканчивать тем, как именно ELU позволяет ускорять вычисления при одновременном повышении их результативности по сравнению с RuLU -- http://arxiv.org/abs/1511.07289, типичная работа уровня "машинного кода". Это так же важно, как архитектура процессора: все помнят, что на заре вычислительной техники процессоров были десятки и сотни разных архитектур, ассемблеров соответственно. К нейронным сеткам сегодня это тоже в полной мере относится).

Вот только некоторые текущие решаемые проблемы:
-- unsupervising learning (нет размеченных данных для обучения): ещё пару лет это казалось главным направлением, сейчас откатились и собираются с силами. Гранит этой науки пока больше обламывает всем зубы, чем даёт себя погрызть.
-- one shot learning (обучение на одном примере, максимум нескольких штуках). Главная мотивация -- "если человеческий мозг это может, то мы принципиально можем сделать алгоритм, который тоже это сможет". Тоненький ручеёк работ тут течёт, хотя особых прорывов и нет.
-- transfer learning (учиться на одном, доучиваться и адаптироваться на другом). Этим занимаются все, кому не лень. А кому лень, тоже занимаются этим: с нуля каждый раз учить сетку ещё больше лень. Имён у этого много (metalearning, sharing of statistical strenghth, learning of learning), нюансов и школ хватает, рецептов и тонкостей хоть отбавляй, главная инженерная проблема -- модульность знаний -- именно тут.
-- end-to-end learning (нет традиционных программируемых обработок между входом и выходом),
-- life long learning (доучиваемся на каждом новом примере по ходу использования), с потоками данных с каких-нибудь датчиков самое оно.
-- learning как совокупность training и inference (выучивание и использование выученного), это различение потребовалось NVIDIA, чтобы продавать не слишком мощное железо для робототехники: учить новую сетку на нём плохо, зато можно отлично использовать выученные модели -- использование занимает в разы, разы и разы меньше вычислений, чем обучение.
-- reinforcement learning, обучение многошаговым действиям, эксперименты в мире.
-- ... их таких разных ещё много. Это я даже не по литературе, а просто навскидку из головы. Основная идея тут: многоликость новой парадигмы.

Интересно то, что парадигма learning это необязательно deep learning, просто максимум прорывов идёт сейчас именно в deep learning. Чтобы с высоты птичьего полёта взглянуть на другие виды обучения (эволюционные алгоритмы, байесовская статистика, символические вычисления/логика, поиск аналогий), рекомендую науч-поп книгу http://www.amazon.com/dp/0465065708/ (я её давно рекомендую, но за это время книжка в Амазоне успела стать №1 бестселлером в разделе Mathematical & Statistical Software).

В самом deep learning, если отвлечься от всех разнообразностей разных learning, много чего ещё происходит. Например, люди активно разбираются с памятью и вниманием -- memory and attention используются как способ разбираться с чем-то большим (много объектов на картинке, много слов в длинном предложении). Но максимальная разруха идёт сейчас от embeddings, как эффективного способа устроить синестезию, использовать силу распределённых представлений для representation learning. В 2012 я уже отслеживал deep learning и писал про representation learning (http://ailev.livejournal.com/1045081.html), и хотя я делал те же ошибки, что сегодня делают многие "семантики" вокруг меня (хотел немедленно болтами это как-нибудь прикрутить к подходящей онтологии), было понятно, что это взорвёт всё остальное.

Сегодня взрывная точка -- синестезия, эквивалентность визуального ряда и речи, если речь идёт об embeddings (распределённых представлениях). Описание картинок как "перевод с языка на язык", тем же алгоритмом -- это мейнстрим и общее место сейчас, но дело пошло много дальше. Вот парочка работ из этой серии:
-- sense2vec -- учёт частей речи в embeddings: http://arxiv.org/abs/1511.06388 (слова с разными значениями учитываются точнее)
-- visual word2vec -- учёт абстрактных сцен/картинок в word2vec -- http://arxiv.org/abs/1511.07067 (идея в том, что отношения объектов на картинках лучше учить не из текстов, а прямо из картинок!)
-- близко сюда работа идёт также работа с картинками и словосочетаниями "настроений" (типа "симпатичный ребёнок"): http://arxiv.org/abs/1511.06838

Арифметика слов (типа "король-мужчина+женщина=королева", тут ссылок столько, что уже не буду их заново приводить) продолжается арифметикой изображений, а хоть и синтезированных "из ничего" лиц (https://github.com/Newmu/dcgan_code -- и там такого много разного, синтезируются и обложки альбомов, и интерьеры, и вообще что угодно):


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

И, конечно, неожиданные применения. Если у вас появилась чуйка, то её можно использовать самым неожиданным способом. Вот тут говорят, что на скорости свыше 2.9mph с вероятностью 100% распознают влажность дороги по звуку шин: http://arxiv.org/abs/1511.07035. А на скорости ниже процент распознавания ниже, хотя даже на скорость 0mph он где-то 74.5% -- используется звук окружающей среды, проезжающих мимо автомашин.

Абсолютно аналогичный случай: по шуму кондиционера можно узнать, что с ним происходит, и что в нём поломалось -- гаджет, сенсор и приложение в iPhone для диагностики от стартапа Augury: http://www.technologyreview.com/news/543786/this-gadget-can-tell-whats-wrong-with-your-air-conditioner-by-listening-to-it/. Технология анализа звука там не раскрывается, но довольно легко представить, что это может быть за технология.

Публикаций по deep learning уже зашкаливает, одному человеку за ними уже не уследить. Вместо трёх чахлых кустиков там уже целый лес разработок, плюс вокруг активно идут лесопосадки (под возмущённые вопли пессимистов и радостные крики оптимистов). Всё чаще и чаще уже недостаточно сказать "deep learning", нужно специфицировать, что именно там имеется ввиду -- момент, когда два "специалиста в глубоком обучении" будут не понимать ничего в работах друг друга, уже близок. Эпоха "вебмастеров" в deep learning стремительно заканчивается, грядёт специализация. За кустиками и деревьями оказался лес, лес затем будет поделен... на делянки. Кому на какую делянку?
2019

lytdybr

Мой отрок таки прошёл практически без подсказок Human Resource Machine полностью (кроме оптимизаций – но решены все уровни) – крайне рекомендую, http://store.steampowered.com/app/375820/. Это классический Assembler, в смешной игровой форме. Заканчивается там набор задач разложением чисел на простые множители (причём в наборе команд операций умножения-деления нет, только сложение-вычитание), сортировка тоже встречается (команда может исполняться для какой-то ячейки памяти, а может для вычисленного адреса, указанного в ячейке). Задания очень лёгкие, если вас не интересует оптимизированный код. Как только вы начнёте оптимизировать (оптимальность вам замеряют), то игра будет вызывать некоторую задумчивость даже для программистов. В любом случае, я не знаю сегодня более простого и наглядного способа продемонстрировать отроку дух и вкус программирования на ассемблере -- ибо для любого настоящего ассемблера там будет превалировать не дух и вкус, а буква многочисленных технических подробностей.

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

Государство в США не будет вмешиваться в добычу на астероидах частными компаниями полезных ископаемых (вы только задумайтесь о самой постановке вопроса! без законодательства предполагалось, что вмешательство неминуемо!), добытое будет считаться собственностью добытчиков -- http://www.planetaryresources.com/2015/11/president-obama-signs-bill-recognizing-asteroid-resource-property-rights-into-law/

124 страницы свежайший учебничек (lecture notes) по распределённым представлениям в обработке естественного языка от тамошнего лидера, Kyunghyun Cho -- http://arxiv.org/abs/1511.07916. Многоэтажные формулы в ассортименте на каждой странице и 113 источников в списке литературы. Царских путей в геометрию до сих пор нет:
duckrabbit

Наш SysMoLan начали изобретать в DARPA -- даже интересно, сколько инженеров в мире смогут им воспользоваться (это я исхожу из моего скромного опыта. Похоже, сложность там будет побольше, чем у Coq и Agda вместе взятых -- недаром vvagr ехидничает в http://vvagr.livejournal.com/2114327.html). Но он не совсем ехидничает, там и впрямь может оказаться что-то интересное. Скажем, геометрические движки тоже сложны, и царских путей туда нет, но обёртка в виде 3D-САПР к этим движкам как-то позволяет их употреблять в жизнь. Это у DARPA очередная инкарнация META и META II, зовут её на этот раз CASCADE, слова те же -- "fundamentally change how we design systems", только в этот раз не джипы проектировать хотят, а systems for real-time resilient response within dynamic, unexpected environments. Ну, а дальше всё, что мы говорили про SysMoLan, только сразу с упором на математику -- "Applied mathematics, especially in category theory, algebraic geometry and topology, and sheaf theory" (ага, именно applied mathematics, исключительно прикладная) и военные применения, с намёком на оборону городов (или нападения на города, у военных ведь не разберёшь -- военные любой страны ведь о себе всегда говорят "оборона" вне зависимости от ситуации, а противоположная сторона у них всегда "агрессоры", так же вне зависимости от ситуации. Нет ни одной страны с "министерством нападения"). Вот, почитайте сами: http://www.darpa.mil/news-events/2015-11-20. Картинка там иллюстрирует использование mathematical sheaves для того, чтобы отслеживать датчики и объединять их информацию:


Интересно, с какой следующей страной у России напрягутся отношения? Глобус-то большой, выбор велик. Ага, страна в кольце врагов, исключительно обороняется -- и они, гады, этим пользуются, всё нападают и нападают, всё предают и предают, всё дальше и дальше от наших границ! Пока самая лучшая гипотеза о военно-курортном комплексе. Египет и Турция уже из курортных стран выбыли, дальше на очереди нужно будет ругаться с Китаем и Финляндией (сами поглядите: http://www.russiatourism.ru/content/8/section/82/detail/3768/).

Всё это не мешает народу развлекаться. Sony Playstation 4 преодолела планку в 30 миллионов проданных консолей. Это только одна фирма, только одна модель игровой приставки.