НУЖНО ЛИ РАЗРАБОТЧИКУ МАШИННОЕ ОБУЧЕНИЕ?

Привет, здесь Владимир из DataWorkshop.

Я веду подкаст "Бизнес мысли" (пока только на польском языке), на котором уже более 200 000 прослушиваний.
На русском языке мы будем публиковать статьи на основании подкастов.

Я практик. На подкастах я делюсь самым полезным и интересным из мира машинного обучения. Часто приглашаю гостей - они тоже практики :)


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

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

Эта статья в блоге будет очень полезна, особенно для программистов. Особенно если мы говорим о разработчиках .NET, C#, потому что именно на этом специализируется Каетан.

Каетан ведет подкаст Backend on the Frontend - рекомендую посмотреть, а также посетить его канал на YouTube.

Каетан:
Здравствуй, Владимир. Я очень рад, что мы смогли встретиться. Это первый раз, когда происходит своего рода сотрудничество, то есть Backend on the Frontline каким-то образом (по крайней мере, на один эпизод) связывается с твоим подкастом Biznes Myśli. Я надеюсь, что из этого получится очень интересный разговор. В самом начале я бы очень попросил тебя кратко представиться, кто ты, откуда и почему мы здесь собрались.
Владимир:
Привет, Каетан. Мне очень приятно, что ты меня пригласил. Я собираюсь немного отступить от своих мыслей о C#. Сейчас я объясню, что я имею в виду.



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


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


Я руковожу компанией DataWorkshop, которая занимается машинным обучением, но разными способами. С одной стороны, мы внедряем машинное обучение, помогаем, поддерживаем другие компании. На данный момент нам уже удалось реализовать более 500 ML моделей, так что именно столько моделей крутится в производстве и приносит прибыль. Сколько их было обучено, трудно подсчитать. Главное, что важно, - это довести их до производства, потому что обычно они не доходят до производства, поэтому здесь я горжусь тем, что нам удалось сделать так много.



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


Я делал это по субботам, экспериментировал в течение шести месяцев, а затем решил, что стоит сделать еще один шаг вперед, и c 2017 года начал проводить онлайн-курсы. На данный момент более 10 000 человек уже прошли через мои различные инициативы.



Третье направление компании - это лаборатория, собственные эксперименты, где мы делаем крутые вещи, связанные с ML, AI. Сейчас мы занимаемся тем, о чем никто толком не знает, потому что это эксперимент. Посмотрим, может быть, когда-нибудь я расскажу об этом подробнее.
Каетан:
Я впервые очень переживал и нервничал перед разговором с тобой. Могу честно признаться, что в предыдущих беседах я был более или менее знаком с самой темой. В отличие от них, я действительно мало знаю о ML.

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


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


По-русски это называется, наверное, что-то вроде "Самурай без меча", то есть вид самурая, японского воина, у которого обычно есть меч, а был такой человек, который жил в 1500 году в Японии, который собрал Японию воедино, и в то же время совсем не был воином в обычном смысле.


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


В голове у него немного помутилось, и он начал делать всякие странные вещи. Интересно, как сильно может измениться человек в зависимости от окружения. Его путь, как он все это сделал, собрал воедино, как он смог сплотить людей, смягчить конфликты и т.д. это очень увлекательно. Я думаю, что это полезное чтение в наше время.
Каетан:
В частности, использование нашего мозга, потому что он меняется в зависимости от этого, но давай оставим это.
Владимир:
:)
Что такое машинное обучение?
Каетан:
Если у людей иногда возникают проблемы с обучением и мышлением, то в каком смысле мы понимаем, что такое машинное обучение? Как мы можем научить машины?
Владимир:
Есть мем, где на партах стоят компьютеры, на стене висит доска, учитель стоит и учит. В некотором смысле это правда, и я сейчас объясню почему. Что такое машинное обучение? В целом, существует множество различных определений, и я думаю, что для программиста это лучше всего определить так: как программист работает, как программист думает и как вообще возникает решение?


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


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


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



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



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



