Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Генерирование архитектур нейронных сеток

Архитектуры нейронных сеток и гиперпараметры для их обучения, придуманные нежитью, уже лучше придуманных людьми. Проблема только в том, что получение этих архитектур требует огромного количества вычислительной мощности -- сотни GPU, ибо каждую из архитектур-кандидатов на чемпионы нужно попробовать в деле. Слова "эволюция" не произносятся, но затраты вычислительной мощности именно таковы, как в эволюционных методах: каждому сгенерированному образцу архитектуры нужно немного пожить для проверки, а это требует времени.

Это время можно уменьшать разными способами. Например, использовать хороший алгоритм оптимизации, чтобы уменьшить лишние прогоны, вот типичная работа: https://devblogs.nvidia.com/parallelforall/sigopt-deep-learning-hyperparameter-optimization/.

Но вот прямо сейчас предложили использовать систему метаобучения на базе нейронной сети, которая приобрела бы интуицию конструктора нейронной сети, обзавелась его "чуйкой". Вот эта система, SMASH: https://arxiv.org/abs/1708.05344. Сама архитектура нейронной сетки представляет тут вычислительный граф, его представляют как набор операций над памятью, а потом это представление кодируют как embedding (embedding для архитектуры!):

Есть ещё видео: https://youtu.be/79tmPL9AL48 (и, конечно, код -- https://github.com/ajbrock/SMASH).

Все эти трюки с репрезентациями позволяют выиграть вычислительную мощность: SMASH can be trained on a handful and/or a single GPU, whereas traditional neural architecture search approaches by Google and others can require 800 GPUS or more.

Когда говорят о том, может ли система творить, то чаще всего имеют ввиду не "настройку параметров" (как крутить ручки на сложном приборе), а предложение структуры, для которой после настройки параметров можно получить результаты лучше, чем state-of-the-art (сначала сказать, какой прибор -- то есть какие на приборе должны быть ручки, а уже потом их крутить). Вот это всё подходы к архитектурной работе в общем виде, работы с "принципиальными схемами", "вычислительными графами", "логическими архитектурами".

Архитектурная работа потребует от нейросеток уметь работать с самыми разными вариациями структурированных данных, обычно представляемых графами. Вот обзор ранних (прошлогодних!) работ по deep learning на графовых данных тут: http://tkipf.github.io/graph-convolutional-networks, более свежие (2017 года) работы можно найти в http://tkipf.github.io/#two.

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

Дальше мне интересен вопрос про стык между софтом и железом: это тот же вопрос, который поднимал Алан Кей (и, кстати, Бад Лаусон) про то, что не все языки программирования достойны отражения их в железе. Вот язык ассемблера, например, точно не достоин. А современные языки высокого уровня (которые часто ориентируются на то, чтобы эффективно компилироваться в команды современных Intel и ARM машин) тоже не достойны.

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

В этом плане сейчас выходит довольно много работ по универсальности железных платформ по отношению к обучающимся алгоритмам (я тут исхожу из нарисованного мной интеллект-стека, см. http://ailev.livejournal.com/1356016.html

Вот, например, TVM: драйвер-оптимизатор, который вычислительный граф портирует на самое разное железо (http://tvmlang.org/2017/08/17/tvm-release-announcement.html):


Оптимизаторы такого сорта (распределение вычислений по разным доступным процессорам/ускорителям) появляются в количестве, в том числе и обучаемые -- вот, например, использование reinforcement learning: https://arxiv.org/abs/1706.04972

Или вот ещё одна работа, которая хвастается, что железо Cambricon делалось не под одну-две архитектуры нейронных сетей, как нынешние спецпроцессоры, а сразу под десяток (cambricon -- это от "кембрийского взрыва") и работает особенно хорошо с разреженными нейронными сетками: http://ieeexplore.ieee.org/document/7551409/, http://cslt.riit.tsinghua.edu.cn/mediawiki/images/f/f1/Cambricon-X.pdf. Пикантность в том, что этот проект получил $100млн. инвестиций и тем самым стал одним из "единорогов" https://www.chinamoneynetwork.com/2017/08/18/chinas-state-development-investment-corp-leads-100m-round-in-ai-chip-maker-cambricon. SDIC Chuangye Investment Management, a subsidiary of State Development & Investment Corp, has led a US$100 million series A round in Cambricon Technologies Co., Ltd., an artificial intelligence chip developer. An investment arm of Alibaba Group Holding Ltd., Lenovo Capital and Incubator Group, CAS Investment Management Co., Ltd., Chinese big data firm Turing, Oriza Seed Venture Capital and Yonghua Capital also participated in the round, according to Chinese media reports. The exact valuation for the round was not disclosed, but it would make the firm a unicorn, or a private company with over US$1 billion in valuation, said the reports.

Решение ускорителя Brainwave от Майкрософт с этой проблемой разнообразия архитектур справляется другим способом: используется FPGA, и новые архитектуры просто перешиваются на чипе. Не спрашивайте, легко ли это сделать. При наличии компилятора -- легко, но для такой предметной области сделать компилятор в свою очередь непросто. Вот: https://www.microsoft.com/en-us/research/blog/microsoft-unveils-project-brainwave/. Ход тот же самый, как для всех драйверов: We have defined a graph-based intermediate representation, to which we convert models trained in the popular frameworks, and then compile down to our high-performance infrastructure.

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

Очень это развитие дел в коннективистском компьютинге напоминает 60-е в фон-неймановском компьютинге (Lisp -- 1961, IBM System/360 анонсирована в 1964 -- "Это был первый ряд компьютеров, в котором проводилось чёткое различие между архитектурой и реализацией", https://ru.wikipedia.org/wiki/IBM_System/360, Си -- 1969). Кстати, первый silicon compiler появился много позже -- 1979, https://en.wikipedia.org/wiki/Silicon_compiler.

Это я к тому, что история делается прямо на глазах.

UPDATE: обсуждение в фейсбуке -- https://www.facebook.com/ailevenchuk/posts/10211033469206715
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments