Наконец, мы добрались до самой интересной части нашего путешествия по нейронной сети. В этой статье мы увидим, как обучается нейронная сеть! Я постараюсь сделать эту статью максимально простой, как всегда, чтобы вы не застряли в слишком большом количестве математики. Теперь давайте посмотрим, как обратное распространение используется, чтобы научить наши искусственные нейроны делать впечатляющие вещи. Обязательно прочитайте часть 3, если вы еще этого не сделали!
Обратное распространение
Обратное распространение — наиболее часто используемый алгоритм обучения нейронной сети. Этот алгоритм направлен на изменение веса синапсов между нейронами. После многих запусков алгоритма обучения на наборе данных эти веса адаптируются к решаемой задаче.
Изначально все веса имеют случайные значения или конкретные значения, полученные из другой нейронной сети (что-то, что называется трансферным обучением). Вы никогда не должны начинать с веса, равного 0 (вы можете прочитать об этом самостоятельно, а пока просто поверьте мне). Это алгоритм обучения с учителем помеченных данных. Проще говоря, нейронная сеть учится на своих ошибках.
После сравнения прогнозируемого результата с реальным результатом и вычисления ошибки градиентным методом или методом стохастического градиента эти веса модифицируются. Эти два метода минимизации ошибок будут объяснены ниже.
Градиентный спуск
Метод градиентного спуска требуетфункции стоимости. Эта функция стоимости необходима, потому что метод градиента направлен на ее минимизацию. Обычно в нейронных сетях эта функция стоимости имеет формулу «C = y-ŷ»(где «ŷ» — приблизительное значение, а «y strong>» — фактическое значение).
Функция стоимости используется для отслеживания ошибок прогнозирования, возникающих при обучении нейронной сети. Важно указать тот факт, что этот метод требует, чтобы функция стоимости была выпуклой (как буква «U»).
Минимизация функции стоимости эквивалентна повышению производительности нейронной сети. Градиентный метод уменьшает ошибку, находя точку минимума в пространстве поиска путем вычисления наклона (в каком направлении вы идете ниже).
Этот расчет определяет, в каком направлении нужно сделать шаг, чтобы уменьшить функцию стоимости. Расчет наклона и шагов выполняется итеративно, пока не будет найдена точка сходимости (минимальное значение для функции стоимости). Известно, что наклон функции вычисляется путем взятия производной этой функции. Пример этого процесса можно увидеть на рисунке 1.
Однако этот метод вычисляет только локальный минимум. Большинство реальных задач требуют вычисления глобального минимума из многомерного пространства, что лучше выполнять с помощью метода стохастического градиента.
Стохастический градиентный спуск
Стохастический градиентный спускявляетсянаиболее широко используемым методом обучения нейронных сетей, поскольку он может найти глобальный минимум в пространстве, где есть несколько локальных минимумов (т.е. не требуют, чтобы функция стоимости была выпуклой).
Градиентный метод смог найти только локальный минимум. Единственная ситуация, в которой он нашел глобальный минимум, была, когда пространство поиска было небольшим, и была только одна точка минимума (в выпуклой функции стоимости, такой как «U»). Однако в большинстве задач пространство поиска очень велико, особенно в случае нейронных сетей, поэтому необходим более эффективный метод для нахождения глобального минимума, то есть наименьшего возможного значения функции стоимости.
Это также быстрее в вычислительном отношении. Но нужно было понять метод градиента, чтобы иметь возможность перейти к пониманию метода стохастического градиента. Пример невыпуклого пространства можно увидеть на рисунке 10.
На рисунке 2 можно наблюдать наличие 3 локальных и одного глобального минимума. Основное различие между методом нормального градиента и методом стохастического градиента заключается в том, что обычный метод начинается с одной точки, а стохастический (стохастический является синонимом случайного) начинается с нескольких случайных точек и применяет метод градиента к каждому из них. Таким образом, стохастический обнаруживает несколько точек минимума, а затем сравнивает их, оставляя, разумеется, точку с наименьшим значением.
Фактическое обучение
После применения упреждения (о котором говорилось в предыдущей статье) вычисляется значение (или вектор значений), представляющее результат, аппроксимированный нейронной сетью (значение ŷ) .
У нас также есть фактическое значение «y» (метка), поэтому мы сможем рассчитать функцию стоимости «C(w)=ŷ-y ».
Эта функция стоимости рассчитывается для каждого веса в нейронной сети. После расчета к этой функции применяется метод стохастического градиента, чтобы обнаружить точку минимума.
После этого шага веса каждого нейронного соединения изменяются, а их уменьшение или увеличение определяется методом стохастического градиентного спуска. Алгоритм обратного распространения повторяется для каждой записи в наборе данных несколько раз.
Важно указать, что уровень, на который эти веса уменьшаются или увеличиваются, определяется параметром, который называется скорость обучения. Эта скорость обучения представляет собой величину, на которую будут изменяться веса после каждой итерации стохастического градиентного спуска.
Обычно на практике скорость обучения принимает очень небольшие значения, от 0,0001 до 0,01. Существуют также алгоритмы для изменения этой скорости обучения, допускающие более высокое начальное значение (иногда даже 0,5) для первой части обучения, в то время как скорость обучения снижается по ходу. Это называется импульсом, и он используется в таких оптимизаторах, как «Адам», который является версией стохастического градиентного спуска — наиболее часто используемого оптимизатора на практике.
После того, как прямое и обратное распространение были запущены один раз для каждой записи в наборе данных, это означает, что одна эпоха обучения завершена.
Также возможно обучение с использованием частей набора данных, которые обычно называются пакетами. Таким образом, сеть «видит» больше записей из набора данных перед изменением весов сети.
Преимущество обучения с большим количеством данных заключается в том, что для обучения требуется меньше памяти, а сеть обучается быстрее, а веса меняются после каждого пакета данных, проходящего через сеть. Для обучения нейронной сети необходимо повторить этот процесс прохождения набора данных несколько раз, что означает обучение сети на несколько эпох.
После каждой эпохи обучения нейронной сети обычно отображается ряд метрик. Эти показатели определяют производительность модели. Одна из метрик называется среднеквадратической ошибкой, которая аналогична функции стоимости, показанной выше.
Самый важный показатель – точность. Это возвращает число от 0 до 1, представляющее процент экземпляров, правильно идентифицированных в текущую эпоху. Эта метрика применяется как к обучающим, так и к проверочным или тестовым наборам данных.
Еще один способ проверить модель — использовать матрицу путаницы. Он подсчитывает как правильные, так и неправильные прогнозы и помещает их в двумерную матрицу. В этой матрице перечислены правильные и неправильные прогнозы как для обучающего, так и для тестового набора, что позволяет четко наблюдать за производительностью модели.
В части 5
Теперь, когда вы ознакомились с основами нейронных сетей, мы перейдем к их практической реализации с использованием Python3. Таким образом, вы увидите, что все, что вы прочитали, применяется на практике! Я проведу вас шаг за шагом по настройке вашей системы, чтобы иметь возможность обучать нейронную сеть, а затем обучать ее. Вы сможете это сделать, даже если у вас нет опыта программирования!
Ждите Часть 5!
Поддержите меня: https://stefanpircalabu.medium.com/membership
Подпишитесь на DDIntel Здесь.
Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate