Обновление использования перед вычислением выделения позволяет ввести свободную память для новых данных. Мы теперь также можем более эффективно использовать (впервые или заново) ограниченные ресурсы памяти, преодолевая второе ограничение NTM.
Временное связывание записей DNC
Учитывая динамические механизмы управления памятью, используемые в DNC, каждый раз, когда надо выделить ячейку памяти, мы получаем наименее используемую. Выходит, здесь нет позиционной связи между ней и предыдущей записью. При таком типе доступа к памяти непрерывный способ сохранения временны́х отношений, принятый в NTM, не подходит. Нам нужно вести непосредственную фиксацию порядка записи данных.
В DNC это достигается при помощи еще двух структур данных, дополняющих матрицу памяти и вектор использования. Первая называется вектором предшествования p t . Это вектор размера N, который должен представлять распределение вероятностей по ячейкам, так что каждое значение соответствует вероятности того, что соответствующая ячейка была последней, в которую производилась запись. Предшествование изначально задается равным нулю (p 0 = 0) и обновляется на следующих шагах:
Обновление происходит при первом умножении предыдущих значений предшествования на коэффициент, пропорциональный тому, что только что записано в память (определяется по сумме компонентов взвешивания записи). Затем значение взвешивания добавляется в значение после сброса, и ячейка с большим взвешиванием (та, в которую запись произведена только что) тоже получит высокое значение вектора предшествования.
Вторая структура данных, необходимая для записи временной информации, — матрица ссылок L t . Это матрица размером N x N , в которой элемент L t[i , j] имеет значение от 0 до 1 и показывает, насколько вероятно, что ячейка i была занята после j . На начальном этапе все значения обнулены, а диагональные элементы сохраняются на нулевом уровне в течение времени L t[i , i] = 0, поскольку бессмысленно фиксировать, что ячейка была записана после себя, когда предыдущие данные уже перезаписаны и утрачены. Все остальные элементы в матрице обновляются по такому принципу:
Уравнение создано по тому же шаблону, что и другие правила обновления. Сначала ссылочный элемент сбрасывается при помощи коэффициента, пропорционального уровню записи в ячейки i , j. Затем ссылка обновляется корреляцией (здесь представлена в виде умножения) между взвешиванием записи в ячейке i и предыдущим значением предшествования в j . Так устраняется третье ограничение NTM: мы можем фиксировать временную информацию независимо от того, как головка записи движется по памяти.
Понимание головки чтения DNC
Когда головка записи заканчивает обновлять матрицу памяти и соответствующие структуры данных, в игру вступает головка чтения. Ее задача проста: просматривать значения в памяти и проводить итерации вперед и назад по времени между данными. Возможность просмотра достигается простой адресацией по содержанию: для каждой головки записи i мы вычисляем промежуточное значение
, где
и
— два набора ключей чтения R и мощностей, полученных от контроллера по вектору интерфейса.
Чтобы получить итерации вперед и назад, нужно сделать так, чтобы взвешивания могли делать шаг вперед или назад из ячейки, откуда только что производилось чтение. Для движения вперед это достигается умножением матрицы ссылок на последние прочтенные взвешивания. Это сдвигает веса из последней прочтенной ячейки в ячейку из последней записи, указанной в матрице ссылок, и создает промежуточное переднее взвешивание для каждой головки считывания i :
. Точно так же создаем и промежуточное заднее взвешивание, умножая транспонированную матрицу ссылок на последние прочтенные взвешивания
. Теперь можно создать новые взвешивания для каждого чтения в соответствии со следующим правилом:
Читать дальше
Конец ознакомительного отрывка
Купить книгу