Метаобучение простыми словами «Обучение обучению» - одна из быстрорастущих областей исследований в области искусственного интеллекта, в частности обучения с подкреплением. Традиционные архитектуры глубокого обучения, такие как DNN, CNN и RNN, определены или построены так, чтобы хорошо работать для конкретной задачи. Другими словами, они необходимы для оптимизации параметров (весов и смещений), учитывая, что обучающие данные установлены для конкретной задачи. Идея метаобучения состоит в том, чтобы позволить нейронной сети учиться через предыдущие задачи и выполнять новую невидимую задачу. Было проведено множество исследований и предложены новые архитектуры для выполнения задачи метаобучения. Нейронная сеть с расширенной памятью [1] (MANN) - одна из них, которая вдохновила на использование внешней памяти из нейронной машины Тьюринга [2].

В этой статье мы обсудим следующее:

  • Мягкое знакомство с MANN.
  • Использование MANN для классификации нескольких выстрелов в наборе данных Omniglot. [3]

Введение в MANN

В обычном контексте мы изучаем параметры (phi) сети (веса и смещения) так, чтобы ожидаемое значение функции потерь (L) в конкретном наборе данных (D) оптимизирован. Это иллюстрируется следующим уравнением.

Однако в метаобучении от нас требуется оптимизировать ожидаемые значения функции потерь, изучая мета-параметр (theta) по распределению наборов данных (p (D)) .

Настройка задачи, предложенная в исходной статье, предназначена для набора данных D = {d_t} = {(x_t, y_t )}, последовательность (x_1 , null), (x_2, y_1),…., (x_t, y_t-1) передается в сеть как вход где y_i - метка класса для входного вектора x_i. Учитывая последовательность объединенных помеченных входов, сеть должна выдавать y_t, а функция потерь определена для метки класса y_t [1]. Эта настройка задачи выполняется в распределении набора данных, так что сеть учится использовать для новой невидимой задачи.

MANN состоит из трех основных частей.

  • Сеть контроллеров
  • Модуль внешней памяти
  • Читать - писать главы.

Сеть контроллеров - это обычная сеть с прямой связью для прогнозирования. Поскольку входом для сети является последовательность данных, предпочтительно использовать RNN или LSTM. Обратите внимание, что модуль внешней памяти MANN не является ячейкой памяти в LSTM.

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

Для каждого ввода матрица памяти обновляется на основе веса использования и ранее прочитанного вектора (уравнение 7). Полученная память затем объединяется с вектором ввода и передается через сеть контроллеров. Параметры сети контроллера (веса и смещения) затем обновляются с помощью градиентного спуска, выполняемого предпочтительной функцией оптимизации, минимизирующей категориальную перекрестную энтропию.

MANN для классификации по нескольким выстрелам в наборе данных Omniglot

Набор данных Omniglot - это набор рукописных символов из 1623 символов из 50 различных алфавитов [3]. Наша цель - создать нейронную сеть для классификации рукописных символов на основе нескольких реальных примеров для каждого. Эту задачу мы будем решать следующим образом:

  • Разделите распределение базы данных из 1623 символов на наборы данных мета-поезда и наборы данных мета-теста.
  • Используйте MANN с сетью контроллеров LSTM для обучения распространению наборов данных для обучения Meta.
  • Оцените производительность модели, используя распределение наборов данных мета-теста.

Теперь, когда мы разработали генератор, который можно передать во встроенную функцию keras fit_generator.

Реализация ячейки MANN вдохновлена ​​книгой «Практическое метаобучение с помощью Python» [4], а подробный код можно увидеть в репозитории github (ссылка в конце статьи).

Контроллер, который я использовал, представляет собой LSTM из 128 единиц с функцией активации «tanh», за которой следует полностью подключенный уровень, размер которого равен количеству классов с активацией «softmax». . Начальное состояние ячейки памяти определяется как zero_state со всеми нулевыми тензорами. После каждой эпохи обучения ячейка памяти должна обновляться для ввода в качестве текущего состояния памяти.

Ход работы можно описать следующими строками кода:

Как только модель определена в терминах тензоров, теперь мы можем запустить обычную встроенную функцию fit_generator keras для выполнения обучения.

Я реализовал алгоритм MANN для 10-позиционной классификации с двумя выстрелами в Omniglot Dataset. Модель смогла достичь 99% точности обучения примерно за 110 эпох. Диаграммы «Точность» и «Потери в зависимости от эпох» показаны ниже.

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

Не стесняйтесь обращаться к репозиторию Github за подробным кодом и попробовать реализовать и увидеть различное количество классификаций Few shot. Ваше здоровье! 😉

использованная литература

[1] Адам Санторо, Сергей Бартунов, Мэтью Ботвиник, Даан Виерстра и Тимоти Лилликрап. Мета-обучение с нейронными сетями с расширенной памятью.

[2] Алекс Грейвс, Грег Уэйн, Иво Данихелка. Нейронные машины Тьюринга.

[3] Бренден М. Лейк, Руслан Салахутдинов и Джошуа Б. Тененбаум. Изучение концепций на уровне человека посредством индукции по вероятностной программе.

[4] Судхарсан Равичандиран. Практика метаобучения с Python

[5] Stanford CS330 Deep Multi-Task and Meta Learning - Homework 01