Часть 1. Прямое распространение

Нейронные сети являются основным компонентом машинного обучения и используются для обычных повседневных задач. Например, машины, обнаруживающие и понимающие ваш рукописный текст или определяющие лицо и все его особенности. Эта технология также используется для нового высокоинтеллектуального программного обеспечения. Такие как возможности автопилота Tesla и DALL-E (превращает текст в искусство, которое никогда раньше не видели).

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

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

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

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

Красные круги, показанные выше, называются узлами, а красные линии называются весами. Черные линии и круги просто предназначены для визуальных целей и не имеют никакой функции. Например, ввод [1,0,1] в верхний черный узел равен 1, средний — 0, а нижний — 1. Это просто заполнители для чисел ввода. Наконец, каждый столбец красных узлов называется скрытым слоем, а столбец черного узла является входным слоем. Итак, есть один входной слой и два скрытых слоя.

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

Как мы знаем, функция содержит набор чисел, поэтому она может манипулировать входными данными для получения выходных данных. Это тот же случай для нейронной сети. Вход (черный) умножается на вес (красная линия, которой присвоено некоторое число), а затем произведение веса и ввода добавляется смещением в узле (красный кружок представляет узел и число то есть в этом узле называется уклоном). Другими словами, красная линия содержит вес, который является числом, а красный кружок содержит число, называемое смещением. Конечным продуктом, который мы получаем, является вход * вес + смещение = результат. В обозначении функции f(вход) = ввод*вес+смещение. Теперь мы знаем, как нейронная сеть является функцией, давайте посмотрим на некоторые тестовые данные.

Для обучающих данных нейронная сеть может найти взаимосвязь между входом и выходом, она будет

Из этой таблицы связь очевидна. Вход - это выход. В обозначении функций f(input) = input. Поскольку нейронная сеть видна над функцией, которая выглядит следующим образом, f(ввод) = ввод * вес + смещение. Вес должен быть равен 1, а смещение должно быть равно 0, чтобы функция нейронной сети была f(input) = input. Мы поговорим о том, как нейронная сеть изучает эту взаимосвязь, чтобы получить вес 1 и смещение 0.

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

Теперь функция нейронной сети такова: f(вход) = вес2(вход*вес + смещение) + смещение2. Но, как вы можете видеть, независимо от того, каковы веса или смещения, функция по-прежнему остается линейной.

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

Эта сигмоида будет добавлена ​​в конце, после того как мы умножим вес на вход и добавим смещение. Так что это будет выглядеть примерно так.

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

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

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