DIN, POSO, SENet рассказывают о внимании, обычно используемом в рекомендательных моделях
DIN, POSO, SENet рассказывают о внимании, обычно используемом в рекомендательных моделях

1. Предисловие

Говоря о структуре модели, я часто слышу, как студенты, дающие рекомендации, говорят:

«Здесь добавлено внимание к себе» "похоже на SENet" «Магически модифицированный ПОСО» «DIN – это внимание» ...

Прослушав эти распространенные модули и модели, я все еще немного их понимаю. Прочитав несколько статей Zhihu о моделях, я почувствовал, что все они выглядят одинаково. Чтобы четко понять эти модели, я развернул их. бумаги и прочитайте их еще раз. В этой статье в качестве примера будет использован выбор функций в системе рекомендаций, чтобы поговорить о том, как использовать эти модели в модульном порядке, и добавить некоторые из моих личных знаний. Если есть какие-либо ошибки, пожалуйста, поправьте меня. зона комментариев!

2. Пример рекомендательной системы

Давайте возьмем общий пример рекомендаций. Каждый, кто создает модели рекомендаций, должен быть знаком с ним. Самые простые данные обычно включают в себя два аспекта: характеристики пользователя и характеристики элемента. На следующем рисунке показан основной процесс. просто с точки зрения данных. Давайте поговорим о картинке ниже, которая в основном разделена на 4 части:

  1. Исходные данные. Вот наши самые оригинальные данные в строковой форме.
  2. Встраивание данных: путем хеширования исходных данных в ключи.,Создайте еще один словарь,одинkeyпереписыватьсяодининициализацияизdimвектор размерностей。Обратите внимание в это время,Такие характеристики, как [интерес],Так как есть 3 типа пользователей,Это необходимо встроить в 3 независимых вектора.,То есть «король», «музыка», По одному вектору для «Друзей».
  3. Агрегированные данные внедрения: при агрегировании обычно используется сумма Объединение (добавление соответствующих элементов), вы также можете использовать avg pooling(Возьмите среднее значение соответствующих элементов)。сделай этоПо умолчанию каждая функция одинаково важна.,Например, в [Интерес],«Музыка» и «Друзья» имеют одинаковый вес. Если в объекте есть только один ключ,Например, [возраст], [пол],После агрегирования изменений не происходит, если имеется несколько ключей;,Например [интерес],Это объединит вложения нескольких ключей.
  4. Входные данные MLPМодель: 5 векторов, полученных на предыдущем шаге, собираются в длинный вектор по принципу «голова к торцу».

С помощью вышеуказанной операции вы можете изменить: Возраст: 20.,пол:……данные конвертируются в Модельнеобходимыйtensor。В это время обычно(batchsize, feature_num, dim)форма:

  1. batchsizeразмер партии,Например 512;
  2. feature_numэто количество функций,На картинке выше это 5;
  3. dimэто каждыйодинособенностьиз Размеры,Например 16.

Почему мы должны так ясно объяснять ввод основных данных, потому что выбор функций POSO, SENet и DIN, которые будут обсуждаться позже, существенно изменен на этой основе. Эти модели (модули) описаны ниже.

3. SENet

Давайте сначала поговорим о SENet. Первоначально он был предложен в области CV. По оригинальным словам автора, цель модели:

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

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

  1. Н (высокий)、W(Ширина)следует заменить наdim
  2. C(Channel)следует заменить наfeature_num

В приведенном выше примере весь процесс выглядит следующим образом:

1. SENetТо есть исходные данные(batchsize, feature_num, dim)Характеристики сначала сжимаются в(batchsize, feature_num, 1)Тогда возьмите это сжатиеизособенность过одиндва этажаMLP,Наконец, используйте сигмоид для вывода,получатьодин(batchsize, feature_num, 1)вес формы。

2. Затем умножьте этот вес обратно на каждое агрегированное внедрение, чтобы получить новые агрегированные данные внедрения.

Если вы понимаете это по оригинальному тексту SENet,Вот как это должно быть обработано,Это нетрудно увидеть,Фактически, это датьfeature_numРазный вес для каждой функции。Потому что в Система рекомендацийсередина,feature_numможно сравнить сCVвнутриChannel。На самом деле, у меня здесь есть несколько вопросов.:

  1. Почему SENet сжимает в статье два измерения (В, Ш)?,Вышеописанный процесс сжимает толькоdim? Ответ: Потому что картинка имеет длину и ширину по сравнению с системой. У рекомендации есть еще одно измерение, поэтому родной SENet необходимо сжимать два измерения. А поскольку это двухмерное исходное сжатие текста, используется avg. В общем, в рекомендации есть только одно измерение, которое можно заменить плотным слоем.
  2. Зачем даватьfeature_numРазный вес для каждой функции,вместоdim?Нельзя ли придать разным весам разные элементы?? Ответ: Целью собственной SENet является «решение проблемы, заключающейся в том, что сверточные нейронные сети имеют плохие возможности моделирования функций, связанных с каналами, при обработке изображений».,Поэтому, если вы скопируете его, это дастfeature_numразные веса。Если его нужно разбить на разные элементыразные веса,То есть сжатый в(batchsize, 1, dim)форма,Сделайте взвешивание еще раз,Лично я считаю, что никакой проблемы нет. Это эквивалентно присвоению разного веса разным элементам. Конечно, если вы хотите придать ему форму сетки ворот, вы также можете,Это поколение(batchsize, feature_num, dim)изtensorСделайте взвешивание еще раз。
  3. Поскольку она только взвешивается, а не суммируется, теоретически возможно ли узнать эту информацию в MLP. Будет ли это лишним? Ответ: Теоретически эту информацию о весе действительно можно узнать в MLP. Как и в случае с теоремой об универсальной аппроксимации, нельзя сказать, что MLP теоретически может все, поэтому я просто использую MLP и ничего больше. В конце концов, в случае ограниченных данных искусственное добавление некоторых сложных структур Модели к предыдущей может помочь Модели лучше подойти. Так что не лишним будет это сделать. Надо попробовать, чтобы посмотреть, есть ли эффект. Не исключено, что в некоторых сценариях разницы между добавлением и не добавлением (головы собаки) не будет.

наконецПодвести итогодин раз,Стили SENet можно добавить в любую сеть.,Если вы хотите присвоить разный вес разным элементам в определенном измерении.。стоит отметитьиз Это здесьТолько взвешивание, без суммирования。А какой размер выбрать?(feature_numвсе ещеdim)Внизиз Элементам присваивается разный вес,Выбирайте, исходя из конкретного понимания бизнеса.

4. DIN

DIN — это модель, построенная Alibaba на основе характеристик поведения пользователей. То есть, когда последовательность действий пользователя (например, последовательность кликов) имеет несколько идентификаторов элементов, если для агрегирования используется объединение сумм напрямую, веса этих нажатых элементов будут одинаковыми по умолчанию. По аналогии с рисунком в главе 2 мы можем видеть, что когда область объектов (например, [Интерес]) имеет несколько функций, традиционным подходом является объединение сумм или объединение средних значений. Таким образом, веса этих функций по умолчанию будут одинаковыми. DIN нацелен на решение этой проблемы и считает, что разные функции должны иметь разные веса, и этот вес является интересом пользователя.

Поэтому, применяя DIN к нашему примеру, процесс выглядит следующим образом:

  1. Выберите домен объекта с несколькими функциями,Например [интерес],Выберите объект, который соответствует ему или связан с ним.,например【Тип элемента】。Тогда воспользуйтесь игройизembedding(batchsize, 1, dim),и каждыйодининтересизembedding(batchsize, 3, dim)Входить“блок активации”получатьодинвесовое значение(batchsize, 3, 1),Представляет вес внимания. А что такое «блок активации»?,Вы можете обратиться к документам DIN,Это небольшая закрытая сеть,Конечно, здесь идея открыта. Вы можете попробовать различные способы реализации блока активации.,Структура статьи также не определена.

2. Затем замените предыдущую сумму полученным весом. Объединение в пул заменяется взвешенным суммированием для создания агрегированного внедрения, которое возвращается во всю структуру, как показано на рисунке ниже. Если выразить это в терминах арифметики, это, вероятно, будет так: a+b+cповышен до(0.7×a)+(0.05×b)+(0.25×c) Напротив, последний, очевидно, более элегантен, и эти веса автоматически рассчитываются моделью.

наконецПодвести итогодин раз,Кратко поговорив о структуре DIN, можно найти,По сравнению с SENet,Внимание DIN действует на слое «Внедрение данных».,На картинке это второй слой снизу вверх. Итак, с точки зрения понимания бизнеса,Внимание DIN не занимается «выбором функций».,Это небольшое обновление для объединения сумм.,让особенность表达изболее точный。вотвзвешивание, суммированиеиз。

5. POSO

Наконец, давайте поговорим о структуре POSO. По сравнению с двумя предыдущими, POSO, возможно, менее известна. «ПОСО: Personalized Cold Start Modules for Large-scale Recommender Systems》,Это документ, предложенный Куайшоу в 2021 году.,В основном это улучшение, предложенное на уровне модели для решения проблемы переполнения функций при холодном запуске. Возьмите MLP в качестве примера.,нравитьсяMLPиз Размеры512 * 256 * 256из。Мгновенный выбородин Люди думают, что это важнееизособенностьx^{pc}генерировать512、256、256три разныхиз Умножить на вес ВходитьMLPвнутри сети。

Если в нашем примере,Примерно так, как показано ниже,нравитьсяMLPиз Размеры512 * 256 * 128из。Выбиратьодин Я думаю, это важнееизособенность,Например [интерес]какx^{pc},Затем используйте 3 вентильные сети для создания 3 тензоров.,Они есть(batchsize, 512, 1)(batchsize, 256, 1)(batchsize, 128, 1)。здесьиз Закрытая сеть может бытьMLP+sigmoidформа。Конечно, вы также можете использовать свои собственные магические модификации.。наконец将получатьизтриtensorпутем умноженияформабрать ВходитьMLPВнутри сети,Добиться внимания на разных нейронах.

наконецПодвести итогодин раз,Хотя ПОСО вроде как уделяет внимание,Но он действует на нейроны,Он отличается от двух предыдущих. POSO — это не просто выбор функций.,Это стратегия улучшения функций. Итак, пока вы считаете, что определенная функция важна,Просто вытащите его и выровняйте.,Возможно, будет улучшение~

6. Резюме

Все три вышеупомянутые модельные структуры используют идеи, схожие с вниманием, так что же такое внимание? Цитируем исходный текст SENet:

В широком смысле внимание можно рассматривать как инструмент смещения распределения доступных ресурсов обработки в сторону наиболее информативных компонентов входного сигнала. Распределение смещено в сторону компонента с наибольшим объемом информации входного сигнала).

Моё личное понимание — «использовать всё наилучшим образом». В Интернете можно найти множество поговорок. Например, распространена поговорка, что «внимание» — это на профессиональном жаргоне слово «взвешенная сумма». Неплохо понимать это именно так. Что касается того, как это сказать и как это сделать, и научные круги, и промышленность, как правило, ориентированы на результат, а хорошие результаты – это путь к достижению!

Ссылки

SENet:http://dx.doi.org/10.1109/tpami.2019.2913372

DIN:http://dx.doi.org/10.1145/3219819.3219823

POSO:https://readpaper.com/paper/3190143440

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose