Машинное обучение — это…
Вот самое простое определение, которое я нашел:
Машинное обучение — это « класс методов искусственного интеллекта, которые позволяют улучшить результаты работы компьютеров путем обучения на известных данных», — Berkeley.
Теперь давайте разложим все по полочкам, чтобы выстроить основы знаний в области машинного обучения.
…подраздел искусственного интеллекта (ИИ)
ИИ — это наука и технология по разработке мероприятий и методов, позволяющих компьютерам успешно выполнять задачи, которые обычно требуют интеллектуального осмысления человека. Машинное обучение — часть этого процесса: это методы и технологии, с помощью которых можно обучит компьютер выполнять поставленные задачи.
…способ решения практических задач
Методы машинного обучения все еще в развитии. Некоторые уже изучены и используются (рассмотрим дальше), но ожидается, что со временем их количество будет только расти. Идея в том, что совершенно разные методы используются для совершенно разных компьютеров, а различные бизнес-задачи требуют различных методов машинного обучения.
… способ увеличить эффективность компьютеров
Для решения компьютером задач с применением искусственного интеллекта нужны практика и автоматическая поднастройка. Модель машинного обучения нуждается в тренировке с использованием базы данных и в большинстве ситуаций — в подсказке человека.
…технология, основанная на опыте
ИИ нуждается в предоставлении опыта — иными словами, ему необходимы данные. Чем больше в систему ИИ поступает данных, тем точнее компьютер взаимодействует с ними, а также с теми данными, что получает в дальнейшем. Чем выше точность взаимодействия, тем успешнее будет выполнение поставленной задачи, и выше степень прогностической точности.
Простой пример:
- Выбираются входные данные и задаются условия ввода (например, банковские операции с использованием карт).
- Строится алгоритм машинного обучения и настраивается на конкретную задачу (например, выявлять мошеннические транзакции).
- Используемые в ходе обучения данные дополняются желаемой выходной информацией (например, эти транзакции — мошеннические, а эти нет).
Почему нам вообще может понадобиться приводить данные к какому-то виду
-
большинство алгоритмов ML требует предварительной подготовки данных, например, приведение к числовому виду
-
часто данные нужно дополнительно привести к определенному виду для того чтобы срослась математика, например, нормализовать или привести к логарифмическому масштабу
-
машинное обучение точно плохо понимает неразобранные составные объекты
-
для большинства алгоритмов сложность по пространству/времени в основном сосредоточена на построении модели. Это хорошо для продакшена, но сильно увеличивает расходы на поиск решения
Попробуем «разобрать» json-подобный объект, находящийся в колонке event_data. Для этого воспользуемся pandas.json_normalize, который разбирает структурированные данные из JSON в табличный формат, а также json.load, который десериализует текст или байткод, содержащий json-документ в python-объекты. Чтобы применить эти методы ко всей серии, воспользуемся DataFrame.apply (метод не сильно быстрый, но нам требуется выполнить эту операцию всего один раз, поэтому, в данном случае, время смело приносим в жертву).
В результате у нас получилось довольно прилично новых признаков (приведено сокращенно)
Проблема заключается в том, что нам не удалось полностью разобрать json-подобные объекты, т.к. на самом деле они не отвечают стандарту json. Например, вот эти колонки остались неразобранными:
flower | flowers |
---|---|
0.0 | |
0.0 | |
0.0 |
shels |
---|
bottles |
---|
[{‘color’: ‘blue’, ‘amount’: 2}, {‘color’: ‘blue’, ‘amount’: 1}, {‘color’: ‘purple’, ‘amount’: 2… |
[{‘color’: ‘blue’, ‘amount’: 2}, {‘color’: ‘blue’, ‘amount’: 1}, {‘color’: ‘purple’, ‘amount’: 2… |
[{‘color’: ‘blue’, ‘amount’: 2}, {‘color’: ‘blue’, ‘amount’: 1}, {‘color’: ‘purple’, ‘amount’: 2… |
castles_placed |
---|
[] |
[{‘size’: 3, ‘position’: {‘x’: 567, ‘y’: 484, ‘stage_width’: 1015, ‘stage_height’: 762}}, {‘size… |
Мы видим списки с пропусками, пустые списки, списки неравной длины, списки словарей, а так-же списки с разным числом вложенных вловарей и даже кортежи списков. Все это возникло потому, что так когда-то кому-то было удобно складировать эти данные в базу данных. Теперь это придется разобрать вручную. Данная задача выходит за рамки этой статьи. Тут я всего лишь демонстрирую то, с чем зачастую можно столкнуться при обработке данных.
Что еще можно встретить? Строки, пустые множества и словари. Булевые и другие значение, в том числе записанные как строки или с ошибками, например так: ‘NONE’, ‘nul’, ‘none’, ‘0’ и т.п., false и true, ‘False’, ‘True’, ‘Yes’, ‘No’ и т.д. — список сильно неполный. Все это требует детального исследования и разбора.
К тому же, не все данные стоит разбирать. Иногда можно встретить готовые векторы, например координаты или списки каких-то сгруппированных значений.
В итоге, что с памятью?
Мы еще сильнее потеряли в потреблении памяти! А данные еще копать и копать…
Как подтвердить права на ПО для Реестра
Для включения ПО в Реестр российского ПО необходимо подтвердить, что права на программу принадлежат вам в полном объеме. Здесь возможны минимум 3 варианта приобретения исключительных прав на ПО:
1. Собственная разработка
В зависимости от того, пишется программа силами штатных сотрудников или с использованием сторонних разработчиков, а также их статуса, будет отличаться пакет документов, который необходимо будет предоставить для подтверждения прав на программу.
a. Служебная разработка – программа, созданная авторами-работниками
С такими авторами должны быть заключены (1) трудовые договоры с обязанностями по разработке программ, (2) договоры на служебные объекты, связанные с распределением прав на программу и предусматривающие выплату авторского вознаграждения, (3) даны служебные задания на разработку конкретного ПО, а также оформлены приказы на создание программы и вводе ее в эксплуатацию.
b. Программа, созданная автором-фрилансером
Если для разработки программы привлекается независимый разработчик (автор), то с ним заключается договор авторского заказа. В договоре обязательно указать, что все исключительные права на созданную программу переходят вам, как заказчику, а также согласовать размер вознаграждения за отчуждение прав. В противном случае, права на программу останутся у разработчика.
c. Программа, созданная компанией-разработчиком
В случае поручения разработки программы иной компании, с последней заключается договор на разработку программного обеспечения. Указанный договор существенным образом отличается от договора авторского заказа, поскольку в нем не обязательно указывать отдельно размер вознаграждения за переход прав и то, что права переходят заказчику. Данные условия прямо предусмотрены законом (ст.1296 ГК РФ). Однако, желательно, отразить в таком договоре, что организация=разработчик не вправе также пользоваться созданным продуктом в собственных целях.
2. Модификация ПО третьего лица
Данный вариант, как правило, имеет место в случае партнерства с зарубежной фирмой, которой принадлежат права на исходный программный продукт. Иностранная организация предоставляет российской компании лицензию на модификацию программы. На основе лицензии российская компания создает русифицированную версию продукта, подстраивая ПО под требования российского потребителя.
В лицензионном договоре важно отразить, что все права на созданный в результате модификации программный продукт принадлежат российской компании. Лицензия также не должна содержать каких-либо ограничений на использование и распространение такого ПО
3. Выкуп прав на программу в порядке отчуждения
Если программный продукт уже создан, то для приобретения прав на него необходимо заключить с его текущем правообладателем договор отчуждения прав на ПО.
Важно помнить, что права на программу по такому договору должны переходить в полном объеме, без каких-либо ограничений по сроку, территории, способам использования и пр. В противном случае, данный договор не будет считаться договором отчуждения, а может рассматриваться как лицензионный договор
Цифровая стратегия по переходу на отечественное ПО
Минкомсвязь подготовил проект, в котором подробно описана последовательность действий, и все требования, планируемые к утверждению.
В документе говорится, что все компании, предприятия или учреждения, входящие в список критической инфраструктуры, смогут работать только с отдельными видами программного обеспечения. В этот список войдет программное обеспечение, разработанное в России, или в странах ЕАЭС.
Для того чтобы получить отдельное разрешение на использование зарубежного софта, субъектам входящим в перечень критической инфраструктуры придется провести комплексный аудит и предоставить отчетность по имеющемуся оборудованию и его работе.
На основе полученных данных может быть принято решение о выборе ПО отечественного производства, а в случаях, когда российские аналоги, которые бы соответствовали заявленным характеристикам, не будут найдены, будут рассматриваться варианты продолжения работы уже с имеющимися зарубежными ПО. Продолжение работы с зарубежным ПО будет возможно только в тех случаях, когда техническую поддержку будут оказывать российские компании, не имеющие никакого отношения и не подчиняющиеся зарубежным структурам или физическим лицам.
Как освоить машинное обучение
Специалист в нашей отрасли не должен всё время писать код, но нужно владеть базовой статистикой и теорией вероятностей. Чем глубже вы хотите погрузиться в технологию, тем больше математических знаний и навыков потребуется.
Начать стоит с простых туториалов. Если человек владеет основами программирования, он сможет создать свою нейросеть. Раньше их приходилось писать самому с нуля, а сейчас есть готовые фреймворки: TensorFlow от Google или Hydra от «Фейсбука»*. Они позволяют быстрее обучать нейросети.
Проблема в том, где взять данные и мощности, чтобы их обучить. Например, сделать такие мощные нейросети, как GPT-3 или mGPT от «Сбера», на локальном компьютере сложно. Впрочем, есть сервис Google Colab, который бесплатно предоставляет виртуальную машину для обучения нейросетей в исследовательских целях. Многие используют её для быстрого тестирования, обучения и демонстрации возможностей нейросети. В интернете довольно много готовых решений, которые тоже можно запускать, тестировать и изменять через Google Colab.
Сейчас основной язык для машинного обучения — Python. Большинство курсов и книг по ML, а также основные фреймворки заточены под него. Но тот же TensorFlow от Google можно запускать даже в браузере, то есть использовать JavaScript.
Фундаментальные знания лучше получить в приличном университете. Скажем, топовые компании вроде «Сбера» или «Яндекса» на проекты с нейросетями и машинным обучением ищут стажёров в рейтинговых технических вузах — МФТИ, Бауманке и так далее. Если вы там отучились, это станет преимуществом. Вам будет легче «попасть на радары» и получить достойные предложения ещё во время учёбы.
Впрочем, если профильного высшего образования нет, выучиться можно и самостоятельно. Сейчас для этого существует довольно много бесплатных ресурсов — например, курсы на Coursera, Stepik и других платформах.
Например, могу порекомендовать курс «Специализация. Глубокое обучение». Его авторы — ведущие учёные в области ML.
Для начала попробуйте использовать готовые модели и фреймворки — многие из них можно запустить на домашнем компьютере. Потренируйтесь, чтобы понять, к чему лежит душа.
А вот без чего точно не получится вкатиться в ML, так это без основ программирования. Работа с нейросетями скорее подойдёт уверенным джунам, которым не нужно объяснять азы программирования и Computer Science.
Тем, кто решился погрузиться в машинное обучение, рекомендую читать и смотреть такие ресурсы:
План перевода компаний на отечественное программное обеспечение
Введение новых технических решений – это всегда длительная адаптация от которой и будет зависеть эффективность реализации запланированной стратегии.
При внедрении аналогов следует использовать пошаговый алгоритм, который поможет облегчить каждую из статей перехода.
План импортозамещения программного обеспечения состоит из следующих этапов:
- Планирование. Определение основных требований, которым должно отвечать новое ПО и оборудование. Планирование осуществляется путем тестирования системы и выделения важнейших компонентов.
- Отбор продуктов, отвечающих заявленным требованиям.
- Подготовка к интеграции. Резервное копирование, текстовое внедрение, формирование новых конфигураций для важнейших обновлений.
- Окончательное внедрение. Анализ производительности, сравнение настроек с полученными результатами, формирование инструкций и обучение персонала.
Чтобы поставленные цели были достигнуты, необходимо проанализировать все задачи и, соответственно им сформировать отдельные Т3.
Результаты тестов
Paperspace на один шаг вперед в отношении производительности и стоимости. Это особенно верно для разовых или нечастых пользователей, которые просто хотят экспериментировать с методами глубокого обучения (аналогичный вывод в другом бенчмарке).
Выделенные серверы (например, предоставляемые LeaderGPU) и bare metal servers, например, Hetzner подходят для пользователей, которые рассматривают долговременную работу этих ресурсов
Обратите внимание, что ваша задача прилично загружает CPU / GPU, чтобы действительно выиграть в цен
Новые игроки, такие как Paperspace и LeaderGPU, не должны быть списаны со счетов, поскольку они могут помочь сократить основную часть затрат. Предприятия могут быть против смены провайдеров из-за связанных инерционных и коммутационных расходов, но эти небольшие платформы, безусловно, стоит рассмотреть.
AWS и GCE могут быть потрясающими вариантами для тех, кто ищет объединение со своими другими сервисами (Amazon Rekognition, Google Cloud AI).
Если Вы не планируете выполнять задачу, выполнение которой займет несколько дней, лучше всего выбрать lower-end single-GPU инстанс с одним графическим процессором (см
также здесь).
Higher-End GPUs значительно быстрее, но на самом деле имеют плохую окупаемость. Вы должны выбрать их только тогда, когда короткое время обучения является приоритетней, чем затраты на оборудование.
Перевод статьи Шива Манне Machine learning mega-benchmark: GPU providers.
Реально ли уложиться с переходом на отечественное ПО в отведенные сроки?
Вопрос о переходе на отечественное ПО – это не спонтанное решение. Данный вариант рассматривался уже несколько лет и специалисты по информационной безопасности в сфере ИТ считают, что с интеграцией вполне возможно вписаться в указанные временные рамки.
Специалисты отмечают, что для некоторых отраслей, таких как атомная и химическая промышленность, металлургия и энергетика, интеграция нового софта будет сложной, так как имеющиеся на данный момент на подобных предприятиях ПО характеризуются длительными и сложными рабочими циклами.
Нефтедобывающие или сталелитейные сегменты работают на основе технологий непрерывного производства, а такие технологии не позволяют полностью перейти на отечественные ПО, так как для перехода придется полностью останавливать деятельность еще не выработав эксплуатационный ресурс оборудования, который в некоторых случаях рассчитан на очень большой срок.
Помимо этого именно в данном сегменте результаты замены могут быть непредсказуемыми. Придется потратить много времени на тестирование, запуски и отладки перед тем, как система заработает в нормальном режиме.
Условия регистрации в Реестре российского ПО
Декларируемая цель Реестра Минцифры – это подтверждение российского происхождения программного обеспечения, в связи с чем все установленные требования к правообладателю направлены на то, чтобы подтвердить данный факт.
Для включения в Реестр к ПО предъявляются следующие требования:
- заявитель — гражданин РФ или российская компания без преобладающего иностранного участия (т.е. более 50% долей должны принадлежать российскому лицу);
- исключительные права на программу (базу данных) должны принадлежать российскому правообладателю(ям) и не иметь никаких ограничений на использование, а также принудительного обновления или управления из-за рубежа;
- общая сумма выплат за календарный год по лицензионным и иным договорам на программу (базу данных) в пользу иностранных граждан и компаний, а также контролируемых ими российских организаций, должна составлять менее 30% выручки правообладателя программы (базы данных) от ее реализации;
- гарантийное обслуживание, техподдержка и модернизация программы (базы данных) осуществляются гражданином РФ или российской компанией без преобладающего иностранного участия.
Изменение включенного в Реестр ПО
Правообладатель должен уведомлять Минцифры об изменении сведений, касающихся правообладателя и зарегистрированного программного продукта, в частности изменений, связанных с:
- названием ПО;
- кодом продукции;
- адресами страниц интернет-сайта, где размещена техническая документация на ПО и ценовая политика;
- основанием возникновения прав на ПО;
- регистрацией ПО в Роспатенте;
- классом ПО;
- наличием ПО в национальном фонде алгоритмов и программ для ЭВМ;
- соответствием ПО установленным требованиям;
- программными модулями, являющимися неотъемлемыми компонентами ПО.
Уведомление об изменении сведений и прилагаемые к нему документы направляются заявителем оператору реестра в форме электронных документов посредством заполнения соответствующих электронных форм, размещенных на официальном сайте. Указанное уведомление должно быть подписано заявителем с использованием УКЭП.
Уведомить Минцифры нужно в течение 5 рабочих дней, со дня вступления в силу соответствующих изменений.
В случае изменения сведений о правообладателе (название, ОГРН, ИНН), подается заявление о внесении изменений в Минцифры, также в течение 5 рабочих дней. В случае, если правообладатель перестал отвечать установленным требованиям, программа (база данных) может быть исключена из Единого реестра.
Нужно ли предварительно регистрировать ПО в Роспатенте
Регистрация программы (базы данных) в Роспатенте и включение в Реестр российского ПО – отдельные процедуры. При этом для включения программы в Реестр отечественного ПО, его регистрация в Роспатенте формально не требуется.
Однако предварительная регистрация программы (базы данных) в Роспатенте все же рекомендуется. Например, в отличие от Роспатента, Минцифры (орган, отвечающий за включение ПО в Реестр) запрашивает документы, служащие основанием возникновения прав на программу (например, договор об отчуждении, договор на разработку, внутренние документы на служебную разработку).
Свидетельство на программу (базу данных) принимается в качестве документа, подтверждающего права на программу (базу данных), что не потребует предоставлять правоустанавливающие документы на ПО. В случае, если все же такую документацию эксперт запросит, то будет ориентироваться на состав авторов, который в нем указан.
Кроме того, сведения о Свидетельстве на программу (базу данных), а именно номер Свидетельства и дата регистрации, вносятся в Единый реестр российского ПО.
Готовое решение для вашего бизнеса
Регистрация ПО
Внесение программы для ЭВМ в государственный реестр Роспатента
Ознакомиться с решением
План импортозамещения программного обеспечения
Чтобы процесс импортозамещения прошел как можно быстрее и проще, эксперты рекомендуют придерживаться следующего алгоритма действий.
Тестирование ПО
Необходимо провести тестирование ПО в виртуальной среде и с абстрактными данными, чтобы проверить функциональность и техническую мощность новой программы.
Проверка поможет выявить проблемы или несоответствия и заранее их скорректировать.
Последовательный запуск
Обновление ПО нужно начинать с тех отделов, где работают наиболее опытные и квалифицированные работники и в то же время выполняются не самые важные производственные задачи (чтобы в случае ошибок не остановились все производственные процессы).
Обратная связь играет важную роль для подготовки полезного мануала и позволяет оценить все преимущества и недостатки интерфейса.
Помощь персонала
Работники, привыкшие к старому ПО, встретятся с большим количеством проблем и нюансов, поэтому необходимо обеспечить грамотную и своевременную поддержку, которая поможет минимизировать ущерб от запуска.
***
Характеризуя процесс импортозамещения ПО в России в целом, эксперты отмечают, что он, безусловно, ускорился, но все еще носит «лоскутный» характер – заменяются отдельные программные продукты, что в принципе понятно, так как в первую очередь организации сейчас стремятся защититься от хакерских атак и не допустить остановки производственных процессов. Но в том, что полный переход к использованию российских платформ и формированию цифровых экосистем компаний исключительно на отечественных решениях пройдут все российские корпоративные пользователи, представители отрасли не сомневаются. Для органов власти и госкомпаний это, как отмечалось выше, будет нормативно установленным требованием, остальные организации к такой полной замене иностранного ПО должна сейчас подтолкнуть позиция его разработчиков, которые отказываются от продажи программных продуктов российским пользователям или перестают обслуживать ранее проданные программы.
______________________________
Текст Директив Правительства РФ от 14 апреля 2021 г. № 3438п-П13 размещен на официальном сайте Центра компетенций по импортозамещению в сфере информационно-коммуникационных технологий (ru-ikt.ru/upload/iblock/6cf/Direktivy-Pravitelstva-Rossiyskoy-Federatsii-ot-14.04.2021-_-3438p_P13.pdf). Комментарии вице-премьера об их применении компаниями – на сайте Минцифры России (digital.gov.ru/ru/events/40854/). Со списком таких иностранных вендоров можно ознакомиться на информационном портале по вопросам безопасности в сети Интернет, созданном при поддержке Центра реагирования на компьютерные инциденты в информационно-телекоммуникационных сетях органов государственной власти РФ (safe-surf.ru/specialists/article/5298/678327/).
Как работает машинное обучение
Машинное обучение часто называют волшебным или черным ящиком:
Вводишь данные → «волшебный черный ящик» → Миссия выполнена.
Давайте посмотрим на сам процесс обучения, чтобы лучше понять, как машинное обучение справляется с данными.
Сбор
Машинное обучение основывается на данных. Первый шаг — убедиться, что имеющиеся данные верны и относятся именно к той задаче, которую вы пытаетесь решить. Оцените свои возможности для сбора данных, обдумайте их источник, необходимый формат и т. д.
Очистка
Данные зачастую формируются из различных источников, отображаются в различных форматах и языках. Соответственно, среди них могут оказаться нерелевантные или ненужные значения, которые потребуется удалить. И наоборот, каких-то данных может не хватать, и потребуется их добавить. От правильной подготовки базы данных прямым образом зависит и пригодность к использованию, и достоверность результатов.
Разделение
В зависимости от размера набора данных в некоторых случаях может потребоваться только небольшая их часть. Обычно это называется выборкой. Из выбранной части данные надо разделить на две группы: одна для использования алгоритмом, а другая для оценки его действий.
Обучение
Этот этап фактически направлен на поиск математической функции, которая точно выполнит указанную задачу. Обучение разнится в зависимости от типа используемой модели. Построение линий в простой линейной модели — это обучение; генерация дерева принятия решений для алгоритма случайного леса — это также обучение. Изменение ответов при построении дерева решений поможет скорректировать алгоритм.
Чтобы было проще, сосредоточимся на нейронных сетях.
Суть в том, что алгоритм использует часть данных, обрабатывает их, замеряет эффективность обработки и автоматически регулирует свои параметры (также называемый метод обратного распространения ошибки) до тех пор, пока не сможет последовательно производить желаемый результат с достаточной достоверностью.
Оценка
После того как алгоритм хорошо показал себя на учебных данных, его эффективность оценивается на данных, с которыми он еще не сталкивался. Дополнительная корректировка производится при необходимости. Этот процесс позволяет предотвратить переобучение — явление, при котором алгоритм хорошо работает только на учебных данных.
Итого
Вы сделали свой первый мини-проект по машинному обучению в Python.
Вы наверняка обнаружили, что после завершения даже небольшого проекта от загрузки данных до прогнозирования — вы уже намного сильнее продвинулись.
Какие могут быть следующие шаги по изучению машинного обучения?
Мы не освещали все этапы проекта машинного обучения, потому что это ваш первый проект, и нам нужно сосредоточиться на ключевых этапах. А именно, загрузке данных, анализе данных, оценка некоторых алгоритмов и прогнозировании данных. В других уроках мы рассмотрим другие аспекты машинного обучения по подготовке данных и улучшению результатов.