Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Дмитрий Сошников «Искусственный интеллект и нейросети для.NET-разработчиков»

DotNetRu
December 16, 2017

Дмитрий Сошников «Искусственный интеллект и нейросети для.NET-разработчиков»

Искусственный интеллект сейчас является одной из самых обсуждаемых тем и главным двигателем цифровой трансформации бизнеса. Стратегия Microsoft в области ИИ включает в себя демократизацию ИИ для разработчиков, т.е. предоставление простых в использовании фреймворков и сервисов для решения интеллектуальных задач. Мы расскажем, как .NET-разработчики могут использовать возможности ИИ в своих проектах: начиная от готовых когнитивных сервисов, работающих в облаке, заканчивая обучением нейросетей на .NET-языках и запуском сложных нейросетевых моделей на компактных устройствах типа Raspberry Pi.

DotNetRu

December 16, 2017
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. Microsoft и AI §Achieving human parity for Speech Recognition §

    https://arxiv.org/abs/1610.05256 §Winners in ImageNet 2015 Challenge § http://image-net.org/challenges/LSVRC/2015/results § Proposal of deep residual networks => human parity in image recognition §Project Brainwave § Running AI on FPGA chips in the cloud § https://www.microsoft.com/en-us/research/blog/microsoft-unveils-project- brainwave/
  2. Немного про терминологию Глубокое обучение Нейросети Машинное обучение Искусственный интеллект

    Почти всё, что вы слышали в последние годы под названием Искусственный интеллект – это нейросети
  3. MNIST DataSet 28 x 28 пикселей Градации серого: 0 =

    чёрный, 255 - белый Плоские записи: цифра + 784 пикселей Формат CSV Обучающая выборка - 50,000 примеров http://www.kaggle.com/c/digit-recognizer
  4. Подводим итоги Func<int[], int[], int> dist = (a, b) =>

    a.Zip(b, (x, y) => { return (x - y) * (x - y); }).Sum(); Func<int[], int> classify = (im) => train.MinBy(d => dist(d.Image, im)).Label; Алгоритм Точность KNN 94%
  5. Accord.NET Математические функции • Матрицы • Статистика Машинное обучение •

    Классические алгоритмы • Нейронные сети • Глубокое обучение Обработка звука Обработка изображений • Выделение объектов и лица (Haar Cascade) Элементы визуализации http://accord-framework.net
  6. Подводим итоги var svm = new MulticlassSupportVectorLearning<Linear>(); var classifier =

    svm.Learn( (from x in train select x.Image.Select(z => (double)z).ToArray()).ToArray(), (from x in train select x.Label).ToArray()); Алгоритм Точность KNN (Accord) 94% SVM (Accord) 92% • Взаимозаменяемые различные алгоритмы обучения • Не очень быстрые и эффективные реализации нейронных сетей
  7. Самое важное про нейронные сети • В последние годы нейросети

    считают синонимом ИИ • Всё, что вы видели в когнитивных сервисах – нейронные сети • Нейросеть – это не магия, а всего лишь способ оптимизации функций • Часто работа нейросети выглядит как магия • Для серьезных экспериментов нужны большие данные и вычислительные ресурсы => облако
  8. Нейронные сети X1 X2 X3 Y1 Y2 Y3 Y4 Z1

    Z2 w11 u11 u21 u31 u32 u42 = + ( = ) +( + , +-. + ( = +
  9. Реализация нейронной сети Вручную Надо явно программировать алгоритм обратного распространения

    Для сложных сетей хорошо бы поддерживать вычисления на GPU/кластерах Использование фреймворков Задаётся только «прямая» формула для вычисления сети Обратное распространение и обучение производится автоматически Поддерживаются различные среды вычислений Наиболее популярные фреймворки TensorFlow (Google), Cognitive Toolkit / CNTK (Microsoft), Caffe, Torch, Theano
  10. Microsoft Cognitive Toolkit / CNTK Инструментарий для обучения и использования

    нейронных сетей, в т.ч. глубокого обучения Может использовать CPU, GPU Несколько CPU Несколько GPU на одном компьютере Несколько GPU на нескольких компьютерах http://cntk.ai, http://github.com/microsoft/cntk
  11. Microsoft Cognitive Toolkit CNTK § Утилита для тренировки сетей cntk.exe

    § Библиотека для использования (C#, C++) § Язык описания сетей BrainScript § Надо устанавливать CNTK на ПК (с GPU или без) § Спец. входной формат для данных § Интерфейс с Python для обучения и использования сетей § Конфигурация сети описывается программой на Python § Можно использовать Azure Notebook или Jupyter Notebook на машине с GPU
  12. Как обучать нейросети VM с GPU в Azure • N-Series

    VM • NC – специально для вычислений (дефицит!) • NV – для визуализации • Готовые конфигурации • Data Science Virtual Machine • Windows 2016, Linux • Deep Learning Virtual Machine • Доступность в дата-центрах • https://azure.microsoft.com/en- us/pricing/details/virtual-machines/ Выделенный ПК • Nvidia GPU • GTX 1070 • GTX 1080 (Ti) • Titan X • http://bit.ly/deeplearnbox
  13. CNTK vs. TensorFlow vs. Keras Low-Level Tensors Data Readers Optimizers

    Python / .NET API ddC++ High Perf Library Low-Level Tensors Data Readers Optimizers Python API ddC++ High Perf Library High-Level Layers API Python Library High-Level Layers API CNTK TensorFlow Keras
  14. Нейронные сети X1 X2 X3 Y1 Y2 Y3 Y4 Z1

    Z2 w11 u11 u21 u31 u32 u42 = + ( = ) +( + , +-. + ( = +
  15. Обучение нейронной сети Variable features = Variable.InputVariable(768,…); Variable label =

    Variable.InputVariable(10,…); var W = new Parameter({ 10, 768 }, …); var b = new Parameter({ 10 }, …); var z = CNTKLib.Times(W,features)+b; Описание архитектуры сети var loss = CNTKLib.CrossEntropyWithSoftmax(z, label); var evalErr = CNTKLib.ClassificationError(z, label); var l = new Learner[]{Learner.SGDLearner(z.Parameters)} var trainer = Trainer.CreateTrainer(z,loss, evalErr,l); Функции потерь и оптимизатор foreach (epoch) { ft = NextBatchFeatures(); lb = NextBatchLabels(); trainer.TrainMinibatch( new Dictionary<Variable, Value>() { { features, ft }, { label, lb } }); } Цикл обучения features = input_variable(input_dim, np.float32) label = input_variable(output_dim, np.float32) W = parameter(shape=(input_dim, output_dim)) b = parameter(shape=(output_dim)) z = times(features,W)+b Описание архитектуры сети loss = cntk.cross_entropy_with_softmax(z, label) eval_error = cntk.classification_error(z, label) learner = sgd(z.parameters,…) trainer = Trainer(z, (loss, eval_error), [learner]) Функции потерь и оптимизатор for (epoch in …) ft = NextBatchFeatures(); lb = NextBatchLabels() trainer.train_minibatch({features: ft},{label:lb}) Цикл обучения
  16. Основные задачи и архитектуры сетей Задача Класс сетей Обычная классификация

    / регрессия Feed-forward / Fully Connected (DNN) Распознавание изображений Convolutional / Свёрточная (CNN) Выделение объектов на изображении Fast R-CNN (Region CNN) Анализ последовательностей (речь, текст) Рекуррентная (RNN) Машинный перевод Sequence-to-Sequence, RNN+RNN Описание изображения CNN + RNN Стилизация изображения Style Transfer
  17. На .NET есть инструменты, позволяющие использовать машинное обучение и нейронные

    сети: Accord.NET, CNTK .NET API Для работы с данными полезно использовать F#, Azure Notebooks (F#), C# Interactive, Xamarin Workbook Для обучения нейросетей в облаке Microsoft Azure существуют настроенные виртуалки с GPU 1 2 3