Оглавление
- Импульсная нейронная сеть
- SpineNet
- AutoML: инструментальные возможности
- Где применяют нейронные сети?
- Что такое нейронные сети и их типы?
- Обучение с подкреплением
- Создание нейрона с нуля в Python
- Нейрон
- Обучение нейронной сети
- CenterNet
- Python код среднеквадратической ошибки (MSE)
- Softmax (функция мягкого максимума)
- What’s in the Box?
Импульсная нейронная сеть
Импульсная нейронная сеть или Spiking neural network является самой реалистичной с точки зрения физиологии. В ней нейроны обмениваются короткими импульсами одинаковой амплитуды. Первая научная модель импульсной нейросети была предложена еще в 1952 году Аланом Ходжкином и Эндрю Хаксли, однако данный вид искусственных нейронных сетей известен немногим специалистам в этой области. Основная идея состоит в том, чтобы скопировать поведение биологическкого нейрона. Такие модели могут быть полезны при изучении функций мозга. Для того, чтобы быстро летать, необязательно махать крыльями, однако при решении прикладных задач некоторые свойства можно позаимствовать у биологических организмов.
SpineNet
SpineNet применяется для обнаружения объектов на изображении. Исследователи из Google Research достигли хороших результатов, которые превышают имеющиеся state-of-the-art (SOTA) подходы.
Предложенная модель SpineNet позволяет выучивать разномасштабные признаки из-за сверточных слоев смешанных размеров (смотрите рисунок ниже). Размеры слоев подбирались с помощью нейронного поиска архитектур (Neural Architecture Search, NAS). Использование SpineNet в качестве базовой модели дает прирост в точности (Average Precision, AP). При этом на обучение модели требуется меньше вычислительных ресурсов.
Рисунок – Построение моделей со смешанным масштабом с помощью перестановок слоев архитектуры ResNet (ResNet-50-FPN крайняя слева)
AutoML: инструментальные возможности
Ценность AutoML состоит в «демократизации» машинного обучения: эта технология позволяет бизнес-пользователям, а не только опытным Data Scientist’ам работать с мощными средствами аналитики и прогнозирования. Средства AutoML нацелены на максимальное упрощение процессов создания и применения сложных алгоритмов: благодаря упрощенным пользовательским интерфейсам они позволяют быстро создавать необходимые модели, снижая вероятность ошибочных вычислений. AutoML-системы рассчитан на обработку большого объема данных, включая предварительную подготовку датасетов: пользователи могут самостоятельно идентифицировать метки, выбирать нужные участки информационного набора в режиме UI. Такой подход значительно отличается от традиционной работы Data Scientist’а, позволяя сосредоточиться на бизнес-задаче, а не на проблемах обработки данных. Многие платформы ML совместимы с Android и iOS, поэтому модели могут быть плавно и быстро интегрированы с мобильными приложениями . Среди наиболее известных AutoML-решений стоит отметить следующие:
- Microsoft Azure ML— облачный сервис, который позволяет пользователям загружать свои данные, применяя графический интерфейс для разработки кода, который сам создает нейронные сети для анализа данных. Программа работает на любом устройстве, требуя от пользователя минимума знаний о данных или программировании. Сервис включает в себя инструменты Machine Learning Studio и Machine Learning API Service, которые позволяют создавать модели, определяющие вероятность того или иного события, используя данные, хранящиеся в SQL Server и других платформах, включая Azure HDInsight (реализация Apache Hadoop от Microsoft) .
- Google Cloud AutoML помогает самостоятельно создавать и обучать DL-модели распознавания изображений и объектов, а также NLP-задач, в т.ч. по машинному переводу. В частности, AutoML Vision включает в себя распознавание лиц, меток, почерка, логотипа, модерацию контента, оптическое распознавание символов и другие подобные задачи обработки графической информации. Например, ML-классификаторы Google Cloud используются в техасском научно-исследовательском институте Гарта TAMUCC для определения атрибутов в больших наборах данных изображений береговой линии вдоль Мексиканского залива. AutoML Natural language Toolkitпозволяет классифицировать контент в конкретные категории, извлекая из текста смысловые структуры и распознавая его элементы. Это позволяет быстро искать, переводить, аннотировать, сжимать и фильтровать текстовые данные, чем успешно пользуются сервисы Rewordify, Hater News, Smmry, Grammarly, Google WebSpeech, Vocalware и множество других бизнесов. Однако, пока большинство функциональных возможностей Google Cloud AutoML доступны и работают в полной мере только на английском языке. Также корпорация Google предлагает AutoML Data Science Toolkit – целый набор инструментов для работы с большими данными объемами данных. Благодаря использованию этого инструмента японский маркетплейс Mercari повысил эффективность классификации своих брендовых товаров на 16%, добившись точности распознавания продукции, равной 91,3% .
- Amazon SageMaker предлагает простой в эксплуатации сервис по ускоренной разработке ML-моделей и развертывание их на облачной платформе AWS. Система включает готовые алгоритмы, а также интегрированную командную оболочку Jupyter, позволяя пользоваться как общими алгоритмами и фреймворками обучения, так и создавать собственные с помощью контейнеров Docker. Для ускоренного обучения ML-моделей они могут тиражироваться на несколько экземплярах облачного кластера .
- Auto-Keras— в отличие от вышеперечисленных AutoML-систем, эта библиотека с открытым исходным кодом, разработанная в техасском университете (Texas A&M University), предоставляет функции для автоматического поиска архитектуры и гиперпараметров DL-моделей. По сути, Auto-Keras – это обычный «питоновский» пакет, для работы с которым необходима ML-библиотека, например, Theano или Tensorflow. Auto-Keras автоматически выполняет поиск архитектуры нейронной сети, подбирая её структуру и гиперпараметры для оптимального решения заданной задачи (классификация, регрессия и т.д.), что существенно облегчает процесс ML-моделирования .
Где применяют нейронные сети?
Нейронные сети применяются для решения множества разных задач. Если мы говорим о простых проектах, то с ними справляется обычная компьютерная программа, если говорить об усложнённых задачах, требующих решения уравнений и прогнозирования, применяется компьютерная программа, поддерживающая статические методы обработки. Есть и совсем сложные задачи, то же распознавание образов. Здесь нужен другой подход, ведь в голове человека все эти процессы проходят неосознанно (при распознавании и запоминании образов человек делает это, если можно так сказать, сам по себе, то есть он не управляет соответствующими процессами в мозгу).
Собственно говоря, нейронные сети как раз для этого и созданы, чтобы помогать людям решать задачи со сложными и не до конца исследованными алгоритмами. Имеет значение и качество нейронных сетей.
Схема нейронной сети:
Сегодня нейронные сети применяются в следующих сферах:
— распознавание образов (по этому направлению работают наиболее широко);
— предсказание следующего шага (повышает эффективность и качество торговли на тех же фондовых рынках);
— классификация входной информации по параметрам (с этой работой легко справляются кредитные роботы, способные быстро принять решение об одобрении или отказе по поводу кредита, используя для этого входные наборы разнообразных параметров).
Так как современные нейронные сети имеют очень большие способности и разные варианты использования, их популярность растёт, а развитие отрасли тоже идёт семимильными шагами. Их учат играть в компьютерные игры, узнавать голоса и т. д. По сути, искусственные сети создаются по принципу биологических, а значит, мы можем обучить их выполнению тех процессов, которые человек выполняет не вполне осознанно.
P. S. Одно дело читать, другое дело — практиковаться. Если вас интересует развитие навыков работы с современными нейронными сетями (neural networks) и вы хотели изучить различные связанные технологии из категории «нейро», ждём вас на наших курсах. Все занятия проходят онлайн, потребуется только компьютер и интернет. Специалистом может стать каждый.
Это курсы для тех, кому важен результат и нужно получить практические знания. Не пропустите ссылку выше!
Что такое нейронные сети и их типы?
Первый вопрос, который возникает у интересующихся, что же такое нейронная сеть? В классическом определении это определённая последовательность нейронов, которые объединены между собой синапсами. Нейронные сети являются упрощённой моделью биологических аналогов.
Программа, имеющая структуру нейронной сети, даёт возможность машине анализировать входные данные и запоминать результат, полученный из определённых исходников. В последующем подобный подход позволяет извлечь из памяти результат, соответствующий текущему набору данных, если он уже имелся в опыте циклов сети.
Многие воспринимают нейронную сеть, как аналог человеческого мозга. С одной стороны, можно считать это суждение близким к истине, но, с другой стороны, человеческий мозг слишком сложный механизм, чтобы была возможность воссоздать его с помощью машины хотя бы на долю процента. Нейронная сеть — это в первую очередь программа, основанная на принципе действия головного мозга, но никак не его аналог.
Нейронная сеть представляет собой связку нейронов, каждый из которых получает информацию, обрабатывает её и передаёт другому нейрону. Каждый нейрон обрабатывает сигнал совершенно одинаково.
Как тогда получается различный результат? Все дело в синапсах, которые соединяют нейроны друг с другом. Один нейрон может иметь огромное количество синапсов, усиливающих или ослабляющих сигнал, при этом они имеют особенность изменять свои характеристики с течением времени.
Определившись в общих чертах, что собой представляет нейронная сеть, можно выделить основные типы их классификации. Прежде чем приступить к классификации необходимо ввести одно уточнение. Каждая сеть имеет первый слой нейронов, который называется входным.
Он не выполняет никаких вычислений и преобразований, его задача состоит только в одном: принять и распределить по остальным нейронам входные сигналы. Это единственный слой, который является общим для всех типов нейронных сетей, дальнейшая их структура и является критерием для основного деления.
- Однослойная нейронная сеть. Это структура взаимодействия нейронов, при которой после попадания входных данных в первый входной слой сразу передаётся в слой выхода конечного результата. При этом первый входной слой не считается, так как он не выполняет никаких действий, кроме приёма и распределения, об этом уже было сказано выше. А второй слой производит все нужные вычисления и обработки и сразу выдаёт конечный результат. Входные нейроны объединены с основным слоем синапсами, имеющими различный весовой коэффициент, обеспечивающий качество связей.
- Многослойная нейронная сеть. Как понятно из определения, этот вид нейронных сетей помимо входного и выходного слоёв имеет ещё и промежуточные слои. Их количество зависит от степени сложности самой сети. Она в большей степени напоминает структуру биологической нейронной сети. Такие виды сетей были разработаны совсем недавно, до этого все процессы были реализованы с помощью однослойных сетей. Соответственно подобное решение имеет намного больше возможностей, чем её предок. В процессе обработки информации каждый промежуточный слой представляет собой промежуточный этап обработки и распределения информации.
В зависимости от направления распределения информации по синапсам от одного нейрона к другому, можно также классифицировать сети на две категории.
- Сети прямого распространения или однонаправленная, то есть структура, в которой сигнал движется строго от входного слоя к выходному. Движение сигнала в обратном направлении невозможно. Подобные разработки достаточно широко распространены и в настоящий момент с успехом решают такие задачи, как распознавание, прогнозы или кластеризация.
- Сети с обратными связями или рекуррентная. Подобные сети позволяют сигналу двигаться не только в прямом, но и в обратном направлении. Что это даёт? В таких сетях результат выхода может возвращаться на вход исходя из этого, выход нейрона определяется весами и сигналами входа, и дополняется предыдущими выходами, которые снова вернулись на вход. Таким сетям свойственна функция кратковременной памяти, на основании которой сигналы восстанавливаются и дополняются в процессе обработки.
Это не единственные варианты классификации сетей.
Обучение с подкреплением
Игра в «Арканоид» — самый простой пример обучения с подкреплением:
Есть агент — то, на что вы воздействуете, что может менять свое поведение, — в данном случае это горизонтальная «палка» внизу. Есть среда, которая описана разными модулями, — это все, что вокруг «палки». Есть награда: когда сетка роняет шарик, мы говорим, что она теряет свою награду.
Когда нейросеть выбивает очки, мы говорим ей, что это здóрово и она работает хорошо. И тогда сеть начинает изобретать действия, которые приведут ее к победе, максимизируют выгоду. Сначала кидает шарик и просто стоит. Мы говорим: «Плохо». Она: «Ладно, кину, подвинусь на один пиксель». — «Плохо». — «Кину, подвинусь на два, влево, вправо, буду рандомно дергаться». Процесс обучения нейросети — очень долгий и дорогой.
Другой пример обучения с подкреплением — это го. В мае 2014 года люди говорили, что компьютер еще не скоро научится понимать, как играть в го. Но уже в следующем году нейросеть обыграла чемпиона Европы. В марте 2016 года AlphaGo обыграла чемпиона мира высшего дана, а следующая версия выиграла у предыдущей с разгромным счетом 100:0, хотя делала абсолютно непредсказуемые шаги. У нее не было никаких ограничений, кроме игры по правилам:
Зачем учить компьютер играть в игры за бешеные деньги, вкладываться в киберспорт? Дело в том, что обучение движению и взаимодействию роботов в среде стоит еще дороже. Если ваш алгоритм ошибается и разбивает многомиллионный дрон, это очень обидно. А потренироваться на людях, но в Dota, сам Бог велел.
Создание нейрона с нуля в Python
Приступим к имплементации нейрона. Для этого потребуется использовать NumPy. Это мощная вычислительная библиотека Python, которая задействует математические операции:
Python
import numpy as np
def sigmoid(x):
# Наша функция активации: f(x) = 1 / (1 + e^(-x))
return 1 / (1 + np.exp(-x))
class Neuron:
def __init__(self, weights, bias):
self.weights = weights
self.bias = bias
def feedforward(self, inputs):
# Вводные данные о весе, добавление смещения
# и последующее использование функции активации
total = np.dot(self.weights, inputs) + self.bias
return sigmoid(total)
weights = np.array() # w1 = 0, w2 = 1
bias = 4 # b = 4
n = Neuron(weights, bias)
x = np.array() # x1 = 2, x2 = 3
print(n.feedforward(x)) # 0.9990889488055994
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
importnumpy asnp defsigmoid(x) # Наша функция активации: f(x) = 1 / (1 + e^(-x)) return1(1+np.exp(-x)) classNeuron def__init__(self,weights,bias) self.weights=weights self.bias=bias deffeedforward(self,inputs) # Вводные данные о весе, добавление смещения # и последующее использование функции активации total=np.dot(self.weights,inputs)+self.bias returnsigmoid(total) weights=np.array(,1)# w1 = 0, w2 = 1 bias=4# b = 4 n=Neuron(weights,bias) x=np.array(2,3)# x1 = 2, x2 = 3 print(n.feedforward(x))# 0.9990889488055994 |
Узнаете числа? Это тот же пример, который рассматривался ранее. Ответ полученный на этот раз также равен .
Нейрон
В этой статье вы познакомитесь с основами работы искусственных нейронов. В последующих статьях мы изучим основы работы нейронных сетей и напишем простейшую нейронную сеть на python.
Нейронные сети состоят из нейронов связанных между собой, поэтому нейрон является главной частью нейронной сети. Нейроны выполняют только 2 действия: перемножают входные данные на веса и суммируют их и прибавляют смещение, и второе действие это активация.
Теперь подробнее про входные данные, веса, смещения и функцию активации.
Входные данные это данные которые получает нейрон из предыдущих нейронов или от пользователя.
Веса присваиваются каждому входу нейрона, изначально им присвоены рандомные числа. При обучении нейронной сети изменяется значение нейронов и смещений. На веса перемножаются входные данные которые поданы на нейрон.
Смещения присваиваются каждому нейрону, как и веса изначально смещения, это рандомные числа. Смещения облегчают и ускоряют обучение нейронной сети.
Функция активации которую мы будем использовать в нашей нейронной сети называется сигмоида. Формула сигмоиды имеет вид:
Эта функция заворачивает любое число от -∞ до +∞ в диапазон от 0 до 1.
Если расписать математически, задачи, которые выполняет нейрон то, получится 2 формулы: Обозначения:
f(x) — функция активации
x — сумма произведения входных данных с весами, и смещения
i — массив входных данных
w — массив весов
b — смещение
j — количество входных данных и весов
Алгоритм работы нейрона будет выглядеть так
Теперь реализуем этот алгоритм на языке программирования python.
Перед реализацией нейрона надо загрузить и подключить библиотеку numpy. Для загрузки библиотеки напишем в терминале Linux или Window:
Для подключения библиотеки к нашей программе напишем в начало программы:
Для удобства использования в больших программах и для простоты чтения кода мы реализуем класс Neuron, и напишем для него конструктор:
Конструктор класса получает как параметр количество входов для нейрона, и заполняет массив весов случайными числами, потом генерируем смещение.Также для работы нейрона нам надо инициализировать функцию активации. Выглядеть она будет так:
Функция получает входные данные, суммирует их и возвращает результат сигмоиды. Для работы функции активации нам надо написать функцию сигмоиды:
Эту функцию мы поместим в файл Math.py
Перед функцией мы опять подключим numpy:
Класс нейрона мы запишем в файл Neuron.py. И подключим в Neuron.py файл Math.py:
В итоге мы получаем 2 файла:
Neuron.py
Math.py
Эти файлы мы будем использовать в следующих статьях при построениях нейронных сетей.
И так, подведем итоги:
-
Мы изучили принципы работы искусственных нейронов
-
Изучили формулы, которые используются при работе нейронов
-
Написали класс нейрона на языке программирования Python
Обучение нейронной сети
В данной части статьи по разработке простейшей нейронной сети мы научимся обучать нейронные сети.
Мы обучим нейросеть решать задачу по нахождении закономерности в ряде чисел. Для простоты это будут числа 0 и 1.
Для обучения нейронной сети надо иметь условия задач и решения, задачи должны решать одну проблему.
Данные для обучения выглядят так
Условие |
Ответ |
1 |
1 |
1 |
Данную задачу вы можете увидеть почти во всех статьях по написанию нейронных сетей с нуля.
В результате обучения нейронная сеть находит логическую связь между условием и ответом.
Решение этой задачи это первое введённое число.
В качестве условия задачи которую должна решить нейронная сеть выглядит так
Условие |
Ответ |
|
1 |
1 |
1 |
Обучение нейронной сети это уменьшение потерь.
Чем меньше потерь тем лучше и правильнее результат.
Во избежания сложных формул я не буду подробно объяснять принципы обучения, я дам вам код который более-менее понятен и объясню функции необходимые для обучения нейронной сети.
Для обучения нам понадобится производная сигмоиды.
Что такое производная вы сможете посмотреть в википедии, а производная сигмоиды выглядит так:
Реализация на Python выглядит так:
Запишем этот код в файл Math.py
Так же для обучения нам нужно 2 константы:
rate — скорость обученияcount_learn — количество повторений обучения
Чем больше count_learn тем лучше обучится нейронная сеть, но потребуется больше времени на обучение. А с rate все понятно.
Присвоим константам значения:
rate = 0.1count_learn = 10000
После объявления констант, запускаем цикл от 0 до count_learn, внутри цикла запустим еще один цикл который будет выполняться столько раз, сколько входных данных для обучения у нас есть.
После этого будет сложная математика, поэтому дам вам просто код:
Запишем эту функцию в класс NeuronNet.
В итоге файл NeuronNet.py выглядит так:
А Math.py выглядит так:
Теперь запустим нашу нейронную сеть и обучение.
Допишем в файл main.py массив с данными для обучения и правильными ответами:
Далее запустим обучение:
И запустим нашу нейронную сеть подав ей задачу которую надо решить:
В итоге main.py выглядит так:
Теперь запустим программу введя в консоль:
после запуска нейронная сеть выводит
Теперь обновим входные данные, вместо
Условие |
Ответ |
|
1 |
1 |
1 |
Зададим другую задачу
Условие |
Ответ |
1 |
При изменении входных данных результат программы выглядит так
Теперь подведем итоги.
В серии статей по искусственным нейронным сетям мы изучили
-
Принципы работы искусственных нейронов
-
Принципы работы нейронных сетей
-
Принципы обучения нейронных сетей
-
Написали свою нейронную сеть
Эта часть статьи была последней.
Итоговый код нейронной сети вы сможете найти на моей странице в github.
CenterNet
CenterNet моделирует объект, как одну точку, которая находится в центре ограничительной рамки. Размер объекта, его ориентация, 3D-форма, направление, поза и т.д. извлекаются в последствии через характеристики изображения (image features) около полученной точки. Авторы подают входное изображение в полносвязную сверточную сеть, которая генерирует тепловую карту (heatmap). Пики на этой тепловой карте соответствуют центрам объектов. Характеристики изображения в каждом пике тепловой карты предсказывают размеры ограничительной рамки вокруг объекта. С помощью CenterNet авторы статьи экспериментируют с определением 3D размеров объектов и оценкой позы человека по двумерному изображению.
Рисунок – Диаграмма CenterNet
CornerNet является предшественником CenterNet. CornerNet обнаруживает объект, как пару точек: верхний левый и правый нижний углы ограничительной рамки (bounding box). Таким образом распознавание по набору фиксированных рамкок (anchor box), как у нейросетей SSD и YOLO, заменяется на определение пары точек верхнего левого и правого нижнего углов ограничительной рамки вокруг объекта. Также авторы предлагают архитектуру на основе последовательности нескольких нейросетей типа «песочные часы», которые до этого не использовались для определения объектов.
В CornerNet применяется механизм «corner pooling» для определения углов ограничительной рамки вокруг объектов. В CenterNet добавляется механизм «center pooling» для определения центра рамки.
Рисунок – Механизм «corner pooling» для верхнего левого угла. Сканирование проходит справа налево для горизонтального «max-pooling» и снизу вверх для вертикального «max-pooling». Затем две карты характеристик (feature maps) слаживаются.
Python код среднеквадратической ошибки (MSE)
Ниже представлен код для подсчета потерь:
Python
import numpy as np
def mse_loss(y_true, y_pred):
# y_true и y_pred являются массивами numpy с одинаковой длиной
return ((y_true — y_pred) ** 2).mean()
y_true = np.array()
y_pred = np.array()
print(mse_loss(y_true, y_pred)) # 0.5
1 2 3 4 5 6 7 8 9 10 11 12 |
importnumpy asnp defmse_loss(y_true,y_pred) # y_true и y_pred являются массивами numpy с одинаковой длиной return((y_true-y_pred)**2).mean() y_true=np.array(1,,,1) y_pred=np.array(,,,) print(mse_loss(y_true,y_pred))# 0.5 |
При возникновении сложностей с пониманием работы кода стоит ознакомиться с в NumPy для операций с массивами.
Softmax (функция мягкого максимума)
LjLj
L1L2L3L4оригинале статьиL4L4L4L4L4L4
L4LjLj
Упражнения
- Монотонность Softmax. Покажите, что ∂aLj / ∂zLk положительна, если j=k, и отрицательна, если j≠k. Как следствие, увеличение zLj гарантированно увеличивает соответствующую выходную активацию aLj, и уменьшает все остальные выходные активации. Мы уже видели это эмпирически на примере ползунков, однако данное доказательство будет строгим.
- Нелокальность Softmax. Приятной особенностью сигмоидных слоёв является то, что выход aLj — функция соответствующего взвешенного входа, aLj = σ(zLj). Поясните, почему с Softmax-слоем это не так: любая выходная активация aLj зависит от всех взвешенных входов.
What’s in the Box?
Начнем с того, что сфокусируемся на том, что же на самом деле из себя представляет CLIP. Если говорить прямо, то CLIP не является одной нейронной сетью. Можно сказать, что CLIP является фреймворком тренировки двух нейронных сетей.
Фреймворком не в том смысле, в котором PyTrorch и TensorFlow, а в том, в котором говорят, например, про GANы. Как многие из нас знают, GAN представляет из себя, по крайней мере, две нейронных сети (генератор и дискриминатор), которые тренируются в определенном режиме. Затем чаще всего используется именно одна сеть — генератор. А вторая играла важную, но все же вспомогательную роль (относительно самой задачи) на этапе тренировки. Для генератора и дискриминатора могут использоваться разные архитектуры. Именно режим обучения этих двух нейронных сетей мы и называем фреймворком GAN, а не сами нейронные сети, выбранные для решения генеративной или дискриминативной задачи. Подобная аналогия уместна и в нашем случае. CLIP — это не столько нейросеть, сколько режим тренировки и требования к выбору нейросетей для совместного обучения.
CLIP — есть поэлементное cosine similarity текстовых и визуальных репрезентаций
Для начала нам нужно выбрать две архитектуры нейронных сетей для того, чтобы объединить их в гибрид или нейрохимеру под названием CLIP. Одна сеть должна принимать изображение, и готовить на основе него некую векторную репрезентацию, вторая — должна съедать текст, и готовить уже на основании него некую векторную репрезентацию той же размерности, что и правая сеть. Так как подобрать две нейронные сети из разных областей (CV и NLP), обладающих одной и той же размерностью выходных фич, будет нереально, то стоит добавить еще слой к каждой из архитектур, который подготовит репрезентацию одинаковой размерности. Будем называть эти слои линейными преобразованиями для согласования размерностей.
Популярным выбором фича-экстрактора для изображений, пока еще2 являются сверточные сети. Авторы берут различные архитектуры ResNet не из-за их точности (она по сегодняшним меркам не самая лучшая), а из-за популярности и распространенности ResNet’ов, их количества benchmark этой архитектуры на разных датасетах. Но опять же, в качестве фича-экстрактора изображений, может выступать и другая архитектура. Авторы советуют для этой цели использовать ResNet или Vision Transformer2.
С выбором фича-экстрактора для текста тоже все понятно. Это же OpenAI. Тут к гадалке не ходи, точно будет GPT. Как и изображения, проходящие через сверточную нейронную сеть предстают перед последним решающим линейным слоем в виде вектора фич (или векторной репрезентации), так и текст, пройдя через внутренности трансформера или безвременно ушедших рекуррентных сетей, тоже будет представлен в виде некой векторной репрезентации. Авторы советуют для этой цели использовать CBOW или Text Transformer.
Картина. Дарт Вейдер убивает своего сына
Основная идея CLIP — создание единого векторного пространства для текстовых и визуальных репрезентаций!Ведь нам совершенно не важно, показали ли нам эту картинку, прочитали ли мы текст «Картина. Дарт Вейдер убивает своего сына», или мы услышали это предложение от кого-то
Скорее всего, мы все представим нечто похожее.Именно в этом и есть идея CLIP — построить мост между изображением и текстом!