No Image

Машинное обучение с чего начать

СОДЕРЖАНИЕ
434 просмотров
10 марта 2020

Что такое машинное обучение

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

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

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

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

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

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

Вот хороший пример от гугловского DeepMind:

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

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

Для чего используется машинное обучение

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

Но до этого пройдет еще несколько лет или даже десятилетий. А что же сейчас? Разве машинное обучение еще не начали использовать для решения практических задач? Начали, технология широко используется в области data science (науки о данных). И чаще всего эти задачи маркетинговые.

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

Похожую систему использует Google, чтобы подбирать релевантную рекламу, и у него такие же проблемы – стоит поискать информацию о том, какие виды велосипедов бывают, как Google тут же решит, что пользователь хочет погрузиться в эту тему с головой. Тем же самым занимается и «Яндекс» в своем сервисе «Дзен» – там МО используется для формирования ленты, точно так же, как и в Twitter, Instagram, Facebook, «ВКонтакте» и других социальных сетях.

Вы также могли работать с голосовыми помощниками вроде Siri – они используют системы распознавания речи, основанные на ML. В будущем они могут заменить секретарей и операторов кол-центров. Если вы загорелись этой идеей, можете попробовать сервис аудиоаналитики Sounds от Mail.Ru.

Есть и другие примеры использования систем с машинным обучением:

То есть применение МО может быть самым разным. И даже вы можете использовать его в своих приложениях – для этого понадобится приобрести, настроить и поддерживать инфраструктуру обучения машинных моделей. Альтернатива — воспользоваться готовыми средствами машинного обучения на платформе Mail.Ru Cloud Solutions.

Каким бывает машинное обучение?

Всего есть 3 вида машинного обучения:

  1. С учителем (Supervised machine learning).
  2. Без учителя (Unsupervised machine learning).
  3. Глубокое обучение (Deep learning).

С учителем (Supervised machine learning)

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

Учителем выступает человек, который вбивает в компьютер данные. Допустим, он внес в базу следующую таблицу:

Имя ученика Класс IQ Пол Склад ума Возраст Предмет с самой высокой успеваемостью
Олег 8 120 Мужской Техничес­кий 15 Геомет­рия
Виктория 8 100 Женский Творчес­кий 15 Литера­тура
Иван 8 110 Мужской Гуманитар­ный 14 История
Игорь 8 105 Мужской Техничес­кий 15 Физика
Мария 8 120 Женский Гуманитар­ный 14 Литера­тура

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

Читайте также:  Tx r32lx70k не включается

То есть учитель дает компьютеру dataset: вводную информацию (пол, возраст, IQ, склад ума, класс), а затем сразу же дает ему данные о результатах учебы, задавая вопрос «вот данные, они влияют на будущую профессию, как думаешь, почему?». И чем больше будет вводных, тем точнее будет анализ.

Так, например, программы учат распознавать объекты на фотографиях – программа просматривает миллионы изображений с описанием того, что на них изображено (дерево или облако). Она находит общие черты и уже сама учится давать описания изображениям. Учитель показывает изображение без описания, а программа спрашивает «это дерево?». Если человек отвечает утвердительно, программа понимает, что сделала правильные выводы. Хороший пример такой системы – облачный сервис для встраивания в приложения машинного зрения Vision на платформе Mail.Ru Cloud Solutions.

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

Без учителя (Unsupervised machine learning)

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

Поэтому обучение на играх – это один из самых эффективных способов машинного обучения. Вот более простой пример – программа получает данные о том, как далеко от нее находятся какие-то объекты, и может выбрать, как лучше перемещаться в игре «Змейка», чтобы получить больше очков:

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

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

Также нейросети могут обучаться не самостоятельно, а в паре. Так работает генеративно-состязательная сеть (GAN). Она состоит из сетей G и D – первая на основе реальных изображений генерирует образцы, а вторая пытается отличить подлинные образцы от неправильных.

Технология используется для того, чтобы создавать фотографии, неотличимые от реальных, а также восстанавливать поврежденные или нечеткие изображения. Одна из компаний, которая использует GAN, –Facebook.

Глубокое обучение (Deep learning)

Глубокое обучение может быть как с учителем, так и без, но оно подразумевает под собой анализ Big Data – настолько большой информации, что одного компьютера будет недостаточно. Поэтому Deep Learning использует для работы нейронные сети.

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

Это можно рассмотреть на примере систем распознавания объектов:

  1. получение изображения;
  2. выявление всех точек;
  3. нахождение линий, построенных из точек;
  4. построение простых фигур с помощью линий;
  5. составление сложных фигур из простых и так далее.

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

Я нейросеть, я так вижу

