Я обсуждаю интеллект-стек как стек платформенных протоколов для всех этих smart и intellectual приложений, которые начали появляться повсеместно. Тут два ключевых слова:
-- стек протоколов/технологий (платформенность-модульность, опора на стандарты. Ситуация примерно та же, какая была в момент появления стека протоколов TCP/IP -- конкурировали и построенные по семиуровневой модели OSI сети, и неведомые частные сети, и сети отраслевых консорциумов и отдельных университетов. Ситуация с пониманием стека протоколов интернета вещей и то лучше -- там уже договорились о том, что должен быть именно стек протоколов, не могут пока договориться, какой именно стек будет превалировать --
https://www.google.com/search?biw=990&bih=1537&tbm=isch&sa=1&btnG=Search&q=IoT+protocol+stack).
-- повсеместность. Это прямое указание на что-то инфраструктурное. Интеллект-из-машины становится повсеместным, значит он превращается в инфраструктуру. Инфраструктура, чтобы стать повсеместной, должна опираться на какой-то стандарт. Качественная инфраструктура опирается на лучшие из конкурирующих реализаций хороших стандартов.
Я обсуждаю технологии глубокого обучения как методолог системной инженерии, поэтому опираюсь в обсуждении этих технологии именно на платформенную архитектуру, которая будет задаваться стеком стандартных протоколов. Стек протоколов структурирует как инженерное мышление, так и проектную деятельность -- можно структурировать и планировать работы по экспериментам с реализациями стандартов, а также работы по стандартизации с оглядкой на такой стек. Всякие roadmaps пишутся с оглядкой именно на такое архитектурное структурирование -- что "наблюдательные" roadmaps окологосударственных "институтов развития", что реальные roadmaps компаний и их консорциумов.
Конечно, в области обсуждения всего интеллект-стека не так много работ, а обсуждение когнитивных архитектур тут лишь маленький кусочек всего стека. Например, похожее рассмотрение в IBM Cortical Learning Center, причём с меньшим числом платформенных уровней, ибо там явно не "платформенности" и множества поставщиков для каждой платформы хотят добиться, а просто создать универсальное собственное решение. Так что уровней там всего по факту три -- "приложение пользователя", "универсальные алгоритмы", "специализированное железо"--
http://nice.sandia.gov/documents/2015/NICE3talkwwwFinal-NO%20VIDEOS.pdf (и чуть словесных объяснений в
http://www.technologyreview.com/news/536326/ibm-tests-mobile-computing-pioneers-controversial-brain-algorithms/).
Но всё одно "обозревать" тут почти нечего, и приходится самому влезать в шкуру архитектора. Ну, я и не отказываюсь, я даже какую-то свою (хотя мне кажется, что там немного своего) нарезку на платформы уже недавно давал --
http://ailev.livejournal.com/1207520.html. В этом посте я:
-- добавлю новые ссылки, ибо дождик новых работ превращается уже в ливень. Пузырь-то продолжает надуваться, и к работам по интеллект-стеку подключаются новые и новые тысячи людей. В то же время среди "прорывных технологий" профессиональные "футуристы" обсуждают до сих пор IoT, BigData, Clouds и т.д., но не deep learning -- это они зря, интеллект-стек тем самым подкрался незаметно.
-- добавлю отдельно уровень когнитивной платформы (когнитивной архитектуры)
-- не буду пока обсуждать раскладку стека между облаком и локальными вычислительными ресурсами. Хотя для реализаций это важный вопрос: разные ответы на него дадут в том числе и разную нарезку на уровни и разные предпочтительные протоколы связи уровней стека.
-- пока не буду обсуждать стандартизацию (то есть выпячивать то, что интеллект-стек это стек протоколов). Пока до "войны интеллектов" (войны ИскИнов) нужно дожить. "Война браузеров" в www-части стека протоколов интернета случилась тоже даже не в первый год появления стандарта HTML и первого браузера на его основе. XML как доработка SGML тоже появился много позже, а веб-сервисы так и вообще по историческим меркам совсем недавно. В области компьютерного интеллекта всё будет, конечно, быстрее (интернет помогает новым идеям и их программным реализациям распространяться по миру буквально за ночь) -- но всё-таки не так быстро. Пропитка мозгов разработчиков идеями и тестовый период конкуренции реализаций идей на рынке занимает некоторое время.
Вот мой текущий интеллект-стек:
1. Прикладной уровень
2. Когнитивная архитектура
3. Обучающиеся алгоритмы
4. Вычислительные библиотеки
5. Вычислительные языки программирования
6. Аппаратное ускорение вычислений
На верхних (ближе к пользователю) уровнях архитектуры новации (а поскольку они довольно быстро выходят на рынок, то они же становятся инновациями) идут уже более чем плотным потоком. Нижние же уровни архитектуры начинают потихоньку разворачиваться в сторону обслуживания переспективных архитектур верхнеуровневых платформ -- то есть разворачиваются в сторону deep learning, хотя и достаточно медленно, они ведь дальше всего от потребительских денег и поэтому на их переориентирование на поддержку интеллект-стека инвесторы выделяют деньги не так быстро, как на развитие прикладного уровня интеллект-стека. Но в конечном итоге денег хватит всем, потребительские деньги дойдут до самого дна интеллект-стека.
Итак:
1. Прикладной уровень.
Это целевая система, использующая когнитивную ("соображающую") подсистему -- using system для всего остального стека. Эта целевая система хорошо осведомлена о целевой предметной области, все интерфейсы к пользователю и данным именно тут.
Всё чаще и чаще этот прикладной уровень выступает в форме "интеллектуального помощника", с которым можно поддержать беседу. Так что от когнитивной системы требуется не только умение решать целевые прикладные задачи, но и поддерживать речевой диалог на естественном языке, а то и генерировать реалистичный аватар для этой цели.
Прикладной уровень, по-хорошему, должен быть "слугой", который знает хозяина лучше самого хозяина и ориентируется в ситуации в своей предметной области (а, желательно, и в ситуации в целом) тоже лучше своего хозяина.
Социальный ли прикладной уровень (знают ли друг друга когнитивные прикладные агенты-слуги, каждый из которых хорошо знает своего принципала-хозяина) -- это обсуждается, разговоры про privacy и "нельзя позволить Гуглю знать о нас всё" как раз тут.
Основное на этом уровне -- собрать достаточно данных для обучения и понять, как учить. Ибо прикладной уровень занимался своими пользователями и данными предметной области и не знал, что вместо программирования вдруг нужно будет учить программы на специально подготовленных данных -- и хрен обучения оказывается в целом не слаще редьки программирования. Хотя да, результаты могут впечатлять больше.
Амазонский механический турок становится при этом всё более и более востребованным и всё чаще и чаще поминается в статьях (
https://www.mturk.com/mturk/welcome). Для воспитания ИскИнов нужны толпы вполне естественных интеллектов. Впрочем, к естественным интеллектам это тоже относится (Маугли ведь даже разговаривать не умеют), просто это как-то незаметно и бесплатно (хотя и очень даже платно, если учить серьёзно), а тут вот нужно приготовиться платить даже за пустяки.
Facebook тут настолько крут, любопытен и богат, что посадил команду людей на сбор данных для тренировки своего "умного помощника" --
http://www.wired.com/2015/08/how-facebook-m-works/ (там идея в том, что часть задач решается сейчас классическим искусственным интеллектом, а часть специально нанятыми людьми с накоплением примеров решения задач, потом глубокая нейронная сетка обучается на этих примерах и заменяет классические методы с резким ростом качества, а люди переключаются на накопление примеров для обучения следующей версии нейронной сетки -- и так постепенно осваиваются всё новые и новые группы задач). Сейчас эксперимент идёт с несколькими сотнями пользователей фейсбука в Калифорнии.
Конечно же, полно приложений, где никаких диалогов не требуется, а нужно "всего лишь" распознать изображения, как-то оценить текст и т.д.. Но задача поддержания диалога на прикладном уровне вырывается на первый план. Это Святой Грааль, ибо позволяет автоматизировать колл-центры, продавцов всех мастей, консультантов-эрудитов (врачей, юристов, спецов по чайным церемониям и т.д.). Люди разговаривают друг с другом, и если на том конце "интеллект", то ожидается, что он поймёт задачу на естественном языке и ответ тоже даст на естественном языке. И переписка тут не главный канал общения (хотя и возможный -- чаты между людьми ведь процветают!), а главный -- устный диалог с одновременным показом картинки на экране и тыканья в картинку пальцами естественного и искусственного интеллекта для уточнения предмета разговора (то есть одновременно речь+жесты). С людьми если говорить, то нужно учитывать их людскую природу. Например, для людей нужно иметь возможность нарисовать глаза и смотреть ими в правильную сторону -- если приложение робототехническое, то это "строить глазки" сильно облегчает взаимодействие (Meet me where i'm gazing: how shared attention gaze affects human-robot handover timing --
http://doi.acm.org/10.1145/2559636.2559656), одного голоса мало, а письменный текст неуместен вообще.
Там несколько задач (из них только часть задач пересекаются с традиционными "развлекательными ботами", проходящими тест Тьюринга):
-- распознавать и генерировать живую речь в real time диалога (по факту эта задача решена)
-- удерживать тему диалога и добиваться цели (сейчас идёт постановка задачи и накопление учебных данных, ибо "добиться цели в диалоге" это слишком расплывчатая формулировка. Работы идут типа Rating Dialogue Success with Neural Networks for Reinforcement Learning in Spoken Dialogue Systems,
http://arxiv.org/abs/1508.03386).
-- делать логические выводы, рассуждать (inference, см. ниже).
-- оперировать гигантскими объемами информации, уметь доставать из баз данных и Сети нужное, а не любое (тема внимания и памяти, см.ниже)
-- использовать тело робота или нарисованное тело/лицо виртуального аватара (типа цитированной работы по правильно позиционируемому взгляду), но пока "по одёжке встречают" ещё не является главным критерием. Тупой робот, "которого бы хотелось лизнуть", не является проблемой. Проблемой является интеллект этого робота.
-- правильно выбрать уровень стервозности (помним исследования MS Research, которые были сделаны для определения характера Cortana -- там быстро выяснили, что интеллектуальный ассистент не должен быть бесстрастен как утюг, а должен обладать независимым характером, чтобы нравиться людям:
http://news.microsoft.com/stories/people/cortana.html,
http://time.com/3960670/windows-10-cortana/).
-- ... тут всего много: общечеловеческое в силу необходимости коммуникации и сугубо предметное, ибо на то он и прикладной уровень, чтобы к чему-то прикладываться.
Напомню, что начиналось всё очень невинно: сначала решили задачи распознавания, которые были манифестированы в знаменитой картине Tasks (
http://xkcd.com/1425/):
Вот об этом презентация, вспомнить, как всё начиналось, "задача на один день работы с библиотекой Caffe" (DIY Deep Learning for Vision: a Hands-On Tutorial with Caffe):
https://docs.google.com/presentation/d/1UeKXVgRvvxg9OUdh_UiC5G71UMscNPlvArsWER41PsU/ Этот мой пост практически не касается задач распознавания, это уже "проехали", это уже в каждом смартфоне, это уже не интеллект. И это уже работает круче людей. Так, в задаче "миллион лиц" (
http://megaface.cs.washington.edu/) нужно уже не просто миллион лиц правильно распознавать, нужно это делать в условиях шума -- побеждает тот, кто будет распознавать зашумленные изображения. Большинство алгоритмов это делают пока похуже человека, но есть уже такие, которые в разы и разы более устойчивы к шумам, чем человеки --
http://megaface.cs.washington.edu/results/identification.html. Но эти новости уже не с первых полос газет, к этим новостям уже привыкли, это уже не "искусственный интеллект". В принципе, сверхчеловеческую результативность получают уже "расчётно". Например, для задач обработки изображений можно увеличить глубину нейронной сетки, слоёв эдак до 19. И если иметь достаточно данных для научения этих слоёв и понимать недостатки человеческого зрения (чтобы их преодолевать целенаправленно), то вот она, сверхчеловеческая результативность --
http://arxiv.org/abs/1508.03929.
Всё, что понятно как делать, немедленно выскакивает из определения интеллекта: когда компьютер не умел играть в шахматы, это было круто и "искусственным интеллектом", а сейчас это просто "шахматы на компьютере". Когда компьютер не умел распознавать изображения и речь, это было "искусственным интеллектом". Сегодня это просто "распознавание изображения и речи". Интеллект-стек тем самым всегда будет не про то, что уже у компьютера получается, а про то, что пока не получается. После этого это будет просто "ускоритель распознавания", "процессор диалога", "платформа нейровычислений" безо всяких подчёркивающих смекалку и сообразительность компьютера эпитетов типа smart, cognitive, intelligent. Хотя маркетологи этому будут сопротивляться. Смартфон так и остался "умным телефоном", хотя сообразительности в нём поначалу, да и сейчас, было не так уж много.
И, конечно, именно на этом прикладном уровне идут демонстрации силы нейронных сеток там, где традиционно пытались "алгеброй гармонию поверить" -- нейронные сетки "интуитивно схватывают" стиль, алгебра идёт лесом, поэтому художественные приложения рулят и пропагандируют использование интеллект-стека среди тех, кто в других предметных областях ничего не понимает, но любит зато помузицировать или посочинять стихи. Лидером последней недели тут серия статей, ведущая к получению "Марша глубокого обучения" (та ещё музычка! её сочинил компьютер в сотрудничестве с человеком на базе народных мелодий, в этом и фишка -- с традиционным вопрошанием: кто тут автор. Народ? Сетка? Композитор, внёсший какие-то правки в результат? -- послушайте, там не слишком тривиально (
https://soundcloud.com/sturmen-1/the-march-of-deep-learning):
Интересные объяснения, как получили композицию и другие примеры: часть 1 в
https://highnoongmt.wordpress.com/2015/08/11/deep-learning-for-assisting-the-process-of-music-composition-part-1/,
часть 2,
часть 3,
часть 4).
А вот A Neural Algorithm of Artistic Style --
http://arxiv.org/abs/1508.06576, in light of the striking similarities between performance-optimised artificial neural networks and biological vision, our work offers a path forward to an algorithmic understanding of how humans create and perceive artistic imagery. В самой работе демонстрируют, как "читают стиль" с какой-то известной картины при помощи нейронной сетки, а потом применяют его к какой-то фотографии -- получают картину из фотографии (картина дана в уголочке каждой "стильно художественной фотографии", а без картины приведено оригинальное фото):
2. Когнитивная архитектура
Укрепляется подход, основывающийся на хитрой обвязке алгоритмов глубокого обучения (а не на логики экспертных систем, в том числе и нечёткой логики, логики высоких порядков на мультиграфах, фреймовых вычислений, онтологий и семантических сетей, решениях традиционных задач планирования и прочих подходов "классического AI 80-х" -- т.е. упор делается не на хитро программируемый и настраиваемый "решатель", solver, а на более-менее автоматическое "обучение"). Мелкое обучение (кластерный анализ, метод главных компонент и прочие простейшие методы одноуровневой, неиерархической работы с данными) уже рассматривается только по инерции, уже слабо трепыхается (и вышло несколько работ, которые теоретически показывают, что глубокие архитектуры лучше -- забивают последние гвозди в крышку мелкого гроба, например
http://arxiv.org/abs/1508.04924).
В принципе, лучшие теоретические достижения мелкого обучения сейчас стремительно обогощают deep learning -- то, что связано со сменой парадигмы солверов и пруверов на "обучение" берётся, отдельные алгоритмы тоже берутся как основа "слоя", но в новую глубокую жизнь прорывается отнюдь не всё (чуть-чуть я об этом писал в "машинное обучение и трудные вопросы к инженерии и науке" --
http://ailev.livejournal.com/1207563.html, и там же см. комментарии по поводу "гибридного вывода", ибо обучение обучением, а эффективный логический вывод лучше делать прямо на логических гейтах и в архитектуре фон Неймана, нежели эмулировать логический вывод в нейронной сетке. Не удивлюсь, если лет через десять будет уже не "нейронный ускоритель для фон-неймонавского компьютера", а "фон-неймановский ускоритель для нейроморфного компьютера").
Тренд сегодняшнего момента: повышение универсальности предлагаемых алгоритмов -- декларируется, что один и тот же алгоритм должен сработать на самых разных данных, в самых разных задачах при общей сдержанности риторики в части "похожести на человека", "самообучаемости", "возможностей саморазвития", "сознания" и т.д.. Да, как в старые добрые времена, когда появлялись шапкозакидательные имена алгоритмов типа General Problem Solver (GPS, 1959 год,
https://en.wikipedia.org/wiki/General_Problem_Solver).
Вот типичные ссылки:
--
http://aideus.com/research/research.html (там прямо говорится о strong artificial intelligence и универсальных алгоритмах, но без придыхания).
--
https://www.maxima.com/press/ (тут демонстрируется general purpose artificial intelligence, но по факту это просто один и тот же обучающийся алгоритм, который учили на разных данных)
--
https://en.wikipedia.org/wiki/MANIC_%28Cognitive_Architecture%29,
http://arxiv.org/abs/1508.00019 -- пример "нечеловеческой" (сознательно не основанной на идеях копирования человека) обучаемой когнитивной архитектуры -- MANIC, a minimal architecture for general cognition.
Никакого "тёплового лампового интеллекта", никаких AGI в части "осознанных роботов". Нет, современная когнитивная архитектура направлена на решение узких задач, как это и развивалось раньше в weak AI. Только подчёркивается, что эти самые разные "узкие задачи" прикладных областей могут быть решены одной и той же когнитивной архитектурой, без перепрограммирования или замены алгоритмов -- только переобучением.
С другой стороны, этот уровень -- явный стык скользкой тематики AGI (artificial general intelligence, strong AI) и чисто алгоритмического уровня weak AI (что реализуется обычно одним "алгоритмом", а не алгоритмической архитектурой, так что у меня это платформенным уровнем ниже). Так что тут фанфары уже убраны, но больше абстрактных заявок, чем реальных результатов. Все результаты сводятся к тому, что "наш общий алгоритм умеет решать разные классы задач не хуже, чем их решали специализированные для этих задач алгоритмы" -- эти результаты пока не столько про архитектуру, сколько про отдельные удачные находки в алгоритмах глубокого обучения.
Почему я выделил слой когнитивной архитектуры отдельно, а обучающиеся алгоритмы отдельно? Потому как хороший обучающийся алгоритм просто используется когнитивной архитектурой (он часть когнитивной системы), а архитектура может использовать несколько обучающихся алгоритмов и варьировать обучение с учителем и без учителя, подстройки своих гиперпараметров. Вспоминаем тут Грегори Бейтсона с его вниманием к эпистемологии и уровнями обучения -- и пытаемся понять, как от онтологических/логических уровней классификации перейти к эпистемологическим уровням обучения (
http://core.ac.uk/download/pdf/101767.pdf): -- Learning IV `…would be change in Learning III, but probably does not occur in any adult living organism on this earth.’
-- Learning III …is change in the process of Learning II, e.g. a corrective change in the system of sets of alternatives from which choice is made.
-- Learning II …is change in the process of Learning I, e.g. a corrective change in the set of alternatives from which choice is made, or it is a change in how the sequence of experience is punctuated.
-- Learning I …is change in specificity of response by correction of errors of choice within a set of alternatives.
Learning 0 …is characterised by specificity of response, which - right or wrong - is not subject to correction.
Именно на этом уровне можно рассматривать всё, что связано с возможностью обучать алгоритмы, а не программировать их вручную или генерировать к ним код. Именно тут вопросы embodied intelligence, именно на этом уровне можно рассматривать обучение без учителя, на этом уровне обсуждается организация рефлексии (например, используя теории схемы внимания
http://ailev.livejournal.com/1193568.html).
3. Обучающиеся алгоритмы
Как правило, на сегодня это алгоритмы глубокого обучения на нейронных сетках и их модификациях (архитектура Numenta при этом тоже относится к глубоким, хотя они себя любят отличить от общей тусовки deep learning -- кроме уже приведённой ссылки из доклада IBM см.
https://github.com/numenta/nupic/wiki/Hierarchical-Temporal-Memory-Theory).
Чаще и чаще начинают использовать различия в названиях: кортикоморфные (по мотивам живых нейронов и организации мозга, т.е. с советами от нейрофизиологов) архитектуры противопоставляются нейроморфным (где уже не ожидается бионики, нейрофизиологов в глаза никто не видел, и поэтому результат не слишком напоминает мозг -- но успешно работает, и даже иногда понятно, почему). Но терминология пока не устоялась, плюс кроме "учёных" (которые пытаются тут попсеть уж как могут: они разговаривают ведь с использованием этих слов уже не только между собой, но и с грантодателями -- а те уже не вдаются в подробностями) эту терминологию начинают использовать и инженеры, и даже отдельные клочки этой терминологии уже вовсю пропагандируют журналисты. В итоге получится как с BigData -- обзовут "маркетинговым словом", ничего особенного "нейро" обозначать не будет, кроме "мы тут на переднем крае", а "кортико" -- будет означать "мы тут бионикой балуемся, вдруг наш махолёт выгорит?".
Тем не менее связь живого и неживого "нейро" -- это горячая тема. Вот только несколько ссылок на эту тему (большая дискуссия была тут:
https://www.facebook.com/groups/nevronet/permalink/535381206628205/?hc_location=ufi). Правильные тут слова biologically plausible/inspired
-- Biologically Inspired Cognitive Architectures Society (BICA society,
http://bicasociety.org/ -- в 2017 году будет конференция в Москве, а 22-24 апреля 2016 в Москве школа -- намекают, что она изменит вашу жизнь:
http://school.bicasociety.org/),
-- Random feedback weights support learning in deep neural networks,
http://arxiv.org/abs/1411.0247-- Towards Biologically Plausible Deep Learning,
http://arxiv.org/abs/1502.04156 (это февраль 2015, и тут хороший обзор литературы, формулировки проблемы и предложение путей решения. Проблема простая: Neuroscientists have long criticised deep learning algorithms as incompatible with current knowledge of neurobiology. Для меня лично это не проблема. С чего бы нейрофизиологам жаловаться, что занимающиеся нейронежитью не дают им ничего полезного? Мало ли кто им не даёт ничего полезного! Но нейрофизикологи -- назову их пока так за неимением лучшего слова -- почему-то отзываются и берутся вместо улучшения своих алгоритмов подгонять их под осуществимые на живых нейронах, "реагируют на критику". Хотя потом они замечают, что для улучшения работы нейроморфных архитектур эти результаты тоже сгодятся -- типа предложение для реактивного самолёта принципов полёта, совместимых с принципами полёта птичек поможет и самолётам. Ну да, ну да. Может и помочь, чего в жизни не бывает. Но я бы не обольщался).
Интересный сдвиг технологий последних пары-тройки месяцев -- в побуквенную работу с текстами (после крышесносительного блог-поста Karpathy -- даже не статьи! статьи становятся теперь важны не для дела, а только для денег-грантов-должностей), особенно для языков с флексиями. Если с текстами работать побуквенно, то сетки можно делать более маленькие (с меньшим числом параметров, т.е. быстрее работающие и быстрее научаемые) и получать результаты лучше, чем при пословной работе --
http://arxiv.org/abs/1508.06615 (Character-Aware Neural Language Models). Более того, если перейти на уровень букв, то можно нейронной сеткой распознавать речь с большими словарями на непрерывном входном потоке без предварительной обработки -- и отказаться от скрытых марковских моделей при резком росте качества и скорости --
http://arxiv.org/abs/1508.04395. Я и сам был в изумлении от того, как сетки учатся синтезировать правильные слова из букв.
Направление основного удара в алгоритмах сегодня -- это внимание и память. При этом слово "память" (равно как и внимание) может использоваться совсем не так, как ожидается: например, нейронная сетка "забывает" о том, что было в начале предложения по мере продвижения в переводе к концу предложения. А поскольку языки типа немецкого могут неожиданно вынести какое-то слово (или даже часть слова) из словосочетания в начале предложения в его конец, то качество перевода падает на длинных предложениях.
И тут-то пригождается "память" и "внимание" -- любой механизм, который позволяет "не забыть, что было в начале предложения" и "удерживать внимание на обрабатываемом кусочке"! Например, можно одновременно читать предложение задом наперёд и комбинировать чтение вперёд и чтение назад -- что забыл "вперёдчитатель" как раз хорошо помнит "назадчитатель", и они не теряют внимания -- не путают начало предложения с его концом. И да, качество перевода предложений с использованием такой памяти резко поднимается:
https://drive.google.com/file/d/0B16RwCMQqrtdNUptOGtDeDhxZ0E/view (Neural Machine Translation: Progress Report, Kyunghyun Cho -- там эффектная концовка, предлагающая использовать все те же методы для описания изображений: переводить "визуальный язык" на естественный язык, с ипользованием внимания и памяти).
"Внимание" означает просто нарезку входной информации на маленькие кусочки -- если у тебя огромная книжка на входе, то её может переработать только огромная нейронная сетка. Но если сетка маленькая, то можно от этой входной книжки за один раз откусывать только маленький кусочек, это и есть "внимание" к чему-то маленькому, выделенному из большого (или другими словами, внимание -- выделение фигуры из фона, части входной информации из обширного входного потока). Теперь уменьшите "книжку" до предложения длиной 100 слов -- это будет правильное понимание сегодняшнего масштаба бедствия, до книжек пока дело не доходит чисто по объему (в том числе до длинных диалогов), с вниманием на масштабе одного предложения или пары реплик длиной 100 слов бы справиться с нынешними вычислительными ресурсами и известными алгоритмами! В конечном итоге это всё про то, как меньшими вычислительными ресурсами и меньшим объемом обучающих данных получить лучшие результаты, ибо всё содержательное сейчас болтается в районе 100 слов, а бОльший контекст вычислительно недоступен. Попсовое объяснение этого в Unsupervised learning, attention, and other mysteries. How to almost necessarily succeed: An interview with Google research scientist Ilya Sutskever. --
http://radar.oreilly.com/2015/08/unsupervised-learning-attention-and-other-mysteries.html Темы памяти, внимания и вывода настолько важная, что ей посвящён отдельный семинар (организаторы все из Facebook AI Research), который будет 12 декабря 2015 с суперзвёздным составом докладчиков --
http://www.thespermwhale.com/jaseweston/ram/ (и на этой странице смотри большой список свежей и не очень свежей литературы). Этот семинар будет сразу после Deep Learning Symposium --
https://sites.google.com/site/nips2015deeplearnings/, где соберётся "весь цвет".
Всё это главным образом работа с текстами: "распознавания текстов" (как распознавания изображений и распознавания речи) нет такого, но очень осторожно уже начинают говорить про "понимание текстов" -- при этом вполне в духе конструктивизма предполагая, что ежели компьютер что-то "понял" про текст, то он должен уметь отвечать на вопросы по этим текстам и делать какие-то выводы (reasoning).
Вот, например фейсбуковский bAbI проект -- так и говорят про "понимание текста и рассуждение" (text understanding and reasoning). На тамошней страничке предлагают набор 20 задач для тестирования: тысяча вопросов для обучения, тысяча вопросов для тестирования в каждой задаче --
https://research.facebook.com/researchers/1543934539189348. Задачи -- это истории, в ходе рассказа которых нужно контролировать, что нить повествования не утеряна и текст понимается (помним при этом, что у сеток сейчас проблема с "вниманием" и "памятью"). Вот пример: 1 Mary moved to the bathroom.
2 John went to the hallway.
3 Where is Mary? bathroom 1
4 Daniel went back to the hallway.
5 Sandra moved to the garden.
6 Where is Daniel? hallway 4
7 John moved to the office.
8 Sandra journeyed to the bathroom.
9 Where is Daniel? hallway 4
10 Mary moved to the hallway.
11 Daniel travelled to the office.
12 Where is Daniel? office 11
А вот новый корпус текстов для глубокого обучения в части вывода: главное отличие в том, что он вдесятеро больше по объему, чем обычно используется для бенчмарка вывода в традиционной лингвистике. Тут нужно учить, а не просто тестировать запрограммированный вывод. Этот объем (570тыс. пар предложений, связанных отношениями contradiction, neutral, entailment) впервые дал возможность нейронным сеткам систематически обходить в бенчмарках традиционные лингвистические алгоритмы вывода:
http://arxiv.org/abs/1508.05326 Но главная работа последнего времени -- это Towards Neural Network-based Reasoning,
http://arxiv.org/abs/1508.05508. Потому как cначала они ругают за простоту только что помянутые 1 Mary moved to the bathroom. 2 John went to the hallway. 3 Where is Mary? bathroom 1 -- чтобы перейти к самым сложным задачам из предлагаемых bAbI. И далее пишут, что Our empirical studies show that Neural Reasoner can outperform existing neural reasoning systems with remarkable margins on two difficult artificial tasks (Positional Reasoning and Path Finding) proposed in [bAbI]. For example, it improves the accuracy on Path Finding(10K) from 33.4% [6] to over 98%. Что такое Path Finding? Вот такое: 1.The office is east of the hallway.
2.The kitchen is north of the office.
3.The garden is west of the bedroom.
4.The office is west of the garden.
5.The bathroom is north of the garden.
How do you go from the kitchen to the garden? south, east, relies on 2 and 4
How do you go from the office to the bathroom? east, north, relies on 4 and 5
Про эксперименты с базами данных субтитров (взять рекуррентную сетку и натренировать её на диалогах из фильмов. После чего давать ей какую-то строчку и просить сгенерить продолжение -- потом развлекаться "диалогом") я молчу, сейчас этим занимаются все подряд. Мне это кажется тупиковым (хотя тут надеются, что можно научить сетку на диалогах из реальных записей колл-центров и протоколов хелп-десков, но я думаю, что это не получится: сетка просто не обладает сегодня нужной памятью и вниманием, чтобы не выдать вам кусок помощи для одного кейса в разговоре про другой кейс -- особенно, если эти кейсы плохо различимы, типа помощь в настройке телефонов близких моделей но с каким-нибудь хитрым отличием. Клиент называет модель в самом начале диалога, это нужно запомнить и каким-то чудом вытащить потом фразу помощи для фичи именно для этой модели уже в конце диалога, при том что диалог во всём остальном похож на диалог для другой модели -- отличаются они какой-то одной кнопочкой, и это различие нужно помнить. С памятью же в рекуррентных сетках сегодня без специально принимаемых мер плохо. И с количеством примеров, на которых это тонкое различие может проявиться: нынешние сетки не умеют учиться пока на малом количестве примеров. Так что эксперименты с субтитрами из фильмов и диалогами из художественной литературы -- это баловство, развлечение, художественное творчество).
Мечта -- это "обучение без учителя", unsupervised learning. Идея в том, что если ты поиграешься сам с входной информацией, изучишь мир как-то сам, то потом тебя можно будет быстрее чему-нибудь в этом мире научить. Но это только мечта, про это сегодня говорит каждый, результатов пока особых нет. И обратите внимание, что есть и прямо обратная тема, поднимаемая Вапник сотоварищи: "обучение с умным учителем", ибо сегодняшнее "обучение с учителем" -- это обучение с тупым роботом, который не обращает на тебя внимания, просто даёт известные ему ответы. Умный учитель понимает, чего ты не понимаешь, и это позволяет давать такие примеры, по которым можно научиться быстрее, сэкономить время. И я бы больше ставил сегодня на вапниковское intelligence learning, чем на прорывы в unsupervised learning.
Ну, и полным полно работ по повышению эффективности и предложению новых вычислительных архитектур, в том числе с выходом на максимально массово-параллельные вычисления, уменьшение числа параметров при сохранении качества, замены пропуска данных их зашумлением (dropout меняют на dither -- и говорят, что становится сильно лучше,
http://arxiv.org/abs/1508.04826),
Результаты оформляются в виде библиотек, библиотеки выкладываются в github, или не выкладываются, а под них берутся деньги и организуется очередной завоёвывающий мир стартап -- о многих работах в этой области мы пока не знаем. Вот тут пытались собрать некоторое количество ссылок на библиотеки --
http://vk.com/topic-44016343_29211791, но этих библиотек с разными особенностями море разливанное, тысячи их, всех не соберёшь, не упомянешь.
Из новостей
-- появилась библиотека Strada на Julia (по факту это Caffe, mocha.jl там тоже учтена, но в этой есть даже рекуррентные сетки):
https://github.com/pcmoritz/Strada.jl-- начался рефакторинг самого Caffe (Caffe2 --
https://github.com/Yangqing/caffe2)
-- питоновский Theano-Lights включает алгоритмические новинки --
https://github.com/Ivaylo-Popov/Theano-Lights-- порт примеров использования deeplearning4j из Scala --
https://github.com/kogecoo/dl4j-0.4-examples-scala (и помним, что есть ещё просто Scala wrapper for deeplearning4j
https://github.com/deeplearning4j/deeplearning4s)
-- ...этих библиотек, портов, wrappers выходит каждую неделю по много штук. А старые пополняются новыми алгоритмами, которые выходят в arXive тоже по многу штук в неделю.
4. Вычислительные библиотеки
Тут никаких пока особых новостей нет. Библиотеки "научных вычислений" (главным образом такого или сякого умножения матриц) пухнут, пытаются как-то эффективно использовать все возможности нижележащих в интеллект-стеке языков программирования и вычислительных ускорителей, чтобы вышележащие по интеллект-стеку алгоритмы обучения нейронных сеток работали быстро. Тем не менее, сетки работают медленно, крайне медленно.
Времена поменялись, и теперь вместо классического обсмеивания традиционной долгой "компиляции" (
http://xkcd.com/303/):
сегодня хихикают над долгим "обучением" (
http://pekalicious.com/blog/training/ -- обратите внимание, это картинка ещё апреля 2011 года, и её актуальность никуда не пропала, вычисления по-прежнему идут с черепашьей скоростью, суперкомпьютерные задачи пытаются решать на десктопах, тут уж ничего не поделаешь):
Нужно ещё отметить, что вычислительных библиотек обычно несколько для каждого языка (они существенно языкозависимы, хотя тут можно обсуждать варианты -- типа использования сишных вычислительных/"научных" библиотек из других языков, на которых пишут собственно нейроалгоритмы), каждая из них неполна и узконаправлена, так что сам язык относится к отдельному уровню платформы.
Подробней я про вычислительную математику писал в
http://ailev.livejournal.com/1207520.html -- и не буду повторяться, сногсшибательных новостей тут новых не появилось, всё инфраструктурно и медленно.
5. Вычислительные языки программирования.
По факту, сегодня в интеллект-стеке играют C++, Lua, Python. А все остальные (Java, Julia и т.д.) пока маргинальны. Почувствуйте разницу со старинным "искусственным интеллектом", в котором главными были Lisp и Prolog.
Я уже много раз писал про Julia (
http://julialang.org), как язык, к которому в этом плане нужно присмотреться: его дизайн-цель как раз обеспечить быстрые вычисления. Языков с такой целью мало, так что шансы Julia занять существенное место в интеллект-стеке довольно велики -- если на нём кто-нибудь возьмётся организовать написание чего-то типа JuliANN. Именно организовать написание, написать такие вещи кому-то одному обычно не получается и качественно, и в обозримое время.
Опять же, никаких особых новостей, ибо в языкостроительстве быстро вообще ничего не бывает -- новые новости ещё не созрели.
6. Аппаратные ускорители вычислений
Мейстрим стремительно уходит в FPGA. Очередная новость трёхдневной давности: LeCun told The Platform that Google is rumored to be building custom hardware to run its neural networks and that this hardware is said to be based on FPGAs --
http://www.theplatform.net/2015/08/25/a-glimpse-into-the-future-of-deep-learning-hardware/. Майкрософт это давно делает --
http://www.theplatform.net/2015/08/27/microsoft-extends-fpga-reach-from-bing-to-deep-learning/ (вот тут я писал подробней, какие там используют хитрые чипы, это не совсем обычные FPGA --
http://ailev.livejournal.com/1207933.html).
Из забавностей -- появление китайских FPGA, пока на чудовищных проектных нормах, маленьких и относительно дешёвых. Мейкеры их уже обсуждают, но с deep learning пока никто их не ассоциирует:
http://hackaday.com/2015/08/24/two-new-fpga-families-designed-in-china/. Мне в этом важен тренд: FPGA из сугубо эзотерической чисто промышленной технологии потихоньку превращается в чуть-чуть более попсовую технологию. Хотя суть тамошнего обсуждения -- "запредельно сложно, вряд ли мейкеры массово начнут этой технологией пользоваться".
Пока же слайд LeCunn наиболее информативен в части аппаратного ускорения:
Последние тренды в GPU (текущий мейнстрим) показывают прогресс в три раза по скорости за последние 9 месяцев -- мало кто такой прыти ожидал от оптимизаторов:
https://github.com/soumith/convnet-benchmarks/issues/56#issue-103818583