Назад
360

Few-shot learning

360

Введение

Фундаментальный вопрос при анализе процесса обучения людей — процесс изучения функционирования памяти. Как отмечают исследователи, люди могут достаточно быстро запоминать новые концепты и обьекты, которые они увидели лишь однажды. В отличие от человека, процесс запоминания концептов (обучения) нейронной сетью строится на процедуре с множеством итераций обучения и несопоставимо большим количеством примеров. Это несоответствие породило область исследований, которая отвечает за построение методов решения поставленных задач при обучении на малом количестве примеров. Такими задачами являются Few-shot learning, One shot learning и Zero shot learning. В статье мы разберем первую задачу и методы, которые были разработаны для ее решения.

Описание задачи

Few-shot learning — это задача обучения по нескольким размеченным примерам. Мы настраиваем параметры нейронной сети так, чтобы при использовании только К размеченных примеров мы получили модель, реализующую классификацию на С классов. Такую постановку задачи описывают как C-way K-shot классификацию. Кроме K размеченных примеров для каждого целевого класса у нас также есть набор данных A. Он помогает сделать процедуру предобучения нашей модели.

С точки зрения данных, как и в классическом (supervised) подходе, мы располагаем тренировочной и тестовой выборкой.

Главное отличие few-shot learning: мы представляем наши данные в виде трех основных наборов — A (auxiliary/base set), S (support set), Q (query set).

  1. A (auxiliary / base set) — тренировочный набор данных, на котором мы будем получать начальные параметры модели (знания об окружающем мире). Он может быть очень большим, но согласно постановке задачи не должен содержать классы из тестового множества.

\( \mathcal{A} = \{\mathbf{X}_i, \mathbf{y}_i\}_{i=1}^{N} — набор\ базовых\ классов \)

  1. S (support set) — набор опорных примеров размером C * K. Он нам нужен для адаптации модели к новому набору классов. В ряде методов few-shot learning’а набор S выступает как набор A. Тогда задача адаптации трансформируется в задачу генерализации.

\( \mathcal{S} = \{\mathbf{S}_1,… \mathbf{S}_n\} = \{\mathbf{x}_i, \mathbf{y}_i\}_{i=1}^{CK} — набор\ опорных\ примеров \\ \mathcal{C} — количество\ целевых\ классов \\ \mathcal{K} — количество\ опорных\ примеров\\ \)

  1. Q (query set) — набор тестовых данных с идентичным S набором классов. Его мы будем использовать для оценки качества адаптации/обучения на S.

\( \mathcal{Q}=\{\mathbf{ x}_i,\mathbf{y}_i\}_{i=1}^{CM} — тестовый\ набор \\\mathcal{M} — количество \ тестовых\ примеров \)

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

Рисунок 1. Схема наборов данных: Meta-training — набор A, Meta-testing — наборы S и Q

Техника эпизодического обучения (episodic training) — техника, которая используется для обучения модели при подобном представлении данных. В рамках few-shot подхода мы переходим от классического обучения на наборе примеров c соответствующими метками к обучению на наборе задач. Это можно описать следующим образом:

\( \mathcal{T} — симулируемая\ задача\\ \mathcal{A_{s}} — набор\ опорных\ примеров,\ семплированных\ из\ \mathcal{A} \\ \mathcal{A_{q}} — набор\ тестовых\ примеров\ из\ \mathcal{A} \)

Для решения задачи модель обучается на опорном наборе данных, чтобы корректно предсказывать метки тестовых примеров. В классическом варианте обучение проходит с использованием случайно сформированных минибатчей. При few-shot парадигме минибатч состоит из M задач:

\( \{\mathcal{T} = <\mathbf{A_{S}^i}, \mathbf{A^{i}_{Q}} >\}_{i=1}^{M}\in\mathcal{p}(\mathcal{T}) — семплированный\ минибатч,\\ где\ \mathcal{p}(\mathcal{T}) — распределение\ задач \)

Рисунок 2. Распределение задач при few-shot подходе

При решении задачи few-shot learning’а выделяют 3 направления методов для осуществления такого подхода к обучению: методы с применением эпизодической тренировки (meta- и metric-learning методы) и без применения эпизодической тренировки. Каждый из них мы разберем дальше подробнее. Их схематическое описание представлено на изображении ниже:

Рисунок 3. Три метода few-shot learning’а

Baseline

Перед разбором методов few-shot learning нам нужно определить базовый метод для обучения нейронной сети. Сначала определим данные:

\( A — тренировочный\ набор\ данных\ \\ T = <S,Q> — набор\ данных\ новой \ задачи \)

При baseline подходе все данные тренировочного набора А используются для предтренировки (стадии pretraining), данные из набора T — для стадии fine-tuning. При формировании минибатчей описанный ранее принцип компоновки данных в задаче не применяется: минибатч формируется случайным образом. Если рассмотреть применение подхода к задаче классификации на C классов — для нахождения оптимальных параметров используется следующая функция ошибки:

\( \text{arg min} \sum_{c=1}^{C} L^{CE} (g_{ω}(f_{θ}(X_{i})), y) \\ где\ X_{i} ,y — семпл\ из\ A \\ f_{0}-\text{backbone} \\ g_{ω} — \text{classifier} \\ L^{CE} -\text{cross\ entropy\ loss} \)

После обучения на наборе А мы переходим на стадию fine-tuning. Здесь веса backbone замораживаются, и в процессе обучения на данных из набора T настраиваются только параметры слоев classifier. Этот процесс можно описать следующей схемой:

Рисунок 4. Стадии baseline подхода к обучению

Meta-learning

Основная задача метода — построить такой пайплайн обучения модели, при котором ее веса затем можно будет быстро (за один или несколько шагов оптимизатора) адаптировать к любой другой задаче при минимальном количестве размеченных данных.

Давайте рассмотрим один из популярных методов реализации такого обучения — MAML и его улучшение — Meta SGD.

MAML

Метод MAML — meta-learning метод для любой нейронной сети. В его основе лежит идея поиска таких параметров на наборе случайно созданных задач, при которых за один шаг оптимизатора на целевой задаче мы получим хорошую точность. Рассмотрим сначала начальные данные:

\( \mathcal{p}(\mathcal{T_{s}}) — распределение\ опорных (тренировочных)\ задач \) \( \mathcal{T}_{s} =<\mathbf{S_{S}^i}, \mathbf{S^{i}_{Q}>} — задача,\ состоящая\ из\ примеров\ support \ set \ \)

Индивидуальное решение каждой из подобных задач требует настройки параметров под конкретную задачу (переобучения под задачу). Мы же хотим настраивать параметры так, чтобы на всех семплированных на данном шаге задачах мы получали наименьшее значение ошибки — получали такие параметры, при настройке которых мы можем стабильно улучшать качество на всех задачах одновременно.

Процедура настройки параметров на тренировочных задачах называется adaptation step (inner loop).

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

Такую процедуру называют meta-optimization step (outer step).

Для этого шага мы семплируем из целевого распределения задач:

\( \mathcal{p}(\mathcal{T_{q}}) — распределение\ целевых (тестовых)\ задач, \)

\( \mathcal{T}_{q} = <\mathbf{Q_{S}^i}, \mathbf{Q^{i}_{Q}>}- задача,\ состоящая\ из\ примеров\ \text{query \ set} \)

Важно отметить: протокол (количество классов C и примеров K) не должен изменяться как для тренировочных, так и для тестовых задач.

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

Блок-схема алгоритма представлена на изображении ниже:

Рисунок 5. Схема алгоритма MAML

Как было сказано ранее, основное обучение происходит во время фазы адаптации (adaptation step). Для нее мы задаем следующие параметры:

\( \alpha — скорость\ обучения\ для\ \text{adaptation\ step} \\ k -количество\ итераций\ \\ \\ \mathcal{T_{1…n}} — набор\ задач \\ \theta_{1..n}^{fast} = \theta_{init}- текущие\ параметры\ модели,\ \\ где\ \theta_{i}^{fast} — копия\ параметров,\ настраиваемых\ только\ на\ задаче\ \mathcal{T_{i}} \)

Давайте подробнее разберем параметры модели. На этом шаге мы хотим для каждой задачи обучить отдельную копию параметров, ее мы будем применять на целевой задаче из query set. Следовательно, при k = 1 мы вычисляем градиент, обновляем копию параметров (а не параметры основной модели), и при k > 1 мы используем и обновляем модель из шага k = 1.

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

\( \theta^{fast}i = \theta{init} — \alpha \nabla_\theta\mathcal{L}^{(S)}{\tau_i}(f{\theta_{init}}) — обновление\ параметров\ на\ шаге\ k =1\\ \mathcal{L}^{(S)} — функция\ ошибки,\ посчитанная\ на\ задаче\ из \ \text{support\ set} \\ \theta^{fast}{i+1} = \theta^{fast}{i} — \alpha \nabla_\theta\mathcal{L}^{(S)}{\tau_i}(f{\theta^{fast}_{i}}) — обновление\ на\ шаге\ k > 1 \)