Deep learning может использоваться для самых неожиданных целей. Например, существует искусственный интеллект по имени Норман, его отправили изучать разделы с «жестью» на Reddit – кадры с расчлененными людьми, фотографии с мест преступлений, жуткие истории и так далее.

Затем Норману предложили пройти тест Роршаха, чтобы сравнить его ответы с ответами других ИИ – где одни видели цветы, животных и зонты, Норман видел мертвых мужчин и женщин, убитых самыми разными способами.

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

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

Примечательно: Как уже говорилось выше, многие выдают за ИИ обычные программы. Яркий пример – Deep Blue, суперкомпьютер, который обыграл Гарри Каспарова 11 мая 1997 года. На самом деле шахматная система перебирала позиции из двух дебютных книг, сравнивала их с текущей партией и выбирала оптимальный вариант.

Однако шахматный искусственный интеллект все же существует – программа AlphaZero, запущенная в декабре 2017 года. Всего за 24 часа нейросеть научилась играть в шахматы на таком уровне, что смогла обыграть одну из лучших шахматных программ – Stockfish – с разгромным счетом (+28 – 0 = 72). А в декабре 2018 г. в новом матче из 1000 партий нейросеть выиграла 155 партий, проиграла 6 и свела вничью 839. Тесты показали, что Stockfish сумел лидировать в счете, только когда ему дали в 30 раз больше времени, чем нейросети.

Читайте также:  Искать картинки по фото с телефона

Как начать разбираться в машинном обучении

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

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

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

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

Добрый день!
С чего начать обучение машинному обучению, учитывая что опыта в данной сфере – 0?
Если данная область имеет много направлений, хотелось бы углубиться в AI.

Есть-ли какие-то блоги и книги (желательно на русском языке)?

Так же желательно, что-бы примеры в статях / книге были на одном из данных языков (в порядке убывания):
* JS
* Python
* Java
* Ruby
* C

R, Prolog и т.п. – не интересуют, так как это узконаправленные языки.

  • Вопрос задан более трёх лет назад
  • 27778 просмотров

sim3x: начал с поиска готовых библиотек на JS и изучением их кода, а так же прочел пару статей на хабре (из которых узнал что DL это круто, и по сути дела – все, так как материал был расчитан на уровень выше начального.)

https://github.com/harthur/brain – JS либа, была еще одна, но мне она показалось сложнее для начала.

Т. Сегаран – программируем коллективный разум. Там есть некоторые методы машинного обучения. Сама книжка смесь вэба и Data Mining. Python

В этих двух книгах теория:

Питер Норвиг. Искусственный интеллект: современный подход
Книга П.С. Романов. Основы искусственного интеллекта

Библиотека scikit-learn с реализованными алгоритмами из книг выше. Python

А также пригодится ( на более поздних этапах )
Козлов М.В., Прохоров А.В. Введение в математическую статистику. — М.: Изд-во МГУ, 1987.
Боровков А.А. Математическая статистика. Оценка параметров, проверка гипотез. — М.: Наука, 1984
Боровков А.А. Математическая статистика. Дополнительные главы. — М.: Наука, 1984.

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

Для кого эта статья?

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

В цифрах

С каждым годом растёт потребность в изучении больших данных как для компаний, так и для активных энтузиастов. В таких крупных компаниях, как Яндекс или Google, всё чаще используются такие инструменты для изучения данных, как язык программирования R, или библиотеки для Python (в этой статье я привожу примеры, написанные под Python 3). Согласно Закону Мура (а на картинке — и он сам), количество транзисторов на интегральной схеме удваивается каждые 24 месяца. Это значит, что с каждым годом производительность наших компьютеров растёт, а значит и ранее недоступные границы познания снова «смещаются вправо» — открывается простор для изучения больших данных, с чем и связано в первую очередь создание «науки о больших данных», изучение которого в основном стало возможным благодаря применению ранее описанных алгоритмов машинного обучения, проверить которые стало возможным лишь спустя полвека. Кто знает, может быть уже через несколько лет мы сможем в абсолютной точности описывать различные формы движения жидкости, например.

Анализ данных — это просто?

Да. А так же интересно. Наряду с особенной важностью для всего человечества изучать большие данные стоит относительная простота в самостоятельном их изучении и применении полученного «ответа» (от энтузиаста к энтузиастам). Для решения задачи классификации сегодня имеется огромное количество ресурсов; опуская большинство из них, можно воспользоваться средствами библиотеки Scikit-learn (SKlearn). Создаём свою первую обучаемую машину:

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

— Если все так просто, почему до сих пор не каждый предсказывает, например, цены на валюту?

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

Читайте также:  Как включить смартфон андроид

Ближе к делу

— Получается, зарабатывать на этом деле я не сразу смогу?

Да, до решения задач за призы в $100 000 нам ещё далеко, но ведь все начинали с чего-то простого.

Итак, сегодня нам потребуются:

  • Python 3 (с установленной pip3)
  • Jupyter
  • SKlearn, NumPy и matplotlib

Дальнейшее использование требует от читателя некоторых знаний о синтаксисе Python и его возможностях (в конце статьи будут представлены ссылки на полезные ресурсы, среди них и «основы Python 3»).

Как обычно, импортируем необходимые для работы библиотеки:

— Ладно, с Numpy всё понятно. Но зачем нам Pandas, да и еще read_csv?

Иногда бывает удобно «визуализировать» имеющиеся данные, тогда с ними становится проще работать. Тем более, большинство датасетов с популярного сервиса Kaggle собрано пользователями в формате CSV.

— Помнится, ты использовал слово «датасет». Так что же это такое?

Датасет — выборка данных, обычно в формате «множество из множеств признаков» → «некоторые значения» (которыми могут быть, например, цены на жильё, или порядковый номер множества некоторых классов), где X — множество признаков, а y — те самые некоторые значения. Определять, например, правильные индексы для множества классов — задача классификации, а искать целевые значения (такие как цена, или расстояния до объектов) — задача ранжирования. Подробнее о видах машинного обучения можно прочесть в статьях и публикациях, ссылки на которые, как и обещал, будут в конце статьи.

Знакомимся с данными

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

Работая в Jupyter notebook, получаем такой ответ:

Это значит, что теперь нам доступны данные для анализа. В первом столбце значения Grade показывают, к какому сорту относится вино, а остальные столбцы — признаки, по которым их можно различать. Попробуйте ввести вместо data.head() просто data — теперь для просмотра вам доступна не только «верхняя часть» датасета.

Простая реализация задачи на классификацию

Переходим к основной части статьи — решаем задачу классификации. Всё по порядку:

  • создаём обучающую выборку
  • пробуем обучить машину на случайно подобранных параметрах и классах им соответствующих
  • подсчитываем качество реализованной машины

Посмотрим на реализацию (каждая выдержка из кода — отдельный Cell в notebook):

Создаем массивы, где X — признаки (с 1 по 13 колонки), y — классы (0ая колонка). Затем, чтобы собрать тестовую и обучающую выборку из исходных данных, воспользуемся удобной функцией кросс-валидации train_test_split, реализованной в scikit-learn. С готовыми выборками работаем дальше — импортируем RandomForestClassifier из ensemble в sklearn. Этот класс содержит в себе все необходимые для обучения и тестирования машины методы и функции. Присваиваем переменной clf (classifier) класс RandomForestClassifier, затем вызовом функции fit() обучаем машину из класса clf, где X_train — признаки категорий y_train. Теперь можно использовать встроенную в класс метрику score, чтобы определить точность предсказанных для X_test категорий по истинным значениям этих категорий y_test. При использовании данной метрики выводится значение точности от 0 до 1, где 1 100% Готово!

— Неплохая точность. Всегда ли так получается?

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

— Слишком легко. Больше мяса!

Для наглядного просмотра результата обучения на данном датасете можно привести такой пример: оставив только два параметра, чтобы задать их в двумерном пространстве, построим график обученной выборки (получится примерно такой график, он зависит от обучения):

Да, с уменьшением количества признаков, падает и точность распознавания. И график получился не особенно-то красивым, но это и не решающее в простом анализе: вполне наглядно видно, как машина выделила обучающую выборку (точки) и сравнила её с предсказанными (заливка) значениями.

Предлагаю читателю самостоятельно узнать почему и как он работает.

Последнее слово

Надеюсь, данная статья помогла хоть чуть-чуть освоиться Вам в разработке простого машинного обучения на Python. Этих знаний будет достаточно, чтобы продолжить интенсивный курс по дальнейшему изучению BigData+Machine Learning. Главное, переходить от простого к углубленному постепенно. А вот полезные ресурсы и статьи, как и обещал:

Материалы, вдохновившие автора на создание данной статьи

Более углубленное изучение использования машинного обучения с Python стало возможным, и более простым благодаря преподавателям с Яндекса — этот курс обладает всеми необходимыми средствами объяснения, как же работает вся система, рассказывается подробнее о видах машинного обучения итд.
Файл сегодняшнего датасета был взят отсюда и несколько модифицирован.

Где брать данные, или «хранилище датасетов» — здесь собрано огромное количество данных от самых разных источников. Очень полезно тренироваться на реальных данных.

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

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

Это интересно
Adblock
detector