Метаобучение простыми словами «Обучение обучению» - одна из быстрорастущих областей исследований в области искусственного интеллекта, в частности обучения с подкреплением. Традиционные архитектуры глубокого обучения, такие как 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