Архитектуры нейросетей для CV

Автор: | 14.10.2021

Введение

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

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

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

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

Розенблатт пытался классифицировать различные алгоритмы обучения, называя их все системами подкрепления. Он даёт следующее определение: Системой подкрепления называется любой набор правил, на основании которых можно изменять с течением времени матрицу взаимодействия (или состояние памяти) перцептрона.

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

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

Следующим большим шагом вперед в AI станут системы, которые действительно воспринимают окружающий мир.

Подробнее см.:

Алгоритмы машинного обучения

Подробнее см.:

 

Сверточная нейронная сеть

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

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

В реальных сверточных сетях (Convolutional Neural Network, CNN) операция свертки изображения (Convolution) сочетается с операцией подвыборки (Subsampling) и другими.

Идея сверточных нейронных сетей заключается в чередовании сверточных слоев (C-layers), субдискретизирующих слоев (S-layers) и наличии полносвязных (F-layers) слоев на выходе. Такая архитектура стала фундаментальной для глубокого обучения, особенно с точки зрения распределения свойств изображения по всей картинке. Свёртки с обучаемыми параметрами позволяли с помощью нескольких параметров эффективно извлекать одинаковые свойства из разных мест.

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

Для различных нейронов одного слоя используются одна и та же матрица весов, которая представляет собой ядро свёртки. Его «двигают» по всему обрабатываемому слою (в самом начале — непосредственно по входному изображению), формируя после каждого сдвига сигнал активации для нейрона следующего слоя с аналогичной позицией.

Subsampling реализует локальное усреднение откликов либо выбирает среди них максимальное значение.

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

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

Классические задачи CNN:

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

Подробнее см.:

Рекуррентная нейронная сеть

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

Наиболее важное различие между CNN и RNN заключается в том, что CNN — это нейронная сеть с непрерывным движением, а RNN — рекуррентная нейронная сеть. В CNN информация течет только в прямом направлении, в то время как в RNN информация течет вперед и назад. RNN обучается распознавать шаблоны во времени, в то время как CNN учится распознавать шаблоны в пространстве, и, следовательно, CNN учится распознавать компоненты в изображении, такие как линии, края, кривые и т. Д.

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

Рекуррентные нейронные сети — в отличие от нейронных сетей с прямой связью — могут использовать свою внутреннюю память для обработки произвольных последовательностей входных данных.

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

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

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

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

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

Что такое рекуррентные нейронные сети? Это примерно то же самое, что и обычные нейронные сети, но с обратной связью. Обратная связь нам нужна, чтобы передавать на вход нейронной сети или на какой-то из ее слоев предыдущее состояние системы.

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

Рекуррентные нейронные сети (Recurrent Neural Networks, RNNs) — популярные модели, используемые в обработке естественного языка (NLP). Во-первых, они оценивают произвольные предложения на основе того, насколько часто они встречались в текстах. Это дает нам меру грамматической и семантической корректности. Такие модели используются в машинном переводе. Во-вторых, языковые модели генерируют новый текст. Обучение модели на поэмах Шекспира позволит генерировать новый текст, похожий на Шекспира.

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

Рекуррентные нейронные сети (РНС, recurrent neural network, RNN) содержат в себе обратные связи, позволяющие сохранять информацию. РНС, оказывается, не слишком отличаются от обычных нейронных сетей. РНС можно представить, как множество копий одной и той же нейронной сети, каждая из которых передает информацию последующей.

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

Между ними есть своего рода сходство, но оно довольно абстрактное (легче увидеть, если развернуть рекуррентную нейронную сеть)

Давайте посмотрим, как будет выглядеть РНС, если развернуть обратную связь:

 

Recurrent — повторяющийся,  периодический

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

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

Рекуррентные сети бывают следующих типов:

  • «Один к одному». Такой тип нейросети применим, когда на вход поступает единичная информация и на выходе также получается единичная информация. Например, такой подход актуален при кодировании и раскодировании информации.
  • «Один ко многим». Такой тип нейросети применим, когда на входе поступает единичная информация, а на выходе мы получаем последовательность. Например, на вход поступает одно изображение, а на выходе получаем текстовое описание того, что изображено на картинке.
  • «Многие ко одному». Такой тип нейросети применим, когда на вход поступает множество какой-то информации, а на выходе мы получаем единый результат. Например, на вход идет множество изображений, а на выходе получаем, что на всех изображениях находится «автобус».
  • «Многие ко многим». Такой тип нейросети применим, когда на вход поступает последовательность информации, а на выходе мы получаем измененную последовательность информации. Например, при машинном переводе текста на вход поступает текст на одном языке, а на выходе получается текст на другом языке.

Классические задачи RNN:

  • Разработчики Facebook создали нейронную сеть, которая описывает происходящее на видео в реальном времени. В перспективе технология может помочь слабовидящим и незрячим людям в повседневной жизни, создавая описания к окружающему миру.
  • анализ временных рядов
  • автоматическая генерация текста
  • Генерация изображений. В «чистом» виде рекуррентные нейронные сети не в состоянии генерировать изображения, но в тандеме со сверточными нейронными сетями делают это достаточно легко.

 

 

