Научная статья на тему 'ПРОГРАММНАЯ ИНЖЕНЕРИЯ. МОДЕЛИ МАШИННОГО ОБУЧЕНИЯ НА ДЕСЯТИ БАЗОВЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ'

ПРОГРАММНАЯ ИНЖЕНЕРИЯ. МОДЕЛИ МАШИННОГО ОБУЧЕНИЯ НА ДЕСЯТИ БАЗОВЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
158
48
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОГРАММНАЯ ИНЖЕНЕРИЯ / КОМПЬЮТЕРНЫЕ МЕТОДЫ И ПРОГРАММЫ / МАШИННОЕ ОБУЧЕНИЕ / ПРОГРАММЫ ОБУЧЕНИЯ РАЗРАБОТЧИКОВ ПО / ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Гущин С.И.

Статья посвящена вопросам совершенствования программной инженерии, преподавания языков программирования, их использования для задач создания моделей машинного обучения. Программная инженерия требует постоянного притока новых специалистов. В текущей ситуации быстрое внедрение новейших технологий, в том числе искусственного интеллекта - это требование времени. Программы обучения специалистов как в Университетах, так и в средне-специальных учебных заведениях, по разработке программного обеспечения, увы, не всегда адаптированы к современным вызовам. По мнению автора, в них сегодня не уделяется должного внимания на использование библиотек машинного обучения при изучении программирования на базовых языках - за исключением изучения языков программирования Python и R. При подготовке современных специалистов можно, добавив изучение программированию на Python, достаточно быстро решить эту проблему. Но возникает вопрос: что делать с уже подготовленными разработчиками, не прошедшими соответствующего обучения или переподготовки. По нашему мнению, необходимы инвестиции: в выпуск литературы по использованию машинного обучения при программировании на основных языках программирования; в организацию курсов по практическому применению библиотек машинного обучения и реализации соответствующих проектов на всех 10-ти базовых языках программирования; в адаптацию программ подготовки разработчиков различных направлений программной инженерии с внедрением технологий искусственного интеллекта, в первую очередь машинного и глубокого обучения. Представляется, что могут быть инвестиции как федеральных Университетов и средне специальных учебных заведений, поддержанные соответствующими фондами, так и частные инвестиции.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Гущин С.И.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE ENGINEERING. MACHINE LEARNING MODELS IN THE TEN BASIC PROGRAMMING LANGUAGES

The article is devoted to the issues of improving software engineering, teaching programming languages, their use for the tasks of creating machine learning models. Software engineering requires a constant influx of new specialists. In the current situation, the rapid introduction of the latest technologies, including artificial intelligence, is a requirement of the time. Training programs for specialists both at Universities and at secondary specialized educational institutions on software development, alas, are not always adapted to modern challenges. According to the author, today they do not pay enough attention to the use of machine learning libraries when learning programming in basic languages - with the exception of learning the Python and R programming languages. When training modern specialists, you can quickly solve this problem by adding the study of programming in Python. But the question arises: what to do with already trained developers who have not undergone appropriate training or retraining. In our opinion, investments are needed: in the publication of literature on the use of machine learning when programming in the main programming languages; in organizing courses on the practical application of machine learning libraries and the implementation of relevant projects in all 10 basic programming languages; in the adaptation of training programs for developers of various areas of software engineering with the introduction of artificial intelligence technologies, primarily machine and deep learning. It seems that there can be investments from both federal Universities and secondary specialized educational institutions, supported by appropriate funds, and private investments.

Текст научной работы на тему «ПРОГРАММНАЯ ИНЖЕНЕРИЯ. МОДЕЛИ МАШИННОГО ОБУЧЕНИЯ НА ДЕСЯТИ БАЗОВЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ»

Программная инженерия. Модели машинного обучения на десяти базовых языках программирования

fO

сч о сч

О Ш

m

X

3

<

m О X X

Гущин Сергей Иванович

кандидат технических наук, доцент Департамента анализа данных и машинного обучения, Финансовый университет при Правительстве Российской Федерации, SIGushchin@fa.ru

Статья посвящена вопросам совершенствования программной инженерии, преподавания языков программирования, их использования для задач создания моделей машинного обучения. Программная инженерия требует постоянного притока новых специалистов. В текущей ситуации быстрое внедрение новейших технологий, в том числе искусственного интеллекта - это требование времени. Программы обучения специалистов как в Университетах, так и в средне-специальных учебных заведениях, по разработке программного обеспечения, увы, не всегда адаптированы к современным вызовам. По мнению автора, в них сегодня не уделяется должного внимания на использование библиотек машинного обучения при изучении программирования на базовых языках - за исключением изучения языков программирования Python и R. При подготовке современных специалистов можно, добавив изучение программированию на Python, достаточно быстро решить эту проблему. Но возникает вопрос: что делать с уже подготовленными разработчиками, не прошедшими соответствующего обучения или переподготовки. По нашему мнению, необходимы инвестиции: в выпуск литературы по использованию машинного обучения при программировании на основных языках программирования; в организацию курсов по практическому применению библиотек машинного обучения и реализации соответствующих проектов на всех 10-ти базовых языках программирования; в адаптацию программ подготовки разработчиков различных направлений программной инженерии с внедрением технологий искусственного интеллекта, в первую очередь машинного и глубокого обучения. Представляется, что могут быть инвестиции как федеральных Университетов и средне специальных учебных заведений, поддержанные соответствующими фондами, так и частные инвестиции.

Ключевые слова: программная инженерия, компьютерные методы и программы, машинное обучение, программы обучения разработчиков ПО, языки программирования.

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

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

Создание моделей машинного обучения и языки программирования.

Том Митчелл в своей классической книге «Машинное обучение» [1] дал, на наш взгляд, очень точное определение машинному обучению (МО): «Говорят, что компьютерная программа обучается на опыте Е относительно некоторого класса задач Т и меры качества Р, если качество на задачах из Т, измеренное с помощью Р, возрастает с ростом опыта £».

МО можно разбить на несколько категорий, включая контролируемое (supervised), неконтролируемое (unsupervised), полууправляемое (semi-supervised) и обучение с подкреплением (reinforcement learning). Контролируемое обучение используется для выведения взаимосвязи с выходными результатами и основано на маркированных (помеченных) входных данных, неконтролируемое МО предназначено для обнаружения закономерностей среди немаркированных входных данных. В полууправляемом (или МО с частичным привлечением учителя) применяется комбинация контролируемого и неконтролируемого обучения, тогда как обучение с подкреплением направлено на то, чтобы программы могли повторять заданную последовательность циклов или разрабатывать процессы с желаемыми результатами, избегая при этом ошибок.

Основными языками программирования для МО давно стали Python и R. Сотни статей и книг опубликованы для МО по Python и R. Однако язык программирования Python совсем не единственный в своем роде. Если Python по разным рейтингам входит в 5-ку наиболее популярных языков программирования, то R не всегда попадает и в 10-ку.

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

- фронтенд веб-разработка: JavaScript;

- серверная веб-разработка: PHP, Java, C#, Python;

- сервисная разработка: Java, C#, Python, Go;

- мобильная разработка: Java, Kotlin, Swift, JavaScript;

- разработка игр: C++, C#, Python;

- разработка графического интерфейса: Java, C#, Python, C++;

- системное программирование: C, C++, Go.

Далее мы бы хотели обсудить некоторые особенности применения 10-и базовых языков программирования для построения моделей МО.

Python и R - самые популярные из всех языков программирования, применяемых в МО. Тем не менее, сбрасывать со счетов другие популярные языки программирования непредусмотрительно. Во всех перечисленных областях может потребоваться использование МО и нет возможности перехода на Python или интеграции через сервисы.

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

При программировании игр с Unity используется C# для освоения и применения механизмов МО. Например, алгоритм прогнозирования регистрирует набор действий и присваивает им результирующие значения. Функция предсказания вычисляет вероятность действия с учетом набора предыдущих действий. Чем больше зарегистрированных действий, тем точнее прогноз. Аналогично используется C++ при программировании игр с Unreal Engine[9]. C++ может ускорить и повысить эффективность моделей МО по сравнению с другими подходами, использующими интерпретируемые языки, такими как Python. Кроме того, C++ позволяет значительно снизить негативное влияние на производительность преобразования данных между разными языками, используемыми в модели МО, поскольку имеет прямой доступ к основным алгоритмам и необработанным данным.

Go — почти идеальный язык для МО. Его простой синтаксис помогает четко описать сложные алгоритмы, но не мешает разработчикам понять, как запускать эффективный оптимизированный код.

Когда модель машинного обучения обучена, ее необходимо где-то развернуть, чтобы делать прогнозы на основе реальных данных (например, классифицировать изображения и текст, обнаруживать события в аудио- или видеопотоках и т. д.). Достижения в области интернет-технологий, в первую очередь работа с JavaScript, позволили выполнять модели МО в браузерах. JavaScript имеет доступные библиотеки и реализации МО. Можно использовать как свои собственные алгоритмы, так и существующие библиотеки. Новому поколению разработчиков из обширного сообщества JavaScript теперь доступно создание и развертывание моделей МО[6]. Вооружившись МО с поддержкой JavaScript, можно подключиться к камерам, микрофонам, мгновенным обновлениям, местоположениям и другим физическим датчикам, службам и устройствам. Широкий спектр приложений, работающих в веб-браузере, предоставляет широкие возможности для применения МО на стороне клиента.

На основе PHP работает по разным оценкам больше 70% сайтов мира. PHP - это серверный язык сценариев для создания персонализированных ответов на запросы пользователей на веб-серверах. Извлечение и обработка данных — наиболее важный аспект приложений МО. Некоторым приложениям требуется обрабатывать интенсивные вычисления с этими наборами данных. Для приложений, требующих больших наборов данных и серьезных вычислений, PHP не подходит. Однако для небольших приложений для решения задач МО можно использовать PHP. Например, Rubix ML — это высокоуровневая библиотека МО для языка PHP, которая включает реализации

нескольких алгоритмов МО для определения объекта модели и использования его для предсказания значений.

Java является важным средством распространения компьютерных технологий, в том числе в крупномасштабных проектах МО[3], благодаря своей зрелости и стабильности при развертывании на уровне предприятия и переносимой платформе JVM, не говоря уже о сообществе профессиональных программистов Android SDK

Типовой процесс создания модели МО представлен на рисунке (рис. 1).

Рисунок 1 - Общий рабочий процесс машинного обучения[2]

Подробнее о каждом из названных нами 10-и языках программирования.

1) Язык программирования Python стал самым популярным языком программирования для МО, потому что он позволяет забыть о сложных сторонах программирования и предлагает нам среду, где мы можем быстро и эффективно привести теоретические положения непосредственно в действия.

2) Язык программирования R[14] показал себя за последнюю пару десятилетий как первоклассный инструмент для задач научных вычислений и был постоянным лидером в реализации статистических методологий для анализа данных. Полезность R для науки о данных проистекает из большой, активной и растущей экосистемы сторонних пакетов. R — кросс-платформенная бесплатная среда статистического программирования — самое подходящее для того, чтобы начать использовать МО.

3) Команды, состоящие только из разработчиков на языке программирования Java рискуют пропустить следующую большую волну, которая неизбежно нахлынет - волну МО. Поэтому важно, что и для разработчиков на платформе Java появилась инфраструктура МО. МО перевернет мир разработки программного обеспечения не меньше, чем в свое время - реля-

I I

О DD А J=

fO CS

о

CS

in

О Ш

m

X

3

<

m О X X

ционные базы данных, интернет и мобильные технологии. Команды, которые не до конца понимают код МО или не умеют его поддерживать, и вынуждены работать со сторонними компонентами и сервисами, потенциально могут не выполнить критичные требования по безопасности. На Java[8] можно писать не менее функциональный код для машинного и глубокого обучения чем на Python и R.

4) Язык программирования C# — один из самых популярных и широко используемых языков в индустрии. Особенно среди финансовых компаний C# является одним из очень немногих языков программирования, которые общеприняты и используются для разработки приложений. C# — это хороший выбор языка для проектов МО, над которыми можно работать в технологии .NET[5].

5) Нужно отметить, что классификация объектов и кластеризация, рекомендации по продуктам, ансамблевое обучение и обнаружение аномалий может быть выполнено с использованием современных библиотек языка программирования C++, таких как PyTorch C++ API, Caffe2, Shogun, Shark-ML, Mlpack и Dlib[4]. Shark - многоплатформенная библиотека алгоритмов МО, достоинствами которой являются простота использования, вычислительная эффективность, расширяемость, универсальность.

6) Язык программирования Go[7] можно использовать для создания масштабируемых и сложных систем обработки данных и МО. Библиотеки МО доступны в Go так же, как и на других ранее рассмотренных языках. Используя Gonum, Gorgonia и STL[13] можно проводить регрессионный анализ на реальных наборах данных и строить модели классификации. МО для Golang включает в себя множество инструментов, которые помогают специалистам по обработке и анализу данных и программистам упростить и повысить эффективность процесса разработки. Аналитики данных, инженеры данных и МО могут проводить свои эксперименты, включая прогностические модели, визуализацию данных и статистические методы с помощью экосистемы Go.

7) Язык программирования JavaScript и кроссплатформен-ная среда Node.js, позволяющая разработчикам создавать всевозможные серверные инструменты на языке JavaScript -достаточно мощны, чтобы справляться с многочисленными проблемами МО. Веб-языки обладают тем преимуществом, что они являются весьма доступными - все, что нужно для запуска проекта JavaScript МО - это веб-браузер.

Библиотеки МО JavaScript[11] готовы для разработки веб-приложений для искусственного интеллекта (ИИ). Вот почему важны такие инструменты, как TensorFlow.js[6]. (экосистема инструментов JavaScript для машинного обучения), так как веб-программист получает возможность исследовать новые технологии без необходимости изучения другого языка программирования, что значительно понижает барьер входа в МО. Кроме того, учитывая, как быстро развиваются события и насколько мощными становятся эти инструменты, мы можем представить себе будущее, в котором «инженер машинного обучения JavaScript» будет востребованной профессией.

8) Core ML Apple[l2] называть языком программирования можно лишь условно, это библиотека программ, технология машинного обучения. Apple в iPhone имеет несколько моделей МО, встроенных в операционную систему iOS, и несколько собственных приложений, помогающих выполнять широкий спектр задач, таких как распознавание речи или движения, но только в виде черных ящиков, без возможности настраивать модели или повторно использовать их для других целей. МО достаточно трудно реализовать в мобильных приложениях для iPhone. Тем не менее, с Core ML Apple можно добавить машинное обучение в существующее приложение iOS.

9) Kotlin - один из самых любимых языков программирования среди профессиональных разработчиков мобильных приложений Android. Согласно официальной документации, Kotlin считается предпочтительным выбором для построения конвейеров данных, производственных моделей МО и т. д. Модели МО для приложений Android можно строить с использованием как Java, так и Kotlin

10) PHP можно использовать для МО с подключением соответствующей библиотеки. Для PHP существуют такие библиотеки, как Rubix ML или PHP-ml, которые можно использовать для приложений искусственного интеллекта. Rubix ML — это библиотека МО с открытым исходным кодом. Эта библиотека включает реализации нескольких алгоритмов машинного обучения и позволяет создавать программы, которые обучаются на ваших данных, используя PHP в качестве языка. Rubix ML предоставляет инструменты для всего жизненного цикла МО от ETL (Extract/извлечение, Transform/преобразование, Loading/загрузка, обработка и обобщение данных) до обучения, перекрестной проверки и производства со многими контролируемыми и неконтролируемыми алгоритмами обучения. Библиотеки PHP-ml и RubixML имеют множество функций для: распознавания изображений или расширенного анализа текста; прогнозирования результатов с непрерывными значениями, например, оценки цен на продукты; группировки элементов с неизвестными метками на основе их сходства.

Некоторые выводы.

Представленное нами исследование, обзор языков программирования показывает, что практически во всех ведущих языках и технологиях программирования возможна поддержка МО. К сожалению, в учебной литературе по программной инженерии, кроме тематики по Python и R, не рассматривается применение МО при обучении программированию. Тема МО пока не стала такой же базовой, как например создание графических пользовательских интерфейсов или работа с базами данных.

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

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

Литература

1. Mitchell T.M. Machine learning. McGraw-Hill, New York, 1997

2. Харрисон, Мэтт. Машинное обучение: карманный справочник. Краткое руководство по методам структурированного машинного обучения на Python. СПб. ООО "Диалектика", 2020

3. Копец Дэвид. Классические задачи Computer Science на языке Java. СПб.: Питер, 2022

4. Никехин А.А. Основы C++ для моделирования и расчетов. Библиотеки для научных вычислений: Учебное пособие. -СПб: Университет ИТМО, 2016.

5. Нишит Патак. Искусственный интеллект для .NET: речь, язык и поиск / пер. с анг. А. В. Логунова. - М.: ДМК Пресс, 2018.

6. Франсуа Шолле, Эрик Нильсон, Стэн Байлесчи, Шэнку-инг Цэй. JavaScript для глубокого обучения: TensorFlow.js. -СПб.: Питер, 2021.

7. Цукалос Михалис. Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go. — СПб.: Питер, 2020.

8. AshishSingh Bhatia, Bostjan Kaluza. Machine Learning in Java. BIRMINGHAM - MUMBAI. Packt Publishing, 2018.

9. Kirill Kolodiazhnyi. Hands-On Machine Learning with C++.BIRMINGHAM - MUMBAI. Packt Publishing, 2020.

10. Yoon Hyup Hwang. C# Machine Learning Projects. BIRMINGHAM - MUMBAI. Packt Publishing, 2018.

11. Burak Kanber. Hands-On Machine Learning with JavaScript. BIRMINGHAM - MUMBAI. Packt Publishing, 2018.

12. Alexander Sosnovshchenko. Machine Learning with Swift. BIRMINGHAM - MUMBAI. Packt Publishing, 2018.

13. Daniel Whitenack, Janani Selvaraj. Machine Learning With Go. BIRMINGHAM - MUMBAI. Packt Publishing, 2019.

14. Бретт Ланц. Машинное обучение на R: экспертные техники для прогностического анализа. - СПб.: Питер, 2020.

Software engineering. machine learning models in the ten basic programming

languages Gushchin S.I.

Financial University under the Government of the Russian Federation

JEL classification: C10, C50, C60, C61, C80, C87, C90_

The article is devoted to the issues of improving software engineering, teaching programming languages, their use for the tasks of creating machine learning models. Software engineering requires a constant influx of new specialists. In the current situation, the rapid introduction of the latest technologies, including artificial intelligence, is a requirement of the time. Training programs for specialists both at Universities and at secondary specialized educational institutions on software development, alas, are not always adapted to modern challenges. According to the author, today they do not pay enough attention to the use of machine learning libraries when learning programming in basic languages - with the exception of learning the Python and R programming languages. When training modern specialists, you can quickly solve this problem by adding the study of programming in Python. But the question arises: what to do with already trained developers who have not undergone appropriate training or retraining. In our opinion, investments are needed: in the publication of literature on the use of machine learning when programming in the main programming languages; in organizing courses on the practical application of machine learning libraries and the implementation of relevant projects in all 10 basic programming languages; in the adaptation of training programs for developers of various areas of software engineering with the introduction of artificial intelligence technologies, primarily machine and deep learning. It seems that there can be investments from both federal Universities and secondary specialized educational institutions, supported by appropriate funds, and private investments.

Keywords: software engineering, computer methods and programs, machine learning,

training programs for software developers, programming languages. References

1. Mitchell T.M. machine learning. McGraw-Hill, New York, 1997

2. Harrison, Matt. Machine Learning: A Pocket Guide. A quick guide to structured

machine learning techniques in Python. SPb. OOO Dialectika, 2020

3. Kopets David. Classic Computer Science problems in Java. St. Petersburg: Peter,

2022

4. Nikekhin A.A. C++ Basics for Modeling and Calculations. Libraries for Scientific

Computing: Textbook. - St. Petersburg: ITMO University, 2016.

5. Nishit Patak. Artificial intelligence for .NET: speech, language and search / per. from

eng. A. V. Logunova. - M.: DMK Press, 2018.

6. Francois Chollet, Eric Nielson, Stan Baileschi, Shengqing Tsei. JavaScript for deep

learning: TensorFlow.js. - St. Petersburg: Peter, 2021.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

7. Tsoukalos Michalis. Golang for the pros: networking, multithreading, data

structures, and machine learning with Go. - St. Petersburg: Peter, 2020.

8. AshishSingh Bhatia, Bostjan Kaluza. Machine Learning in Java. BIRMINGHAM -

MUMBAI. Packt Publishing, 2018.

9. Kirill Kolodiazhnyi. Hands-On Machine Learning with C++.BIRMINGHAM -

MUMBAI. Packt Publishing, 2020.

10. Yoon Hyup Hwang. C# Machine Learning Projects. BIRMINGHAM - MUMBAI.

Packt Publishing, 2018.

11. Burak Kanber. Hands-On Machine Learning with JavaScript. BIRMINGHAM -MUMBAI. Packt Publishing, 2018.

12. Alexander Sosnovshchenko. Machine Learning with Swift. BIRMINGHAM -MUMBAI. Packt Publishing, 2018.

13. Daniel Whitenack, Janani Selvaraj. Machine Learning With Go. BIRMINGHAM -

MUMBAI. Packt Publishing, 2019.

14. Brett Lantz. Machine Learning in R: Expert Techniques for Predictive Analysis. -

St. Petersburg: Peter, 2020.

X X О го А С.

X

го m

о

2 О

м

CJ

i Надоели баннеры? Вы всегда можете отключить рекламу.