Это имеет свои преимущества и недостатки, но таким главным преимуществом ML является обнаружение неочевидных взаимосвязей. У человека очень ограниченные ресурсы, когда дело доходит до комбинирования различных фактов. Да, он может рассматривать 5, 7 вещей одновременно, иногда больше, но обычно меньше. А мир вокруг нас очень сложен, поэтому нам нужны определенные инструменты (как телескоп, когда мы исследуем космос), которые могут делать определенные вещи быстрее, чем человек.



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



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



Конечно, я предполагаю, что со всеми этими историческими записями у нас будет небольшой процент, но есть ли где-то возможность понять, как ML модель все же работает, и немного подкорректировать ее?
Владимир:
Ты поднимаешь очень важную тему, очень деликатную в машинном обучении. Обычно речь идет о том, чтобы все происходило автоматически. Это и хорошо, и плохо. Хорошо, потому что это происходит автоматически, так что мы фактически передаем все полномочия модели, поэтому мы можем обнаружить гораздо больше, потому что мы не ограничиваем ее, и это хорошо. Но плохо, потому что возникают всевозможные этические проблемы, о которых ты упомянул.


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


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


Когда мы сможем хотя бы увидеть, что, например, один признак влияет на то-то и то-то, а другой признак влияет на что-то другое. Если один признак более вреден, то этот признак удаляется, и это самое безопасное, что можно сделать.
Процессы машинного обучения?
Каетан:
Хорошо, у меня сложилось впечатление, что для такого типичного программиста принцип машинного обучения может быть немного сложно принять, потому что программисты все же любят все контролировать, им нравится знать, что они боги этих приложений и точно знают, что происходит в каждый момент времени. А если они не знают, значит, они не написали достаточно тестов и должны что-то изменить, рефакторить.

С другой стороны, ты просто говоришь, что с помощью ML действительно создаешь что-то, а потом сам не знаешь, как это работает. С учетом этого, как выглядит процесс ML в целом, с чего ты начинаешь, какие шаги проходишь, чтобы построить весь процесс?
Владимир:
Я объясню этот процесс через некоторое время, но я прокомментирую один момент, касающийся удержания контроля. В ML контроль осуществляется на другом уровне. Есть участки, где, с одной стороны, есть вызов, а с другой - область, где нужно тщательно выбирать хотя бы те признаки, которые передаешь, или проверять, не переобучилась ли модель.



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


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


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



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


Есть такая поговорка: 'Мусор на входе, мусор на выходе', что означает, что если мы поместим мусор на вход, то ML, какой бы сложности оно там ни было, не сможет придумать умные вещи, основанные на мусоре.


Подготовка данных занимает много времени. Здесь очень пригодятся навыки программирования, потому что придется немного повозиться, чтобы вытащить эти данные, объединить их, сгруппировать. Существует даже шутка, что специалист по анализу данных тратит 60-70% своего времени на очистку данных, а остальное время жалуется, что потратил на это так много времени.


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


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


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


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


Но существует также процесс feature engineering, который заключается в том, что на основе существующих признаков мы пытаемся найти новые. Это звучит несколько озадачивающе. Что это означает на практике? У нас есть некоторые данные, но этот алгоритм способен буквально уловить только то, что есть в данных. Он не в состоянии угадать. Например, если мы прогнозируем цену на недвижимость и вместо площади у нас есть ширина и длина этой квартиры/дома.


Алгоритм не сможет перемножить эти два числа, но это важно, поскольку площадь является одним из ключевых параметров при прогнозировании. В этом случае ML-инженер объединит эти признаки таким образом, чтобы создать нечто новое. Именно здесь обычно возникают вопросы: имеет ли это вообще какой-либо смысл? Ведь если эта информация уже была в данных, добавляет ли она какую-либо ценность? Так и есть, и это связано с ограничениями алгоритмов. Они не способны рассуждать с людьми как настоящий естественный интеллект. Они весьма ограничены. Большинство из них, например, популярные алгоритмы дерева решений, являются жадными алгоритмами.


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


Как только у нас есть признаки и модель, все становится на свои места. По мере создания новых признаков мы обучаем модель, затем еще больше признаков, мы обучаем модель, и так по кругу. Есть еще одно измерение: выбор параметров. Сама модель имеет некоторые внешние параметры. Предположим, что дерево решений имеет определенную глубину, и параметр задается извне - 5 вопросов в глубину или 10 вопросов в глубину и так далее. Чем больше вопросов, тем больше деталей мы рассматриваем. Это имеет свои преимущества и недостатки, но оставим это на данный момент.


Мы уже выбрали признаки, обучили модель, выбрали параметры, и на этом этапе, конечно, стоит посмотреть на метрику качества (успеха). Это критерий качества, например, у нас есть модель A и модель B. Каждая из этих моделей имеет результат. Какая модель лучше? Мы можем подойти к этому субъективно, но это немного бессмысленно. Существуют формальные метрики, которые просто сравнивают строку за строкой, где ошибка меньше. Мы определяем эту ошибку по-разному. Ошибка может быть, если мы говорим о подсчете баллов, например, от 0 до 100. Правильный ответ - 100, а наша модель сказала 90, так что в этом случае мы ошиблись на 10.


В первой строке на 10, во второй на 20, в третьей на 5, находим среднее значение и получаем какое-то одно число, которое определяет ошибку в этой модели. Затем мы берем вторую модель и считаем аналогичным образом. Метрики разные, это число тоже разное. Стоит также понимать, что метрика должна иметь возможность выбора. Сейчас я не хочу вдаваться в подробности, но идея заключается в том, что мы сжимаем знания. Допустим, у нас миллион строк, поэтому у нас миллион прогнозов, и в этом случае мы сжимаем все это до одного единственного числа, которое говорит нам, насколько хорошо работает эта модель. Уже этот шаг интуитивно намекает, что где-то здесь мы теряем информацию. У нас было так много строк, а мы оцениваем результат с помощью одного числа.


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


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


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


Есть и другие решения, когда речь идет о C#, об этом мы тоже немного поговорим сегодня, потому что есть довольно интересная библиотека для этого.
Каетан:
Что ж, все верно, прежде чем мы перейдем к конкретным решениям... Я уже вижу в разговоре, что ты сильно разделяешь программиста и Data scientist-а. Начнем с того, нужно ли вообще машинное обучение такому разработчику, скажем, C#, нужны ли знания о нем?
Владимир:
Краткий ответ - ДА. Зачем ему это нужно? Хотя то, что я разделяю, тоже не случайно. Это так, что в целом я выхожу из среды разработки, и есть преимущества, почему программисты должны двигаться в этом направлении как Data Science, потому что, в конце концов, весь этот код — это просто код и все проблемы, которые есть у программиста, код управления версиями, хорошее название кода и т. д. они существуют здесь.


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


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


Зачем это нужно программисту, который даже не собирается туда входить? Мир меняется быстрее, чем ты думаешь. Например, ты можешь быть в .NET, и окажется, что мир окружает тебя машинным обучением. В Azure у нас есть когнитивные сервисы, поэтому есть слои, связанные с ML. В настоящее время это очень просто использовать, и уже можно начать делать всевозможные сложные вещи, используя только API.


Затем есть SQL Server, который должен быть базой данных, но по какой-то причине в нем реализованы компоненты, позволяющие запускать машинное обучение непосредственно на базе данных. Там, конечно, есть язык, либо Python, либо R - языки Data Science по умолчанию. У нас тоже есть довольно специфические библиотеки, но есть и наиболее популярные алгоритмы, может быть, не всегда лучшие, но достаточно хорошие (учитывая, что это база данных). Это уже настолько стандартно, что SQL Server 2017 и выше уже имеет такие возможности. Позже появились некоторые библиотеки, которые можно напрямую подтянуть к C# или F# и сделать простой ML.


В целом, готовится вся окружающая среда. Теперь вопрос: почему это происходит? Это происходит по очень простой причине - бизнесу это необходимо. В любом случае, зачем мы создаем код? С одной стороны, каждый программист скажет, потому что это круто, это интересно, и, кстати, я сам так скажу. С другой стороны, программисту платят за то, что он решает конкретные бизнес-задачи. Если появляется что-то, что все еще способно усилить эту добавленную стоимость, или конкуренты начинают теснить другую компанию, потому что она вводит некоторые более конкурентоспособные элементы, тогда у другой компании не остается особого выбора, она тоже должна быть на схожей волне.

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


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


Я буду задавать такие вопросы. Люди, которые работают на C#, обычно в основном занимаются бэкендом. Там можно сделать что-то на фронтенде, но это довольно экзотические вещи. Можно ли работать на C#, так как есть база данных? На данный момент ответ, вероятно, не совсем верен, потому что так или иначе база данных где-то есть.


Теперь второй вопрос: насколько вы эксперт в этой базе данных? Обычно в компании всегда есть один человек, который работает с этой базой данных, и если вам нужно сделать что-то более сложное, вы идете к этому человеку. Каждый второй человек прошел обучение по работе с базами данных, знает что-то о существовании индекса, и обычно этого достаточно. И это более или менее похожая аналогия. Такой человек не обязан знать все, что касается ML, ему не нужно изобретать такие решения, а использовать готовые компоненты, чтобы усилить себя и решение, которое он предоставит.
Каетан:
Сейчас, собственно, все это начинает постепенно складываться, но и я вспомнил, как слушал подкаст Марка Янковского „Маленькая большая компания”, где ты рассказывал о чат-ботах. Тогда я подумал, что ты говоришь, что это уже происходит, что чат-боты и voicebot, поддерживаемые ИИ, приближаются, и что мы не будем знать, когда мы разговариваем с другим человеком, а когда с машиной. Еще тогда я подумал: наверное, мы не так близки ко всему этому.


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


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


В то же время я немного удивлен тем, что ты говоришь, потому что у меня всегда было впечатление, что Data Scientist — просто немного другой программист, но все же программист. Видишь ли ты что-то (и, возможно, это тоже будущее), что для ученого, человека, который работает где-то в университете, какой-то академии, которая профессионально занимается наукой, — Data Scientist может стать профессией будущего?
Владимир:
В одном из эпизодов моего подкаста я поговорил с Марцином Можейко о мире академических наук. Этот мир очень неоднороден. Есть один, который больше связан с исследованиями, которые люди заканчивают, получают степень магистра, возможно, доктора философии. Другой - тот, который просто остается там, и это тот классический мир, с которым мы обычно ассоциируем, например, Польшу и многие другие страны.

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


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


ML объединил то, что работает, а то, что не работает, выбросил. Там довольно часто нет даже научной основы, а значит, научный мир вообще отстает. В этом и заключается парадокс. Например, глубокое обучение. Сейчас оно делает потрясающие вещи, начиная с deepfakes или тех голосов, которые генерируются там, что ты упомянул в voicebot - это глубокое обучение.


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


Возможно, здесь нам нужно сделать шаг назад, потому что искусственный интеллект, сам по себе являющийся концепцией, был задуман очень давно. По крайней мере, в 1950-х годах прошлого века он уже была формализован, но еще раньше, в 1940-х годах, кое-что уже начало зарождаться. Еще в 1840 году Ада Лавлейс была первой женщиной, которая стала концептуальным программистом, ведь тогда еще не было компьютеров.


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


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


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


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



Суть в том, что академики, которые работают только в академических кругах, довольно часто сами не в теме, даже если кажется, что они лучше разбираются в этих вопросах. Довольно часто ученые знают теорию, они могут довольно хорошо теоретизировать, но если вы скажете им: сделайте голосового робота, но на таком уровне, чтобы реализовать его на уровне кода, они, как правило, не станут этого делать.
 AI & ML
Каетан:
Вцелом у меня не складывалось, что мы объединили ученых с бунтарями. Где-то у меня это немного не сработало, так что хорошо, что мы это уточнили. Ты начал говорить, что искуственнный интеллект начал думать давным-давно. Опять же, это немного несовместимо с тем, что я хочу спросить в следующем вопросе. В чем разница между ML и AI?


Все, наверное, знают этот мем о том, что ML — это какой-то код на питоне, а AI — это просто презентация в PowerPoint. А в 1950 году, если я правильно помню, у нас не было PowerPoint, так что говорить о каком-то ИИ сложно. Какая разница на самом деле?
Владимир:
Путаница исходила в основном от журналистов, от мейнстрима. Тем, что эти люди не совсем вникали в детали, а иногда кто-то еще и хотел  создать шумиху на этой теме , поэтому определенные термины стали меняться местами. То, что сейчас называют ИИ - это просто машинное обучение или еще меньшее его подмножество - глубокое обучение. Сам по себе ИИ концептуально представляет собой нечто гораздо более широкое, чем машинное обучение.


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


Давай подумаем: что такое интеллект? Это очень сложная тема, мы не можем до конца определить, что такое интеллект. Алан Тьюринг в свое время пытался дать ему определение. Поскольку мы не скажем, что такое интеллект, давай хотя бы попытаемся на примере утки понять, что это такое: если она ведет себя как утка, то, скорее всего, это утка.


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


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


Есть дельфины или другие виды, которые могут делать то, что не могут люди, например, разговаривать на больших расстояниях, когда у нас есть связь 1:1, это как если бы один человек был в Кракове, а другой в Варшаве, и они могли бы общаться без мобильного телефона. Мы не можем этого сделать, но дельфины могут. Они находятся в воде, у них также немного другие условия, но это не важно.


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


Надеюсь, нам это не грозит, но искусственный интеллект сам по себе тоже начинает появляться в жизни программистов, потому что, например, недавно у нас был очень громкий запуск инструмента Copilot на GitHub. Здесь я понимаю такой искусственный интеллект все же как инструмент, как нечто, поддерживающее работу, а не отнимающее ее у программистов. Ты думаешь, что все время будет идти именно в этом направлении, или где-то по пути может случиться что-то плохое?
Владимир:
Когда мне задают этот вопрос, в моей голове сразу же всплывает несколько подобных ответвлений, и я задаюсь вопросом, с чего начать. Говоря об опасности, в таких книгах обычно говорится, что возникнет искусственный интеллект и уничтожит человечество, что тоже не исключено. Сейчас опасность в целом находится на другом уровне. Возьмем доход, о котором мы упоминали в самом начале работы с кредитным скорингом, - тот факт, что кто-то является женщиной, чернокожим или живет в плохом районе, может стать причиной того, что человек не получит кредит. Исходя из этого, могут произойти разные вещи. Теперь, если такие микрорешения начинают объединяться все больше и больше, то внезапно можно обнаружить, что судьба людей зависит от того, что говорит какой-то алгоритм.


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


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


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


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


Но некоторые изменения будут, и это естественно. В любом случае, если ты проработаешь немного дольше, 5, 10, 15 лет, ты знаешь, как постоянно меняется технология. Язык программирования меняется, и нужно идти в ногу со временем, чтобы иметь работу. Кроме того, появляется несколько иной образ мышления. Я не знаю, понимаешь ли ты, на каком двигателе работает интернет? 40% интернета работает на одном двигателе.
Каетан:
Правда? Я этого не знал.
Владимир:
Это WordPress или PHP.
Каетан:
Ну, да, конечно. Если задуматься, то безусловно.
Владимир:
Почему я говорю об этом? Однажды кто-то вдохновил меня в электронном письме. Он написал мне так, что я не был программистом, но мог установить WordPress и настроить различные плагины. В конце концов, в том-то и дело, что программист будущего будет немного похож на WordPress.


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

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


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


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

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


Но стать синьором, как мы понимаем, будет все труднее и труднее, потому что не будет такой среды, где можно пройти этот путь. Это моя гипотеза, посмотрим, сработает ли она. Многие вещи будут автоматизированы, как в случае с WordPress. Сейчас больше не нужно, чтобы кто-то непосредственно писал WordPress с нуля, потому что, как я помню, когда я занимался этим давным-давно, потребность в этом все еще существовала. Теперь есть человек, который разрабатывает такие вещи для себя, и это работает еще лучше. В том смысле, что там уже есть стандартизированные решения, проверенные на миллиардах различных объектов.


Подводя итог, можно сказать, что профессия программиста будет ликвидирована? Я так не думаю, потому что все еще есть много вещей, которые нужно делать вручную. С другой стороны, многие вещи станут автоматизированными. Есть еще одна важная аналогия, которую необходимо понять. Почему это произойдет? С точки зрения бизнеса это означает, что они платят деньги за то, чтобы появилось решение. Если возникнет альтернатива, можно заплатить меньше, и это тоже будет решением, то мы знаем, каким будет решение. Бизнес заключается в том, чтобы делать деньги и расти быстрее - вот и все. Это очень простое, логичное решение. Если есть альтернативный путь, который позволяет расти быстрее, мы пойдем именно в этом направлении.


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


В этом отношении мне кажется, что для разработчиков C# это не должно быть такой уж большой новинкой, хотя я согласен, что этот автопилот сможет сделать больше, чем просто подсказать эту так называемую dot-driven разработку. То есть, на данный момент у нас есть точечная разработка, в будущем можно ожидать большего. Но также мы должны быть осторожны, потому что OpenAI - это такая компания, в которой, с одной стороны, есть хорошие инженеры, а с другой - отличные маркетологи. С этим нужно быть осторожными, потому что некоторые вещи, о которых они говорят, - это скорее то, что должно произойти, а не текущее положение дел.
Machine Learning для програмистов C# – ML.NET
Каетан:
Здесь мы возвращаемся к вопросу о том, насколько хорошо маркетинг может продавать ИИ. Посмотрим, что из этого выйдет. Говоря о моем окружении .NET, я уже был удивлен, потому что в октябре или ноябре состоится релиз следующего .NET. Вместе с этим .NET должна выйти новая Visual Studio, которая уже находится в предварительной версии, которую вы уже можно скачать.


Недавно я опробовал ее на своем компьютере и немного поиграл с ней. Уже несколько лет существует тенденция, что Visual Studio сама хочет догнать то, что делал ReSharper, и код становится все лучше и лучше. Я был весьма удивлен, что в последней версии Visual Studio 2022 я начинаю писать какой-то код, начинаю другую строку, и Visual Studio говорит мне, что должно быть, чтобы этот код работал.


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


Давай перейдем непосредственно к "мясу" для моего сообщества .NET. Начнем с вопроса: почему именно Python? Мы должны с самого начала сказать себе, что Python в Data Science, ML рулит, и это не .NET. Почему именно Python и должен ли разработчик .NET, C#, если он хочет попробовать ML, изучать Python и внедрять какое-то приложение Python в своей компании? Если у нас есть целый стек .NET, можем ли мы как-то красиво объединить это?
Владимир:
Я начну с конца. Если бы ты задал этот вопрос год, два, три года назад, на вопрос, нужно ли изучать Python, мой ответ был бы однозначным "ДА". В настоящее время все выглядит иначе. Как Python взлетел и стал языком номер один? Опять же, этот аргумент очень прост - БИЗНЕС. Что волнует компании? То, как сделать больше дел за короткий промежуток времени. Python - это язык, который делает это возможным, потому что де-факто с помощью очень небольшого количества строк кода можно достичь очень многого.


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


У тебя есть модель одного, подключаешь это, затем оно не работает, ты отключаешь, подключаешь другое, и в процессе ты не меняешь много кода, например, только одну строчку. Я думаю, ты также помнишь, что когда приходилось делать нейронные сети в прошлом, сначала делалось это на C++, так что нужно было писать 200-500 строк кода, и это была только первая модель. Если хочешь написать вторую модель, нужно написать столько же. Он совершенно непригоден, с ним невозможно работать. В scikit-learn замена модели A на B производилась с помощью одной строчки кода. Существует общий интерфейс, который имеет два простых метода fit и predict.


Это гениально просто, до scikit-learn не было ни одной подобной библиотеки, которая делала бы это достаточно хорошо. Начала развиваться целая экосистема, и появилась альтернатива Python - язык Julia. У этого языка меньше недостатков, чем у Python, по крайней мере, в плане многопоточности и т.д., но у него нет экосистемы, т.е. библиотек, зависимостей. Он где-то там развивается, но все равно, если хочешь сделать модель, нужен не столько язык, сколько несколько строк кода, и оно начинает работать.


Благодаря тому, что Python сделал это одним из первых, а также предоставил возможность сделать это довольно легко и быстро, он начал набирать обороты. Затем это подхватили более крупные игроки. Google использует Python достаточно регулярно и активно в различных сервисах. Затем Uber, Facebook и так далее. Это стало быстро расти в геометрической прогрессии.


В этом отношении Python уже нельзя обогнать. Теперь давай подумаем, какова природа проблем Data Science? Многие новые коды появляются один раз, запускаются один раз и отбрасываются или, возможно, архивируются, чтобы эксперимент можно было проверить позже. Почему так происходит? В Data Science проводится много экспериментов, и большинство экспериментов оказываются неудачными. Это нормально, что 20 или 100 экспериментов не удаются, а 1 удается. При таком подходе нужно очень быстро генерировать код, очень быстро экспериментировать и только потом внедрять эти небольшие фрагменты.


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


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


Но если мы говорим о корпоративных продуктах, написанных, скажем, на Java или C#, каков был выбор раньше? Был выбор: вставлять микросервисы и REST API или базы данных, о которых я говорил, например, вводить результаты в базу данных. Иногда это работает, но иногда нам нужно иметь что-то в реальном времени.


Что касается Java, это было достаточно легко, потому что здесь есть много вещей, таких как Spark и тому подобное, так что это уже было возможно интегрировать, но в C#, .NET это было намного сложнее. На самом деле раньше не было большого выбора, как сделать это так, чтобы не создавать еще одну вещь в стеке. Теперь выбор есть, и то, что Microsoft сделала хорошо -придумала библиотеку ML.NET.


Я знал об этой библиотеке некоторое время назад, поскольку она вышла, вероятно, в 2018 году, но когда ты заговорил об этом, я подумал, что это хорошая возможность изучить, что происходит в мире C#. Так я и сделал, и был приятно удивлен, что он действительно созрел до интересного уровня.
Каетан:
Да!
Владимир:
Смотри, если хочешь начать внедрять машинное обучение в .NET прямо сейчас, не покидая мир .NET - это возможно. Причем уровень этого решения действительно будет очень высоким, ведь с одной стороны экосистема уже появилась в библиотеке ML.NET. Алгоритмов много, не все, но достаточно. Есть такие алгоритмы классификации, регрессии и т.д. Видно, что люди, которые это делали, мыслили очень широко. Есть еще элементы, которые отсутствуют, но это связано со сложностью проблемы.



Есть библиотека LightGBM. На самом деле это библиотека Microsoft, но она была разработана для интеграции с Python и Arcome. Она была интегрирована туда в течение долгого времени и работает. Но не было хорошей интеграции с .NET. Это может показаться неожиданным, но так оно и было. Сегодня эта интеграция уже произошла. LightGBM - действительно очень хорошая библиотека, одна из самых интересных, когда речь идет о классическом машинном обучении. Три самых интересных, на мой взгляд: XGBoost, CatBoost и LightGBM.



Есть еще компания ONNX. Идея заключается в том, что мы обучаем модель в чем-то другом, например, в TensorFlow, PyTorch, которые являются совершенно другими библиотеками, оторванными от .NET. Они написаны на других технологиях, и также можно обучаться на уровне Python. Позже мы сохраним его как двоичный файл и сможем прочитать его уже в .NET и запустить.



Это работает таким образом, что существуют переносимые форматы, универсальные языки, которые могут взять эти знания, полученные моделью, передать их и запустить на уровне .NET. Это потрясающе. Сейчас эти знания, наш материал, который уже создан на уровне TensorFlow, PyTorch - это фактически самые важные библиотеки в глубоком обучении, которые сильно конкурируют друг с другом. Это делает его классным для конечных пользователей, потому что за короткое время происходит все больше и больше вещей. Эти новейшие разработки можно просто загрузить и запустить.



В настоящее время, например, нет проблем с распознаванием фотографий, распознаванием лиц, распознаванием объектов. Это, конечно, уже давно можно сделать на Azura, то есть отправляешь через REST API, но у этого есть свои недостатки, потому что отправляя что-то через API, мы должны делиться своими данными. Кроме того, это не всегда масштабируется с точки зрения стоимости, поскольку у нас немного больше таких изображений. Также стоит отметить, что это технология, которая не принадлежит тебе, потому что ты не знаешь, отключит ли Azure ее завтра, или изменит ее, или поднимет цену, или что-то еще.


Теперь дело даже не в Azure как таковой, а больше в провайдере. Ты не имеешь над ним контроля. Всякое может случиться, поэтому всегда хочется как-то иметь это решение где-то поближе. На данный момент это возможно, по крайней мере частично. Можно запускать его локально, твои данные никуда не утекают и самое главное это 100% технология .NET, так что не нужно настраивать никаких микросервисов. Он также развивается довольно быстро.Недавно вышел очередной релиз 0.6.


Интересно, что сами .NET-люди не могут этого оценить, потому что Microsoft пока почему-то его не продвигает. Не знаю, стратегия ли это. Возможно, нет денег на маркетинг. Но что касается зрелости этого проекта и эффективности, могу подтвердить, что он интересен и может быть использован. Я лично не использовал его в производстве, потому что на данный момент у меня нет .NET. Microsoft хвастается, что использует его в производстве в Windows, Excel и т. д.



Еще немного о библиотеке. Они сделали это с учетом масштаба. Можем видеть, что, например, у Python есть проблема с масштабированием. Решается по-разному, но вкратце - проблема есть. Можем что-то с этим сделать, но по умолчанию проблема существует. Здесь видно, что библиотека продумана таким образом, чтобы запускать ее масштабно — на миллионы, миллиарды строк, на большое количество данных. Так что я думаю, что в большинстве проектов, в случае с .NET людьми, которые работают над большими проектами, то есть в некоторых банках, финансовых учреждениях, это отличная новость.
Каетан:
Учитывая то, как Microsoft в целом подходит к продвижению различных вещей, у меня тоже возникла мысль, что в последнее время Microsoft определенно продвигает веб и Cloud, потому что видно, что это работает лучше для них. Помимо всего прочего, из опросов на stackoverflow видно, что ASP.Net Core - самый любимый веб-фреймворк на данный момент, так что они действительно начинают делать это хорошо, и я думаю, что если они действительно сами будут довольны этими инструментами ML, они, вероятно, начнут больше заниматься и этим.


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



Владимир, я думаю, на этом мы можем закончить, потому что я знаю, что мы могли бы говорить еще часами. На самом деле, если бы мы сели спокойно, то за 3, 4, 5 выпусков подкаста только для тебя и для меня мы могли бы сделать этот разговор. Давай оставим кое-что на будущее.


Давай поговорим о том, о чем мы начали говорить непосредственно перед записью?
Владимир:
Кстати, отмечу, что в ML.NET придется писать код, но также есть такая вещь, как ML Build. Поэтому, по крайней мере, узнай, что такое ML Build. Сразу предупрежу, что на данный момент, если понимаешь, как работает машинное обучение, то использование ML.NET вполне подходит, потому что ты понимаешь, что это значит, как это настраивается и так далее.


На данный момент я рассматриваю ML.NET скорее как инструмент для людей, которые работают в .NET и хотят внедрить его без лишних хлопот, а не для экспериментов, потому что экспериментировать все равно будет проще в Python.


Но самое классное, что в данном случае это открывает больше возможностей, что на данный момент у человека, который работает в .NET, больше не будет этих отговорок или ограничений, что мы не будем реализовывать Python, потому что нет возможности. Даже если работаешь разработчиком, попробуй использовать ML и просто покажи своему начальнику, что ТЫ можешь дать бОльшую ценность. Потому что если ты придешь к нему и скажешь: давай использовать ML, он, скорее всего, откажется. Но если ты будешь заниматься самостоятельно, немного так, в нерабочее время, потому что у тебя есть доступ к данным, какой-то хобби-проект, минимальный, то увидишь, как изменится твоя жизнь.



Внезапно ты вырастешь, станешь первым ML специалистом, Data scientist-ом, получишь повышение и так далее. Но также ты найдешь это очень интересным, потому что будешь развивать себя.



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


Это похоже на водителя и механика. Водителю не нужно на 100% понимать, как работает двигатель, но он должен понимать, что есть руль, педали, нужно нажимать на них, иногда тормозить. Это не так сложно, этому можно научиться, но вы должны пройти этот курс.
Каетан:
Я хотел бы еще раз поблагодарить Владимира за эту встречу. Поблагодарить за то, что согласился поговорить со мной, а также познакомить меня с темами ML. Как обычно, я сам узнал много нового, так что, думаю, для наших читателей это будет еще более интересный эпизод.
Владимир:
Большое спасибо за актуальные вопросы :)
Сделай свои первые шаги в Data Science, став участником закрытого клуба в DataWorkshop.

Присоединяйся сейчас и начни свое комфортное обучение.