Первоначально опубликовано на сайте itp.nyu.edu 11 июня 2018 г.

Дэниел Шиффман и соавторы ml5.js
Анимированный комикс от Элизабет Фергюсон

Дэниел Шиффман - адъюнкт-профессор ITP. ml5.js - это продукт вклада студентов, резидентов-исследователей, преподавателей и выпускников из сообщества NYU ITP, а также дружественной когорты других сотрудников. Среди прошлых и нынешних участников - Ханна Дэвис, Никита Хаггинс, Хейли Хван, Лиза Джамхури, Дариус Каземи, Стефани Колтун, Эндрю Ли, Алехандро Матамала, Эйдан Нельсон, Дэн Овед, Инин Ши и Кристобаль Валенсуэла.

Технологий недостаточно.

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

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

- Красные ожоги

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

Основным средством вводного курса является p5.js, библиотека JavaScript от The Processing Foundation, миссия которой совпадает с курсом: дать возможность людям с любым интересом и опытом научиться программировать и творчески работать с кодом. , особенно тем, у кого иначе не было бы доступа к этим инструментам и ресурсам . Кейси Реас и Бен Фрай в книге Современный Прометей: История обработки пишут:

Первоначальная миссия Processing заключалась в создании программного обеспечения, которое сделало обучение программированию доступным для визуальных людей (дизайнеров, художников, архитекторов) и помогло более технической аудитории плавно работать с графикой. Мы стремились дать людям возможность стать грамотными в области программного обеспечения - научиться читать и писать программы. Мы хотели изменить учебные программы в университетах и ​​художественных школах по всему миру. Мы думали, что вместо того, чтобы учить студентов использовать программное обеспечение, не менее важно научить их создавать программное обеспечение.

С обработкой художник может изобретать свои собственные инструменты, а не полагаться на те, которые созданы и поддерживаются другими. Сегодня быть грамотным в области программного обеспечения, возможно, важнее, чем когда-либо. Алгоритмы влияют на нашу жизнь так, как мы не могли себе представить, а бурный рост так называемых исследований глубокого обучения еще больше расширил их охват. Наши взаимодействия теперь согласовываются не только друг с другом, но и с автономными транспортными средствами, постоянно слушающими помощниками, камерами, которые определяют наши лица и позы. Без доступа к моделям машинного обучения, базовых данных и выходных данных, управляющих программным обеспечением, и без их понимания, как мы можем осмысленно взаимодействовать, задавать вопросы и предлагать альтернативы? Машинное обучение сталкивается с той же проблемой доступности, что и простое обучение программированию более пятнадцати лет назад. Здесь на помощь приходит ml5.js: удобная для новичков библиотека для Интернета, которая знакомит программистов с машинным обучением, от алгоритмов и данных до моделей и обучения.

Барьеры для машинного обучения во время обучения

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

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

Летом 2017 года deeplearn.js проложил путь к упрощению доступа к машинному обучению, разместив его в Интернете. Deeplearn.js - это библиотека javascript машинного интеллекта с открытым исходным кодом, разработанная Нихилом Торатом и Даниэлем Смилковым, исследователями из Big Picture Group Google во главе с Фернандой Виегас и Мартином Ваттенбергом. В отличие от предшественников python, для использования deeplearn.js не нужно было устанавливать и настраивать среду. Студент, художник, педагог, мастер, исследователь может просто перейти по URL-адресу и запустить модель машинного обучения в браузере. 30 марта 2018 года Google объявил, что deeplearn.js стал TensorFlow.js, что, в свою очередь, расширило возможности, функции и команду разработчиков для поддержки проекта.

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

Кроме того, примеры TensorFlow.js написаны с использованием новейших функций самого языка JavaScript, которые могут быть незнакомы никому из новичков. Вот пример кода TensorFlow.js из примера «Начало работы»:

Это не критика TensorFlow.js; документация и примеры превосходны и подробны. Просто для другой аудитории. Хотя он подходит для опытного специалиста по данным с продвинутыми знаниями JavaScript, он не очень подходит для начинающего программиста. Осенью 2018 года Дэниел Шиффман от имени ITP получил премию Google Faculty Research Award за сотрудничество с командой TensorFlow.js и разработку библиотеки более высокого уровня для устранения этого пробела.

Тем временем Кристобаль Валенсуэла (ITP ’18) уже создал репозиторий на github под названием « p5deeplearn: deeplearn.js встречает p5 ». Этот репозиторий стал родоначальником ml5.js, где цифра 5 отдает дань уважения p5.js и самой философии обработки. В ITP мы организовали еженедельную рабочую группу для обсуждения развития самой библиотеки и пригласили приглашенных художников и исследователей принять участие в ее разработке. Среди гостей и сотрудников были Джабрил Эш, Кейт Комптон, Ханна Дэвис, Дариус Каземи, Джин Коган, Кайл Макдональд и Инин Ши.

