Deep Learning: как это работает? Часть 1

    В этой статье вы узнаете



    -В чем суть глубокого обучения

    -Для чего нужны функции активации

    -Что такое FCNN

    -Какие задачи может решать FCNN

    -Каковы недостатки FCNN и с помощью чего с ними бороться


    Небольшое вступление


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

    Какие предварительные навыки для понимания всего нужны? Сказать сложно, но если вы умеете гуглить или правильно задавать вопросы, то, я уверен, мой цикл статей поможет разобраться во многом.

    В чем вообще суть глубокого обучения?


    Суть в том, чтобы построить некий алгоритм, который принимал бы на вход X и предсказывал Y. Если мы пишем алгоритм Евклида для поиска НОД, то мы просто напишем циклы, условия, присваивания и вот это вот все — мы знаем как построить такой алгоритм. А как построить алгоритм, который на вход принимает изображение и говорит собака там или кошка? Или вовсе ничего? А алгоритм, на вход которого мы подаем текст и хотим узнать — какого он жанра? Вот так просто ручками написать циклы и условия тут не выйдет — тут на помощь и приходят нейронные сети, глубокое обучение и все вот эти модные слова.

    Более формально и чуть-чуть о функциях активации


    Выражаясь формально, мы хотим построить функцию от функции от функции…от входного параметра X и весов нашей сети W, которая выдавала бы нам некий результат. Тут важно отметить, что мы не можем взять просто много линейных функций, т.к. суперпозиция линейных функций — линейная функция. Тогда любая глубокая сеть аналогична сети с двумя слоями (входом и выходом). Для чего нам нелинейность? Наши параметры, которые мы хотим научиться предсказывать, могут нелинейно зависеть от входных данных. Нелинейность достигается путем использования различных функций активаций на каждом слое.

    Fully-connected neural networks(FCNN)


    Просто полносвязная нейронная сеть. Выглядит как-то так:

    image

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

    Первый слой — входной. Например, если мы хотим подать изображение 256x256x3 на вход такой сети, то ровно 256x256x3 нейронов во входном слое нам и понадобится (каждый нейрон будет принимать 1 компоненту (R, G или B) пикселя). Если хотим подать рост человека, его вес и еще 23 признака, то понадобится 25 нейронов во входном слое. Кол-во нейронов на выходе — кол-во признаков, которые мы хотим предсказать. Это может быть как 1 признак, так и все 100. В общем случае по выходному слою сети можно почти наверняка сказать — какую задачу она решает.

    Каждая связь между нейронами — вес, который тренируется алгоритмом backpropagation, о котором я писал тут.

    Какие задачи может решать FCNN


    -Задача регрессии. Например, предсказание стоимости магазина по каким-то входным критериям типа страны, города, улицы, проходимости и т.п.

    -Задача классификации. Например, классика — MNIST classification.

    -Насчет задачи сегментации и обнаружения объектов с помощью FCNN я сказать не возьмусь. Быть может, кто-то поделится в комментариях :)

    Недостатки FCNN


    1. Нейроны одного слоя не имеют «общей» информации (все веса в сети уникальны).
    2. Огромное кол-во обучаемых параметров (весов), если мы хотим обучать сеть на фотографиях.

    Что делать с этими недостатками? Convolutional Neural Networks(CNN) — все верно. Об этом и будет моя следующая статья.

    Заключение


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

    Подробнее
    Реклама

    Комментарии 3

      +17

      Я начал читать, а статья, почему-то, кончилась.

        +2
        Очень мало практической информации. Всё что прочитал, навалом в сети. Реально не хватает описания алгоритма и кусочков кода, например для tensorflow.
          0
          Я, по возможности, стараюсь оставлять ссылки на источники с описанием алгоритмов и примерами кода. В частности здесь — на backpropagation и пример реализации FCNN. Ваше желание и мнение я услышал — в сегодняшнем посте прикреплю опросник и там посмотрим, я не против с кодом повозиться :)

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое