Два года назад, когда я впервые изучал статью «Преобразователь зрения» [1], мне было не очень ясно, как визуализируется модельное внимание. Сегодня, когда я в очередной раз посетил ViT, я попытался разобраться, как работает эта визуализация.

В основном я учился из хорошего блога [2] и иллюстративного блокнота Jupyter [3].

Для начала давайте суммируем некоторые основные свойства механизма визуализации внимания ViT:

  • единицей внимания является токен (патч изображения)
  • визуализация выполняется путем вычисления яркости 0–1 (т. е. веса внимания) для каждого токена.
  • внимание можно визуализировать для любой головы (внимание) на любом уровне

Основное задействованное вычисление — Attention Rollout [2], в котором поток внимания в ViT оценивается на следующих этапах:

  1. передать интересующее изображение в ViT и получить набор слоев внимания [A^l_h]_l,h, каждый слой l имеет hголовок внимания и каждый A^l_h представляет собой матрицу (N+1) на (N+1) (N — количество токенов исправления изображения + 1 токен CLS)
  2. агрегировать (можно сделать со средним, максимальным, минимальным...) вниманием над головами, чтобы [A^l_h] уменьшилось до [A^l]
  3. вычислить развертывание внимания (оценив поток внимания в сети ViT) на уровне l с помощью следующего итеративного уравнения:

5. Убираем 1-й столбец из A^l_{rollout} [обратите внимание, что форма этого столбца будет (N+1)], которая оценивает веса собственного внимания токена CLS до все токены в последовательности. Эти веса могут отражать общее внимание модели, поскольку представление токена CLS является тем, в соответствии с которым модель делает прогнозы для последующих задач.

6. Наконец, мы нормализуем веса внимания в диапазоне от 0 до 1, изменяем изображение обратно в исходную 2D-форму [не забудьте сначала убрать внимание маркера CLS] и используем эти веса как легкость изображения, чтобы указать внимание как своеобразная карта значимости.

Вот оно! Надеюсь, это будет полезно для понимания.

Вышеприведенный алгоритм четко закодирован в 4-м блоке блокнота [3] с наглядным примером (я очень ценю их работу. Это очень помогает мне в обучении).

Ссылка:

  1. [2010.11929] Изображение стоит 16x16 слов: преобразователи для распознавания изображений в масштабе (arxiv.org)
  2. Изучение объяснимости для Vision Transformers (jacobgil.github.io)
  3. ViT-pytorch/visualize_attention_map.ipynb на главной · jeonsworld/ViT-pytorch (github.com)