No Image

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

СОДЕРЖАНИЕ
0 просмотров
22 января 2020

Существует великое множество языков программирования, однако не все они подходят для машинного обучения (МО). Портал Techopedia рассказывает о наиболее подходящих языках, их преимуществах и недостатках.

Специалист по вычислительной техники Стэнфордского университета Эндрю Нгом дал МО следующее определение: «наука, которая работает над тем, как научить компьютеры функционировать без явного программирования». Предпосылки к рождению науки появились в однако вплоть до начало они носили лишь теоретический характер. Настоящий прорыв произошел десятилетие назад, когда МО стало катализатором развития нескольких прорывных технологий, особенно это касается искусственного интеллекта. МО можно разбить на несколько категорий, включая контролируемое (supervised), неконтролируемое (unsupervised), полууправляемое (semi-supervised ) и обучение с подкреплением (reinforcement learning).

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

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

Python. Это высокоуровневый язык программирования, который имеет множество различных способов применений, включая науку о данных и внутреннюю веб-разработку. Он был создан Python Foundation в начале и является мощным инструментом для анализа данных, широко используется в технологии больших данных. Особый статус ему придает многочисленное сообщество разработчиков МО, которое в основном сосредоточено на быстрорастущем ИИ-направлении.

Благодаря активному сообществу для Python появилось множество готовых библиотек МО. Этот язык — платформенно независимый, поэтому его можно адаптировать практически к любой операционной системе. Еще одно преимущество Python связано с его открытостью — он построен на базе технологий Open Source, поэтому разработчики могут получить доступ к любому стеку языка.

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

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

R — платформенно независимый, он хорошо интегрируется с другими языками программирования. Наряду с анализом данных, R приспособлен для визуализации данных.

Несмотря на относительную простоту интеграции с другими инструментами, R обладает рядом особенностей, которые усложняют его изучение. К ним, например, можно отнести нетрадиционные структуры данных и индексирование (которое начинается с 1 вместо 0).

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

JavaScript. Этот язык появился в середине как инструмент для улучшения практики веб-разработки и является одним из наиболее востребованных в этой области. JavaScript — высокоуровневый и динамически типизированный язык, гибкий и мультипарадигмальный. Применение языка в МО получило ограниченное применение, но, тем не менее, такие известные проекты, как Google Tensorflow.js, основаны на JavaScript.

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

C++. Это самый старый среди наиболее распространенных на сегодняшний день языков программирования. Он был создан в недрах Bell Labs в начале как научно-исследовательский проект, направленный на расширение возможностей языка Си. Обладая возможностями одновременно как низкоуровневого, так и высокоуровневого языка программирования, в контексте МО C++ обеспечивает более высокий уровень контроля и эффективности, чем другие языки программирования.

Гибкость языка хорошо подходит для ресурсоемких приложений, и подмножество программ МО здесь — не исключение. Учитывая, что C++ — статически типизированный язык, он может выполнять задачи с относительно высокой скоростью.

Что касается его минусов, то основным из них является то, что для создания новых приложений на базе C++ требуется написание большого объема сложного кода, что занимает много времени и может вызвать большие трудности в обслуживании. Язык C++ определенно сложен в овладении и, создавая на нем новые проекты, начинающие программисты очень часто допускают невынужденные ошибки.

Читайте также:  Сони иксперия диагональ 6

Java. За созданием Java стоит Sun Microsystems. Появившийся в середине он изначально замышлялся как высокоуровневый и объектно-ориентированный язык программирования, который во многом напоминает по структуре C++. Обладая огромной популярностью, Java может похвастаться широким спектром алгоритмов, которые очень полезны для сообщества разработчиков софта МО. Во многом Java считается одним из самых безопасных языков программирования благодаря использованию байт-кода и песочниц.

Его можно обозначить как удачную инкарнацию C++ (Java обладает большинством функционала, заложенным в C++), которая лишена недостатков последнего — проблем с безопасностью кодовой базы и сложностью компиляции.

Несмотря на все свои преимущества, Java имеет репутацию более медленного языка, чем многие другие языки программирования и в том числе C++. Кроме того, начиная с 2019 г. для написания определенных бизнес-приложений на Java требуется коммерческое лицензирование, что выльется в дополнительные расходы для предприятий.

Выводы

Python — самый популярный из всех языков программирования, применяемых в МО. Тем не менее, сбрасывать со счетов JavaScript и ряд некоторых других языков, может быть непредусмотрительно. Это связано с тем, что со временем их популярность будет расти, отражая изменения бизнес-ландшафта. Что касается тенденций программирования, то можно с уверенностью сказать, что в ближайшие несколько лет написание кода останется востребованной функцией, однако оно станет менее ориентированным на код и больше на функционал, поскольку машины сами научатся писать код.

цифровая электроника вычислительная техника встраиваемые системы

Языки программирования для искусственного интеллекта

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

Julia

Julia – это высокоуровневый язык программирования общего назначения, разработанный Джеффом Безансоном, Стефаном Карпински, Вирал Б. Шахом и Аланом Эдельманом в 2009 году. Он разработан с нацеленностью на высокопроизводительный численный анализ и вычислительную науку, поэтому он не включает необходимость отдельной компиляции по скорости. Простой синтаксис и глубокие математические корни делают Julia дружественным языком программирования для аналитиков данных. Он также включает Flux, основу для машинного обучения и ИИ. В сочетании с математическим синтаксисом Julia предлагает идеальный способ выражения алгоритмов. Julia также поддерживает другие платформы машинного обучения, такие как TensorFlow и MXNet.

Haskell

Haskell – стандартизированный, универсальный язык программирования, разработанный с нестрогой семантикой и сильной статической типизацией. Первоначально разработанный в 1990 году, Haskell в основном используется в академических кругах, хотя есть и некоторые примеры его использования в промышленности и коммерции для проектов в AT&T, Facebook, Google и других. Haskell основан на семантике языка программирования Miranda и позволяет эффективным библиотекам реализовывать алгоритмы ИИ.

В отличие от других, R – уникальный язык программирования, а также бесплатная программная среда с открытым исходным кодом для статистических вычислений и графики. Разработанный в 1993 году Росом Ихакой и Робертом Джентльменом, R широко используется среди аналитиков данных для разработки статистического программного обеспечения и анализа данных. Он также используется в искусственном интеллекте нового стиля и общем машинном обучении. R предоставляет несколько парадигм программирования, таких как векторное вычисление, функциональное программирование и объектно-ориентированное программирование и рассматривается как один из основных стандартных языков для таких областей, как финансы, биология и медицина.

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

MATLAB

MATLAB (Matrix Laboratory) является патентованным языком программирования, разработанным MathWorks. Он широко используется многими разработчиками программного обеспечения и разработчиками для анализа краевых систем и проектов ИИ. Это простой в использовании язык со встроенной графикой, которая позволяет разработчикам визуализировать данные и получать от них значимую информацию. MATLAB – хороший выбор для машинного обучения и проектов ИИ при задачах визуализации и выполнения матриц.

Python

Python – широко применяемый язык программирования и может быть использован для реализации ИИ из-за простой и бесшовной структуры, которую он предлагает. Синтаксис Python позволяет легко реализовать различные алгоритмы ИИ, что также позволяет сократить время разработки по сравнению с другими доступными языками программирования. Применение Python позволяет пользователям создавать нейронные сети с набором полезных библиотек, которые могут использоваться для разработки ИИ. Другие функции включают возможность тестирования алгоритмов без необходимости их реализации. Он также поддерживает объектно-ориентированные, функциональные и процедурно-ориентированные стили программирования.

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

Читайте также:  Список павших в вов

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

История программиста, которому удалось освоить машинное обучение и deep learning за один год и даже успешно применить его в реальном проекте

С нуля до использования в работе

Это дополнение к моей прошлогодней статье, о том, как я начал свой путь в машинное обучение.

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

Это было именно тем, что люди называют хорошей работой – получать деньги за то, что обычно делаешь ради удовольствия.

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

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

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

Начало: Hacker News и Udacity

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

Так что я начал смотреть первые несколько частей отдельного курса на сайте Udacity, параллельно читая каждую попавшуюся статью по данной тематике.

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

Провал курса по машинному обучению на Coursera

В январе 2015 года, я вступил в учебный лагерь Founders and Coders в Лондоне, чтобы стать крутым разработчиком. Спустя пару недель, я уже хотел научиться писать программы для обучения своего компьютера, так что я со своими сверстниками организовал учебную группу. Каждый вечер вторника мы смотрели лекции курса машинного обучения на сайте Coursera.

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

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

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

Если бы я мог отмотать время назад, я бы предпочёл курс Udacity «Intro to Machine Learning», так как он легче и предполагает использование Python и Scikit Learn. Пойдя именно этим путем, мы гораздо раньше замарали бы руки, стали увереннее и получили массу удовольствия от изучения.

Усвоенный урок: начинай с чего-то простого и практичного, нежели с чего-то сложного с тонной теории.

Машинное обучение за неделю

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

За эту неделю я сделал следующее:

  • Освоил Scikit Learn;
  • Испытал машинное обучение на реальном наборе данных;
  • Написал алгоритм линейной регрессии с нуля (на Python);
  • Немного поигрался с обработкой естественного языка.

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

Усвоенный урок: посвяти неделю изучению чего-то одного, и ты удивишься, насколько эффективно пройдёт эта неделя.

Неудача в изучении нейронных сетей

После окончания Founders and Coders, я вернулся в Норвегию и попытался повторить успех в изучении машинного обучения, только уже на нейронных сетях.

Ничего не вышло.

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

Читайте также:  Температура видеокарты в реальном времени

Усвоенный урок: для каждого вида деятельности подбери себе подходящее окружение.

Однако я, по крайней мере, начал свой путь в нейронные сети и у меня потихоньку получалось схватывать основы. Уже к июлю я закончил свою первую нейронную сеть. Это, вероятно, самая ужасная имплементация из когда-либо написанных и мне, честно сказать, стыдно показывать её здесь. Как говорится, первый блин комом, а цель свою я достиг: я смог доказать себе, что понимаю концепты обратного распространения и градиентного спуска.

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

К концу года я написал статью, в которой собрал воедино всё, что я изучил за этот год.

Проверка себя на конкурсах Kaggle

В течение своего отпуска в 2015 году, я получил дополнительную мотивацию и решил попробовать Kaggle. Это проект, где можно поэкспериментировать с наборами данных и получить отзывы о своей работе. Так что, я начал экспериментировать, используя разные алгоритмы в их конкурсах Home Quote Conversion, Otto Group Product Classification и Bike Sharing Demand.

Мне удавалось улучшать свои результаты раз за разом, экспериментируя с алгоритмами и данными.

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

Самообразование как ежедневная рутина

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

На тот момент, уже имев представление об основах в области нейронных сетей, мне хотелось перейти к deep learning.

Deep Learning на Udacity

Моей первой попыткой стал курс по Deep Learning на Udacity, в конце которого я получил одно большое разочарование. Лекции были слишком короткими и неинформативными для меня.

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

В защиту Udacity лишь скажу, что на тот момент я был профаном во всём, что как-либо относилось к IPython Notebook, поэтому для других этот курс может и был полезен, а я, попросту, не был готов к нему.

Стэнфорд – Deep Learning для обработки естественного языка

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

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

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

Однако следует отметить, что это было сложно, очень сложно. В какой-то момент я понял, что мне нужна помощь от кого-то, кто понимает это лучше меня, так что я связался со студентом с докторской степенью, который был готов помогать мне в моём деле за 40 долларов в час. Я позже осознал, что это было именно то, чего мне не хватало, чтобы двигаться дальше, так как этот человек заполнил огромное количество пробелов в моей голове.

Усвоенный урок: если вы можете позволить себе учителя по машинному обучению за 50 долларов в час, это определённо стоит того.

В дополнение к этому, в Xeneta пришёл Data Scientist. У него была степень магистра по математике и я часто обращался к нему за помощью, когда у меня возникали проблемы, связанные с линейной алгеброй, мат.анализом или с машинным обучением в целом. Так что, не забывайте о том, что люди, которые могут вам помочь могут уже находиться рядом с вами.

Взлёт продаж в Xeneta

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

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

Это может и сложно, но, как говорится, идущий дорогу осилит.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector