Языки программирования для machine learning
Какой язык программирования выбрать специалисту по машинному обучению?
Машинное обучение ― это только Python и R или нет? Разбираемся, какие ещё языки любят инженеры по ML.
На GitHub есть рейтинг популярности языков программирования для машинного обучения. Критерий оценки — количество ML-проектов, которые хостятся на платформе. Расскажем, почему именно они стали популярными и какой лучше изучать. Языки размещены в порядке от наиболее используемых к наименее.
Python
Python лидирует в машинном обучении. И вот почему:
Но есть и минусы: низкая скорость выполнения программ и высокое потребление памяти.
Пример ML-проекта на Python: Video Object Removal ― программа, которая использует алгоритмы глубокого обучения, чтобы убрать из видео любые лишние объекты всего за пару секунд.
Одновременно существует две версии языка: Python 2 и Python 3. У Python 3 нет обратной совместимостью со второй версией — то есть код, написанный на старой версии, не будет работать в новой. Советуем изучать именно Python 3 — предыдущий уже официально не поддерживается.
Пишет про digital и машинное обучение для корпоративных блогов. Топ-автор в категории «Искусственный интеллект» на Medium. Kaggle-эксперт.
C++ — мощный язык, программы на нём работают стабильно и быстро. Но многие не любят его из-за сложного синтаксиса и обилия абстрактных функций. С++ создавался как дополненная версия С — в то время сложность использования языка ещё не воспринималась как серьёзный барьер, ведь программировали на нём только учёные и высококлассные инженеры.
Преимущество C++ в том, что на нём можно вручную управлять оперативной памятью и извлечением данных. Это помогает оптимизировать работу программы, если данных для обработки очень много, а ресурсы ограничены и скорость критически важна.
Пример ML-проекта на C++: AirSim — симулятор дронов и беспилотных автомобилей.
JavaScript
Многие слышали о JavaScript только в связке с HTML и CSS — когда речь идёт о веб-дизайне и фронтенде. JS часто используют для разработки пользовательских интерфейсов.
Примеры ML-проекта на JavaScript: «Катана» — текстовый виртуальный ассистент, который любая компания может подстроить под себя в пару кликов; Beat Blender — фановый софт для создания музыки.
Синтаксис Java похож на синтаксис С/C++. Но это высокоуровневый язык программирования, который не требует ручного управления памятью. У тех, кто занимается разработкой для ML на Java, есть отличные библиотеки: Weka, MOA, MALLET.
Примеры ML-проектов на Java: Seldon Server ― движок для создания рекомендательных систем, который позволяет развернуть нейронную сеть для рекомендаций, даже если вы новичок; GROBID ― программа для парсинга и извлечения информации даже из неструктурированных документов.
Если вы уже знакомы с Java, то сможете зайти с ним в машинное обучение. Но если вы его не знаете и собираетесь идти в ИИ, лучше изучите другой язык. Да, на GitHub есть много Java-проектов в сфере машинного обучения. Но инфраструктура в сфере ML для того же Python гораздо богаче, выучить его с нуля до хорошего уровня проще.
C# — универсальный, гибкий и многофункциональный язык от Microsoft. Он позволяет программистам писать всё — от системных приложений до сайтов.
Microsoft активно поддерживает C# и даже создала для него библиотеку ML.NET, которая содержит всё необходимое для работы с машинным обучением. Компания активно обкатывала библиотеку на протяжении десяти лет и только после этого выложила в открытый доступ. По замыслу разработчиков, она должна стать альтернативой многочисленным библиотекам Python и сделать C# ведущим языком в ML. Но пока это только мечты — прямо сейчас найти работу в сфере искусственного интеллекта на C# не так просто.
Пример ML-проекта на C#: BotSharp ― опенсорс-платформа для создания чат-ботов.
Julia
Julia — молодой язык, конкурент R и Python, совместимый с ними. Однако он гораздо быстрее Python и по скорости может сравниться с C/C++. Julia — универсальный язык, хотя изначально его разработали для числовых и технических вычислений.
Его можно и нужно использовать для веб-программирования низкоуровневого системного программирования в качестве языка спецификации. Он поддерживает динамическую типизацию — это делает его более гибким, но и увеличивает вероятность ошибки. В Julia есть и мастхэв-библиотеки для ML: Flux, Mocha.jl, Knet, TensorFlow.jl, ScikitLearn.jl.
Примеры ML-проектов на Julia: SALSA — софт для продвинутой работы со стохастическими алгоритмами ; MLJTuning — программа для оптимизации гиперпараметров.
Проекты на Julia в основном создают для учёных и для ML-поддержки лабораторий. Из этого вывод: делать ставку только на Julia не нужно — язык ещё растёт. Но обратить внимание точно стоит.
Инструменты машинного обучения для начинающих
Инструменты машинного обучения для начинающих
Прежде, чем мы с вами перейдём к инструментам машинного обучения, стоит проговорить одну простую, но важную вещь. Начинающие часто воспринимают машинное обучение как огромный цельный процесс. Нередко пугаются и впадают в ступор из-за обширности темы. Поэтому начнём с разделения процесса машинного обучения на три основных этапа:
В таком же порядке рассмотрим и инструменты, которые помогут всё это реализовать.
Языки программирования для машинного обучения
Нам понадобятся готовые библиотеки и фреймворки для машинного обучения. Мы ведь хотим научиться ездить на машине, а не конструировать её. Если вы пытаетесь подобрать «тот, самый подходящий» язык, то не переживайте: в любом современном языке программирования уже написаны такие инструменты, поэтому берите любой, который нравится (или знаете).
Но если мы начнём рассказывать обо всех языках в одной статье, то она будет очень длинной. Поэтому дальше будем рассматривать всё, что связано именно с Python, популярность которого стабильно растёт на протяжении вот уже нескольких лет благодаря своей гибкости, хорошей читаемости и простоте в обучении. Написанные под него библиотеки машинного обучения — самые популярные на момент выпуска статьи.
Инструменты для сбора, обработки и визуализации данных
Здесь мы собираем данные с различных сайтов и создаём датасет, который потом используем для обучения алгоритма. Сбор данных с сайтов ещё называют веб-скрейпингом (ранее мы подробно рассказывали об инструментах для веб-скрейпинга).
После того, как собрали данные, их нужно обработать, чтобы избавиться от ошибок, шума и несогласованностей, которые приведут к ситуации «мусор на входе — мусор на выходе». Это очень важно, так как от корректности данных будет зависеть точность результатов алгоритма.
Визуализация поможет определить линейность структуры данных, существенные признаки и аномалии. Для этих задач можно воспользоваться готовыми веб-сервисами, либо написать собственный код.
После того как мы почистили наш датасет, нужно поделить его на 80% — для обучения модели, — и 20% — для её проверки и тестирования.
pandas: библиотека для обработки и анализа данных
Она построена поверх NumPy, о котором поговорим чуть дальше. Это наши группировки, сортировки, извлечения и трансформации. Для работы с файлами CSV, JSON и TSV pandas превращает их в структуру данных DataFrame со строками и столбцами. Выглядит, как обычная таблица в Excel, и работать с ней легче, чем с for-циклами для прохода по элементам списков и словарей.
Tableau, Power BI, Google Data Studio: простая онлайн-визуализация без кода
Инструменты для бизнес-аналитики и людей без особых навыков программирования. Ключевое слово здесь — визуализация. Загружаем датасет и пользуемся встроенными функциями, фильтрами и аналитикой в реальном времени. Эти сервисы быстро собирают инсайты и представляют их в наглядной форме. И Tableau, и Power BI, и Google Data Studio имеют как платные подписки, так и бесплатные версии (само собой, с ограничениями).
Matplotlib: библиотека для построения 2D-графиков
Matplotlib в связке с библиотеками seaborn, ggplot и HoloViews позволяет строить разнообразные графики: гистограммы, диаграммы рассеяния, круговые и полярные диаграммы, и много других. Для большинства из них достаточно написать всего пару строк.
Интерактивные среды разработки
Эти инструменты часто используются для Data Science и машинного обучения. Веб-среда (её также называют «notebook») позволяет разработчикам на лету тестировать небольшие части кода, проверять функциональность и разные гипотезы. Тем не менее, при желании в ней можно поместить и целый проект.
Jupyter Notebook: интерактивное моделирование
Простая в использовании бесплатная интерактивная веб-оболочка. Помимо Python, Jupyter Notebook поддерживает более чем 40 языков программирования. В нём удобно экспериментировать с новыми идеями в режиме «зашёл-сделал-вышел», писать документацию и создавать аналитические отчёты. Напоминает IDE, но по функциональности, хоть и достаточно широкому, до неё не дотягивает.
Среди инструментов для машинного обучения, и в целом Data Science, Jupyter хорош благодаря быстрому анализу, моделированию и визуализации данных. Результаты можно экспортировать во множество форматов, в числе которых — широко распространённые PDF и HTML.
Kaggle: сообщество Data Science
Kaggle также предоставляет интерактивную среду разработки. Разница в том, что всего один клик отделяет вас от целого сообщества Data Science и машинного обучения. Здесь можно найти готовые датасеты, модели и даже программный код для решения разных задач.
Также крупные коммерческие компании часто проводят здесь конкурсы и разыгрывают призовой фонд в обмен на бесплатную лицензию на использование интеллектуальной собственности (алгоритма и программного обеспечения) победившего участника.
Фреймворки и библиотеки для общего машинного обучения
Обучение модели делится на две большие категории: с учителем и без. В первом случае мы маркируем датасет, объясняя алгоритму машинного обучения, где правильный ответ, а где — нет. Так данные можно представить таблицей соответствий «элемент-категория».
Во втором случае алгоритм сам вынужден искать признаки и закономерности, так как в датасете мы даём данные без уточняющей информации. Датасет представлен сплошным потоком данных нужного типа: текста, картинок и др.
Для каждой категории используются свои алгоритмы машинного обучения (кластеризация, классификация, регрессия, ассоциация). Оптимальный выбор зависит от задачи, сложности модели, размера и типа данных.
Имейте в виду, что обучение и отладка собственной модели — долгий и затратный процесс. Очень вероятно, что кто-то уже решал похожую задачу и подготовил модель. Поэтому стоит поискать, воспользоваться реализованной архитектурой и переучить алгоритм под ваши данные. Но чем больше ваша задача отличается от той, что решает готовая модель, тем больше нужно её переучивать и менять параметры.
NumPy: готовые вычислительные алгоритмы и линейная алгебра для машинного обучения
Данные в машинном обучении представлены числовыми массивами. Даже если мы работаем с картинками или естественной речью, они должны быть преобразованы в числовые массивы. В NumPy уже реализовано всё необходимое для этого: преобразование Фурье, генерация случайных чисел, перемножение матриц и другие сложные операции. Вам остаётся только пользоваться.
NLTK: разбираем естественный язык на части
Один из ведущих инструментов для обработки естественного языка. По аналогии с тем, как NumPy упрощает линейную алгебру, NLTK упрощает парсинг текста, анализ тональности, структуры предложений и всё, что с этим связано.
scikit-learn: всё гениальное просто
Позиционируется как простая библиотека с кучей примеров на официальном сайте, из-за чего хорошо подходит новичкам. Но это не значит, что для серьёзных проектов он не годится.
Spotify, например, сделали свою рекомендательную систему как раз с помощью scikit-learn. Работает в связке с SciPy, NumPy и Matplotlib. Все базовые функции типа кластеризации, классификации и регрессии, разумеется, на месте.
Фреймворки глубокого обучения и моделирования нейросетей
Упомянутые инструменты машинного обучения позволяют нам получить модель, способную выполнять сравнительно простые задачи. Однако дальше речь пойдёт о глубоком машинном обучении нейронных сетей. Здесь для принятия более сложного решения алгоритм учитывает различные факторы, пропуская входящие данные через множество слоёв нейронов.
Само собой, для этого нужно больше вычислительной мощности и данных для обучения. Например для GPT-3 OpenAI насобирали датасет из 45 ТБ текстовых данных и отфильтровали его до 570 ГБ. Обучение модели стоило им миллионы долларов. При этом использовали они даже не весь текст. Поэтому в проектах поменьше обучение часто делегируют облачным сервисам типа Google Cloud или Amazon AWS.
На рынке инструментов глубокого машинного обучения классическая ситуация: бодаются два мастодонта — фреймворки PyTorch и TensorFlow. Раньше в них были существенные отличия. Но разграничения постепенно стираются с тем, как они перенимают друг у друга лучшие особенности.
PyTorch: король исследований
Прост в изучении и понимании, хорошо дружит с остальной питоновской экосистемой. Поэтому к новичкам PyTorch относится мягко. Отладка проходит на интуитивном уровне: ставим брейкпоинт куда угодно в коде и смотрим значения переменных. Ещё исследователям нравятся динамические графы, благодаря которым можно менять поведение модели на ходу. Всё это позволяет проверять различные теории и подходы на небольших датасетах без долгих задержек.
TensorFlow: король продакшена
Главное отличие — в подходе. Если PyTorch правит в академической среде, то TensorFlow изначально ориентирован на рынок. Да, графы у него статические; для отладки нужно учиться работать с отдельным дебагером tfdbg; а его API меняли кучу раз, ломая при этом обратную совместимость. Но он заточен для решения задач именно бизнеса: пропускать через себя огромные массивы данных при хорошей производительности и с возможностью использовать модели на мобильных устройствах без костылей и бубнов. Хотя и PyTorch уже двигается в этом направлении.
Keras: «С++ машинного обучения»
Первое, что новичок замечает в TensorFlow — это сложность. Ведь буквально всё находится и происходит внутри графа — и операции, и числа. А значит, не так, как обычно.
Keras — более высокоуровневый интерфейс для TensorFlow, CNTK, Theano, MXNet и PlaidML. Простыми словами, он создан, чтобы стать языком «С++ машинного обучения» для низкоуровневых фреймворков. Новичок может не думать, как реализовать тензорную алгебру, построить модель и прочее. Он просто воспользуется готовыми строительными блоками. Мыслительный ресурс освобождается, из-за чего начинающие специалисты быстрее учатся, а более опытные разработчики больше концентрируются на стратегических задачах.
TensorBoard: козырь в рукаве TensorFlow
Человеку непросто держать и анализировать в голове все данные. Нативная визуализация графов в браузере с разными метриками и возможностью отслеживать работу моделей — то, чего нет у PyTorch. Конечно, можно сказать про Visdom, но по возможностям он сильно уступает TensorBoard. Поэтому в PyTorch приходится часто использовать Matplotlib для визуализации и писать графики самому.
В этом аспекте TensorFlow выигрывает. Помимо метрик, разные структуры можно окрашивать в зависимости от используемого для вычислений устройства (CPU или GPU), подсвечивать узлы для отслеживания входящих данных, отображать несколько графов одновременно. Словом, всё, чтобы мониторить работу было легко и удобно.
Какие ещё инструменты машинного обучения вы бы посоветовали? Расскажите в комментариях!
Машинное обучение: Вопросы и ответы
Как вы уже успели заметить, мы достаточно часто обращаем внимание на тему машинного обучения. Так, мы рассказывали о глубоком обучении, писали о работе с данными и адаптировали различные подборки источников по теме: 1, 2, 3.
Сегодня мы решили посмотреть на наиболее интересные вопросы и ответы по теме машинного обучения на ресурсе Quora.
Какой язык программирования лучше всего подходит для машинного обучения?
Йошуа Бенгио (глава Института Алгоритмов Машинного Обучения, Монреаль) говорит, что многие годы они программируют на Python, наряду с другими языками. Но ему бы хотелось использовать что-нибудь наподобие Python, что при этом обладало бы более мощным компилятором, способным выдавать эффективный и распределенный (по кластерам) код, который будет легко портировать.
Именно по этой причине они начали разрабатывать библиотеку Theano (нельзя сказать, что это полноценный язык – скорее набор функций для создания выражений и компилятор).
Сколько алгоритмов используется в рекомендательной системе Netflix? Существует мнение, что более 800. Так ли это?
Ксавье Аматриан (технический директор Netflix с 2011 по 2014) говорит, что все зависит от того, что подразумевается под системой рекомендаций. Если речь идет о предпочтениях на основе рейтинга, то для них используются два алгоритма.
Если же вопрос подразумевает в целом рекомендательную экосистему Netflix, то конечно же, используется куда больше алгоритмов, но никак не 800. Здесь он описывает, как работает алгоритм рекомендации фильмов.
Действительно ли необходимо получать докторскую степень, чтобы иметь хорошую работу в сфере машинного обучения? Правда ли, что в таких компаниях как Google докторская степень – это базовое требование [к кандидатам]?
Бэн Чжао (профессор информатики Калифорнийского университета) знаком со многими студентами, которые после окончания обучения получили должность в Google, Microsoft, Twitter, Linkedin и Zynga. Большинство из них получили эти должности не благодаря степени, а потому, что в свое время они вместе с Чжао проводили исследования по аналитике социальных сетей или попали в толковые руки отдела кадров.
Получение докторской степени, безусловно, дает свои преимущества. Это – возможность изучать ныне существующие проблемы и постоянно возникающие технологии работы с ними ещё несколько лет. Поэтому докторская степень точно не помешает в получении должности (если кандидат действительно хочет заниматься исключительно вопросами машинного обучения).
Что вы думаете о недавно выпущенном Yahoo своде данных по машинному обучению?
Джеймс Бейкер (занимался машинным обучением еще до того, как его стали так называть) надеется, что это подвигнет и другие компании выпустить аналогичные наборы. Он прекрасно понимает, какого объема должен быть этот набор, поэтому не собирается самостоятельно изучать его – он заинтересован в помощниках или коллаборации с кем-нибудь.
Сложность одиночной работы с подобными наборами данных, как отмечает Джеймс, состоит в том, что у исследователя может не оказаться достаточно мощностей для его обработки.
У самого Джеймса есть есть теоретическая модель глубокого обучения, которую он хотел бы применить к этому набору от Yahoo, но проблема заключается в том, что его «железо» это не потянет, кроме того, ему не хватает помощников в обслуживании его модели.
Поэтому он ищет заинтересованных лиц, а исследователям, которые находятся в подобном положении, Джеймс настоятельно рекомендует дождаться формирования команд энтузиастов – так шанс на практике воспользоваться данными от Yahoo может серьезно вырасти.
Почему существует так мало стартапов в области машинного обучения и в области обработки естественного языка?
Джозеф Туриан (консультант по вопросам Data Mining и обработки естественного языка) отмечает: дело в повышенных рисках. Большинство технологических стартапов сталкивается с относительно высокими маркетинговыми рисками, которые уравновешиваются сравнительно низкими рисками, касающимися технологической составляющей.
В сфере машинного обучения и обработки естественного языка высоки как маркетинговые, так и технологические риски – все это не позволяет основателям таких стартапов привлекать стороннее финансирование. Не в пользу основателей говорит в данном случае и тот факт, что у них далеко не всегда есть адекватное представление о бизнесе и рыночных отношениях в целом – большую часть времени специалисты по машинному обучению проводят в таких спокойных и мало подверженных влиянию «большого мира» местах, как университеты и крупные корпорации.
Джеймс Бейкер дополняет ответ Джозефа. Он подчеркивает, что [несмотря на общий пессимизм] в этих областях работает больше стартапов, чем мы привыкли думать. Он отмечает, что стартапы, использующие в работе технологии машинного обучения или обработки естественного языка, должны использовать большие объемы данных.
В этой среде их конкурентами становятся такие гиганты, как Google, Microsoft и др., поэтому, стремясь избежать конкуренции, маленькие компании просто не афишируют эту составляющую своей работы.
Какие замечательные идеи наиболее популярны в сфере машинного обучения?
Чарльз Мартин считает, что одна из них это – нейронная сеть Хопфилда, ее связь с моделью Изинга и ее применение в современной реализации глубокого обучения. Такие простые модели находят свое применение не только в статистической физике, но и в развитии современных алгоритмов глубокого обучения.
Он также отмечает важность ограниченной машины Больцмана в машинном обучении несмотря на то, что с момента появления этой архитектуры и до момента ее активного применения в моделях глубокого обучения прошло почти 20 лет.
Абинав Маурья добавляет к этому списку kernel trick (ядерный метод) для метода опорных векторов (список наиболее часто используемых функций для этого метода можно найти здесь). Другие исследователи отмечают метод максимального правдоподобия (за его понятность и простоту) и теорию приближенно правильного обучения Лесли Гэбриела Вэлианта – за то, что она широко используется в современных алгоритмах машинного обучения.
Какие алгоритмы должен использовать каждый, кто исследует данные?
У Уильяма Чена (исследователя данных в Quora) есть 3 любимых алгоритма:
Какое будущее ждет науку о данных?
Брайан Ланж (исследователь данных в Datascope) считает, что появятся новые источники данных: данные, которые будут генерировать сенсоры на производстве, в транспорте, даже в офисах, станут источником новой информации для исследователей.
Появятся новые инструменты, значительно упрощающие работу с данными. В первую очередь это связано с появлением открытых библиотек и активным обменом информацией между исследователями. Брайан подчеркивает: алгоритмы, которые 10 лет назад приходилось писать вручную, сейчас находятся в прямом доступе и их легко инкорпорировать в работу.
Профессия исследователя данных пополнится рядом разновидностей. По мнению Брайана, с ростом количества информации и задач, которые выполняет исследователь данных, все больше сотрудников из разных подразделений компаний начнут в той или иной мере работать в области data science – работа исследователей не будет ограничиваться одним отделом.
Дима Королев (специалист по работе с Большими данными), напротив, считает, что в будущем появится full-stack инженер по работе с данными (по аналогии с full-stack разработчиками). Он рассказывает, что, к примеру, на обработке чисел в Excel, применении различных моделей в Python или R и трансляции результатов в режиме реального/близкого к реальному времени, сейчас обычно заняты три человека. В будущем же потребуется один, который будет выполнять множество процессов от начала и до конца.
Существуют ли простые проекты по применению машинного обучения на финансовых рынках?
Владимир Новаковский (заведующий машинным обучением в Quora) считает, что любой проект, хорошо предсказывающий результаты торгов однозначно не будет простым. Он предлагает задуматься о двух областях, в которых машинное обучение может быть успешно применено в сфере трейдинга.
Первая область: прогнозирование показателей, которые опосредованно влияют на торги. Одними из таких показателей может быть волатильность (машинное обучение можно использовать для улучшения GARCH-модели волатильности), уровень безработицы или показатель инфляции.
Суть другого направления для работы заключается в анализе поведения рыночных цен.
По словам Владимира, для создания неплохого проекта, позволяющего разобраться в теме трейдинга, достаточно применить машинное обучение для анализа цен, не «перегружая» модель информацией о транзакционных издержках: конечно, с такой моделью нельзя торговать на бирже, но она может отлично подойти для того, чтобы «вкатиться» в профессию.
В чем разница между «большими данными» и «машинным обучением»?
Владимир отмечает, что большой объем данных для проведения вычислений не является обязательной составляющей машинного обучения – алгоритмы можно запускать и на сравнительно небольших массивах (на больших они, тем не менее, как правило, более эффективны, поэтому так часто эти два понятия между собой перекликаются).