Интеллект в айфоне. как нейронные сети в ios 10 и macos помогают apple быть лидерами

      Комментарии к записи Интеллект в айфоне. как нейронные сети в ios 10 и macos помогают apple быть лидерами отключены

Компания Apple применяет разработку машинного самообучения на собственных устройствах довольно продолжительное время: Siri отвечает на вопросы и развлекает пользователя, iPhoto выявит лица на фото, приложение Mail вычисляет письма, которые содержат спам. Как у разработчиков приложений, у нас имеется доступ к некоторым возможностям, представленным интерфейсом программирования приложений (API) Apple, к примеру, к распознаванию лиц. А начиная с iOS 10, мы возьмём высокоуровневый API для распознавания речи и SiriKit.

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

К примеру, мои сотрудники наладили в отечественном офисе входную совокупность, которая применяет iPad для распознавания лица, после этого постит гифку в беседе Slack и разрешает пользователям открыть дверь, применяя условную команду.

Интеллект в айфоне. как нейронные сети в ios 10 и macos помогают apple быть лидерами

Сейчас у нас имеется высококлассная помощь для нейронных сетей: на Интернациональной конференции разработчиков ПО (WWDC) 2016 компания Apple представила несколько, а два API, трудящихся на базе нейронных сетей; они именуются Basic Neural Network Subroutines (BNNS) и Convolutional Neural Networks (CNN).

нейронные сети и Машинное самообучение

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

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

Нейронные сети – одна из самые типичных моделей для совокупностей машинного самообучения. В то время, как математические базы нейронных сетей были обрисованы уже более полувека назад, в 1940-х гг., параллельная вычислительная обработка сделала их более настоящими в 1980-х, а интерес к глубокому изучению стал причиной восстановлению нейронных сетей в 2000-х.

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

Типы слоев

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

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

Свёрточный слой видоизменяет изображение, используя матрицу свёртки к каждому его пикселю. Если вы когда-нибудь применяли фильтры Pixelmator либо Photoshop, вы точно сталкивались с таковой матрицей. В большинстве случаев, она имеет размеры 3х3 либо 5х5 и используется к пикселям входной картины, дабы вычислить количества новых пикселей на выходной картине. Для того, чтобы получить объем выходного изображения, мы перемножим количества пикселей исходного изображения и посчитаем среднее арифметическое.

К примеру, следующая матрица сделает изображение размытым:

1 1 1

1 1 1

1 1 1

Тогда как эта сделает его более четким:

0 -1 0

-1 5 -1

0 -1 0

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

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

Обучение нейронной сети и получение выводов

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

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

На данный момент новые API машинного обучения Apple смогут быть использованы для нейронных сетей, талантливых лишь только на получение выводов, но не на обучение. И все же образовательный IT-проект Big Nerd Ranch формирует классные вещи.

Интерфейс Accelerate: BNNS

Первый новый API есть частью совокупности Accelerate и именуется BNNS, что свидетельствует Basic Neural Network Subroutines (главные подпрограммы нейронной сети). BNNS есть дополнением к BLAS (Basic Linear Algebra Subroutines — базисные подпрограммы линейной алгебры), каковые употреблялись некоторыми сторонними разработчиками в приложениях по машинному обучению.

BNNS определяет слои в классе BNNSFilter. Интерфейс Accelerate поддерживает три типа слоев: свёрточный слой (созданный посредством функции BNNSFilterCreateConvolutionLayer), абсолютно взаимосвязанный слой (BNNSFilterCreateFullyConnectedLayer) и соединительный слой (BNNSFilterCreatePoolingLayer).

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

Один из подходов к обработке графических данных содержится в преобразовании изображения в векторный формат и передача его через абсолютно взаимосвязанный слой. При с информацией из базы данных MNIST, по окончании для того чтобы преобразования изображение 20×20 станет векторным на 400 значений.

Вот как именно рукописную цифру 1 возможно преобразовать в векторное изображение:

Ниже представлен пример кода для настройки абсолютно взаимосвязанного слоя, что принимает вектор размером 400 в качестве входных данных, применяет сигмовидную функцию активации и выводит вектор размером 25:

// input layer descriptor BNNSVectorDescriptor i_desc = { .size = 400, .data_type = BNNSDataTypeFloat32, .data_scale = 0, .data_bias = 0, }; // hidden layer descriptor BNNSVectorDescriptor h_desc = { .size = 25, .data_type = BNNSDataTypeFloat32, .data_scale = 0, .data_bias = 0, }; // activation function BNNSActivation activation = { .function = BNNSActivationFunctionSigmoid, .alpha = 0, .beta = 0, }; BNNSFullyConnectedLayerParameters in_layer_params = { .in_size = i_desc.size, .out_size = h_desc.size, .activation = activation, .weights.data = theta1, .weights.data_type = BNNSDataTypeFloat32, .bias.data_type = BNNSDataTypeFloat32, }; // Common filter parameters BNNSFilterParameters filter_params = { .version = BNNSAPIVersion_1_0; // API version is mandatory }; // Create a new fully connected layer filter (ih = input-to-hidden) BNNSFilter ih_filter = BNNSFilterCreateFullyConnectedLayer(i_desc, h_desc, in_layer_params, filter_params); float * i_stack = bir; // (float *)calloc(i_desc.size, sizeof(float)); float * h_stack = (float *)calloc(h_desc.size, sizeof(float)); float * o_stack = (float *)calloc(o_desc.size, sizeof(float)); int ih_status = BNNSFilterApply(ih_filter, i_stack, h_stack);

Интерфейс Metal!

Вторая нейронная сеть API есть частью совокупности Metal Performance Shaders (MPS). Тогда как Accelerate есть базой для исполнения стремительных вычислений на CPU, Metal доводит GPU до предела его возможностей. База интерфейса именуется CNN (Convolution Neural Network).

MPS поставляется с подобным комплектом APIs. Создание свёрточного слоя требует применения функций MPSCNNConvolutionDescriptor и MPSCNNConvolution. Функция MPSCNNPoolingMax обеспечит параметры соединительного слоя, а абсолютно взаимосвязанный слой будет создан при помощи функции MPSCNNFullyConnected. Функция активации определяется такими подклассами, как MPSCNNNeuron: MPSCNNNeuronLinear, MPSCNNNeuronReLU, MPSCNNNeuronSigmoid, MPSCNNNeuronTanH, MPSCNNNeuronAbsolute.

Сравнение BNNS и CNN

Таблица является списком функций активации в Accelerate и Metal:

Accelerate/BNNS

Metal Performance Shaders/CNN

BNNSActivationFunctionIdentity

BNNSActivationFunctionRectifiedLinear

MPSCNNNeuronReLU

MPSCNNNeuronLinear

BNNSActivationFunctionLeakyRectifiedLinear

BNNSActivationFunctionSigmoid

MPSCNNNeuronSigmoid

BNNSActivationFunctionTanh

MPSCNNNeuronTanH

BNNSActivationFunctionScaledTanh

BNNSActivationFunctionAbs

MPSCNNNeuronAbsolute

Функции объединения:

Accelerate/BNNS

Metal Performance Shaders/CNN

BNNSPoolingFunctionMax

MPSCNNPoolingMax

BNNSPoolingFunctionAverage

MPSCNNPoolingAverage

Accelerate и Metal снабжают весьма похожий комплект возможностей для нейронных сетей, исходя из этого выбор между ними будет зависеть от применяемого приложения. С учетом того, что графические процессоры (GPU) в большинстве случаев употребляются для нужных в машинном обучении вычислений, локальность данных может стать обстоятельством, по которой версия Metal CNN продемонстрирует нехорошие результаты, нежели Accelerate BNNS. Но в случае, если нейронная сеть трудится на базе данных, каковые были загружены в графический процессор при помощи MPSImage либо нового MPSTemporaryImage, при таких условиях Metal выглядит явным победителем.

Источник

Apple WWDC 2018 на русском: iOS 12, macOS Mojave, WatchOS 5 и другое


Интересные записи: