Deep Learning: как это работает? Часть 2 |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-07-14 15:11 В этой статье вы узнаете: - Что такое CNN и как это работает Небольшое вступление Данный цикл статей нацелен на то, чтобы дать интуитивное понимание того, как работает глубокое обучение, какие есть задачи, архитектуры сетей, почему одно лучше другого. Здесь будет мало конкретных вещей в духе "как это реализовать". Если вдаваться в каждую деталь, то материал станет слишком сложным для большинства аудитории. Про то, как работает граф вычислений или про то, как работает обратное распространение через сверточные слои уже написано. И, главное, написано куда лучше, чем я бы объяснил. В предыдущей статье мы обсуждали FCNN - что это и какие есть проблемы. Решение тех проблем лежит в архитектуре сверточных нейронных сетей. Convolutional Neural Networks(CNN) Сверточная нейронная сеть. Выглядит примерно так: Какие отличия от полносвязной сети? В скрытых слоях теперь происходит операция свертки. Так выглядит свертка: Просто берем изображение(пока что - одноканальное), берем ядро свертки(матрицу), состоящее из наших обучаемых параметров, "накладываем" ядро(обычно оно 3х3) на изображение, производим поэлементное умножение всех значений пикселей изображения, попавших на ядро. Затем все это суммируется(еще нужно добавить параметр bias - смещение), и мы получаем какое-то число. Это число является элементом выходного слоя. Двигаем это ядро по нашему изображению с каким-то шагом(stride) и получаем очередные элементы. Из таких элементов строится новая матрица, на нее же применяется(после применения к ней функции активации) следующее ядро свертки. В случае, когда входное изображение трехканальное, ядро свертки тоже трехканальное - фильтр :) Но здесь не все так просто. Те матрицы, которые мы получаем после свертки, называются картами признаков (feature maps), потому что хранят в себе некие признаки предыдущих матриц, но уже в неком другом виде. На практике применяют сразу несколько фильтров для свертки. Это делается для того, чтобы "вынести" как можно больше фич на следующий слой свертки. С каждым слоем свертки наши признаки, которые были во входном изображении, представляются все более в абстрактных формах. Еще пара замечаний: -После свертки наш feature map становится меньше (по ширине и высоте). Иногда, чтобы слабее уменьшать ширину и высоту, или вовсе ее не уменьшать(same convolution), используют метод zero padding - заполнение нулями "по контуру" входной feature map -После самого последнего сверточного слоя в задачах классификации и регрессии используют несколько fully-connected слоев Почему это лучше, чем FCNN -У нас теперь может быть меньше обучаемых параметров между слоями Max pooling Выглядит это так: Мы "скользим" по нашей feature map фильтром и выбираем только самые важные(в плане входящего сигнала, как некоторого значения) признаки, уменьшая размерность feature map. Есть еще average(weighted) pooling, когда мы усредняем значения, попавшие в фильтр, но на практике более применим именно max pooling. Функции потерь Мы подаем на вход сети X, доходим до выхода, вычисляем значение функции потерь, выполняем алгоритм обратного распространения ошибки - именно так учатся современные нейронные сети(пока речь только об обучении с учителем - supervised learning). В зависимости от задач, которые решают нейронные сети, используются разные функции потерь: Другие задачи мы пока не рассматриваем - об этом будет в следующих статьях. Заключение Также хочу обратить внимание на две вещи, используемые в архитектурах нейронных сетей, в том числе и сверточных, - это dropout(можно почитать тут) и batch normalization. Настоятельно рекомендую ознакомиться. В следующей статье разберем архитектуры CNN, поймем почему одна лучше другой :) Источник: m.vk.com Комментарии: |
|