Хабрахабр

Как приобщать детей к IT и как работать с ML в .NET: интервью с Дмитрием Сошниковым (Microsoft)

А сейчас миры ML и . Многие дотнетчики знают Дмитрия shwars Сошникова (Microsoft) по его докладам, связанным с машинным обучением. NET, так что очень пригодился бы новый доклад — и на DotNext он как раз будет (даже два, от Дмитрия и от Джеффа Просайза). NET сближаются благодаря технологии ML.

И это не менее интересная тема: наверняка среди аудитории Хабра есть родители, которые думают, как правильнее приобщать детей к IT. Но деятельность Дмитрия не ограничивается докладами — например, ещё он популяризует технологии разработки среди новичков, включая собственную дочь.

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

Биография

— Вас знают как технологического евангелиста Microsoft, но хочется узнать биографию подробнее: что было до Microsoft, как попали в компанию, чем именно занимаетесь там теперь?

Пример для своей диссертации разрабатывал на Java, но, когда у Microsoft появилась платформа . — Я занимался разработкой, наверное, ещё лет 30 назад. И я руководил разработкой на . NET, мне она полюбилась. NET некоего аналога SharePoint для американской компании, а параллельно преподавал в институте — люблю делиться своим опытом.

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

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

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

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

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

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

Сейчас я чуть-чуть возвращаюсь к евангелизму, теперь это называется cloud developer advocate.

— Перед тем, как расспрашивать про обучение других, хочется узнать: а как вы изначально попали в IT и кто учил вас?

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

Это учебник для студентов. А однажды папа сказал: «Смотри, будущее за цифровой электроникой, а не аналоговой», и дал «Искусство схемотехники» Хоровица и Хилла. Я пытался в ней разобраться, в итоге понравилось читать на эту тему, стали покупать книжки по программированию, но компьютеров тогда ещё не было.

Учителей не было тогда, это было ещё до 90-х годов, 1985-й. И в какой-то момент удалось на время взять у знакомых компьютер, и я на нём начал… Тогда это была программа по обучению Basic, я помню, сам в этом пытался ещё в школе разбираться. Потом пришлось самому себе собрать компьютер — конечно, папа помог с комплектующими и с первоначальной сборкой и настройкой. Я учился программировать сам: BASIC, PASCAL, Assembler, C.

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

Приобщение детей к IT

— Известно, что вы популяризуете технологии даже среди школьников — а как это выглядит на практике? Например, в числе прочего вы «ведущий кафедры компьютерных технологий детского лагеря “ЮНИО-Р”», что это такое?

У меня растёт дочь, которой сейчас 15 лет, и мне очень хочется приобщить её к миру компьютеров, потому что я искренне верю, что в будущем очень многие профессии окажутся на стыке с ним. — На практике всё просто. И чем бы человек ни хотел заниматься, ему будет намного проще, если он владеет компьютерными технологиями.


Дмитрий с дочерью Викой

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

Есть инструмент Azure Machine Learning Studio, позволяющий без навыков программирования обучать модели машинного обучения. Причем эти уроки были вполне себе практическими. И в качестве примеров в этом курсе мы брали фотографии из популярного Instagram-аккаунта, и с помощью когнитивных сервисов вытаскивали признаки: например, какой цвет превалирует, сколько людей, насколько они счастливы, какой у них средний возраст, ключевые слова, на улице или в помещении сделана фотография.

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

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

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

Информация передаётся из уст в уста, и туда ездит устоявшая компания детей, каждый год приезжает кто-то новый. Параллельно с этим есть «ЮНИО-Р» — это детский лагерь, который организует мой друг Юрий Горвиц практически для детей знакомых. Дети первую часть дня находятся на море, а вторую половину — работают над проектами под руководством взрослых. Идея лагеря — собираются взрослые люди, которым интересно чем-то хорошим поделиться с детьми.

Мы делали разные интересные арт-объекты с электроникой, с Arduino. Там разные проекты: снимают кино, издают журналы, собирают роботов. Делали что-то интересное на основе программирования в Minecraft. На основе «черепашьей графики» я делал небольшой курс для детей по C#, когда они рисовали картины.

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

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

— По-вашему, как именно и с какого возраста стоит начинать приобщение к IT?

Там есть важная мысль: не нужно заставлять детей и настаивать на чём-то, нужно, чтобы они находились в правильном месте. — Мне кажется, хорошо руководствоваться принципом из книги «После трёх уже поздно», но не тем принципом, который вынесен в её название, а другим. Если вы делаете что-то интересное, то обязательно скажите детям об этом и попытайтесь их вовлечь. Если вы собираете компьютер, пусть они будут рядом, и на эту тему можно поговорить. У меня самого не всегда так получается, но это важно. Но не заставляйте делать что-то насильно.

То есть до 10-12 лет не нужно им учить C# или тот же Python. Насчёт возраста есть некоторые исследования, которые показывают, что дети до 10 лет плохо усваивают искусственные текстовые языки. Для этого возраста есть графические языки типа Scratch, который хорошо ложится лет с семи.

В какой-то момент, когда человеку станет тесно в блочном программировании, он сможет легко переключиться и понять, как те же самые блоки выглядят на текстовом языке. У Microsoft есть прекрасный продукт Microsoft Code — это тоже блочный язык, в котором можно одновременно программировать из блоков, и можно переключаться на JavaScript-подобный язык.

И на нём же Code можно программировать маленькое устройство-плату Microbit. На Microsoft Code можно программировать Minecraft Education, но он пока что в России не сильно распространился.

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

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

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

А что говорит ваша практика, успешно ли дети переходят от блочных языков к текстовым? — Про упомянутый Scratch иногда можно услышать «ну это так отличается от «настоящих» языков, что ни к каким реалиям детей толком не подготовит».

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

Не нужно думать, что если сначала вы не научили ребёнка Scratch, а в 10 или 12 лет он не начал учить Python, то он где-то опоздает. С другой стороны, к этому нужно подходить без фанатизма. Может быть, стоит не спешить и обходиться без Scratch.

Он же привык играть в игрушки, а тут нужно писать всякие «void main». Также не стоит учить ребёнка в 7 лет индустриальным языкам.

Есть ли у вас ощущение, что языки вроде C# недружелюбны по отношению к начинающим, и зря их не сделали дружелюбнее? — Про «всякие void main» Кай Хорстманн рассказывал нам, что для удобства обучения новичков пытался избавить «hello world» в Java от такого, но его предложение не приняли.

Например, по опыту моего видеокурса «Увлекательное программирование на C#»: от «void main» нельзя избавиться полностью, но можно сказать «это всё игнорируй, смотри только в то место, куда ты что-то вписываешь». — Мне кажется, их можно делать дружелюбнее при обучении.

Конечно, в подобных языках сложноват оператор for: вместо того, чтобы сказать «повторить 10 раз», приходится писать это сложнее. И тогда получается, что сам по себе синтаксис языка не такой уж катастрофически тяжёлый. В Python тоже попробуй объясни ребёнку, зачем писать for i in range(10). Но в целом опыт обучения C# не сложнее Python.

который делается создателями среды программирования для Arduino и среды программирования Processing. С другой стороны, есть позитивный опыт упрощения языков. Processing сделан для дизайнеров, Arduino сделан для электронщиков, которым не хочется разбираться в программировании. Arduino сделан на основе C++, Processing — кажется, на основе JavaScript или Java, но поддерживает Python. Поэтому там всё сделано так, чтобы нужно было поменьше писать всего вокруг, в основном только сам код.

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

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

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

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

В Arduino есть свои сложности, там нужно уметь подключать электронику. И не нужно думать, что веб-программирование сильно сложнее, чем любое другое. Не так подключишь — всё сгорит.

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

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

А как в целом соотносятся ситуации с IT-образованием школьников в России и за рубежом? — Вы упоминали, что видите много зарубежных «межпредметных» примеров, и в России такого меньше.

Мне кажется, у нас мало такого, чтобы в школе было столько свободы. — Ну, я просто подписан на сообщества вроде Minecraft in Education, поэтому и вижу много зарубежных межпредметных примеров — например, когда учитель истории говорит «Я даю задание построить в Minecraft историческое поле битвы». Обычно учитель преподаёт свой предмет и не очень глядит в сторону.

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

И были очень впечатляющие цифры по количеству школьников, которые прошли «Час кода» и попробовали что-то сделать своими руками. И в школе тоже не так плохо: например, международная инициатива «Час кода» (когда в школах призывают потратить один час и показать, как устроено программирование) года три назад была поддержана Минобразования, Минсвязи. Это в России исчисляется миллионами школьников.

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

ИИ

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

Вот ИИ развивается, но где он будет через 10 лет? Но будущее нам самим неочевидно. В такой непонятной ситуации о чём и как нам следует говорить? Некоторые считают, что вообще код за нас писать начнёт.

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

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

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

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

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

Раньше цикл изменения был сотни лет, и можно было, выучившись в детстве, больше никогда не учиться, а просто работать. Поэтому очень важно научиться учиться. Мы, программисты, всё время в таком мире живем, у нас с самого рождения всё время новые технологии, иногда они выходят с очень большой скоростью. А сейчас, скорее всего, мир будет меняться, и нужно будет по ходу дела что-то осваивать. NET как-то проще с этим, наверное, поэтому с ним более спокойные люди работают. Особенно в JS-мире — в .

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

— Вы состоите в Российской ассоциации искусственного интеллекта — а что это вообще такое?

Она имеет давнюю историю, и моё занятие ИИ тоже имеет давнюю историю. — Вообще Российская ассоциация искусственного интеллекта — это организация ученых, которые занимаются исследованиями в области ИИ. Я ещё лет 15-20 назад защищал диссертацию на тему, связанную с распределённым искусственным интеллектом.

И что, собственно, я предлагал — делать эти модели распределёнными, чтобы были распределённые логический вывод и представление знаний. Тогда это был не такой ИИ, как сейчас модно, а основанный на явном представлении знаний, когда мы у человека из головы вынимали модель. Это было в некотором смысле появление идеи Semantic Web ещё до Semantic Web, но чуть-чуть в другом виде.

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

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

NET впервые заговорили в прошлом году, но тогда это явно подходило только совсем early adopters. — Про ML. Какому кругу она подходит сейчас? А теперь, когда прошёл год с лишним, насколько технологии повзрослела?

Машинное обучение внедряется быстро и эффективно, и без него можно проспать и опоздать с бизнесом, поэтому тащить нужно. — Здесь, мне кажется, нету однозначного ответа, потому что нельзя ждать, пока что-то будет совсем готово. NET или Python, который прикручен с помощью какого-то веб-сервиса. Вопрос в том, что лучше тащить в продакшен: ML. Поэтому, конечно, с точки зрения мейнстрима машинное обучение Python намного больше существует, как сообщество, так и инструменты. Это вопрос философский, можно и так, и так, но и так, и так не очень здорово. NET — это набор инструментов для другой тусовки, и о нём как раз хорошо рассказывать на DotNext. А ML.

NET — это внутренние инструменты, которые постепенно выносят наружу. У компании, естественно, внутри были какие-то процессы, и во многом инструменты в основе ML. Поэтому эта технология на самом деле опробована «в деле» самым жёстким образом, а не просто написанная с нуля в угоду моде.

ML. Эта технология уже показала себя в жизни, но она меняется очень быстро. 6, и в нем было не очень много алгоритмов, а сейчас добавилось очень многое и бурно развивается. NET год назад был версии 0. NET смотреть, конечно, нужно. Если именно стремиться не опоздать, а идти в ногу со временем, то ML.

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

NET. — И напоследок — о докладах, связанных с ML. На DotNext их будет сразу два, ваш и Джеффа Просайза — как они соотносятся?

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

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

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

Это называется transfer learning, и такие задачи как раз на ML. Условно, если нужно научиться распознавать на фотографии разные виды домашних инструментов, мы не будем обучать модель с нуля, а, скорее всего, возьмём модель, которая обучена на изображениях вообще, и её немного допилим. Поэтому я покажу ряд примеров, как можно легко взять и обучить такую модель на распознавание объектов — это называется Custom Vision, есть специальное средство от Microsoft, которое позволяет эффективно делать такие решения. NET относительно неплохо решаются.

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

NET (и многими докладами на другие темы) пройдёт 6-7 ноября в Москве. DotNext с упомянутыми докладами про ML. Например, помимо доклада, Дмитрий на конференции ещё и проведёт тренинг «F# Coding Dojo on Machine Learning» — где можно будет познакомиться сразу и с F#, и с ML. На сайте уже есть полная программа. NET.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»