rxNeuralNet: нейронная сеть

Нейронные сети для регрессионного моделирования и для двоичной и многоклассовой классификации.

Использование

  rxNeuralNet(formula = NULL, data, type = c("binary", "multiClass",
    "regression"), numHiddenNodes = 100, numIterations = 100,
    optimizer = sgd(), netDefinition = NULL, initWtsDiameter = 0.1,
    maxNorm = 0, acceleration = c("sse", "gpu"), miniBatchSize = 1,
    normalize = "auto", mlTransforms = NULL, mlTransformVars = NULL,
    rowSelection = NULL, transforms = NULL, transformObjects = NULL,
    transformFunc = NULL, transformVars = NULL, transformPackages = NULL,
    transformEnvir = NULL, blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 1,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

Аргументы

formula

Формула, описанная в статье, посвященной rxFormula. Условия взаимодействия и F() в настоящее время не поддерживаются в MicrosoftML.

data

Объект источника данных или символьная строка, указывающая файл .xdf или объект кадра данных.

type

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

  • "binary" для нейронной сети с двоичной классификацией по умолчанию.
  • "multiClass" для нейронной сети с многоклассовой классификацией по умолчанию.
  • "regression" для нейронной сети с регрессией.

numHiddenNodes

Число скрытых узлов в нейронной сети по умолчанию. По умолчанию используется значение 100.

numIterations

Число итераций в полном наборе обучения. По умолчанию используется значение 100.

optimizer

Список, указывающий алгоритм оптимизации sgdили adaptive. Этот список можно создать с помощью sgd или adaDeltaSgd. Значение по умолчанию — sgd.

netDefinition

Определение структуры нейронной сети на языке Net#. Дополнительные сведения о языке Net# см. на странице Reference Guide

initWtsDiameter

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

maxNorm

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

acceleration

Задает тип используемого аппаратного ускорения. Возможные значения: sse и gpu. Для ускорения GPU рекомендуется использовать параметр miniBatchSize со значением, превышающим единицу. Если вы хотите использовать ускорение GPU, необходимо выполнить дополнительные действия по настройке вручную.

  • Скачайте и установите NVidia CUDA Toolkit 6.5 (CUDA Toolkit).
  • Скачайте и установите библиотеку NVidia cuDNN версии 2 (cudnn Library).
  • Найдите каталог библиотек в пакете MicrosoftRML, вызвав system.file("mxLibs/x64", package = "MicrosoftML").
  • Скопируйте файлы cublas64_65.dll, cudart64_65.dll и cusparse64_65.dll из набора инструментов CUDA версии 6.5 в каталог библиотек пакета MicrosoftML.
  • Скопируйте файл cudnn64_65.dll из библиотеки cuDNN версии 2 в каталог библиотек пакета MicrosoftML.

miniBatchSize

Задает размер мини-пакета. Рекомендуемые значения — от 1 до 256. Этот параметр используется только в том случае, если для ускорения применяется GPU. При указании более высокого значения может увеличиться скорость обучения, но уменьшиться точность. Значение по умолчанию — 1.

normalize

Указывает тип используемой автоматической нормализации:

  • "auto": если требуется нормализация, она выполняется автоматически. Это значение по умолчанию.
  • "no": нормализация не выполняется.
  • "yes": нормализация выполняется.
  • "warn": если требуется нормализация, отображается предупреждение, но нормализация не выполняется.
    Нормализация подгоняет разрозненные диапазоны данных к стандартному масштабу. Масштабирование признаков гарантирует, что расстояния между точками данных пропорциональны, и включает различные методы оптимизации (например, градиентный спуск) для ускоренного схождения. Если нормализация выполняется, используется нормализатор MaxMin. Он нормализует значения в интервале [a, b], где -1 <= a <= 0, 0 <= b <= 1 и b - a = 1. Этот нормализатор сохраняет степень незаполненности, сопоставляя ноль с нолем.

mlTransforms

Указывает список преобразований MicrosoftML, которые необходимо выполнить до обучения, или значение NULL, если преобразования выполнять не нужно. Сведения о поддерживаемых преобразованиях см. на страницах о функциях featurizeText, categorical и categoricalHash. Эти преобразования выполняются после любых заданных преобразований R. Значение по умолчанию — NULL.

mlTransformVars

Указывает символьный вектор имен переменных, используемых в mlTransforms, или значение NULL, если их не нужно использовать. Значение по умолчанию — NULL.

rowSelection

Указывает записи (наблюдения) из набора данных, которые будут использоваться моделью с именем логической переменной из набора данных (в кавычках) или логическим выражением с указанием переменных в наборе данных. Например, rowSelection = "old" будет использовать только те наблюдения, в которых значение переменной old равно TRUE. rowSelection = (age > 20) & (age < 65) & (log(income) > 10) использует только те наблюдения, в которых значение переменной age находится в диапазоне от 20 до 65, а значение log переменной income больше 10. Выбор записей осуществляется после обработки всех преобразований данных (см. аргументы transforms или transformFunc). Как и все выражения, rowSelection можно определить вне вызова функции с помощью функции выражения.

transforms

Выражение формы list(name = expression, ``...), представляющее первый цикл преобразования переменных. Как и все выражения, transforms (или rowSelection) можно определить за пределами вызова функции с помощью функции выражения.

transformObjects

Именованный список с объектами, на которые можно ссылаться с помощью transforms, transformsFunc и rowSelection.

transformFunc

Функция преобразования переменной. Дополнительные сведения см. на странице, посвященной rxTransform.

transformVars

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

transformPackages

Символьный вектор, определяющий дополнительные пакеты R (за исключением пакетов, указанных в rxGetOption("transformPackages")), которые будут доступны и предварительно загружены для использования в функциях преобразования переменных. Например, пакеты, явно определенные в функциях RevoScaleR через аргументы transforms и transformFunc или неявно определенные через аргументы formula или rowSelection. Аргумент transformPackages также может иметь значение NULL, указывающее на то, что пакеты, указанные за пределами rxGetOption("transformPackages"), не будут предварительно загружаться.

transformEnvir

Определяемая пользователем среда, выступающая в роли родительской среды для всех разработанных внутренних сред и используемая для преобразования данных переменных. Если указано значение transformEnvir = NULL, используется новая среда hash с родительской средой baseenv().

blocksPerRead

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

reportProgress

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

  • 0 — информирование не осуществляется.
  • 1 — выводится и обновляется число обработанных записей.
  • 2 — выводятся данные об обработанных записях и времени обработки.
  • 3 — выводятся данные об обработанных записях и все данные о времени обработки.

verbose

Целочисленное значение, указывающее требуемый объем выходных данных. Если задано значение 0, при вычислениях подробные выходные данные не выводятся. Целочисленные значения из диапазона от 1 до 4 позволяют увеличить объем информации.

computeContext

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

ensemble

Параметры управления для сборки.

...

Дополнительные аргументы, передаваемые непосредственно в Microsoft Compute Engine.

Сведения

Нейронная сеть — это класс моделей прогнозирования, в основе которых лежат методы работы человеческого мозга. Нейронная сеть может быть представлена в виде взвешенного ориентированного графа. Каждый узел в графе называется нейроном. Нейроны в графе упорядочены по слоям, и нейроны в одном слое соединяются весовым ребром с нейронами в следующем слое (веса могут иметь положительные значения или значение 0). Первый слой называется входным слоем, и каждый нейрон во входном слое соответствует одному из признаков. Последний слой называется выходным слоем. Таким образом, в случае двоичных нейронных сетей мы имеем два выходных нейрона, по одному для каждого класса, значения которых представляют собой вероятности принадлежности к каждому классу. Оставшиеся слои называются скрытыми слоями. Значения нейронов в скрытых слоях и на выходном слое задаются путем вычисления взвешенной суммы значений нейронов в предыдущем слое и применения функции активации к этой взвешенной сумме. Модель нейронной сети определяется структурой ее графа (а именно, числом скрытых слоев и числом нейронов в каждом скрытом слое), выбором функции активации и весовыми коэффициентами на ребрах графа. Алгоритм нейронной сети пытается определить оптимальные веса на ребрах на основе данных обучения.

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

Значение

rxNeuralNet — объект rxNeuralNet с обученной моделью.
NeuralNet — объект спецификации обучения класса maml для модуля обучения нейронной сети.

Примечания

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

Авторы

Корпорация Майкрософт Microsoft Technical Support

Ссылки

Wikipedia: Artificial neural network

См. также

rxFastTrees, rxFastForest, rxFastLinear, rxLogisticRegression, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.mlModel.

Примеры


 # Estimate a binary neural net
 rxNeuralNet1 <- rxNeuralNet(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert)

 # Score to a data frame
 scoreDF <- rxPredict(rxNeuralNet1, data = infert, 
     extraVarsToWrite = "isCase",
     outData = NULL) # return a data frame

 # Compute and plot the Radio Operator Curve and AUC
 roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF) 
 plot(roc1)
 rxAuc(roc1)

 #########################################################################
 # Regression neural net

 # Create an xdf file with the attitude data
 myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
 rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
 myXdfDS <- RxXdfData(file = myXdf)

 attitudeForm <- rating ~ complaints + privileges + learning + 
     raises + critical + advance

 # Estimate a regression neural net 
 res2 <- rxNeuralNet(formula = attitudeForm,  data = myXdfDS, 
     type = "regression")

 # Score to data frame
 scoreOut2 <- rxPredict(res2, data = myXdfDS, 
     extraVarsToWrite = "rating")

 # Plot the rating versus the score with a regression line
 rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)

 # Clean up   
 file.remove(myXdf)    

 #############################################################################
 # Multi-class neural net
 multiNN <- rxNeuralNet(
     formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
     type = "multiClass", data = iris)
 scoreMultiDF <- rxPredict(multiNN, data = iris, 
     extraVarsToWrite = "Species", outData = NULL)    
 # Print the first rows of the data frame with scores
 head(scoreMultiDF)
 # Compute % of incorrect predictions
 badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
 sum(badPrediction)*100/nrow(scoreMultiDF)
 # Look at the observations with incorrect predictions
 scoreMultiDF[badPrediction,]