LambdaNetworks опережают внимание и CNN. Будет ли это работать с небольшими и низкоразмерными наборами данных?

Мы представляем реализацию и результаты нашего воспроизведения LambdaNetworks, новой архитектуры машинного обучения, разработанной в Google Brain Ирваном Белло, с меньшим и более низкоразмерным набором данных CIFAR-10.

Авторами этого проекта воспроизводимости являются Хосе Игнасио де Альвеар Карденас и Уэсли А.Дж.Г. de Vries , студенты магистратуры по аэрокосмической инженерии Делфтского технологического университета. Исходный код нашей реализации LambdaNetworks можно найти в GitHub. У нас также есть плакат, который резюмирует эту статью здесь. Если вас интересуют другие репродукции студентов Делфтского технического университета, вы можете найти их по этой ссылке.

Эта статья построена следующим образом:

  1. "Введение"
  2. Существующие бумажные обзоры и проекты воспроизводимости LambdaNetworks
  3. Цели этого проекта воспроизводимости
  4. Почему лямбда-слои?
  5. Объяснение LambdaNetworks
    5.1 Лямбда содержимого
    5.2 Лямбда положения
    5.3 Лямбда-выражения, применяемые к запросам
    5.4 Уровень лямбда-выражения с несколькими запросами
  6. Ограничения, набор данных и параметры
    6.1 Ограничения
    6.2 Набор данных
    6.3 Параметры
  7. Детали реализации: ResNet-50
    7.1 Предварительная обработка данных
    7.2 Подготовка модели
    7.3 Обучение и тестирование
  8. Детали реализации: LambdaNetworks
    8.1 Реализация одного лямбда-слоя
    8.2 Интеграция лямбда-слоя в ResNet-50
  9. Результаты
    9.1 Точность и сложность модели
    9.2 Время обучения и пропускная способность
    9.3 Анализ чувствительности скорости обучения
  10. "Вывод"
  11. Рекомендации
  12. Взгляд авторов на статью Lambda Networks

"Использованная литература"

1. Введение

Ирван Белло предлагает в LambdaNetworks: Моделирование дальнодействующих взаимодействий без внимания [1] метод, в котором дальнодействующие взаимодействия моделируются слоями, которые преобразуют контексты в линейные функции, называемые лямбда-выражениями, чтобы избегайте использования карт внимания. Большим преимуществом лямбда-слоев является то, что они требуют гораздо меньше вычислений, чем механизмы самовнимания, согласно оригинальной статье Белло. Это фантастика, потому что это не только быстрее дает результаты, но также экономит деньги и снижает выбросы углекислого газа! Однако Bello по-прежнему использует 32 TPUv3 и набор данных классификации ImageNet размером 200 ГБ. Поэтому мы начали этот проект воспроизводимости, задаваясь вопросом: можно ли масштабировать лямбда-слои на обычные компьютеры, сохраняя при этом их привлекательные свойства?

В 2021 году мир не только столкнулся с эпидемией COVID-19, но и столкнулся с нехваткой микросхем из-за увеличения объемов бытовой электроники для работы дома, закрытия заводов в Китае и роста цен на криптовалюты. Это снизило предложение до рекордно низкого уровня, а цены - до рекордного максимума. В результате возникает ситуация, когда исследователи, преподаватели и студенты (которые обычно имеют ограниченный бюджет) больше не могут быстро создавать кластер из COTS (готовых коммерческих) графических процессоров, что приводит к необходимости иметь дело со старыми, меньше и менее эффективное оборудование.

Во время запуска проекта в марте 2021 года официальный код не был выпущен. Поэтому, чтобы ответить на вышеупомянутый вопрос, мы должны воспроизвести статью Белло как можно точнее, пытаясь уменьшить ее масштаб так, чтобы она может работать на обычном потребительском компьютере. Созданный код становится общедоступным.

2. Существующие бумажные обзоры и проекты воспроизводимости LambdaNetworks

Статья Белло была опубликована 2 февраля 2021 года и на момент написания статьи была процитирована 7 раз. Это означает, что статья совершенно новая и, следовательно, еще не изучена академическим сообществом.

Однако некоторые исследователи и члены сообщества машинного обучения уже прочитали статью и предоставили обзор статьи.

  • Янник Килчер опубликовал LambdaNetworks: Моделирование долгосрочных взаимодействий без внимания (Paper Explained) на YouTube за 4 месяца до публикации статьи Белло. Килчер просматривает предварительную версию статьи, объясняет ее слушателям и дает рекомендации автору.
  • Карлос Ледезма опубликовал видео в духе Килчера, но ему требуется больше времени, чтобы подробно прояснить различие между структурой слоя внимания и слоя лямбда.
  • Myeongjun Kim не только воспроизвел код лямбда-слоя, но этот член сообщества также применил его к различным версиям ResNet и различным наборам данных, а также провел исследование абляции. Код вышеупомянутых специалистов по данным не используется для генерации нашего кода. Однако мы кратко сравним наш код с их кодом, чтобы понять, почему они сделали конкретный выбор для своих реализаций и оправдать наш.
  • Phil Wang опубликовал неофициальный код, использующий Pytorch для лямбда-слоя.

К счастью, Белло пояснил, что вскоре он опубликует код, соответствующий статье LambdaNetworks. Это, скорее всего, улучшит понимание всеми LambdaNetworks.

3. Цели этого проекта воспроизводимости

Первоначально научная цель этой статьи состояла в том, чтобы воспроизвести два конкретных результата из Таблицы 3 статьи Белло, которые можно увидеть ниже. Это результаты Conv (He et al., 2016) и Lambda layer. Это было установлено для того, чтобы выяснить, сможем ли мы воспроизвести это без предыдущих реализаций кода.

Однако воспроизведение этих результатов один к одному невозможно для среднего студента и исследователя из-за большого набора данных, использованного Белло в его исследовании, а именно ImageNet, и вычислительных ресурсов, которые он использовал для получения этих результатов в разумные сроки. , а именно 8–128 TPUv3; ресурсы, выходящие за рамки того, что мы, студенты, имеем в своем распоряжении. Поэтому прицел был немного смещен. Целью больше не было точно воспроизвести вышеупомянутые результаты без опубликованного кода, а скорее выяснить, достижимы ли эти результаты и с гораздо меньшим набором данных.

Персональная цель этого проекта воспроизводимости двояка. Во-первых, внимание, похоже, на данный момент находится на самом высоком уровне, и в настоящее время ведется много исследований. Однако следует обратить внимание на некоторые недостатки, которые лямбда-слои стремятся исправить, в то же время немного увеличивая точность. Следовательно, воспроизведение лямбда-слоев может способствовать раннему принятию этого потенциально превосходного алгоритма сообществом в будущем. Кроме того, его реализация на меньшем и меньшем наборе данных доказывает надежность алгоритма, а также его потенциальную реализацию на устройствах с ограниченными ресурсами (TinyML).

Вторая причина - усиление и расширение знаний и навыков в области глубокого обучения авторов представленного здесь проекта воспроизводимости, который является частью курса глубокого обучения в Делфтском технологическом университете, преподаваемого Dr. Ян ван Гемерт . Чтобы прочувствовать глубокое обучение, важно не только читать огромное количество онлайн-ресурсов, но и иметь практический опыт работы с некоторыми новаторскими статьями. После прочтения хорошо принятой статьи под названием Внимание - все, что вам нужно [2] мы были взволнованы целым рядом статей, которые могли быть дополнены. Говоря абстрактно, лямбда-слои обещали стать большим шагом вперед по сравнению с Transformers, направленным на множественные слабые места и приводящим к большей производительности и меньшей вычислительной нагрузке. Стремясь узнать больше о внимании и восхищенных потенциалом лямбда-слоев, выбор этого проекта воспроизводимости был для нас очевидным.

4. Почему лямбда-слои?

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

Как говорит сам Белло в своей статье [1]: «Мы предлагаем лямбда-слои, которые моделируют дальнодействующие взаимодействия между запросом и структурированным набором элементов контекста при меньших затратах памяти. Слои лямбда преобразуют каждый доступный контекст в линейную функцию, называемую лямбда, которая затем напрямую применяется к соответствующему запросу ».

Механизмы линейного внимания [3] предложили решение проблемы высокого использования памяти. Однако эти методы не фиксируют позиционную информацию между элементами запроса и контекста (например, где пиксели находятся на изображении). Слои лямбда, напротив, имеют низкое использование памяти и информацию о местоположении. Последнее даже приводит к повышению производительности, так что он превосходит свертки с линейным вниманием и локальным относительным самовниманием в наборе данных ImageNet.

5. Объяснение LambdaNetworks

Основное преимущество LambdaNetworks перед трансформаторами заключается в том, что взаимодействия на основе содержимого и позиции между всеми компонентами контекста, которые могут быть выбраны как глобальные или локальные, вычисляются без создания дорогостоящих карт внимания с интенсивным использованием памяти. Для этого лямбда-слои состоят из 3 основных шагов:

  1. Лямбда содержимого вычисления, которая инкапсулирует содержимое контекста.
  2. Вычисление лямбда-выражения положения, которое инкапсулирует информацию об относительном положении между запросом и элементами контекста.
  3. Применение лямбда-выражений содержимого и положения к запросам для вычисления вывода.

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

5.1 Содержимое лямбда

Для вычисления лямбда содержимого используется глобальный контекст. В случае одного квадратного изображения глобальный контекст состоит из всех пикселей. Следовательно, если форма изображения - d × n × n, где n - количество пикселей по ширине и длине изображения, а d - размеры изображения (3 в случае цветного изображения), то контекст имеет форму | n | × d, где | n | = n². Вычислительный граф может ввести в заблуждение при понимании размеров контекста, поскольку он показывает, что он имеет форму | m | × d. В отличие от лямбда-выражений содержимого, в позиционных лямбдах используются локальные контексты, и автор решил выразить размеры, необходимые для вычисления последнего. На самом деле лямбды содержимого сначала вычисляются с глобальным контекстом, а затем позиционные лямбды вычисляются с локальными контекстами. К сожалению, это последовательное вычисление лямбда-выражений и различных размерностей матриц четко не отражено в вычислительном графе.

Из глобального контекста значения и ключи вычисляются как:

Затем ключи нормализуются с помощью softmax по | m | размер, тогда как значения нормализованы по партии. Наконец, лямбда содержимого получается из матричного умножения нормализованных значений и ключей.

Преимущество этого подхода заключается в том, что лямбда содержимого кодирует, как преобразовывать запросы, основываясь исключительно на содержимом контекста, независимо от каждого запроса. В результате лямбда содержимого распределяется между всеми запросами / пикселями изображения.

5.2 Положение лямбда

Для вычисления лямбда содержимого пользователь может выбрать, использовать ли локальные контексты размера | m | × d или глобальный контекст, задав | m | равно | n |. В целях этого проекта воспроизводимости глобальный контекст используется для вычисления лямбда положения из-за низкого | n | значение входов, подаваемых в слои лямбда, а именно | n | ⊂ [8, 4, 2, 1]. Этот небольшой входной размер вызван используемым набором данных, а именно CIFAR-10, изображения которого в 6 раз меньше, чем ImageNet. С этим сокращенным набором данных потенциальное ускорение, полученное от вычисления лямбда-выражений положения из меньших контекстов, незначительно по сравнению с дополнительными вычислениями, необходимыми для извлечения локального контекста из входных данных.

Как можно заметить далее, лямбда-выражения позиций являются результатом произведения между матрицей значений и вложениями позиций. Последние представляют собой n изученных матриц | m | × k, которые инкапсулируют позиционное отношение между каждым из n запросов с контекстом. В результате вложения представляют собой блок | n | × | m | × k, который генерирует n позиционных лямбда-выражений.

Благодаря разделению содержимого и позиционной информации можно совместно использовать вложения позиций между лямбда-слоями, которые получают одинаковый размер входных данных, что приводит к меньшему объему памяти. Лямбда-выражения положения кодируют, как запросы должны быть преобразованы, исключительно на основе их относительного положения по отношению к каждому из компонентов его контекста.

5.3 Лямбды, применяемые к запросам

После вычисления лямбда-выражений содержимого и положения можно вычислить окончательные лямбда-матрицы, которые будут применяться к запросам, суммируя оба компонента.

Кроме того, запросы вычисляются аналогично ключам и значениям, а именно путем применения матрицы линейной проекции к входным данным.

После того, как запросы и соответствующие лямбда-выражения вычислены, лямбда-выражения преобразуют запросы к выходным данным путем простого матричного умножения между вычисленным лямбда-выражением и запросом, сгенерированным для каждого пикселя; каждая строка в матрице Q.

5.4 Уровень лямбда с несколькими запросами

В статье LambdaNetworks [1] было замечено, что уменьшение размерности значения | v | может значительно снизить вычислительные затраты, а также сложность пространства и времени. Поэтому автор решает отделить эти сложности от этого измерения, произвольно манипулируя его значением.

Для этого он предлагает использовать | h | запросы для каждого (пиксельного) ввода, к которому применяется одна и та же лямбда. Тогда выход для одиночного (пиксельного) входа является результатом конкатенации каждого из h выходов:

Следовательно, | v | теперь равно d / | h |, что снижает сложность в | h | раз. Это уменьшение размерности значений автор назвал лямбда-слоями с несколькими запросами. Важно отметить, что существует компромисс между размером лямбд:

, и размер запросов:

6. Ограничения, набор данных и параметры

В этом разделе мы объясним, как ограничения в вычислениях приводят к использованию другого набора данных и как и почему некоторые параметры были скорректированы из исходной статьи Белло. Однако мы хотели бы подчеркнуть, что большинство параметров остаются такими же, как и те, которые использует Bello для справедливого сравнения.

6.1 Ограничения

Есть некоторые вычислительные ограничения по сравнению с установкой Белло. Белло, как исследователь Google, смог использовать 32 модуля TPUv3 в своем исследовательском проекте с набором данных классификации ImageNet. К сожалению, в нашем распоряжении нет этого компьютера. TU Delft был достаточно любезен, чтобы предоставить нам кредит Google Cloud на 50 евро. Однако 50 евро, скорее всего, было бы недостаточно, чтобы несколько раз обучить архитектуру с помощью ImageNet размером 200 ГБ. ImageNet состоит из 130 миллионов отфильтрованных и сбалансированных изображений JFT с псевдометками, сгенерированных EfficientNet-L2 с точностью 88,4%, согласно набору, используемому Bello. Поэтому был выбран другой набор данных, а именно CIFAR-10.

Данные были обучены и протестированы на Google Colab и на высокопроизводительном ноутбуке с посредственной видеокартой из 2020 года. Локальный ноутбук предоставил сопоставимые результаты в качестве проверки работоспособности, поскольку доступность компонентов фиксирована, тогда как Colab выделяет различные ресурсы для клиент в зависимости от их доступности на момент запуска.

Первичной средой был Google Colab. Он широко доступен бесплатно и поэтому считается наиболее подходящим кандидатом для этого проекта. В этой среде ресурсы не гарантированы, так как они распределяются между пользователями платформы, и поэтому трудно сказать, будут ли полученные результаты согласованными с точки зрения времени работы. Это связано с тем, что между Nvidia K80, T4, P4 и P100 может меняться не только объем оперативной памяти, но и доступный тип графического процессора. Алгоритм определяет в каждом конкретном случае, сколько оперативной памяти, скорее всего, будет использоваться, и выделяет больше для тяжелых пользователей, до 12 ГБ. Максимально допустимое время сеанса - 12 часов. Для целей этого проекта ключевым моментом было то, что выделенные ресурсы не менялись в течение сеанса, что делает результаты межсессионного периода надежными для сравнения.

Вторичная обучающая среда состояла из ноутбука с процессором Intel i7–10750H на стандартной скорости с адекватным охлаждением, Nvidia Quadro T1000 Max-Q 4 ГБ DDR5 (стандартная скорость) и 16 ГБ оперативной памяти DDR4 в однослотовой конфигурации при стандартной скорости 2400 МГц. Благодаря тому, что это работает полностью независимо, все результаты воспроизводимы.

6.2 Набор данных

Было решено использовать меньший набор данных, а именно CIFAR-10.
Это набор данных с 60 000 цветных изображений 32x32 в 10 классах, по 6 000 изображений на класс, разделенных на соотношение поезд-тест 5: 1. Пример того, как выглядят эти изображения, можно найти ниже.

6.3 Параметры

Чтобы выяснить, как автор статьи точно собрал результаты, важно взглянуть на начальные условия и гиперпараметры, которые использовались для получения результатов. Затем мы составляем список всех наиболее важных используемых параметров с соответствующими определениями и значениями. Они разделены на три таблицы:

Первая таблица содержит параметры, которые пользователь может легко изменить. Все они находятся в user_input.py в нашем коде. Эти параметры включают, среди прочего, размер пакета, размер ввода и начальную скорость обучения.

Вторая таблица содержит другие параметры, используемые в реализации ResNet-50 и лямбда-слоя. Они определены в lambda_layer.py, resnet.py и resnet \ _lambda. ру.

В третьей таблице содержится дополнительная информация о реализации алгоритмов. Для получения дополнительной информации мы хотели бы отослать читателя к документации в коде.

7. Детали реализации: ResNet-50

Для базовой реализации мы использовали вариант, предоставленный командой Pytorch. Далее мы объясним этапы предварительной обработки данных, подготовку модели и кратко обсудим этапы обучения и тестирования.

7.1 Предварительная обработка данных

Перед тем, как данные могут быть переданы в алгоритмы, они проходят предварительную обработку. Здесь данные сначала загружаются, дополняются и нормализуются. Для этого исходные изображения случайным образом обрезаются с сохранением исходного размера путем заполнения всех сторон изображения четырьмя черными пикселями. Кроме того, изображения случайным образом переворачиваются с вероятностью 50% и нормализуются со средними значениями [0,4914, 0,4822, 0,4465] и дисперсиями [0,2023, 0,1994, 0.2010]; значения, которые соответствуют средним и дисперсиям данных CIFAR-10 по каждому из трех измерений изображения. Преобразование для набора обучающих данных можно увидеть в следующем фрагменте кода.

После этого обучающие и тестовые данные поступают в итераторы (DataLoader), и для визуальной проверки строится образец обучающих изображений.

7.2 Подготовка модели

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

Для определения функции или критерия потерь автор статьи LambdaNetworks упоминает, что использовалось сглаживание меток со значением сглаживания 0,1. Однако по умолчанию в выбранной реализации архитектуры ResNet-50 этого найти не удалось. В результате пришлось реализовать сглаживание этикеток, представленное Кристианом Сегеди в статье Переосмысление начальной архитектуры компьютерного зрения [5]. Для этого мы скорректировали сглаживание меток, предложенное Suvojit Manna, что привело к окончательной компактной форме, показанной в фрагменте кода ниже. Как можно видеть, потери, применяемые до сглаживания меток, являются кросс-энтропийными с активациями log softmax.

Кроме того, оптимизатор Adam использовался с гиперпараметрами (уменьшение веса, начальная скорость обучения и т. Д.), Представленными в Разделе параметров. Планировщик скорости обучения основан на комбинации линейного и косинусного планировщиков скорости обучения.

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

7.3 Обучение и тестирование

После определения модели и предварительной обработки данных обучение и тестирование выполнялись одновременно в течение 90 эпох на Nvidia Quadro T1000 max-Q 4GB DDR5. В ходе этого процесса были реализованы две меры, чтобы гарантировать беспрепятственный анализ и сравнение результатов. Во-первых, точность обучения и тестирования, потери и время вычислений, а также скорость обучения для каждой эпохи сохраняются в текстовых файлах журнала для последующего анализа. Кроме того, информация о точности и потерях сохраняется, так что ее можно отобразить в Tensorboard.

8. Подробности реализации: LambdaNetworks.

8.1 Реализация одного уровня лямбда

Несмотря на то, что в документе представлены некоторые фрагменты кода, предполагается, что ключи, значения и запросы уже вычислены, инициализация параметров уровня не предусмотрена и неясно, как определяются вложения позиций. Для реализации уровня лямбда и его последующей плавной интеграции в архитектуру ResNet-50 был создан класс с тремя основными методами:

__init__: метод инициализации, который принимает в качестве входных данных размер ввода (| n |), размер контекста (| m |), размер значения (| v |), размер вывода (d), количество голов (h) и позиции встраивания (E). Вложения позиций не создаются внутри класса, поэтому их можно легко разделить между несколькими уровнями. Вне класса вложения создаются и передаются в качестве входных данных различным слоям лямбда. Создание экземпляров встраиваемых позиций и их инициализация вне лямбда-слоя определяется следующим образом:

Для вычисления ключей, значений и запросов применяются одиночные линейные преобразования без предвзятости. В случае запросов результат линейного преобразования будет иметь размер | n | × (kh), как описано в разделе Мультизапросы. Эти преобразования можно наблюдать в следующем коде:

Кроме того, для значений и запросов создаются экземпляры одномерных уровней пакетной нормализации, а также функция softmax для ключей:

Эта функция заканчивается вызовом метода «reset_params», который объясняется далее.

reset_params: инициализирует изученные матрицы уровня лямбда, а именно матрицы проекции ключа, значения и запроса с теми же нормальными распределениями, которые упоминались в документе. Встраиваемые позиции инициализируются за пределами лямбда-слоя, как упоминалось ранее.

forward: функция, которая запускается во время прямого распространения нейронной сети. Во-первых, поскольку лямбда-слой требует сжатия высоты и ширины входного изображения до одного измерения, а именно | n |, входной x изменяется следующим образом:

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

Следующим шагом является вычисление ключей, запросов и значений с использованием линейных преобразований и нормализаций, определенных в __init__:

Наконец, лямбда-выражения и выходы вычисляются с помощью функции torch.einsum и в соответствии с уравнениями, приведенными в разделе Объяснение LambdaNetworks. Выходные данные меняют форму в конце так, чтобы они имели то же количество измерений, что и входные данные, подаваемые в слой лямбда.

Как можно заметить, все вычисления, необходимые для воспроизведения лямбда-слоя, можно сжать менее чем за 20 строк кода.

8.2 Интеграция уровня лямбда в ResNet-50

При чтении оригинальной статьи ResNet от Facebook AI Research [6] были предложены разные архитектуры, основным отличием которых было количество слоев. Как видно из первого столбца, архитектуры ResNet содержат 5 блоков (conv1, conv2_x, conv3_x, conv4_x и conv5_x), которые в статье LambdaNetworks называются этапами cx.

В статье LambdaNetworks [1] указано, что (негибридные) LambdaResNets получаются заменой сверток 3x3 в блоках узких мест, а именно conv2_x, conv3_x , conv4_x и conv5_x архитектур ResNet по слоям лямбда. Следовательно, основное изменение в исходной архитектуре ResNet-50 можно найти в определении слоев узких мест, а также в инициализации ResNet, где инициализируются вложения позиций.

Следующие два фрагмента кода показывают часть исходной инициализации уровня узких мест ResNet-50 и соответствующие строки кода в ResNet-50 со встроенными слоями лямбда. Он ясно показывает, как слои CNN 3 × 3 заменяются лямбда-слоями, в то время как остальная часть кода остается неизменной.

