ИНС, вдохновленная биологическим нейроном:

  • Дендриты получают сигналы от других нейронов
  • Аксон суммирует поступающие сигналы.
  • Когда сумма ›порог, ячейка срабатывает; то есть он передает сигнал по своему аксону другим клеткам.
  • Дендриты и тела клеток формируют поступающие сигналы.

Однослойный персептрон

• В BN дендриты получают сигналы от других нейронов.

• В ИНС. Здесь ввод осуществляется через узлы.

• В BN Сома суммирует входящие сигналы.

• Когда сумма ›порог, ячейка срабатывает; то есть он передает сигнал по своему аксону другим клеткам.

• В ИНС передаточная функция помогает определить выход нейрона, выход передаточной функции подается в последний блок.

x1, x2 и x3 - входные узлы однослойного перцептрона.

0,3 - вес, связанный с каждым узлом нейронной сети.

0,4 ​​- значение смещения для нейронной сети.

y =0.3x1 +0.3x2 +0.3x3–0.4

Здесь Y может быть положительным и отрицательным в зависимости от значений x1, x2 и x3.

В модели присутствует много слоев.

• Входной слой, Скрытый слой, Выходной слой.

• W13 - вес, связанный с x1

• W23 - вес, связанный с x2

• W33 - вес, связанный с x3

• b3 - смещение

• Out y23 = x1.w13 + x2.w23 + x3.w33

Структура простой трехслойной нейронной сети, показанной на рис. 4.1. Каждый нейрон одного слоя связан со всеми нейронами следующего слоя, но он умножается на так называемый вес, который определяет какая часть количества из предыдущего слоя должна быть передана данному нейрону следующего слоя. Конечно, вес не зависит от начального нейрона, но он зависит от начальной пары нейрон – нейрон-адресат. Это означает, что связь между нейроном N5 и нейроном M7 имеет вес wk, в то время как связь между нейронами N5 и M3 имеет другой вес, WJ.

Многослойный персептрон

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

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

Вернемся теперь к Рис. 4.1. Входной слой состоит из трех нейронов, каждый из которых может принимать одно входное значение, и они представлены переменными x1, x2, x3 (фактические входные значения будут значениями для этих переменных). Принятие ввода - единственное, что делает первый уровень. Каждый нейрон входного слоя может принимать один выходной сигнал. Возможно иметь меньше входных значений, чем входных нейронов (тогда вы можете передать 0 неиспользуемым нейронам), но сеть не может принимать больше входных значений, чем имеет входные нейроны.

Входные данные могут быть представлены как последовательность x1, x2,…, xn (которая фактически совпадает с вектором-строкой) или как вектор-столбец x: = (x1, x2,…, xn) ⊤. Это разные представления одних и тех же данных, и мы всегда будем выбирать такое представление, которое упрощает и ускоряет вычисление операций, которые могут нам понадобиться. В нашем выборе представления данных мы не ограничены ничем, кроме вычислительной эффективности.

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

Каждое соединение между нейроном j в слое k и нейроном m в слое n имеет вес, обозначаемый w kn jm, и, поскольку обычно из контекста ясно, какие слои затрагиваются, мы можем опустить верхний индекс и написать просто wjm. Вес регулирует, какая часть начального значения будет передана данному нейрону, поэтому, если входное значение равно 12, а вес целевого нейрона равен 0,25, пункт назначения получит значение 3.

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

Второй нейрон в слое 1 и третий нейрон в слое 2 с переменной с именем w23. Мы видим, что индекс сохраняет информацию о том, какие нейроны в слоях связаны, но можно спросить, где мы храним информацию, о каких слоях идет речь. Ответ очень прост, информация лучше всего хранится в имени матрицы в программном коде, например input_to_hidden_w. Обратите внимание, что мы можем назвать матрицу ее «математическим именем», например u или его «кодовым названием», например hidden_to_output_w. мы пишем матрицу весов, соединяющую два слоя, как указано выше.

Характеристики нейронной сети

Для полной спецификации нейронной сети нам понадобятся:

• Количество слоев в сети.

• Размер входных данных (напомним, что это то же самое, что и количество нейронов во входном слое)

• Количество нейронов в скрытом слое

• Количество нейронов в выходном слое

• Начальные значения весов

• Начальные значения смещений

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

Веса нейронной сети.

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

Где xi - входные данные, wi - веса, b - смещение, а z - логит. Второе уравнение определяет решение, которое обычно делается с учетом нелинейности, но здесь вместо этого используется двоичная ступенчатая функция (отсюда и название).

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

1. Выберите тренировочный кейс.

2. Если прогнозируемый результат совпадает с меткой вывода, ничего не делайте.

3. Если перцептрон предсказывает 0, а он должен был предсказывать 1, добавьте входной вектор к весовому вектору.

4. Если перцептрон предсказывает 1, а он должен был предсказывать 0, вычтите входной вектор из весового вектора.

В качестве примера возьмем входной вектор x = (0,3, 0,4) ⊤ и пусть смещение будет b = 0,5, веса w = (2, −3) ⊤ и target4 t = 1. Начнем с вычисления текущий результат классификации:

Сверточная нейронная сеть

Идея, которую реализовали ЛеКун и его команда, была старше и основывалась на идеях Дэвида Хьюбела и Торстена Вайзеля, представленных в их основополагающей статье 1968 года [2], которая принесла им Нобелевскую премию 1981 года по физиологии и медицине. Они исследовали зрительную кору головного мозга животных и обнаружили связь между деятельностью в небольшой, но четко определенной области мозга и деятельностью в небольших областях поля зрения. В некоторых случаях можно было даже точно определить нейроны, которые отвечали за часть поля зрения.

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

Идея рецептивного поля завершает третий и последний компонент, который нам нужен для построения сверточных нейронных сетей. Но какие у нас были две другие части? Первой была техническая деталь: преобразование изображений (2D-массивов) в векторы.

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

Вы можете увидеть иллюстрацию выравнивания изображения 3 на 3 в верхней части рис. 6.1. Второй компонент - это тот, который принимает вектор изображения и передает его одному рабочему нейрону, который будет отвечать за обработку. Вы можете понять, что мы можем использовать? Если вы сказали «логистическая регрессия», вы были правы! Однако мы будем использовать другую функцию активации, но структура будет такой же.

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

Если бы мы использовали 3D, мы бы назвали его пространственным, а для 4D или более - гиперпространственным. В литературе принято называть двумерный сверточный слой «пространственным», но это вызывает у человека чувство стыда.

Входные данные логистической регрессии (локальное поле восприятия) теперь также должны быть двухмерными, и по этой причине мы чаще всего используем 4, 9 и 16, поскольку они представляют собой квадраты 2 на 2, 3 на 3 и 4 на 4 соответственно. Шаг теперь представляет собой перемещение этого квадрата на изображении, начиная слева направо, а после его завершения на одну строку вниз, полностью влево без сканирования и начинайте сканирование слева направо (вы можете см. этапы этого процесса в верхней части рис. 6.2). Становится очевидным одно: теперь мы получим меньше результатов.

Если мы используем локальное рецептивное поле 3 на 3 для сканирования изображения 10 на 10, на выходе из локального рецептивного поля мы получим массив 8 на 8 (см. Нижнюю часть рис. 6.2). На этом сверточный слой завершен.

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

Его задача - решить, есть ли на картинке машина или нет. Посмотрим, как работает сеть. Первый слой принимает изображение 10 на 10, производит вывод (он имеет случайно инициализированные веса и смещение) размером 8 на 8, который затем передается второму сверточному слою (который имеет собственное локальное принимающее поле со случайно инициализированными весами и смещения, но мы решили сделать его также 3 на 3), что дает результат размером 6 на 6, и он передается третьему слою (который имеет третье локальное рецептивное поле).

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

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

Функции, карты и пулы

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

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

Простая, но полностью функциональная сверточная сеть с четырьмя слоями показана на рис. 6.3. Почему сверточные нейронные сети легче обучать? Ответ заключается в количестве используемых параметров. Пятиуровневая нейронная сеть с глубокими связями для MNIST имеет множество весов, 6 через которые нам необходимо распространяться в обратном направлении. Пятислойная сверточная сеть (содержащая только сверточные слои) со всеми воспринимающими полями 3 на 3 имеет 45 весовых коэффициентов и 5 смещений. Обратите внимание, что эту конфигурацию можно использовать для изображений произвольно большого размера: нам не нужно расширять входной слой (который в нашем случае является сверточным слоем), но нам понадобится больше сверточных слоев, чем для сжатия изображения. Даже если мы добавляем карты функций, обучение каждой карты функций не зависит от другой, то есть мы можем обучать ее параллельно.

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

Пример:

импортировать numpy как np

из keras.models импортировать последовательно

из keras.layers import Dense, Dropout, Activation, Flatten

из keras.layers импортировать Convolution2D, MaxPooling2D

из keras.utils импортировать np_utils

из keras.datasets

import mnist (train_samples, train_labels), (test_samples, test_labels) = mnist.load_data ()

train_samples = train_samples.reshape (train_samples.shape [0], 28, 28, 1)

test_samples = test_samples.reshape (test_samples.shape [0], 28, 28, 1)

train_samples = train_samples.astype (’float32’)

test_samples = test_samples.astype (’float32’)

train_samples = train_samples / 255

test_samples = test_samples / 255

c_train_labels = np_utils.to_categorical (train_labels, 10)

c_test_labels = np_utils.to_categorical (test_labels, 10)

convnet = Sequential () convnet.add (Convolution2D (32, 4, 4, Activation = 'relu', input_shape = (28,28,1))) convnet.add (MaxPooling2D (pool_size = (2,2))) convnet .add (Convolution2D (32, 3, 3, Activation = 'relu')) convnet.add (MaxPooling2D (pool_size = (2,2))) convnet.add (Dropout (0.3)) convnet.add (Flatten ()) convnet.add (Плотный (10, активация = 'softmax'))

convnet.fit (train_samples, c_train_labels, batch_size = 32, nb_epoch = 20, verbose = 1)

метрики = convnet.evaluate (test_samples, c_test_labels, verbose = 1)

Распечатать()

print («% s:% .2f %%»% (convnet.metrics_names [1], metrics [1] * 100))

прогнозы = convnet.predict (test_samples)

Инженер космической группы Пентагона: Абхиджит Налатхавада Мутт

Ссылки:

Введение в глубокое обучение, Сандро Сканси.