Понимание математики, лежащей в основе 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.
Вот и все на сегодня!!