Подробнее см.:

Рекуррентные сети: категории по объему ячейки памяти

У рекуррентной сети есть одна проблема — маленькая память. Память не способна «удержать» большие последовательности. Из-за этого, когда память перегружается информацией, нейросеть выдает ошибки и обучается не так эффективно, как хотелось бы. Чтобы частично решить эту проблему, были немного «расширены» блоки памяти. Таким образом, в связи с разным объемом ячейки памяти различают несколько видов рекуррентных сетей.

В зависимости от ячейки памяти, различают 3 категории рекуррентных сетей:

  1. Обычные рекуррентные сети, они же RNN. Именно им мы посвятили сегодняшнюю статью. Проблема с переполнением памяти связана с ними, поэтому их используют в тех задачах, когда нужно не генерировать много значений, а лишь автоматически дополнять какую-то информацию.
  2. Рекуррентная сеть с долгой памятью, она же LSTM. Подобные сети решили проблему с памятью за счет расширения ячейки памяти. Такие сети годятся для выполнения сложных задач, например, с их помощью можно: сочинять музыку, генерировать текст, похожий по стилю на текст А. С. Пушкина и др. Но в отличие от первого вида, они потребляют много системных ресурсов.
  3. Управляемые рекуррентные сети, они же GRU. По сути, представляют собой лайт-версию предыдущего вида сети. Ячейки с таким же объемом памяти, но обработка информации идет несколько другим путем, слегка «обрезанным» по функциональности.

Подробнее см.:

GAN

Обучение без учителя (unsupervised learning, неконтролируемое обучение) – класс методов машинного обучения для поиска шаблонов в наборе данных. Данные, получаемые на вход таких алгоритмов обычно не размечены, то есть передаются только входные переменные X без соответствующих меток y. Если по каким-то причинам у нас вместо пары вход-выход есть только вход, то мы все равно можем обучить нейросеть находить эти представления — с помощью автоэкодеров или генеративных состязательных сетей.

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

Генеративно-состязательная сеть (англ. Generative adversarial network, GAN) — алгоритм машинного обучения без учителя, построенный на комбинации из двух нейронных сетей, одна из которых (сеть G) генерирует образцы ,а другая (сеть D) старается отличить правильные («подлинные») образцы от неправильных (см. Дискриминативная модель). Так как сети G и D имеют противоположные цели — создать образцы и отбраковать образцы — между ними возникает антагонистическая игра.

 

Подробнее см.:

 

 

 

  1. Генеративно-состязательная сеть (англ. Generative adversarial network, сокращённо GAN) и GPT.
  2. RNN
  3. Глубокое обучение с подкреплением (reinforcement deep learning)
  4. Рекуррентные нейронные сети
  5. Знакомство с архитектурами для задач классификации: CNN, Faster R-CNN, ResNet; детекции: YOLO, HOG;
    сегментация: U-Net, DeepLab, PSPNet;

Сверточные нейронные сети доминируют в области задач компьютерного зрения, и теперь шум создают Трансформеры. Благодаря своему очень мощному архитектурному дизайну трансформеры были очень успешными в области НЛП, и теперь они делают то же самое с видением. Патчи группируют вместе небольшие области изображений в отдельные входные объекты, чтобы их можно было применить к более крупным изображениям. обычно в CNNS форма похожа на пирамиду, где размер уменьшается от входа к окончательному выходу. Такой тип архитектуры, в которой размер и форма остаются неизменными во всем, называется «изотропный»Архитектура. В основном он использовался в трансформерах Vision.

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

 

 

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

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

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

Для выпуклых функций, которые мы пытаемся оптимизировать, существует неизбежное противоречие между преимуществами меньшего и большего размера пакетов. С одной стороны, использование пакета, равного всему набору данных, гарантирует сходимость к глобальным оптимумам целевой функции. Однако это происходит за счет более медленной эмпирической конвергенции к оптимуму. С другой стороны, эмпирически показано, что использование меньших размеров партии приводит к более быстрой сходимости к «хорошим» решениям. Это интуитивно объясняется тем фактом, что меньшие размеры пакетов позволяют модели «начать обучение до того, как ей нужно будет увидеть все данные». Обратной стороной использования меньшего размера пакета является то, что модель не гарантирует сходимость к глобальным оптимумам. Он будет колебаться вокруг глобальных оптимумов, оставаясь за пределами некоторых ϵ-шар оптимумов, где ϵ зависит от отношения размера пакета к размеру набора данных. Поэтому при отсутствии вычислительных ограничений часто рекомендуется начинать с небольшого размера пакета, используя преимущества более быстрой динамики обучения, и неуклонно увеличивать размер пакета посредством обучения, также пользуясь преимуществами гарантированной сходимости.

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

 

Полезные ссылки: