Классическая нейронная сеть: что на самом деле представляют собой узлы и слои?

Что математически представляют узел и слой? Легкое для понимания введение в закулисные концепции.

Ранее мы говорили о функциях активации и, как и обещали, объясним их связь со слоями и узлами в архитектуре нейронных сетей.

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

Хорошо, все сказано, приступим.

Сначала мы возьмем в качестве примера следующую очень простую архитектуру нейронной сети (NN). (рисунок 1)

  • Входной уровень: Node1 → X | Активация: сигмовидная
  • Скрытый слой: Node1 → N1 и Node2 → N2 (сверху вниз) | Активация: сигмовидная
  • Выходной слой: Node1 → M | Активация
#This code is the keras implementation of the above described NNdef simple_nn():
    model = Sequential()
    model.add(Dense(2, input_dim=1, activation='sigmoid'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='mean_squared_error', optimizer='sgd')
    return model

Какую функцию представляет эта нейронная сеть?

С учетом приведенных выше обозначений получаем следующую функцию (рис.2):

Здесь следует отметить несколько моментов:

  • Выход нейронной сети всегда будет принадлежать [0,1]. Как мы упоминали в статье о функциях активации, функция активации выходного уровня очень важна и в значительной степени определяет тип модели, которую вы хотите достичь (например, классификация / регрессия и т. Д.)
  • Имея только один скрытый слой, состоящий из двух узлов, мы получаем вектор весов размерности 7. Это усложняет обучение, когда количество узлов увеличивается.
  • За исключением функций активации, операции представляют собой линейные комбинации. Опять же, функции активации вносят нелинейность.

Почему мы используем линейную комбинацию и эти типы функций активации?

Прежде всего, хотя Deep Learning (исследования множества слоев NN) является отдельной категорией изучения, тем не менее, оно имеет ту же цель, что и классическое машинное обучение: «приближение к конкретной базовой модели / распределению из точек данных (в большинстве случаев ) ». Следовательно, цель сети - также приблизиться к распределению, то есть к функции, но как тогда? Здесь есть некоторые базовые знания об анализе, приготовьтесь!

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

Давайте сначала начнем с непрерывной функции от вещественного числа к действительному. Поставим себе цель приблизиться к такой функции. Канонический способ начать это - сначала построить график функции, которую представляет наша NN (рис.3). Поскольку нам не нужны какие-либо конкретные данные для объяснения идеи, мы не будем обучать NN, а просто будем произвольно назначать веса (рис.4).

Вот сюжет (рис.5):

Сюрприз! Что это за форма? Прямоугольник !!!

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

Еще раз отметить несколько моментов:

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

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

Теперь, когда мы увидели такие приближения, мы можем быть уверены в способности NN приблизиться к распределению (даже если оно не является непрерывным). Но в этом объяснении все еще чего-то не хватает, мы произвольно присвоили некоторые точные веса нашей NN, но, к сожалению, мы не можем сделать это в общих наборах данных, поскольку мы игнорируем распределение. И здесь вмешиваются методы оптимизации, такие как знаменитый SGD (стохастический градиентный спуск) или пакетный GD (и т. Д.). Предполагая, что эти оптимизации действительно приводят нас к достаточно близкому решению, это будет означать, что мы превзошли исходные веса (для прямоугольников), которые мы давали. Отображение приведенного выше примера (прямоугольники) каким-то образом дает нижнюю границу точности, хотя упомянутый метод казался оптимальным, оптимизация весов может не обязательно сходиться к оптимальной методике, но снова превзойдет ее.

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