После выполнения всех итераций в рамках adaptation step мы получим следующую цепочку обновления параметров:

\( \begin{aligned} \theta^{fast}0 &= \theta\text{init}\\ \theta^{fast}1 &= \theta_0 — \alpha\nabla\theta\mathcal{L}^{(S)}{\tau_i}(\theta_0)\\ \theta^{fast}2 &= \theta^{fast}1 — \alpha\nabla\theta\mathcal{L}^{(S)}{\tau_i}(\theta^{fast}1)\\ &\dots\\ \theta^{fast}k &= \theta^{fast}{k-1} — \alpha\nabla\theta\mathcal{L}^{(S)}{\tau_i}(\theta^{fast}_{k-1}) \end{aligned} \)

Схематическое описание результатов adaptation step выглядит таким образом:

Рисунок 6. Схема результатов фазы адаптации

После adaptation step мы переходим к meta-optimization step. Здесь реализуются две основные операции:

  1. Подсчет ошибки на тестовом наборе задач:

\( \mathcal{L}^{(Q)}_{\tau_i}(f_{\theta^{fast}_{k}}) — ошибка\ на\ задаче\ из\ \text{query\ set} \)

  1. Обновление параметров модели родителя (от нее мы создавали копии под каждую из задач):

\( \theta_{init + 1} \leftarrow \theta_{init} — \beta \nabla\sum_{\tau_i \sim p(\tau)}g_\text{MAML} , суммируем\ по \ всем\ задачам \\ где\ g_\text{MAML} = \nabla_{\theta^{fast}_{k}} \mathcal{L}^{(Q)}(\theta^{fast}_k) \cdot \prod_{i=1}^k (I — \alpha {\nabla_{\theta^{fast}_{i-1}}(\nabla_\theta\mathcal{L}^{(S)}(\theta^{fast}_{i-1}))}) \\ \beta — скорость\ обучения\ для\ \text{meta-optimization step} \)

Оптимизация параметров при помощи этого подхода позволяет прийти к точке в пространстве весов, при которой выполнится условие быстрой сходимости к любой новой задаче при C * K примеров в размеченной выборке.

Meta SGD

Авторы Meta SGD (модификации MAML) отметили идентичность параметра скорости обучения для всех задач. Это может быть бутылочным горлышком в процессе нахождения оптимальных параметров. В данном методе было предложено создать обучаемый параметр a — скорость обучения на adaptation step. Для этого начальная постановка задачи изменилась следующим образом:

\( \alpha = \{a_{1} … a_{i}\} — вектор\ обучаемых\ скоростей \ обучения, \\ где\ i — индекс\ задачи (T_{i}) \)

Теперь во время meta-optimization step обновление параметров будет выглядеть так:

\( (\theta_{init + 1},a) \leftarrow (\theta_{init},a) — \beta \nabla\sum_{\tau_i \sim p(\tau)}g_\text{MAML} \)

Схематическое описание пайплайна Meta SGD представлено на рисунке ниже:

Рисунок 7. Схема пайплайна Meta SGD

Такая модификация позволила получить прирост от 1% до 9% на наборе данных miniImagenet в зависимости от конфигурации K и C.

Metric-learning

Современные metric-learning методы направлены на обучение нейронной сети формировать устойчивые представления данных в одном из метрических пространств. Эти пространства расположены относительно друг друга в соответствии с мерой схожести. При использовании таких подходов во few-shot обучении формулируется следующая задача:

\( P_\theta(y \vert \mathbf{x}, S) = \sum_{(\mathbf{x}i, y_i) \in S} d\theta(\mathbf{x}, \mathbf{x}i)y_i \\ где\ \mathcal{S} — набор\ опорных\ примеров \\ d\theta — метрика\ схожести \)

Здесь мы получаем итоговое распределение меток класса на основе набора преобразованных в векторное представление примеров из набора S. Функцию схожести считаем между входом и K примерами для каждого из C классов.

Давайте рассмотрим два метода few-shot metric-learning: Prototypical Networks и Deep Nearest Neighbor Neural Network.

Prototypical Networks

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

