В этом посте я не решаю никаких проблем, связанных с COVID-19, а исследую концепции и реализацию SiameseNet на рентгеновских снимках. Если вы хотите посмотреть код, вы можете нажать на ссылку ниже.



Метаобучение

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

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

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

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

Различные типы метаобучения

Метаобучение можно в основном разделить на 3 категории: изучение метрического пространства, изучение инициализации и изучение оптимизатора.

Изучение метрического пространства

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



Изучение инициализации

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





Репродукция на бумаге: глубокое метаобучение с использованием «MAML и Reptile
Как вы учитесь на очень небольшом количестве данных? Две недавние статьи могут дать ответ. Давайте воспроизведем их!towardsdatascience.com»



Изучение оптимизатора

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



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

Если вы заинтересованы в будущем развитии ИИ, вы можете прочитать об этом по ссылке ниже.



Сводка

  1. Поезд / тестовый сплит
  2. Создайте собственный генератор
  3. Визуализация изображений из Генератора
  4. Сиамская сетевая архитектура
  5. N-сторонняя оценка
  6. Как мы используем SiameseNet

1. Тренировочный/тестовый сплит

В этом проекте будет всего 3 класса, и мы будем использовать только 10 образцов из каждого класса. 3 класса будут состоять из рентгеновских снимков пациентов с COVID-19, бактериальных и нормальных пациентов. Если вы читаете чужой пост об однократном или многократном обучении. Все они имеют схожие концепции, используя небольшую часть данных для обучения модели. Для нашего случая это будет 3 занятия по 10 выстрелов.

2. Создайте собственный генератор

Для обучения нашей сети нам нужен собственный генератор, который будет использоваться для создания пар изображений для обучения и проверки. Генератор предоставит наборы правильных пар и неправильных пар и соответствующие им метки. Выше приведен пример того, как будут выглядеть пары: правильным парам будет присвоена метка 1, а неправильным парам будет присвоена метка 0. Генератор также гарантирует, что набор правильных и неправильных пар сбалансирован. Когда мы установим для пакетов значение 30, он будет производить форму (2, 30, 100, 100, 3), (30,) это можно прочитать следующим образом:

(2 пары, 30 изображений, 100 ширины, 100 высоты, 3 канала), (30 меток)

3. Визуализация изображений из Генератора

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

4. Сиамская сеть

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

Две базовые модели, выделенные синим цветом, не являются разными сетями, но являются одной и той же копией друг друга и имеют одинаковые веса. Мы будем повторно использовать обученную модель в предыдущем посте, так как это значительно улучшит скорость сходимости по сравнению с обучением на весах ImageNet. Я тестировал с использованием весов ImageNet, это займет около ~ 1600 эпох, в то время как с использованием наших предварительно обученных весов мы можем сойтись ~ 65 эпох. Это примерно в 24 раза быстрее.

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

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



5. N-сторонняя оценка

Чтобы оценить нашу модель, мы должны создать собственный процесс проверки. Тест должен определить, способна ли модель распознавать похожее изображение среди разных. Одним из способов сделать это является однократное обучение по N-путям. Это может показаться сложным, но на самом деле это очень просто.

Для этого проекта мы тестируем модель с N = 20 (20-стороннее однократное обучение). Представьте, что мы создаем экзаменационную работу для модели, каждый вопрос с множественным выбором из 20, где только один из ответов является правильным. Мы даем модели 100 вопросов, на которые нужно ответить, и смотрим, насколько хорошо модель работает. Модель даст каждой паре прогноз, тот, у которого самый высокий прогноз, будет выбран моделью как правильный. Вы можете себе представить, насколько сложной будет эта бумага, если дать ее человеку с 20 вариантами ответов.

В конце концов, модель показала себя довольно хорошо: она может получить 96,0% правильных результатов при N = 20 и 88% при N = 30. Это здорово! Помните, что мы предоставляем модели только 10 изображений на класс.

6. Как мы используем SiameseNet

Итак, что мы можем с ним сделать после того, как мы обучили SiameseNet? Когда предоставляется новое невидимое рентгеновское изображение COVID-19, мы можем использовать модель для создания встраивания изображения. После этого мы можем использовать это вложение для измерения оценки сходства с нашим кластером из 3 классов. Это новое невидимое изображение COVID-19 должно быть близко к нашему кластеру COVID-19.

Так что насчет неизвестного класса, о котором мы говорили ранее? Допустим, приходит еще один рентгеновский снимок с новой неизвестной инфекцией. Сгенерированное вложение будет выбросом за пределы всех наших 3 кластеров. Это пометит рентгеновское изображение как неизвестный класс, и врачи должны быть привлечены для дальнейшей проверки.

Спасибо, что дочитали до конца. Для тех, кто держится до конца, я хотел бы поделиться с вами песней.

Ссылка





Мета-обучение: научиться быстро учиться
Мета-обучение, также известное как «обучение, чтобы учиться
, предназначено для разработки моделей, которые могут осваивать новые навыки или адаптироваться к новым… lilianweng.github.io»