Реализация искусственной многослойной нейронной сети с использованием анализа линейной регрессии
В первой части были представлены одни из самых простых нейронных сетей, а также некоторые широко используемые методы и алгоритмы. Однако для решения задачи оптимизации необходима более сложная модель. Эта модель относится к многослойной нейронной сети, в основе которой лежат те же методы и алгоритмы, но в этой статье они будут более подробно рассмотрены.
Многослойная нейронная сеть
Комбинируя функции, уже рассмотренные в Части I, можно построить реальную вычислительную модель НС. Обратите внимание, что эта модель на данный момент сможет вычислять выходные данные только с учетом некоторых входных данных вместе с матрицей весов. В этом многоуровневом случае выходные данные предыдущего слоя становятся входными данными для последующего слоя. Этот комбинированный ввод представляет собой сумму активаций, умноженных на их веса:
Активации для каждого узла затем вычисляются с помощью функции Sigmoid по комбинированным входным данным узла:
Это снова можно использовать в качестве входных данных для следующего слоя, пока не будет достигнут выходной слой. Затем расширение однослойной сети до двухуровневой сети выглядит следующим образом:
Для построения многослойной модели необходима полная матрица Θ. Сначала нужна функция, которая принимает список размеров слоев и возвращает массив случайно инициализированных весовых матриц соответствующих размеров для соединения слоев:
Далее необходима функция, которая принимает матрицу X и массив матриц Θ и возвращает окончательный выходной слой:
Как обсуждалось в предыдущей части этой серии, градиентный спуск вычисляется для минимизации ошибки, чтобы классификация была максимально точной. Это было легко вычислить, имея только однослойную сеть, поскольку нужны были только ошибки выходных узлов. Однако оптимизация многослойной сети более сложна, поскольку необходимо также вычислять ошибки скрытых узлов в скрытых слоях. Для этого необходим алгоритм Backpropagation, который определяется уравнением:
Алгоритм Обратного распространения реализуется путем написания функции hidden_delta, которая вычисляет матрицу значений δ для одного скрытого слоя:
Теперь все, что осталось сделать, это объединить функции в многослойную сеть, точно так же, как функция one_layer_training в Часть I, но на этот раз для нескольких слоев:
Функции add_bias, compute_layer и weight_update обсуждаются в Части I, чтобы взглянуть на реализацию и лучше понять Вы должны отправиться туда.
Надеюсь, вам понравилась эта серия, в которой я обсуждал 2 основные искусственные нейронные сети. Следите за моим блогом, чтобы увидеть больше подобных серий!