\( \mathcal{D} = \{ (\mathbf{x}_1, \mathbf{y}_1)…(\mathbf{x}_n, \mathbf{y}n)\} — тренировочный\ набор\ данных \\ j \in \{1…J\} — количество\ эпизодов\ семплирования \\ \mathcal{S}{j} = \{\mathbf{x}i, \mathbf{y}i\}{i=1}^{CK} — набор\ опорных\ примеров,\ семплированный\ из\ \mathcal{D} \\ \mathcal{Q}{j}=\{\mathbf{x}_i,\mathbf{y}i\}{i=1}^{CM} — набор\ тестовых\ примеров\ из\ \mathcal{D} , не\ пересекающихся\ с\ S \)

На каждой итерации обучения семплируется J пар (S,Q). Во время итерации по j для K примеров каждого из С классов мы вычисляем прототип при помощи данных из S:

\( S_{c} = \{\mathbf{x}i, \mathbf{y}i\}{i=1}^{K} — набор\ опорных\ примеров\ для\ класса \ \text{с}\\ где\ с \in \{1 .. C\} — набор\ классов \\ \text{embed}^{d}{i} = f(\mathbf{x}i)\mathbf{y}{i} — эмбеддинг\ входных \ данных \\ f — модель, d-размерность\ эмбеддинга \\ \text{proto}^{d}c = \frac{1}{|S_c|} \sum{(\mathbf{x}i, y_i) \in S_c} \text{embed}^{d}{i} — прототип\ класса \)

После вычисления прототипов для каждого из С классов мы можем классифицировать данные из Q:

\( (y_{i}=c\vert\mathbf{x^Q_{i}})= \frac{\exp(-d_\varphi(f_\theta(\mathbf{x^Q_{i}}), \text{proto}c))}{\sum{c’ \in \mathcal{C}}\exp(-d_\varphi(f_\theta(\mathbf{x^Q_{i}}), \text{proto}{c’}))} \\ где\ d\varphi — \text{Euclidean\ distance} \\ \mathbf{x^{Q}_{i}} — входной\ пример\ из\ Q \)

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

Схематически пайплайн Prototypical Networks изображен ниже:

Рисунок 8. Схема пайплайна Prototypical Networks

Отличительные особенности метода:

  1. Можно применить под новый набор классов без обучения. Достаточно подсчитать прототипы на новых данных.
  2. Предсказания нейронной сети можно интерпретировать, поскольку у нас всегда есть доступ к данным. Следовательно, мы можем измерить влияние на предсказание каждого из K опорных примеров для класса С.
  3. Можно обновлять прототипы вновь поступивших данных без переобучения, что позволяет корректировать поведение модели при изменениях данных.
  4. За счет усреднения всех эмбеддингов для формирования прототипа сложность вычисления класса (со стороны потребляемых ресурсов) не зависит от количества K.

Благодаря этим свойствам Prototypical Networks повсеместно применяется для задач классификации.

Deep Nearest Neighbor Neural Network (DN4)

Этот метод наследует ряд идей из Protonet, но видоизменяет их. Авторы подхода утверждают, что использование сжатых представлений размером 1 x d для описания класса существенно снижает репрезентативность этого описания. Поэтому они предложили следующий подход представления входных данных:

\( \text{embed}^{hwd}_{i} = f(\mathbf{x}i)\mathbf{y}{i} — эмбеддинг\ входных \ данных \\ где\ h*w — количество\ локальных\ дескрипторов \\ d — размерность\ локального\ дескриптора \)

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

Вычисляем результат классификации мы таким способом:

\( S_{embed} = \{{embed}^{hwd}_{1} …{embed}^{hwd}_{k}\}^C — набор\ K эмбеддингов\ для\ C\ классов \)

\( Q_{embed} = {embed}^{hwd} — входной \ пример \)

\( \Phi\big(Q_{embed}, S^c_{embed})=\sum_{i=1}^{m}\sum_{j=1}^k \mathrm{cos}(\bm{x}_i,\bm{\hat{x}}_i^j) — функция\ схождести\ входного\ примера\ и\\ набора\ опорных\ примеров\ класса\ с\ \)

\( \mathrm{cos}(\bm{x}_i,\bm{\hat{x}}_i)=\frac{\bm{x}_i^\top \bm{\hat{x}}_i}{\|\bm{x}_i\|\cdot\|\bm{\hat{x}}_i|} — метрика\ дистанции \)

Схематическое описание пайплайна DN4 представлено ниже:

Рисунок 9. Схема пайплайна DN4

А сейчас давайте подробнее рассмотрим формирование итогового распределения вероятностей:

\( 1,d,h,w — размерность\ Q \\ c,k,d,h,w — размерность\ S \\ k -количество\ опорных\ примеров \\ c — количество\ классов \\ hwd — дескриптор \)

Для удобства представим Q и S немного иначе:

\( 1,[hw],d — размерность\ Q’ \\ c,d,[kh*w] — размерность\ S’ \\ \)

И вычислим оценки схожести с помощью Cosine distance:

\( c,[hw],[kh*w] -\mathrm{cos}(Q’,S’) \\ матрица\ попарных\ расстояний\ для\ каждого\ локального\\ дескриптора\ Q\ и\ локального\ дескриптора\ каждого\ примера\ из\ K \)

Затем для каждого из локальных дескрипторов Q найдем topK значений попарных расстояний. Для этого вычислим:

\( c,[h*w],K — topK(\mathrm{cos}(Q’,S’),K) \)

Далее найдем сумму по K и [h*w] размерности. На выходе получим вектор значений, каждое из них будет описывать близость к конкретному классу.

Non-episodic learning

Подходы этого направления не предполагают использование специфичных методов обучения и следуют классической парадигме предобучения на большом наборе данных и файнтюнинга под конкретную задачу. Однако здесь были добавлены техники, которые позволяют модели не переобучаться даже при файнтюнинге на few-shot наборе данных. Давайте сейчас рассмотрим два метода — S2M2 и SKD.

S2M2: Manifold Mixup for Few-shot Learning

Метод S2M2 основан на использовании Manifold Mixup. Почему? Есть две причины:

  • эта регуляризация позволяет модели быть робастной к небольшим изменениям данных, что, в свою очередь, улучшает качество при few-shot задачах;
  • регуляризация помогает сгладить границы классов в пространстве выходов, что приводит к наилучшей генерализации на примерах, которых не было в тренировочной выборке.

Давайте кратко разберем работу Manifold Mixup. Принцип идентичен классическому Mixup:

\( Mixλ(a, b) = λ · a + (1 − λ) · b \\ где\ a — изображение\ 1 \\ b — изображение\ 2 \\ λ — коэффициент\ смешивания \)

Аналогично мы смешиваем 2 onehot лейбла и получаем на выходе мультимодальное распределение. Ниже изображено схематическое описание пайплайна Mixup:

Рисунок 10. Схема пайлайна Mixup

Ключевое отличие Manifold Mixup от Mixup: a и b — промежуточные выходы до слоя L{i}, полученные на минибатчах (x,y) и (x’,y’) соответственно. Если же в качестве L{i} мы выбираем L{0} (начало нашего графа) — Manifold Mixup идентичен Mixup.

В рамках метода S2M2 авторы определяют задачу обучения как обучение следующего классификатора:

\( g = C_{Wb} ◦ f_{\theta} \\ где f_{\theta} — backbone \\ C_{Wb} — cosine\ classifier \\ \)

Cosine classifier описывается таким выражением:

\( s_{k} = τ · cos(z, w)\\ где\ z — выход\ из\ backbone \)

\( w _{k} — веса\ линейного\ слоя \)

\( z,w \) = \( \frac{\bm{z} }{\|\bm{z}\|},\frac{\bm{w} }{\|\bm{w}\|} -L2\ нормализованные\ вектора \)

\( τ — обучаемый\ параметр \)

Авторами выделяются две стадии обучения:

  1. Self-supervised training.
  2. Fine-tuning with Manifold Mix.

В рамках Self-supervised training они комбинируют 2 функции ошибок:

\( L_{class} — для\ оценки \ правильности\ классификации\ на\ C\ классов \\
L_{rot} — предсказание\ одного\ из\ четырех\ вариантов\ поворота\ изображения \)

Использование дополнительной задачи по предсказанию поворота изображения позволяет выучивать универсальные представления данных, которые могут применяться для последующего дообучения. Подробнее о self-supervised learning можно прочитать в нашей статье 😊

На этапе Fine-tuning with Manifold Mix у нас намного меньше размеченных данных. Мы хотим справиться с переобучением. Для этого используем комбинацию функций ошибок:

\( L_{mm} + 0.5(L_{class} + L_{rot}) \\ где\ L_{mm} — Mixλ(a, b) — оценка\ предсказаний\ лейблов\ для\ результатов\ Mainfold\ Mixup \)

При этом Cosine classifier заменяется на обычную классификацию с использованием линейного слоя. Схематическое описание пайплайна S2M2 представлено на рисунке:

Рисунок 11. Схема пайплайна S2M2

С помощью такого набора регуляризаций в ходе обучения авторам удалось добиться прироста в метрике Accuracy в 10% на наборе данных mini-ImageNet и порядка 8% на наборе данных CUB, в сравнении с Baseline++, где используется только Cosine classifier.

SKD: Self-supervised Knowledge Distillation for Few-shot Learning

Метод SKD, так же как и метод S2M2, при обучении опирается на две стадии — self-supervised learning и knowledge distillation stage.

На стадии self-supervised learning используется аналогичный S2M2 подход: модель предсказывает класс изображения и угол поворота. В отличие от S2M2 эти операции проходят в каскадном режиме:

\( x = \{x_{0},x_{90}, x_{180}, x_{270}\} — минибатч\ из\ оригинального \ и\ повернутых\ изображений\\ f_{\theta} — \text{backbone} \\ f_{cls} — \text{class\ classifier} \\ f_{rot} — \text{rotation\ classifier} \\ \text{angle,cls} =f_{rot}(f_{cls}(f_{\theta}(x))) \)

В таком режиме логиты слоя классификации используются классификатором поворота. Авторы утверждают, что такой подход лучше подходит для расширения пространства представлений, формируемых backbone, чем использование auxiliary head (как в S2M2).

После обучения в режиме self-supervised learning мы переходим в режим knowledge distillation stage, где будем использовать следующий подход к обучению:

\( T^{frozen} = f_{cls}(f_{\theta}) — модель\ учитель \\ S = f_{cls}(f_{\theta}) — модель\ \text{cтудент} \\ x,\hat{x} = x_{0},x_{180} — входные\ минибатчи \)

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

\( \\ y^T = T^{frozen}(x) — выходы\ учителя\\ y^S,\hat{y}^S = S(x),S(\hat{x}) — выходы\ студента\\ L_{KD} = KL(y^T,y^S) — лосс \ дистиляция\ знаний \\ L_{l2} = ||y^S — \hat{y}^S|| — дискриминативный\ лосс \\ L=L_{KD} + \beta*L_{L2} \)

Во время knowledge distillation stage выходные представления становятся более инвариантными к повороту за счет минимизации L2. При этом с помощью Lkd они остаются консистентными относительно результатов предыдущей стадии. Схематическое описание пайплайна SKD представлено на рисунке

Рисунок 12. Схема пайплайн SKD

При применении данного метода на новых данных (новой задаче) backbone замораживается, а в качестве классификатора обучается логистическая регрессия.

Заключение

В этой статье мы рассмотрели 3 метода решения задачи few-shot learning: meta-learning, metric-learning и non-epsiode learning. Их обзор показывает нам основные направления развития алгоритмов.

  • Методы non-episode learning применяют различные аугментации и регуляризации во время обучения, трансформируют классическую стадию pretraining в набор стадий с особыми настройками обучения. Мы рассмотрели также применение специфично построенных классификаторов поверх представлений энкодера. Дополнительно здесь можно почитать две статьи: NegCosine, RFS.
  • Методы meta-learning используют свои подходы для настройки, следовательно, меняют подход к оптимизации параметров. В ряде статей они применяют различные классические методы классификации (например, Quadratic Discriminant Analysis, Ridge Regression) в качестве финального классификатора. У этих методов широкое применение в различных задачах. Для подробного знакомства с ними можно рассмотреть эти статьи: MetaOptNet, BOIL, MetaQDA.
  • Методы metric-learning используют различные подходы оценки дистанции входного примера до размеченных примеров целевых классов. Они более просты в реализации, чем методы meta-learning, но их применение ограничивается задачей классификации. Дополнительно можно почитать следующие статьи: RENet , DeepBDC, FEAT.

У этих методов есть свое практическое применение: любые задачи с малым количеством примеров, задачи с необходимостью онлайн-адаптациии, задачи с небольшим разнообразием данных (тут предполагается использовать подобные методы только на уникальных примерах).

Для практического применения методов можно воспользоваться одним из следующих фреймворков: Libfewshot или learn2learn.

Старт 13 мая
Computer Vision Rocket

Приходите на наш курс CV Rocket, чтобы погрузиться в продвинутый Computer Vision: от сложностей и корнер-кейсов в «обычных» задачах до мультимодальных моделей и дизайна CV-систем!

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!