Глубокие нейронные сети

Глубокие нейронные сети - это нейронные сети со многими скрытыми слоями. Количество скрытых слоев в такой сети может составлять от 3 до нескольких сотен. Первый вопрос, который возникает у нас в голове: Зачем нам нужно столько скрытых слоев?. Ответ на этот вопрос состоит в том, что мы хотим, чтобы нейронная сеть обучалась сложным функциям. Первые несколько уровней глубокой сети изучают простые функции, а по мере того, как мы углубляемся, сеть изучает различные сложные функции, которые обычно непонятны людям. В этом посте давайте разберемся с работой глубоких нейронных сетей в математическом контексте. Ниже представлена ​​четырехуровневая глубокая нейронная сеть, которую я хотел бы рассмотреть для дальнейших объяснений.

Представление

Количество слоев L = 4. Это сумма скрытых слоев и выходного слоя. Здесь у нас есть три скрытых слоя и один выходной слой.

Количество нейронов в слое l представлено как n [l] . Вот,

  • n [0] = 3, т. е. количество функций в обучающем наборе данных.
  • n[1] = 4
  • n[2] = 4
  • n[3] = 3
  • n [4] = 1, т. е. количество выходных классов.

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

Веса и смещение, связанные со слоем l, могут быть представлены матрицами W [l] и b [l] соответственно. Размерность матрицы W [l] = (n [l], n [l - 1]). Это потому, что все входящие веса в конкретный нейрон расположены в одной строке, и для каждого нейрона, присутствующего в этом слое, есть строка. Поскольку с каждым нейроном связано смещение, размерность матрицы b [l] = (n [l], 1). Следовательно, мы имеем

  • Матрица W [1] = (4,3) и матрица b [1] = (4,1)
  • Матрица W [2] = (4,4) и матрица b [2] = (4,1)
  • Матрица W [3] = (3,4) и матрица b [3] = (3,1)
  • Матрица W [4] = (1,3) и матрица b [4] = (1,1)

Активации слоя l представлены матрицей A [l]. Активацию нейрона можно рассматривать как выход этого нейрона. Следовательно, форма зависит от данных, которые мы передаем нейрону. В общем, размерность матрицы A [l] = (n [l], m), где m - количество обучающих примеров.

Возникает вопрос: Почему бы не использовать всего несколько слоев и не поместить в них много нейронов? Ответ на этот вопрос лежит в теории цепей. Теория схем утверждает, что нам требуется экспоненциальное количество нейронов в неглубокой сети, которая достигает такой же точности, как и в глубокой сети. Поэтому, чтобы избежать этого экспоненциального фактора и позволить сети изучать сложные функции, мы предпочитаем глубокую сеть, состоящую из множества скрытых слоев.

Методология

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

Прямое распространение

Шаги, по которым мы вычисляем выход из входа, известны как прямое распространение. Он использует входную матрицу X, матрицы весов W [1], W [2], , W [L] и матрицы смещения b [1], b [2], , b [L]. Математически мы вычисляем результат, используя следующие уравнения:

В приведенных выше уравнениях функция g (x) представляет функцию активации. Каждый уровень может использовать свою функцию активации, поэтому они представлены как g [i] (x). Если вы заметили, приведенные выше уравнения следуют тенденции и могут быть обобщены с помощью следующих уравнений:

Обратное распространение

Способ обновления весов и смещения сети известен как обратное распространение. На этом этапе нейронная сеть «учится» с помощью градиентного спуска. Градиентный спуск использует производные вычисления при прямом распространении, чтобы минимизировать потери, а затем обновляет веса и смещения сети. Каждый шаг обратного распространения можно обобщить с помощью следующих уравнений:

В приведенных выше уравнениях «*» представляет собой поэлементное умножение, тогда как «.» представляет собой матричное умножение. Вывод приведенных выше уравнений требует детального понимания математического анализа и выходит за рамки этой статьи. Вы можете обратиться к моим предыдущим сообщениям, чтобы получить четкое представление о том, как они получены. Более того, я бы порекомендовал читателям, которые разбираются в математическом анализе, самостоятельно вывести уравнения для лучшего понимания темы.



Обновление весов и отклонений

Теперь, когда у нас есть производные от весов и смещения, мы обновляем их, используя следующие уравнения:

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

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

Подводя итоги

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

использованная литература

  1. Википедия - Скорость обучения
  2. Coursera - Курс глубокого обучения 1

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