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 - Этот учащийся, как для часто, так и для редко встречающихся функций, использует разные скорости обучения.