Сегодня мы с вами рассмотрим свёрточные нейронные сети. Сегодня будет первое занятие, которое посвящено будет именно свёрточным нейронным сетям. Всё, что происходило до этого -- это были обыкновенные нейронные сети в какой-то самой общей постановке. Сегодня мы рассмотрим, в первую очередь, что такое свёртка и зачем она нужна в свёрточных нейронных сетях, и построим самую простую архитектуру на свёртках. Итак, зачем нам нужна свёртка? Зачем нам нужны свёрточные нейронные сети? Почему это лучше, чем полносвязанные нейронные сети, которые мы уже с вами рассмотрели? Ведь мы знаем, что сигмоидные нейронные сети полны, то есть мы можем приблизить любую функцию при помощи обыкновенных сигмоидных нейронных сетей. И ответ на этот вопрос достаточно прост. Несмотря на то, что сигмоидные нейронные сети действительно могут подогнать любую функцию, которая удовлетворяет некоторому списку требований (как мы помним, это ограниченность, конечное число разрывов, и так далее), несмотря на это, у нейронных сетей (обыкновенных) возникают большие трудности со структурированными данными: например, с картинками. То есть обыкновенная нейронная сеть -- что сделает? Она возьмёт картинку (например у этой картинки будет размер 224 на 224), и, исходя из того, что она уже видела, она придумает маску для этой картинки: как, например, выглядит собака. И если эта сеть видела собаку всё время в середине, то она не распознает точно такую же собаку где нибудь в углу. Вот для того, чтобы избежать таких ситуаций, нам нужны свёрточные нейронные сети, которые будут обобщаться вне зависимости от положения изображения на картинке. Почему мы не можем покрыть весь объём картинок обучающей выборкой? Потому, что для этого должна быть очень большая обучающая выборка -- чтобы собака была и в левом верхнем углу, и в правом нижнем углу, и она была маленькая, и большая, и только в этом случае обыкновенная полносвязанная нейронная сеть научится видеть собак везде, в любом положении -- это во первых. А во-вторых -- для того, чтобы запомнить эти маски, нам понадобится очень большое количество нейронов, и, таким образом, эта наша нейронная сеть будет занимать очень много места. Операция свёртки инвариантна относительно её положения. То есть если у вас одна и та же собака будет в левом верхнем углу и в правом нижнем углу, то результат работы свёртки на одной и той же собаке в разных положениях будет одинаковый, просто результат этот будет в разных позициях. Таким образом, мы решаем, при помощи свёртки, проблему ограниченности вычислительных ресурсов. Нейронная сеть, которая сможет запомнить всех возможных собак, если она полносвязанная, будет очень вычислительно сложной, а свёрточная нейронная сеть, по сравнению с этой полносвязанной нейронной сетью, будет гораздо легковеснее, гораздо легче обобщаться, гораздо лучше будет работать. Ну, и, кроме того, здесь есть ещё одна причина. Причина заключается в том, что очень часто мы хотим использовать информацию о структуре данных, то есть -- "какой пиксель находится рядом с каким". Например, если у вас на изображении нарисована трава, мячик и какое-то существо, которое очень мохнатое и с зубами, то, скорее всего, это существо -- это собака. Если же у вас вместо травы там будет вода, а вместо мячика там будет, например, какая-нибудь рыба, то очень маловероятно, что это существо -- это собака, и нам нужно очень хорошее доказательство того, что это -- именно собака, для того, чтобы принять такое решение. Соответственно, свёртка решает ещё и задачу учёта дополнительной информации о структуре данных, то есть она учитывает, какие пиксели находятся рядом с какими.
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.