Инструменты для машинного обучения через нейросети (Machine learning via neural networks)

Автор: | 29.12.2020

Введение

Нейросети — один из видов машинного обучения (см. Машинное обучение для людей). Краткая вводная информация о том, что такое НС, для чего нужны и какие бывают см. в статье От регрессии к нейронным сетям.

Прежде, чем переходить к профессиональному машинному обучению через нейросети, рекомендуется ознакомиться с основами построения нейронных сетей на Python (numpy) в Visual Studio.  Можете использовать один из 3-х примеров хорошо структурированных программ работы нейронной сети на основе библиотеки  numpy как шаблон для создания собственных приложений.

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

Сама по себе конструкция нейронной сети простая. Самое сложное в ней — это понять алгоритм обратного распространения ошибки и что такое функция потерь (см. также Функции оценки). Посмотрите также статью Эпоха, батч, итерация — в чем различия?. Прослушайте видеоролик Обучение нейронной сети на Python.

Необходимые навыки инженера по машинному обучению (из вакансии)

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

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

Требования:

  • Алгоритмы и структуры данных, в частности графы
  • Основы глубокого обучения: свертка, функция активации, потеря
  • Python (обязательно)
  • Опыт работы хотя бы с одной средой глубокого обучения: PyTorch, TensorFlow или Caffe.
  • Хорошие навыки программирования на Python (плюсом будет знание C ++).
  • Владение numpy, scipy, opencv
  • Более 3 лет опыта создания сетей и обработки данных в Tensorflow, Keras, Torch, Scikit-Learn, MLlib, Pandas, Caffe, Theano.
  • Опыт работы в облачных средах с такими платформами и фреймворками, как AWS, Google BigQuery, Azure Data Lake Analytics, Spark, Kafka,  GCP (Google Cloud Platform), Computer Vision AutoML Tables, Kubernetes
  • Знание компьютерного зрения, обработки изображений и видео, визуальное понимание.
  • Знакомство с принципами работы трехмерного зрения, основанного на структурированном свете, полезный опыт работы с интерференционной проекцией
  • Знакомство с архитектурами для задач классификации: CNN, Faster R-CNN, ResNet; детекции: YOLO, HOG; сегментация: U-Net, DeepLab, PSPNet;
  • Знание аналитических концепций, таких как — регрессия, кластеризация, классификация, модели на основе дерева и / или другие методы машинного обучения.
  • Понимание методов глубокого обучения (CNN, RNN, GAN, обучение с подкреплением)
  • Хорошее понимание машинного обучения: вы должны быть знакомы с процессом (сбор данных, обучение, оценка и внесение итерационных улучшений) построения эффективных систем обучения.
  • Опыт разработки алгоритмов глубокого обучения
  • Опыт работы с Linux
  • Уверенное знание распространенных подходов к нейронным сетям, таких как обнаружение/сегментация/отслеживание объектов и т. д.
  • Предыдущий опыт восстановления и улучшения изображений (например, суперразрешение, шумоподавление, удаление размытия и т. д.), других манипуляций с изображениями или моделей image2image — например, переход от лета к зиме, от дня к ночи и т. д.
  • Предыдущий опыт работы с моделями генерации изображений — например, GAN, диффузионными моделями, трансформаторами и т. д.
  • Глубокие знания и проверенный практический опыт в соответствующей области исследований, такой как машинное обучение, компьютерное зрение;
  • Solid Experience проектирование и разработка приложений для искусственного интеллекта и машинного обучения;
  • Глубокое понимание алгоритмов машинного обучения и глубоких сетей;
  • Опыт работы с некоторыми известными архитектурами нейронных сетей, такими как Yolo/SSD, MobileNet, U-Net, Hourglass, RetinaNet, архитектуры на основе R-CNN;
  • Сильные знания основ машинного обучения, т. е. моделей регрессии, деревьев решений, наивного Байеса, алгоритмов кластеризации (k-means, DBSCAN, SOM), уменьшения размерности (PCA, t-SNE), а также хорошее понимание сильных и слабых сторон конкретных подходов. Хорошая основа в базовой статистике и линейной алгебре;
  • Глубокие знания классических основ компьютерного зрения, т.е. OpticalFlow, HOG, алгоритмов обнаружения признаков, преобразования Хафа, гомографии, морфологии, шумоподавления/удаления размытия и алгоритмов обработки изображений;
  • Уверенное знание Python;
  • Большой практический опыт работы с фреймворками DL/CV, такими как OpenCV, PyTorch, Tensorflow, MXNet или Keras;
  • Всестороннее знание экосистемы анализа данных Python (Pandas, Numpy, Scikit-learn и т. д.);
  • Как минимум небольшой опыт работы с инструментами визуализации Python (matplotlib/seaborn, Plotly);
  • Понимание современных подходов CV для таких задач, как обнаружение/отслеживание объектов, анализ видео, семантическая сегментация, оценка позы, оптическое распознавание символов;
  • Опыт работы с легкими веб-фреймворками для раскрытия методов DL, таких как Flask и Dash;
  • Обязательный уровень владения английским языком выше среднего.
Будет плюсом:
  • Опыт работы с С++;
  • Опыт работы со следующими современными архитектурами нейронных сетей: LSTM и другие на основе RNN, Transformers (BERT и т. д.);
  • Знакомство с анализом прогнозирования/обнаружения аномалий временных рядов, обработкой естественного языка, обработкой сигналов;
  • Понимание подходов SOTA к задачам машинного обучения, таким как неконтролируемое/полуконтролируемое обучение;
  • Опыт работы со следующими фреймворками: DLib, Darknet, Theano;
  • Знание модели процессов CRISP-DM;
  • Опыт работы с инструментами непрерывной интеграции и управления релизами, желательно на платформе AWS;
  • Опыт работы с системами управления версиями и контроля для проведения экспериментов, такими как DVC и т.д.;
  • Практический опыт работы с общей архитектурой системы MLOps с помощью Hadoop, Docker, Kubernetes, облачных сервисов и опыт управления жизненным циклом производственного машинного обучения.

Возможные вопросы на собеседовании относительно вашего опыта:

  1. Какие использовали loss функции для нейросетей?
  2. Какие знаете «backbones» (feature extractor)?
  3. С какими детекторами работали?

Полезные ссылки:

Введение в TensorFlow и Keras

TensorFlow — один из многих пакетов, используемых разработчиками для облегчения работы с машинным обучением и повышения его эффективности. Если раньше (при использовании библиотеки numpy) нам надо было создавать свои классы, чтобы хранить информацию о весах нейрона, объединять их в слои и еще добавлять туда алгоритмы обучения то теперь все это есть в TensorFlow (см. Tensorflow, Python, Visual Studio. Quick start).

Называется Tensorflow, потому что он принимает входные данные в виде многомерного массива, также известного как тензоры. Вы можете создать своего рода блок-схему операций (называемую «График»), которую вы хотите выполнить с этим вводом. Вход вводится на одном конце, а затем он проходит через эту систему множества операций и выходит на другом конце в качестве вывода.

Подробнее см.  Что такое Tensorflow? Примеры применения (youtube)

Используя TensorFlow вы подниметесь на качественно новый уровень машинного обучения при помощи НС (по сравнению с numpy). Чтобы в этом убедиться, посмотрите видеоролик Обнаружение объектов с использованием Tensor Flow (youtube).

Keras — это API глубокого обучения на Python, которое облегчает использование TensorFlow.

Конструировать нейронные сети на TensorFlow становится проще, если знать о надстройке Keras. Она удобна и отличается простотой прототипирования, чего раньше очень недоставало TensorFlow. API tf.keras понравится всем, кто предпочитает объектно-ориентированное программирование и послойное моделирование нейросетей. За несколько строчек кода можно создать нейросеть прямого распространения с помощью стандартных методов, таких как регуляризация (см. Глубокое обучение для новичков: тонкая настройка нейронной сети).

Keras является API, который может работать поверх TensorFlow , CNTK или Теано. С выпуском Keras 2.3.0 он стал синхронизированным с TensorFlow.  Поэтому в дальнейшем рекомендуется переключить код с пакетами keras через пакеты Tensorflow2.0 (tf.keras…).

Keras — рекомендуемая библиотека для глубокого изучения Python, особенно для начинающих. Его минималистичный, модульный подход позволяет с легкостью построить и запустить глубокие нейронные сети (см. Code examples).

TensorFlow несмотря на свои неоспоримые достоинства имеет и ряд недостатков (см. TensorFlow Sad Story).

Введение в PyTorch

В отличие от большинства других популярных систем глубокого обучения, таких как TensorFlow, которые используют статические графы вычислений, PyTorch использует динамические вычисления, что обеспечивает большую гибкость при построении сложных архитектур. Pytorch использует основные понятия Python, такие как классы, структуры и условные циклы, которые нам знакомы, а значит, более интуитивны для понимания. Это делает его намного проще, чем другие фреймворки, такие как TensorFlow, которые привносят свой собственный стиль программирования (см. Введение в Py Torch)

Ссылки:

Введение в Scikit-Learn

Библиотека Scikit-Learn ориентирована на моделирование данных (см. Нежное введение в Scikit-Learn). Она построена на SciPy (Scientific Python) — фундаментальная библиотека для научных вычислений. Scikit-learn предоставляет ряд контролируемых и неконтролируемых алгоритмов обучения через согласованный интерфейс с базовыми пакетами Python:

  • NumPy — для работы с n-мерными массивами
  • Matplotlib — для визуализации данных через 2D и 3D графику
  • IPython — улучшенная интерактивная консоль
  • SymPy — символьная математика
  • Pandas- для извлечения, обработки и управления данными

Ссылки:

Структуры данных. Библиотека Pandas

Библиотека python Pandas — высокоуровневый инструмент управления данными. Информация может храниться в файлах .csv или таблицах SQL. Возможно, в файлах Excel. Или даже файлах .tsv. Или еще в каком-то другом формате. Но цель всегда одна и та же. Если необходимо анализировать данные с помощью pandas, нужна структура данных, совместимая с pandas (Моя шпаргалка по pandas).

Pandas появилась из необходимости в простом инструменте для обработки, извлечения и управления данными. Этот пакет спроектирован на основе библиотеки NumPy. Такой выбор обуславливает успех и быстрое распространение pandas. Он также пользуется всеми преимуществами NumPy и делает pandas совместимой с большинством другим модулей.

Ссылки:

 Введение в MLlib

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

Ссылки:

Введение в Caffe

Название Caffe произошло от сокращения «Convolution Architecture For Feature Extraction» (Свёрточная архитектура для извлечения признаков). См. Deep learning tutorial on Caffe technology

Caffe поддерживает много типов машинного обучения, нацеленных в первую очередь на решение задач классификации и сегментации изображений. Caffe обеспечивает свёрточные нейронные сети, RCNN, долгую краткосрочную память и полносвязные нейронные сети.[10] При этом для ускорения обучения применяется система графических процессоров (GPU), поддерживаемая архитектурой CUDA и иcпользующих библиотеку CuDNN от фирмы Nvidia

Ссылки:

Мои статьи: