Понимание математики, лежащей в основе MANN

Итак, в моем последнем мы обсуждали, как работает нейронная машина Тьюринга. В моем 96-м посте мы обсудим, как, используя NTM в качестве основы, нейронные сети с расширенной памятью, то есть MANN, реализуют One-Shot Learning.

Примечание. Итак, прежде чем мы перейдем к делу, прочитайте мой последний пост о Нейронных машинах Тьюринга, чтобы лучше понять, иначе большая часть концепции будет выглядеть как жаргон.

Кратко о НТМ

  • Он основан на идее машины Тьюринга Алана Тьюринга, где у нас есть контроллер, который

Считывает ввод.

Выдает выходные данные, читая явную матрицу памяти в сочетании с входными данными.

Обновляет/записывает в матрицу памяти обновленную информацию.

  • Вместо чтения/записи из определенных мест контроллер читает/записывает из каждого места в памяти, используя веса, делающие задачу дифференцируемой, и, следовательно, контроллер обучаемый (нейронная сеть).
  • Веса генерируются с использованием комбинации 4 операций

Адресация на основе содержимого → Насколько похожи входные данные с разными разделами памяти с использованием модифицированной версии косинусного сходства.

Адресация на основе местоположения → Сколько информации из прошлого следует использовать с помощью шлюза интерполяции (аналогично шлюзу забвения LSTM).

Сдвиг свертки → Перемещение фокуса на разные строки памяти.

Повышение резкости → Для удаления размытия результатов из-за операции свертки, выполненной ранее.

Для более глубокого понимания прочитайте мой предыдущий пост о НТМ.

Вернемся к сегодняшней теме

Что такое нейронные сети с дополненной памятью?

Таким образом, MANN можно рассматривать как модифицированную версию NTM со следующими изменениями.

  • При создании вектора внимания (веса для строк памяти) мы пропускаем часть адресации на основе местоположения.

Примечание.Я не совсем уверен, пропускаются ли также операции свертки и повышения резкости, но, поскольку нигде в документе не упоминается, я предполагаю, что эти шаги также пропускаются.

  • Знакомство с концепцией «наименее использовавшегося доступа», т. е. LRUA.
  • Для операций чтения и записи используются отдельные веса (один и тот же набор весов используется как для чтения, так и для записи в NTM).

Несколько важных вопросов для начала

Почему пропущена адресация на основе местоположения?

Итак, если у вас есть представление о LSTM, у нас есть ворота забывания, похожие на адресацию на основе местоположения, где мы поддерживаем компромисс между текущей информацией и прошлой информацией. Это играет решающую роль при работе с последовательными данными (текстом), когда нам также необходимо помнить прошлую последовательность. Хотя при работе с непоследовательными данными этот шаг может быть не очень хорошим дополнением и, следовательно, от него отказываются.

Что такое наименее используемый доступ (LRUA)?

Таким образом, операции обновления/записи в MANN могут принимать две формы.

  • Если текущий ввод аналогичен строкам в матрице памяти, мы обновляем недавно использованные строки памяти.
  • Но если текущий ввод является новым и не имеет сходства ни с одной из строк памяти, мы обновляем «наименее недавно» использованные ячейки памяти в матрице памяти, поэтому называемые LRUA. Это сделано для того, чтобы сохранить недавно сохраненную информацию. В противном случае мы можем в конечном итоге потерять недавно закодированную информацию для этой новой информации.

Итак, как мы решаем, какие строки памяти будут называться наименее использовавшимися? обсудим это позже в посте.

Давайте сначала обсудим операции READ и WRITE, выполняемые MANN.

ЧТЕНИЕ Операция

Для READ уравнения такие же, как и в NTM, которые уже объяснялись в моем предыдущем т.е.

чтение = Σᵢw_readₜ(i) Mₜ(i)

Где

Mₜ = матрица памяти на отметке времени t

w_readₜ = читать веса в отметке времени t

я = о → total_memory_rows

где w_readₜ создается с использованием косинусного сходства между единицами ввода и памяти с использованием приведенного ниже уравнения (аналогично NTM)

Где K () — функция подобия косинуса, kₜ — вход, а Mₜ — матрица памяти.

ЗАПИСЬ Операция

Для операции WRITE мы будем следовать простому уравнению

Mₜ(i) = Mₜ₋₁(i) + w_writeₜ(i) x kₜ

Где

Mₜ, Mₜ₋₁ = матрица памяти с временными метками t, t-1 соответственно

kₜ = ввод с меткой времени t

w_writeₜ = записать веса

я = 0 → memory_matrix_rows

Теперь большой вопрос: как рассчитываются веса чтения и записи? Где находится «ЛРУА»?

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

Создание весов записи — сложный и сложный процесс. Давайте быстро посмотрим

Итак, прежде чем мы вычислим веса записи, нам нужно сгенерировать векторы использования_весов и наименьших_используемых_весов.

Как?

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

w_usageₜ = γ xw_usageₜ₋₁ + w_readₜ + w_writeₜ

Этот вектор w_usageₜ в основном дает больший вес строкам памяти, которые недавно использовались (для операций чтения и записи), по сравнению со строками, которые не используются. Здесь γ является константой, а w_readₜ , w_writeₜ — весами чтения и записи.

Теперь, используя w_usageₜ, мы будем вычислять weights_least_usedₜ.

Вычислить n-е минимальное значение веса в векторе w_usageₜ

Итерация по вектору w_usageₜ, если элемент равен этому n-му минимальному значению, устанавливается как 0 или 1.

Что это за n? Оно равно общему количеству чтений, выполненных на данный момент. Итак, если у нас пока 5 чтений, N=5. Следовательно, это будет вектор 0/1

Теперь, как только этот вектор weights_least_usedₜ будет рассчитан, мы будем следовать очень сложному уравнению, чтобы сгенерировать w_writeₜ

w_writeₜ= σ(α) x w_readₜ₋₁ + (1-σ(α)) x w_least_usedₜ₋₁

Здесь,

σ = сигмовидная функция

α = скалярное значение

Таким образом, чтобы включить LRUA, мы сначала вычислим w_usage, затем w_least_used, а затем w_write. Как вы можете заметить, в основном это веса w_write, которые включают информацию о LRUA.

Вот и все на сегодня!!