CNTK - концепции нейронной сети (NN)

В этой главе рассматриваются концепции нейронной сети в отношении CNTK.

Как мы знаем, несколько слоев нейронов используются для создания нейронной сети. Но возникает вопрос, как в CNTK можно моделировать слои NN? Это можно сделать с помощью функций слоя, определенных в модуле слоя.

Функция слоя

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

пример

С помощью следующих основных шагов мы можем создать самый простой тип слоя -

Step 1 - Во-первых, нам нужно импортировать функцию Dense layer из пакета слоев CNTK.

from cntk.layers import Dense

Step 2 - Далее из корневого пакета CNTK нам нужно импортировать функцию input_variable.

from cntk import input_variable

Step 3- Теперь нам нужно создать новую входную переменную с помощью функции input_variable. Нам также необходимо указать его размер.

feature = input_variable(100)

Step 4 - Наконец, мы создадим новый слой, используя функцию Dense вместе с указанием количества нейронов, которое мы хотим.

layer = Dense(40)(feature)

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

Полный пример реализации

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

Настройка слоев

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

Шаги по настройке плотного слоя

Каждый слой в NN имеет свои уникальные параметры конфигурации, и когда мы говорим о плотном слое, мы должны определить следующие важные параметры:

  • shape - Как следует из названия, он определяет выходную форму слоя, которая дополнительно определяет количество нейронов в этом слое.

  • activation - Он определяет функцию активации этого слоя, поэтому он может преобразовывать входные данные.

  • init- Он определяет функцию инициализации этого слоя. Он инициализирует параметры слоя, когда мы начнем обучение NN.

Давайте посмотрим на шаги, с помощью которых мы можем настроить Dense слой -

Step1 - Во-первых, нам нужно импортировать Dense Layer function из пакета слоев CNTK.

from cntk.layers import Dense

Step2 - Далее из пакета CNTK ops нам нужно импортировать sigmoid operator. Он будет использоваться для настройки в качестве функции активации.

from cntk.ops import sigmoid

Step3 - Теперь из пакета инициализатора нам нужно импортировать glorot_uniform инициализатор.

from cntk.initializer import glorot_uniform

Step4 - Наконец, мы создадим новый слой, используя функцию Dense вместе с указанием количества нейронов в качестве первого аргумента. Также предоставьтеsigmoid оператор как activation функция и glorot_uniform как init функция для слоя.

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Пример полной реализации -

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Оптимизация параметров

До сих пор мы видели, как создать структуру NN и как настроить различные параметры. Здесь мы увидим, как мы можем оптимизировать параметры NN. С помощью комбинации двух компонентов, а именноlearners и trainers, мы можем оптимизировать параметры сети.

компонент тренера

Первый компонент, который используется для оптимизации параметров сети, - это trainerсоставная часть. Он в основном реализует процесс обратного распространения ошибки. Если говорить о его работе, он передает данные через NN для получения прогноза.

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

компонент учащегося

Второй компонент, который используется для оптимизации параметров сети, - это learner компонент, который в основном отвечает за выполнение алгоритма градиентного спуска.

Учащиеся включены в библиотеку CNTK

Ниже приводится список некоторых интересных учеников, включенных в библиотеку CNTK.

  • Stochastic Gradient Descent (SGD) - Этот учащийся представляет базовый стохастический градиентный спуск без каких-либо дополнений.

  • Momentum Stochastic Gradient Descent (MomentumSGD) - С SGD этот учащийся применяет импульс, чтобы преодолеть проблему локальных максимумов.

  • RMSProp - Этот учащийся, чтобы контролировать скорость спуска, использует снижающуюся скорость обучения.

  • Adam - Этот ученик, чтобы со временем снизить скорость спуска, использует затухающий импульс.

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