Прогулка через дверь машинного обучения

Можно ли во вводный курс программирования включить недельный модуль по машинному обучению? Какой инструмент можно использовать? Команда TensorFlow.js открыла дверь в машинное обучение по единому URL-адресу с помощью все более распространенного языка программирования в Интернете: JavaScript. С ml5.js мы приглашаем новичков пройти через дверь. Созданная на основе TensorFlow.js без каких-либо других внешних зависимостей, библиотека обеспечивает доступ к алгоритмам и моделям машинного обучения в браузере с примерами, использующими удобный для новичков JavaScript. Знакомя новичков с машинным обучением, мы надеемся вдохновить на творческие эксперименты и спровоцировать дискуссии о данных, обучении, алгоритмической предвзятости и этике.

Итак, как это происходит? Какой первый пример знакомит с темой машинного обучения новичка? Рассмотрим общую задачу классификации изображений. ml5.js (через TensorFlow.js) предоставляет интерфейс для загрузки «предварительно обученной» модели из облака с помощью одной строчки кода.

Эта модель, известная как MobileNet, была обучена в ImageNet, базе данных из примерно 15 миллионов изображений, помеченных 1000 различными классификациями. То, что модель классифицирует данное изображение, полностью зависит от этих обучающих данных - что включено, исключено и как эти изображения помечены (или неправильно помечены).

Как показано на ml5js.org, модель и объект ImageClassifier можно использовать для классификации изображения.

Кроме того, классификатор может маркировать кадры записанного или живого видео при связывании с видеоэлементом p5.

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

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

Какой вы модель? Кислородная маска? Галстук-бабочка? Фагот? Солнцезащитные Очки?

Неспособность модели распознать человека считается успехом ml5.js. Это вызывает дискуссию. Почему он не может назвать меня «человеком»?

Попробуйте поднять объект перед камерой, например мобильный телефон или кофейную кружку.

Вдруг отлично работает. Машинное обучение - это не волшебство. Модель знает только то, на чем ее обучали. В этом случае модель MobileNet была обучена на несколько произвольном наборе объектов. Он на удивление хорошо распознает малоизвестные породы собак и виды птиц, но не понимает «лица» или «человека».

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

Генерация текста LSTM. В этом примере создается текст в стиле автора с помощью предварительно обученной модели, перенесенной в ml5.js Крисом Валенсуэлой. Модель здесь обучена работам общественного достояния Зора Нил Херстон.

Передача стилей. В этом примере стиль одного изображения применяется к содержанию другого. Модель была перенесена на ml5.js выпускницей ITP и приглашенным художником Инин Ши и требует предварительно обученной модели для определенного стиля. Здесь натренировали натурщицу Большая волна у Канагавы, 1829 - Кацусика Хокусай.

Обнаружение звука: в этом примере используется предварительно обученная модель, известная как CREPE, перенесенная на ml5.js Ханной Дэвис и обученная на нескольких существующих наборах аудиоданных, описанных в этой статье.

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

PoseNet: PoseNet, перенесенная на ml5.js текущим студентом ITP Дэном Оведом, представляет собой модель, которая выполняет оценку позы, метод компьютерного зрения для определения местоположения в пикселях ключевых точек на теле человека в картинка. Предварительно обученная модель была создана с использованием Cambridge Landmarks и 7-Scenes Dataset.

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

Творческие наборы данных и ответственные методы обработки данных

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

Два аспекта проекта намекают на то, что должно произойти: легкодоступные образцы наборов данных в библиотеке плюс функции, помогающие сегментировать данные и обрабатывать партии для обучения модели. Эта работа была в значительной степени инициирована Ханной Дэвис (ITP ’13), которая провела семестр в резиденции, работая над ml5.js и связанными с ним исследованиями в области машинного обучения, сосредоточенными на наборах данных.

Легко забыть обо всей работе, связанной с обработкой данных, перед тем, как использовать сами данные. При первом знакомстве с машинным обучением образцы наборов данных могут стать отправной точкой для новичков в изучении ключевых концепций. На нашей первой встрече ml5 Ханна представила наборы данных игрушек, включенные в scikit-learn, библиотеку машинного обучения для Python.

Ханна спросила: что, если бы ml5.js также включал образцы наборов данных, к которым люди могли бы получить доступ с помощью вызова функции JavaScript? Кроме того, четкая документация, вдохновленная функцией «описать» scikit-learn, может описывать набор данных, включая его происхождение, то, как он был собран и что он содержит.

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

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

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

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

В дополнение к набору данных и пошаговому руководству по его созданию, Ханна опубликовала руководство Создание собственных наборов данных для веб-сайта ml5, отвечая на такие вопросы, как Откуда берутся данные? и "Откуда берутся ярлыки?" а также подчеркивая Ответственный сбор данных.

При сборе данных важно критически мыслить на каждом этапе процесса сбора. Вот несколько вопросов, которые стоит задать себе: Чьи это данные? Хотели бы они, чтобы вы это очистили? Это публично? Есть ли способ спросить разрешение и / или заплатить за данные? Можете ли вы собирать данные при наличии соответствующей лицензии?

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

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

Работа Ханны вдохновила нас задуматься о том, чего не хватает в предварительно обученных моделях, которые мы предоставляем. Для новичков, которые боятся машинного обучения или того, что им не место, важно, чтобы каждый видел себя в данных. Во время нашего первого раунда разработки ml5.js мы обучили описанный выше пример текстового генератора с тремя авторами: Шекспиром, Хемингуэем и Ницше. У всех этих авторов есть что-то общее: они умершие белые люди. Осознавая это, мы провели поиск в Project Gutenberg, базе данных текстов, являющихся общественным достоянием, и отобрали более полную подборку авторов, в которую входят женщины и цветные люди. Наш список предварительно обученных моделей теперь: Роберто Боланьо, Чарльз Дарвин, У. Б. Дюбуа, Эрнест Хемингуэй, Уильям Шекспир, Мэри Шелли, Зора Нил Херстон и Вирджиния Вульф.

Опираясь на предварительно обученные модели

Другой эффективный метод работы с пользовательскими наборами данных называется трансферное обучение. В этом случае вместо обучения модели машинного обучения с нуля с использованием набора данных предварительно обученная модель используется в качестве отправной точки для обучения с новыми данными. Работая с командой TensorFlow.js, исследователи и художники из Google Creative Lab разработали проект под названием Обучаемые машины, который демонстрирует этот процесс. С помощью веб-камеры кто-то может в интерактивном режиме и в режиме реального времени обучить модель машинного обучения классифицировать ввод с видеокамеры.

Николь Хи из Google Creative Lab демонстрирует обучаемую машину: эксперимент, упрощающий изучение машинного обучения в браузере без программирования.

В дополнение к самому веб-сайту обучаемой машины, Google выпустил шаблон обучаемой машины: минимальный объем кода JavaScript, необходимый для создания вашей собственной версии. Это вдохновило нас задуматься о версии трансферного обучения в ml5.js. Как сделать процесс простым, но раскрыть его детали, чтобы уменьшить ощущение волшебства? Для этого мы включили FeatureExtractor.

Как обсуждалось ранее, MobileNet был разработан для присвоения метки изображению: «кофейная кружка», «черепаха» и т. Д. Однако за кулисами, прежде чем это произойдет, MobileNet модель запускает математический процесс, называемый «сверткой» (аналогично тому, что происходит в фильтре фотошопа), который преобразует все пиксели в сокращенный набор чисел. Изображение 200 × 200 с 40 000 пикселей дает список из 135 чисел с плавающей запятой. Эти числа считаются «особенностями» изображения. Хотя MobileNet может связывать определенный набор функций с «кофейной кружкой», процесс обучения передачи позволяет нам назначать новые метки для функций, извлеченных из новых изображений.

Когда у нас есть экстрактор, следующим шагом будет создание из него классификатора:

Мы можем сообщить классификатору об изображениях с помощью собственных меток.

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

И классифицируйте новое неизвестное изображение.

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

Что дальше?

Первая фиксация самой библиотеки ml5 произошла 4 октября 2017 года. Чуть более восьми месяцев спустя, благодаря поддержке Google, мы очень рады выпустить эту первую «бета-версию» (версия 0.1.0) ml5.js.

Хотя в ITP, Школе поэтических вычислений и Eyebeam уже было проведено несколько семинаров с использованием ml5, настоящая работа начинается сейчас, когда художники, преподаватели и начинающие программисты используют библиотеку в образовании и практике. Что не понятного? Чего не хватает в документации? Где вещи кажутся слишком похожими на волшебство? Слишком сложно? Лучший способ разработать библиотеку для новичков - работать с библиотекой с новичками.

Мы надеемся, что этот выпуск - только начало; летом появятся новые учебники, примеры и модели. Один из них, который нам особенно нравится из-за его творческих возможностей, - это перевод изображения в изображение (известный как pix2pix), который Инин Ши находится в процессе портирования на ml5.js. Инин также проведет первый семинар по бета-версии ml5.js в лагере ITP! Осенью Джин Коган и Мими Онуоха будут проживать в ITP, чтобы продолжать помогать нам обдумывать выбор API и этические вопросы, связанные с разработкой библиотеки и связанных наборов данных и документации.

И да, этот курс ITP Введение в вычислительные среды для начинающих, впервые обучающихся программированию, будет включать новый недельный модуль в осеннем семестре: машинное обучение. Присоединяйтесь к нашему каналу Slack, подписывайтесь на нас в Twitter и вносите вклад в репозиторий Github, чтобы участвовать в обсуждении!

Первоначально опубликовано на сайте itp.nyu.edu 11 июня 2018 г.