В мае 2017 года исследователи из Google Brain team представили AutoML – алгоритм, который позволяет автоматически создавать архитектуры нейронных сетей, используя обучение с подкреплением. Через несколько месяцев они успешно применили AutoML для создания нейросети NASNet. Многие высказывали мнение, что теперь создавать нейронные сети сможет каждый и не нужны будут специалисты в этой области. Однако, на данный момент создавать новые модели машинного обучения все так же сложно. Так что же сделали в Google Brain team? В этом нам помогут разобраться публикации авторов AutoML.

Сразу следует отметить, что сама идея метаобучения (обучения алгоритмов и моделей обучения, meta learning [1]) не нова. Работы в данной области публикуют примерно с 1991 года. Обучение с подкреплением не единственный метод метаобучения. Рассматриваются также генетические алгоритмы и другие подходы. Но давайте перейдем непосредственно к научной статье авторов AutoML [2].

В разделе “3 Methods”, а именно в “3.1 Generate model descriptions with a controller recurrent neural network” авторы пишут:

In Neural Architecture Search, we use a controller to generate architectural hyperparameters of neural networks. To be flexible, the controller is implemented as a recurrent neural network.

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

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

Once the controller RNN finishes generating an architecture, a neural network with this architecture is built and trained. At convergence, the accuracy of the network on a held-out validation set is recorded. The parameters of the controller RNN, θc, are then optimized in order to maximize the expected validation accuracy of the proposed architectures. In the next section, we will describe a policy gradient method which we use to update parameters θc so that the controller RNN generates better architectures over time.

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

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

Но если AutoML не генерирует произвольные архитектуры, каким образом тогда она сгенерировала новый тип рекуррентных слоев? Посмотрим, что пишут об этом авторы в разделе 3.4:

The computations for basic RNN and LSTM cells can be generalized as a tree of steps that take xt and ht−1 as inputs and produce ht as final output. The controller RNN needs to label each node in the tree with a combination method (addition, elementwise multiplication, etc.) and an activation function (tanh, sigmoid, etc.) to merge two inputs and produce one output. Two outputs are then fed as inputs to the next node in the tree. To allow the controller RNN to select these methods and functions, we index the nodes in the tree in an order so that the controller RNN can visit each node one by one and label the needed hyperparameters.

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

Хорошо, но каким образом удалось применить AutoML для создания NASNet, ведь архитектура NASNet достаточно сложна? Изучим соответствующую работу [3]. В разделе “3. Method” авторы пишут:

In our approach, the overall architectures of the convolutional nets are manually predetermined. They are composed of convolutional cells repeated many times where each convolutional cell has the same architecture, but different weights.

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

В этом же разделе авторы пишут:

The main contribution of this work is the design of a novel search space, such that the best architecture found on the CIFAR-10 dataset would scale to larger, higher-resolution image datasets across a range of computational settings.

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

Зачем оптимизировать архитектуру блока на CIFAR-10, а потом пытаться ее масштабировать на ImageNet? Почему бы не применить AutoML непосредственно к ImageNet? Чтобы в этом разобраться, обратим внимание на данные из раздела “4. Experiments and Results”:

The method in this paper uses 500 GPUs across 4 days resulting in 2,000 GPU-hours. The former effort used Nvidia K40 GPUs, whereas the current efforts used faster NVidia P100s.

Карта NVidia P100s сейчас стоит примерно 6’500$. Авторы использовали 500 штук. Получается, чтобы обучить AutoML за 4 дня даже на таком “игрушечном” датасете как CIFAR-10, необходимо иметь доступ к оборудованию на 3’250’000$? На данный момент это так. А чтобы обучать AutoML на ImageNet, необходимо ресурсов минимум на пару порядков больше.

Выводы

AutoML – неплохой метод тюнинга архитектуры моделей машинного обучения. Однако, он не способен решить вашу задачу автоматически. Для того, чтобы использовать AutoML для новой задачи, необходимо задать метаархитектуру модели (нейронной сети): типы слоев, соединений, изменяемые гиперпараметры и т.д. Кроме того, применение AutoML требует использования большого количества вычислительных ресурсов.

Ссылки:

  1. Meta Learning
  2. Neural Architecture Search with Reinforcement Learning (arXiv:1611.01578)
  3. Learning Transferable Architectures for Scalable Image Recognition (arXiv:1707.07012)