Более того, как видно из архитектуры лямбда-слоя, выходные данные лямбда-слоя имеют те же размеры, что и его входные данные. Однако в исходной архитектуре ResNet-50 некоторые из слоев CNN 3 × 3 уменьшили размер входного изображения, используя шаг больше 1. Чтобы установить справедливое сравнение между базовой линией и реализацией уровня лямбда, изображения также должны быть уменьшены в реализации уровня лямбда на тех этапах архитектуры ResNet-50, где исходные 3 × 3 слоя CNN использовали шаг больше 1. Для этой цели на этих этапах сети используется средний 2D-пул. слой вводится с размером ядра 3 × 3, заполнением (1, 1) и соответствующим шагом. Преимущество уровня объединения по сравнению со сверткой 1 × 1 состоит в том, что сеть не требует изучения дополнительных параметров.

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

Наконец, на следующем рисунке показана текущая архитектура слоя в узком месте ResNet-50 без лямбда-слоев и с ними. В представленном сценарии шаг, используемый слоем, равен 2. В исходной ResNet-50 уже существовал блок понижающей дискретизации, состоящий из сверток 1 × 1, который применялся к остаточному соединению и увеличивал размеры входных данных слоя узкого места. чтобы соответствовать его выходу. Теперь вышеупомянутый блок понижающей дискретизации среднего пула добавляется в конец слоя узких мест. Реализация этой понижающей дискретизации приводит к уменьшению требуемой оперативной памяти графического процессора с 5 ГБ до 2 ГБ.

9. Результаты

Основными претензиями оригинальной статьи о лямбда-слоях являются их превосходная производительность и более высокая вычислительная эффективность по сравнению с их сверточными и внимательными аналогами. Поэтому в следующих двух разделах сравнивается точность исходного ResNet-50 с его модифицированной версией с лямбда-слоями, а также требуемое время вычислений для обучения и пропускная способность, соответственно. Затем в третьем разделе представлен краткий анализ чувствительности, выполненный на начальной скорости обучения, чтобы настроить этот гиперпараметр на новую комбинацию архитектуры и набора данных.

Все результаты были получены с параметрами и значениями, определенными ранее, за исключением того, что использованная начальная скорость обучения составляла 0,0005; как выяснилось, что это лучший выбор.

9.1 Точность и сложность модели

Следующие два графика представляют точность и потерю разделения обучающих и тестовых данных для ResNet-50 и его модифицированной версии лямбда-слоя в зависимости от количества эпох. Он показывает точность наивысшего уровня, то есть процент точек данных, для которых их высший класс (класс с наибольшей вероятностью после softmax) совпадает с их соответствующими целевыми значениями. Как можно заметить, показатели точности обучения и тестирования ResNet-50 выше, чем у версии с лямбда-слоями. В случае набора тестовых данных он на 3,2% выше. В результате при обучении на наборе данных более низкой размерности как CIFAR-10 лямбда-слои не превосходят сверточные аналоги; однако они по-прежнему достигают конкурентоспособных результатов.

В исходном наборе данных ImageNet Bello сообщает о точности базовой линии свертки 76,9%, тогда как версия с лямбда-слоями достигает точности 78,4%. По сравнению с результатами, полученными в наборе данных CIFAR-10, соотношение между обеими архитектурами было обратным. Кроме того, было замечено, что точность обеих архитектур увеличивается на CIFAR-10. Это наблюдение указывает на меньшую сложность классификации изображения по 10 классам вместо 1000.

Наконец, Белло сообщил, что базовая модель и модель лямбда-слоя имеют 25,6 млн и 15 млн обучаемых параметров соответственно. В нашем случае у них 23,5 млн и 12,8 млн соответственно. Поскольку в обеих моделях отсутствует примерно одинаковое количество параметров, а именно 2M, мы предполагаем, что недостающие параметры взяты из заимствованной реализации ResNet-50, а не из нашей реализации лямбда-уровня.

9.2 Время обучения и производительность

Графики точности и потерь также показывают время обучения каждой модели. Для ResNet-50 это было 1 час 17 минут 29 секунд, в результате чего среднее время составляло 51,6 секунды за эпоху. Для ResNet-50 с реализованным лямбда-слоем общее время выполнения составило 1 час 3 минуты 6 секунд, что дает 42,1 секунды на эпоху. Следовательно, может показаться, что время обучения и тестирования ResNet-50 примерно на 18,5% больше при увеличении точности всего на 3,2%, и что реализация лямбда-слоев окупается. Однако доступ не только к окончательному результату, полученному в эпоху 90, но и к промежуточным результатам. Можно видеть, что максимальная точность теста ResNet-50 с лямбда-слоем в эпоху 90 уже достигнута примерно в эпоху 41 для базового ResNet-50. В этом случае эпоха 41 для базовой линии ResNet-50 соответствует примерно 35 минутам и 20 секундам и, следовательно, почти в два раза быстрее, чем ее эквивалент со слоями лямбда.

При сравнении результатов пропускной способности разных архитектур необходимо, чтобы они выполнялись на одной платформе. Учитывая, что Белло запускал свои алгоритмы на нескольких TPUv3, невозможно сравнить результаты производительности этого проекта воспроизводимости с результатами Белло. Однако можно сравнить пропускную способность между базовой версией и версией лямбда-уровня на CIFAR-10. В случае базовой линии период обучения занимает в среднем 50,92 с. Учитывая, что существует 50 000 обучающих выборок, пропускная способность базовой линии составляет 981,93 ex / s. В случае лямбда-слоев период обучения занимает примерно 38,96 с. В результате модель уровня лямбда имеет пропускную способность 1283,26 ex / s. Из этих значений можно увидеть, что уровень лямбда имеет более высокую пропускную способность, чем сверточный аналог, а именно на 31% выше.

9.3 Анализ чувствительности скорости обучения

Наконец, чтобы определить хорошую скорость обучения для комбинаций архитектуры и набора данных, предложенных в этом проекте воспроизводимости, была изменена начальная скорость обучения (initial_lr); однако планировщик скорости обучения оставался неизменным. В результате скорость обучения первых 5 эпох определяется как [initial_lr, 2 ⋅ initial_lr, 3 ⋅ initial_lr, 4 ⋅ initial_lr, 5 ⋅ initial_lr ] и увеличивается, тогда как скорость обучения более поздних эпох следует косинусному планировщику и уменьшается.

Точность тестов Top-1 была получена для базовой и лямбда-моделей для следующих начальных скоростей обучения: 0,01, 0,005, 0,001, 0,0005 и 0,0001. Наивысшая скорость обучения (0,01) была получена с использованием формулы, предложенной Белло, а именно initial_lr = 0,1 ⋅ B / (256 5), где B в качестве размера нашей партии 128 образцов. Остальные скорости обучения были получены путем последовательного уменьшения вдвое предварительно вычисленной максимальной скорости обучения. Максимальную точность можно наблюдать при 0,0005 для базовой линии и варианта лямбда-слоя. Результаты можно увидеть на следующем рисунке.

10. Заключение

LambdaNetworks обещает превосходную производительность по сравнению со сверточными альтернативами и альтернативами внимания, а также меньший объем памяти и существенное ускорение во время обучения и вывода. Более высокая точность в основном объясняется комбинацией извлеченных взаимодействий на основе позиции и контекста, тогда как меньшее использование памяти и более высокая скорость достигаются за счет обхода карт внимания, интенсивно использующих память, обмена контекстной информацией между элементами пакета и совместного использования размещать вложения среди лямбда-слоев. В исходной статье Белло подтверждает все эти утверждения, обучая ImageNet ResNet-50 с лямбда-слоями в обмен на его стандартные свертки 3 × 3. Такой выбор набора данных препятствует воспроизводимости статьи, поскольку автор использует 32 TPUv3 для обучения, ресурс, недоступный для большинства студентов и исследователей. Поэтому в представленной здесь работе оценивалась точность и скорость лямбда-слоев путем обучения на наборе данных более низкой размерности, а именно CIFAR-10. Для этого мы не только резюмировали исходный документ о LambdaNetworks и представили нашу реализацию, но также обсудили те аспекты, которые мы считали неоднозначными для понимания или воспроизведения.

Из проекта воспроизводимости можно выделить 4 основных вывода:

  1. При обучении на наборе данных более низкой размерности как CIFAR-10 лямбда-слои не превосходят сверточные аналоги; однако они по-прежнему достигают конкурентоспособных результатов.
  2. В наборе данных ImageNet Bello сообщает о базовой точности 76,9% и точности лямбда-слоя 78,4%. На CIFAR-10 точность обеих архитектур увеличивается. Это наблюдение указывает на меньшую сложность классификации изображения по 10 классам по сравнению с 1000.
  3. Лямбда-слой имеет более высокую пропускную способность, чем сверточный аналог, а именно на 31% выше. Это приводит к сокращению времени обучения.
  4. Наилучшая начальная скорость обучения составляет 0,0005 для обеих архитектур.

Результаты этой работы показывают, что LambdaNetworks может быть применена к меньшим наборам данных более низкой размерности с производительностью, сопоставимой с представленными в исходной статье, и в пределах доступного бюджета времени вычислений, а именно нескольких часов, а не дней.

Следующими шагами этой работы будет реализация лямбда-выражения позиции с локальными контекстами, в которых | m | ≠ | п |. В предыдущих попытках воспроизводимости для этой цели использовались трехмерные свертки. Однако размеры результирующих вложений относительного положения равны | m | × | k | вместо | n | × | м | × | к |. В результате они не вычисляют вложение относительного положения для каждого пикселя, а вместо этого вычисляют одно для всего ввода.

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

11. Рекомендации

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

Максимальная скорость обучения, которую Белло использовал с ImageNet, существенно отличается от того, что мы использовали с CIFAR-10. Хотя он использовал конкретную формулу для получения максимальной скорости обучения, мы настроили скорость обучения, используя грубую одномерную сетку. Было бы несправедливо сравнивать точность его результатов с нашими. Возможно, поведение его обученных ResNet-50 и ResNet-50 с сетями лямбда-уровня значительно изменится по сравнению с нашим, поскольку мы оптимизировали скорость обучения. Следовательно, возможно, что в его сети гораздо больше потенциала, чем показано. Рекомендуется провести дополнительные исследования для поиска оптимальной скорости обучения. В этом свете также может оказаться интересным посмотреть, могут ли настройка или удаление теплых перезапусков и тип планировщика существенно повлиять на точность.

12. Взгляд авторов на статью LambdaNetworks

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

Всегда сначала хорошие новости. Несмотря на то, что статья очень длинная, а именно 31 страница, мы были рады, что автор был очень полным и подробным при обсуждении алгоритма. Белло не только включил компактные фрагменты кода с частью реализации лямбда-слоев, но также включил всю информацию, необходимую для точного воспроизведения результатов (неоднозначности обсуждались в этом документе), даже инициализацию, используемую для обучаемых параметров. Кроме того, он включил исследование абляции, чтобы подтвердить свой выбор архитектуры.

Нас также приятно удивило Приложение А к статье. Он представляет в формате «Часто задаваемые вопросы» теоретические и практические вопросы, которые читатель может задать себе. Некоторые записи в этом приложении помогли нам лучше понять документ и реализовать его. Поэтому мы считаем, что это отличное дополнение к статье, а также успешный формат, который сообщество могло бы рассмотреть возможность принятия в будущих публикациях. После представления на конференцию рецензенты всегда задают вопросы, на которые автор отвечает, чтобы его / ее работа была принята. В случае, если эти вопросы не приводят к изменению окончательного документа, они могут быть включены в ответ автора в виде приложения «Вопросы и ответы».

Хотя это правда, что для размножения статьи она содержит всю необходимую информацию, мы считаем, что автор представил слишком много вариаций своей модели, что затрудняет ее чтение, а иногда и сбивает с толку. Поэтому мы полагаем, что статью можно было разбить на несколько статей. Например, в нескольких частях статьи Белло упоминает использование ResNet-RS с сжатием и возбуждением и без него, архитектуру, которая была опубликована одновременно с статьей о лямбда-слоях. Включение этой информации, разбросанной по всей статье, только способствует дезориентации читателя даже для специалиста в данной области, поскольку информация стала доступной только недавно. Также не очень понятно, в чем разница между LambdaResnets и архитектурой ResNet с лямбда-слоями. Мы полагаем, что последнее является частным случаем первого, но это не совсем четко указано в статье.

Кроме того, мы удивлены трудностью и сложностью статьи LambdaNetworks по сравнению с статьей Все, что вам нужно [2]. Несмотря на то, что архитектуры и общая концепция имеют много общего, мы обнаружили, что статью LambdaNetworks было на порядок труднее читать и визуализировать. Учитывая огромный потенциал этой архитектуры, мы считаем, что некоторые уроки можно извлечь из оригинальных статей, которые привлекли внимание к машинному обучению в 2017 году.

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

В заключение, несмотря на то, что в документе есть несколько двусмысленностей, мы на собственном опыте убедились в огромном потенциале этой структуры. Поэтому мы надеемся, что автор будет основывать свою будущую работу на слоях лямбда и упростит доступ к этому новому методу, предоставив руководство по Google Colab и пошаговое объяснение концепции. С помощью представленного здесь проекта воспроизводимости и реализации с открытым исходным кодом мы надеемся облегчить доступ к этой новой структуре для исследовательского сообщества и отрасли.

Ссылки

[1] И. Белло, Лямбда-сети: моделирование дальнодействующих взаимодействий без внимания (2021 г.), Международная конференция по обучающим представлениям.

[2] А. Васвани, Н. Шазир, Н. Пармар, Дж. Ушкорейт, Л. Джонс, А. Н. Гомес, Л. Кайзер и И. Полосухин, Внимание - это все, что вам нужно (2017), Достижения в области нейронной обработки информации Системы

[3] Р. Ли, Дж. Су, К. Дуан и С. Чжэн, Механизм линейного внимания: эффективное внимание для семантической сегментации (2020), arXiv: 2007.14902 [cs.CV]

[4] С. Иоффе и К. Сегеди, Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариантного сдвига (2015), Труды 32-й Международной конференции по международной конференции по машинному обучению.

[5] К. Сегеди, В. Ванхаук, С. Иоффе, Дж. Шленс и З. Война, Переосмысление начальной архитектуры компьютерного зрения (2016 г.), Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR) 2016 г.

[6] К. Хе, Х. Чжан, С. Рен и Дж. Сан, Глубокое остаточное обучение для распознавания изображений (2016 г.), Конференция IEEE 2016 г. по компьютерному зрению и распознаванию образов (CVPR).