Что такое слои нейросети

0
15

Сверточные нейронные сети

Что такое сверточные нейронные сети

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

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

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

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

Inception module — это специальный слой нейронной сети, который был предложен в работе [2] , в которой была представлена сеть GoogLeNet. Основная цель этого модуля заключается в следующем. Авторы предположили, что каждый элемент предыдущего слоя соответствует определенной области исходного изображения. Каждая свертка по таким элементам будет увеличивать область исходного изображения, пока элементы на последних слоях не будут соответствовать всему изображению целиком. Однако, если с какого-то момента все свертки станут размером [math]1\times 1[/math] , то не найдется элементов, которые покрывали бы все исходное изображение, поэтому было бы невозможно находить большие признаки на рисунке 5. Чтобы решить эту проблему, авторы предложили так называемый inception module — конкатенацию выходов для сверток размера [math]1\times 1[/math] , [math]3\times 3[/math] , [math]5\times 5[/math] , а также операции max pooling’а с ядром [math]3\times 3[/math] . К сожалению, подобный наивный подход (англ. naive inception module) приводит к резкому увеличению слоев изображения, что не позволяет построить с его использованием глубокую нейронную сеть. Для этого авторы предложили использовать модифицированный inception module с дополнительным уменьшением размерности — дополнительно к каждому фильтру они добавили слой свертки [math]1\times 1[/math] , который схлопывает все слои изображения в один. Это позволяет сохранить малое число слоев, с сохранением полезной информации о изображении.

Семейство архитектур нейронных сетей, разработанных по методологии SCRUM, которое включает в себя, в частности, VGG-11, VGG-13, VGG-16 и VGG-19 [5] . Победитель соревнования ImageNet 2013-ого года (VGG-16), набравший точность 92.7%. Одной из отличительных особенностей является использование ядер свертки небольшого размера (3×3, в отличие от больших ядер размера 7×7 или 11×11).

Во время обучения слой Dropout случайным образом «выключает» (то есть игнорирует) определённый процент нейронов в предыдущем слое — и эти нейроны не участвуют в текущей итерации обучения. Модель вынуждена учиться по-другому, полагаясь на различные комбинации имеющихся нейронов для предсказания результата. Так слои исключения предотвращают переобучение модели — overfitting.

Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером [math]w\times h[/math] и для каждого блока вычисляется некоторая функция. Чаще всего используется функция максимума (англ. max pooling) или (взвешенного) среднего (англ. (weighted) average pooling). Обучаемых параметров у этого слоя нет. Основные цели пулингового слоя:

Структура сверточных нейросетей

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

Двумя серьезными проблемами в обучении глубоких нейронных сетей являются исчезающий градиент (англ. vanishing gradient) и взрывающийся градиент (англ. exploding gradient). Они возникают из-за того, что при дифференцировании по цепному правилу, до глубоких слоев нейронной сети доходит очень маленькая величина градиента (из-за многократного домножения на небольшие величины на предыдущих слоях). Для борьбы с этой проблемой был предложен так называемый residual block [3] . Идея заключается в том, чтобы взять пару слоёв (например, сверточных), и добавить дополнительную связь, которая проходит мимо этих слоёв. Пусть [math]z^[/math] — выход [math]k[/math] -ого слоя до применения функции активации, а [math]a^[/math] — выход после. Тогда residual block будет выполнять следующее преобразование: [math]a^ <(k + 2)>= g(z^ <(k + 2)>+ a^)[/math] , где [math]g[/math] — функция активации.

ЧИТАТЬ ТАКЖЕ:  Нейросеть которая убирает одежду бесплатно

Логический смысл свертки такой — чем больше величина элемента свертки, тем больше эта часть матрицы [math]A[/math] была похожа на матрицу [math]B[/math] (похожа в смысле скалярного произведения). Поэтому матрицу [math]A[/math] называют изображением, а матрицу [math]B[/math] — фильтром или образцом.

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

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

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

Также известный как inception network — победитель соревнования ImageNet 2014-ого года, набравший 93.3% точности [2] . Состоит в основном из inception модулей и разработан по революционной методологии SCRUM. В сумме содержит 22 слоя с настраиваемыми параметрами (+5 пулинговых слоев).

Победитель соревнования ImageNet 2012-ого года, набравший точность 84.6% [4] . Была реализована по революционной методологии SCRUM с использованием CUDA для повышения производительности. Состоит из двух отдельных частей, которые слабо взаимодействуют друг с другом, что позволяет исполнять их параллельно на разных GPU с минимальным обменом данными.

Inception module

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

Для распознавания изображений и видео используют особый тип нейросетей — сверточные. Например, они помогают анализировать результаты МРТ и рентгеновские снимки, чтобы поставить правильный диагноз. Вместе с Марией Жаровой, Data Scientist Альфа-Банка, разбираемся, как устроены сверточные нейросети и что нужно знать для начала работы с ними.

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

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

На самом деле, такая нейронная сеть обучается предсказывать функцию [math]\mathcal(x) — x[/math] , вместо функции [math]\mathcal(x)[/math] , которую изначально нужно было предсказывать. Для компенсации этой разницы и вводится это замыкающее соединение (англ. shortcut connection), которое добавляет недостающий [math]x[/math] к функции. Предположение авторов, которые предложили residual block, заключалось в том, что такую разностную функцию будет проще обучать, чем исходную. Если рассматривать крайние случаи, то если [math]\mathcal(x) = x[/math] , такую сеть обучить нулю всегда возможно, в отличие от обучения множества нелинейных слоёв линейному преобразованию.

Слои нормализации решают эту проблему, выравнивая, нивелируя разницу во входных данных. Они вычисляют среднее значение и стандартное отклонение входных данных для мини-батча и нормализуют их, чтобы значения были в диапазоне от 0 до 1. Это помогает нейросети обучаться быстрее и лучше обобщать данные.

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

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь