Искусственные нейронные сети, часть 2 - Понимание градиентного спуска (без математики)

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

Основным мотивом градиентного спуска является обновление весов и смещений для достижения точки, в которой значение функции затрат / потерь минимально. Это приводит к модели, которая способна делать почти правильные прогнозы. Значит, мы пытаемся оптимизировать функцию потерь.

Во-первых, давайте рассмотрим некоторые ключевые термины -

  • Функция затрат - также называется функцией потерь. Это ошибка, которую мы хотим минимизировать. Это зависит от ввода, весов, смещений и ошибки.
  • Производные - наклон в точке x. Он показывает скорость изменения функции на основе другой переменной. Это выражается как dy / dx. Они помогают узнать, как изменить значение x, чтобы сделать необходимое изменение y.
  • Глобальный минимум - точка, в которой значение функции стоимости почти равно нулю. Всегда есть один глобальный минимум.

  • Локальный минимум. Предполагается, что функция стоимости является выпуклой функцией, но это случается редко. Было бы много точек, которые будут иметь функцию минимальной стоимости. Может быть более 1 локального минимума.
  • Прямое распространение - ввод дает начальную информацию, а затем перемещается через каждый уровень сети к конечному выходному слою.

  • Обратное распространение - последний слой вычисляет ошибку, и ошибка возвращается через слои для вычисления градиента по отношению к другим переменным. Градиентный спуск использует это значение градиента для обучения.
  • Частные производные - в случаях, когда задействовано несколько входных данных, а функция f не является просто функцией x, но содержит несколько переменных. Он вычисляет изменение f, изменяя одну из нескольких переменных, сохраняя все остальное постоянным.

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

Но как определяется направление движения? Направление движения определяется значением x.

  • x ‹0, тогда производная f (x) будет меньше 0. На изображении выше точка будет на отрицательной стороне, и мы будем двигаться в правильном направлении.
  • x ›0, тогда производная f (x) будет больше 0. На изображении выше точка будет на положительной стороне, и мы будем двигаться влево.

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

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

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

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

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

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

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

Давайте рассмотрим шаги по обучению нейронной сети с помощью блок-схемы -

При реализации NN с использованием таких библиотек, как Keras и Tensorflow, реализация обратного распространения и оптимизации выполняется библиотекой, и вам не нужно об этом беспокоиться. Что вам нужно будет определить, так это количество слоев, выбор правильных функций активации, функций потери и предварительной обработки данных.

В следующей части мы рассмотрим реализацию NN с использованием Keras и Tensorflow.