Smashing Podcast Episode 33 С Чарли Джерардом: что такое машинное обучение?
Опубликовано: 2022-03-10В этом выпуске мы говорим о машинном обучении. Какие задачи мы можем поставить в контексте веб-разработки? Я поговорил с экспертом Чарли Джерардом, чтобы выяснить это.
Показать примечания
- Практическое машинное обучение в JavaScript: TensorFlow.js для веб-разработчиков
- Чарли в Твиттере
- личный сайт Чарли
Еженедельное обновление
- Практическое введение в внедрение зависимостей
автор Джейми Коркхилл - На пути к сети без рекламы: диверсификация онлайн-экономики
автор Фредерик О'Брайен - Должен ли Интернет раскрывать аппаратные возможности?
автор Ноам Розенталь - Как заработать больше денег, продавая приложения Shopify в 2021 году
автор Сюзанна Скакка - Начало работы с пакетом GetX в приложениях Flutter
автор Кельвин Омерешон
Стенограмма
Дрю Маклеллан: старший разработчик интерфейса в Netlify, эксперт Google Developer по веб-технологиям и технический спикер Mozilla. В свободное время она исследует взаимодействие человека с компьютером и создает интерактивные прототипы с использованием оборудования, машинного обучения и творческого программирования. Она регулярно выступает на конференциях и пишет сообщения в блогах, чтобы делиться своими знаниями. А совсем недавно — автор книги «Практическое машинное обучение в JavaScript для Apress».
Дрю: Итак, мы знаем, что она специалист по интерфейсу, но однажды она сбежала из тюрьмы с помощью металлического напильника, который связала крючком во сне. Мои потрясающие друзья, пожалуйста, поприветствуйте, Чарли Джерард. Привет, Чарли. Как твои дела?
Чарли Джерард: Я разбиваю.
Дрю: Я хотел поговорить с вами сегодня о машинном обучении, что может показаться немного странной темой для подкаста, посвященного в основном браузерной части веб-разработки. Я склонен думать о машинном обучении как о чем-то, что происходит в гигантских центрах обработки данных или лабораториях, где работают люди в белых халатах. Это определенно что-то вроде модного слова в наши дни. Что мы на самом деле имеем в виду, когда говорим о машинном обучении?
Чарли: В общем, стандартным определением было бы предоставление компьютерам возможности генерировать прогнозы без указания, что делать. Надеюсь, это будет иметь смысл, когда мы продолжим говорить об этом, но это своего рода общее определение разговора. На самом деле вы не говорите алгоритмам или моделям искать определенные вещи. Они учатся на данных, которые вы им предоставляете, и затем они могут генерировать прогнозы.
Дрю: Значит, вместо того, чтобы специально кодировать для определенных обстоятельств, вы как бы создаете общий случай, когда программа может научиться делать это сама?
Чарли: Да, точно.
Дрю: Звучит немного жутковато. Это что-то на грани искусственного интеллекта. Нужно ли для этого быть заядлым математиком или специалистом по данным? Или есть такие вещи, как установленные алгоритмы и вещи, которые вы можете использовать, чтобы начать?
Чарли: Ага. Так что, к счастью, вам не нужно быть заядлым математиком или специалистом по данным. Иначе я бы точно не говорил об этом. Но есть алгоритмы, которые уже придуманы, и уже доступные инструменты, позволяющие использовать эти алгоритмы без необходимости писать все с нуля самостоятельно. Поэтому, если мы используем интерфейсную экосистему для сравнения, вы можете использовать веб-API, такие как навигатор, для получения пользовательских мультимедиа, когда вы хотите иметь доступ к веб-камере или микрофону.
Чарли: И вам не нужно знать, как этот API был фактически реализован под капотом. Важно то, что вы знаете, для чего этот API хорош и как его использовать, если хотите. Позже вы можете пойти и посмотреть исходный код вашего любимого браузера, чтобы узнать, как он работает на самом деле, но, во-первых, это действительно бесполезно. И это может быть полезно, если вы захотите позже написать свой собственный алгоритм. Но, если честно, маловероятно, что вы захотите это сделать.
Дрю: Хорошо. Так что это немного похоже на то, как вы можете написать CSS для позиционирования элемента на странице. Вам все равно, как браузер на самом деле это делает. Вы просто пишете немного CSS, а браузер позаботится об этом.
Чарли: Ага. Когда вы начинаете, это в основном что-то вроде этого.
Дрю: Это хорошо. Это больше похоже на мой уровень науки о данных.
Чарли: Я тоже.
Дрю: Итак, какие проблемы можно решить с помощью машинного обучения? Для каких вещей это хорошо?
Чарли: Это зависит от того, что вы хотите сделать в первую очередь, потому что, когда вы хотите построить определенную вещь, я бы посоветовал сначала подумать о типе проблемы, которую вы хотите изучить, что затем поможет вам выбрать алгоритм, который вы можно использовать, чтобы исправить или найти решение вашей проблемы. В общем, я бы начал с размышлений о типе проблемы, которую я пытаюсь решить, и есть три основных. Я думаю, что есть, вероятно, немного больше, но в целом, из того, чему меня учили делать и что я читал, есть три основных, которые упоминаются.
Чарли: Если вы хотите, чтобы я углубился в это, то есть контролируемое обучение, неконтролируемое обучение и обучение с подкреплением. У вас также так много супервизоров, но, честно говоря, я не так много знаю об этом, потому что я смог построить свои проекты с тремя первыми.
Дрю: Под присмотром, без присмотра и с подкреплением, ты сказал?
Чарли: Да, обучение с подкреплением.
Дрю: Хорошо. Так что же такое контролируемое обучение? Можете ли вы привести пример того, что это значит?
Чарли: Обучение под наблюдением — это когда ваш набор данных состоит из функций и меток, и вы передаете их алгоритму. Итак, если мы возьмем пример, который, надеюсь, будет близок большинству людей, то это, если у вас есть дом, и вы хотите его продать, и вы хотите выяснить, по какой цене вы собираетесь продать свой дом или свою машина, собственно, кстати, было бы тоже самое. И вы бы использовали набор данных о домах в той же среде или о домах того же типа и, зная их цену на рынке, могли бы использовать особенности вашего собственного дома; так сколько комнат и есть ли у него сад и в каком районе он находится? И тому подобные вещи.
Чарли: Это функции, а этикетка будет ценой, и, используя все эти наборы данных о домах, которые уже находятся вокруг вас, вы можете использовать алгоритм машинного обучения, который как бы изучает корреляцию между характеристиками вашего дома. и цены на рынке, чтобы затем получить характеристики вашего дома и иметь возможность генерировать цену из этого. Итак, самое главное в обучении с учителем: у вас есть набор функций и метка, так что вы можете провести корреляцию между ними.
Дрю: Вы бы снабдили модель обширным набором данных о домах в этом примере, где вы знаете их цену, а затем знаете все эти характеристики. Скажем, спальни и что у вас есть, например, квадратные метры, и я полагаю, что местоположение было бы еще одним фактором, который можно было бы учитывать?
Чарли: Ага. Итак, одна из проблем с машинным обучением заключается в том, что у вас может быть много функций, и некоторые из них на самом деле не будут такими же эффективными, как другие. Таким образом, у вас может быть, например, цвет вашего дома, который на самом деле может не иметь связи с ценой, но вы можете указать кучу характеристик, и модель сама найдет связь между ними. Затем вы можете настроить свой набор данных, если хотите, и удалить цвет, или вы поймете, что размер сада не имеет значения, или что-то в этом роде.
Чарли: В общем, даже если вы скормите свой набор данных модели, у вас не будет идеального прогноза с первого раза. Обычно вы настраиваете несколько разных вещей, и вы видите. Вы как бы настраиваете его, пока не получите предсказание, которое вы считаете довольно точным.
Дрю: И затем, как только эта модель будет создана или, скажем, вы создали ее с использованием данных из одного города, не могли бы вы затем взять ее и передать ей… вам нужно будет передать ей данные из другого города? Сможете ли вы взять его и использовать в другом месте после завершения обучения, или он будет специфичен для этого набора данных, или как это будет работать?
Чарли: Я думаю, это будет связано с набором данных. Это означает, что вы можете создать другой набор данных с таким же, скажем, форматом. Если у вас есть электронная таблица Excel с разными столбцами, вы сможете сохранить те же метки и функции, но вам придется заменить их значениями этого города. Но в целом это означает, что сбор набора данных также может занять много времени, но если вы уже знаете, что вы сделали, например, для города Парижа, и что структура вашего набора данных такая же, но вы заменяете значения, это немного быстрее, и вы можете регенерировать модель.
Чарли: Вы не должны повторно использовать одну и ту же модель, если ваши данные отличаются, потому что цены на дома в Париже отличаются, например, от цен на дома в маленьком городе в Австралии. Таким образом, вы не хотели бы иметь неправильные данные, потому что ядро вашего набора данных сначала не было точно таким же.
Дрю: Мы много говорим о моделях с машинным обучением. Таким образом, модель является своего рода конечным результатом всего анализа набора данных. Затем он используется для последующих прогнозов. Вот что за модель, да?
Чарли: Да, именно так. Это модель, так что она чем-то похожа на функцию, в которую вы собираетесь вводить новые входные данные, которых она никогда раньше не видела, но основанные на том, что она узнала на этапе обучения. он сможет вывести прогноз.
Дрю: Итак, обучение с учителем, затем оно создает эту прогностическую модель из меток на функциях. Что такое неконтролируемое обучение?
Чарли: Итак, неконтролируемый — это немного та же концепция, но вы убираете ярлыки. Таким образом, в этом случае вы можете подумать, что наша проблема продажи дома на самом деле не будет проблемой обучения без учителя, потому что, если вы знаете только характеристики домов вокруг вас, но у вас нет цены в качестве ярлыка, вы не могу точно предсказать цену. Он даже не будет знать, какова цена.
Чарли: Таким образом, неконтролируемый больше, когда у вас есть набор данных, и у вас есть только функции, связанные с ним. Вы можете генерировать больше тенденций или кластеров вещей вместе. Вы бы не стали использовать обучение без учителя, если хотите получить конкретный результат, если у вас есть определенный вопрос, например: «Какова цена этого?» Это не очень хорошее использование неконтролируемого, но это больше, если вы хотите сгруппировать объекты вместе, это могут быть люди или что-то в этом роде.
Чарли: Как правило, вариант использования для этого — рекомендации, такие как рекомендации Amazon или рекомендации Spotify, например, «Такие люди, как вы, тоже слушают это», и это больше похоже на то, где функции в этом случае будут… ну, у них есть данные о вас, чтобы они знали, что вы слушаете, в какой стране обычно находитесь или сколько раз в день вы что-то слушаете? Таким образом, используя эти функции о людях, они могут затем поместить вас в тот же кластер, или к тому же типу слушателей, или к тому же типу людей, которые покупают определенные вещи на Amazon. И, используя такое неконтролируемое обучение, они могут знать, что вам рекламировать или что порекомендовать, чтобы вы слушали, основываясь на таких людях, как вы. Так что это больше такие проблемы.
Дрю: Итак, теперь все это имеет гораздо больше смысла для меня как для веб-разработчика, потому что те виды использования, о которых мы говорили, цены на жилье и рекомендации, показ рекламы и прочее, в конце концов, это всевозможные вещи, с которыми нам приходится иметь дело, и функции, которые мы можем захотеть добавить на сайт или в продукт, или что у вас есть. Итак, у нас есть различные типы обучения, основанные на предмете, который мы хотим предсказать. Есть ли другие виды приложений, с которыми мы можем использовать это? Есть ли какие-то хорошие примеры, созданные людьми, которые могли бы использовать это?
Чарли: Ага. Так много примеров. Вот почему, когда я говорю о прогнозировании цены дома, может быть, это не относится к вам. Может быть, это не так уж захватывающе, но на самом деле вы можете сделать гораздо больше. Вокруг есть действительно хорошие примеры. Я думаю, что первое, что я увидел, было связано с динамически генерируемыми художественными текстами для изображений. Конечно, это то, что вы можете сделать сами, когда добавляете изображение на сайт.
Чарли: Но что, если у вас есть сайт, на котором на самом деле много изображений, и вместо того, чтобы делать это вручную, вы могли бы передать каждое изображение алгоритму машинного обучения, и он сгенерировал бы художественный текст о том, о чем это изображение, и возможно, единственным человеческим шагом будет проверка правильности этого, но это действительно позволит вам сосредоточить свое время на создании приложения.
Чарли: И вы все равно сделаете свой сайт доступным, используя художественный текст для изображений, но он будет как бы сгенерирован машиной. Так что это один из примеров, которые я видел, когда начал заниматься этим, но у вас также есть прототип фильтрации, небезопасный для рабочего контента. И я подумал, что на самом деле это было бы неплохо в расширении Chrome, у вас могло бы быть расширение Chrome, которое каждый раз, когда вы открываете веб-страницу, просто проверяет, что то, что находится на странице, является своего рода безопасным содержимым.
Чарли: Например, если у вас есть дети, использующие ваш ноутбук или что-то в этом роде, вы можете просто скрыть изображения или заменить эти изображения пандами, если хотите, или что-то в этом роде. Но это такое приложение, в котором вы можете использовать машинное обучение, чтобы автоматически делать что-то за вас, чтобы вам не приходилось беспокоиться об определенных задачах, или вы можете просто использовать силу своего мозга для выполнения других задач.
Чарли: Но есть еще более продвинутый пример распознавания жестов, использования веб-камеры, которая тогда общалась с Amazon Alexa, распознавание голоса и все такое прочее. Таким образом, вы действительно можете объединить множество различных технологий с голосом, веб-камерой и машинным обучением для простого распознавания и возможности взаимодействовать с различными технологиями, но по-новому. Так что это действительно может пройти довольно весело.
Дрю: Это довольно увлекательно, потому что мы рассматривали своего рода анализ моделей данных как таковых, а теперь мы думаем о просмотре содержимого изображений и анализе содержимого изображений с помощью машинного обучения, что довольно интересно. Я полагаю, что такая функция есть в Facebook, если кто-то публикует изображение, которое, по его мнению, может быть окровавленным, или показывает травму, или что-то в этом роде, и оно размывается, и тогда вам нужно просто щелкнуть, чтобы открыть его. Очевидно, что в таких случаях Facebook не может иметь команду модераторов, просматривающих каждое загружаемое изображение.
Чарли: Надеюсь, что нет.
Дрю: Это была бы бесконечная задача.
Чарли: Это тоже не очень хорошая работа.
Дрю: Раньше я работал на сайте бесплатных объявлений, где люди могли публиковать объявления. И в этом было много модерации, в которой даже я, как веб-разработчик, должен был участвовать, просто просматривая, глядя на все эти изображения и говоря: «Да, нет, да, нет».
Чарли: Я тоже немного так делал. Я бы хотел, чтобы в то время было машинное обучение, просто небольшая утилита, которая делала это за меня, и теперь она есть. Так что это довольно круто.
Дрю: Да, это действительно здорово. И это довольно захватывающе, чем думать о живом входе с веб-камеры и иметь возможность анализировать его в режиме реального времени, чтобы вы могли взаимодействовать на основе жестов. В том, что…
Чарли: Да, так что в основе этого на самом деле используется больше классификации изображений, потому что ваша веб-камера, изображение представляет собой набор пикселей, но затем, когда вы делаете определенные жесты, вы можете научить модель распознавать, что ваша правая рука поднята, и, возможно, вы будет управлять мышью таким образом, или он будет смотреть на координаты вашей руки и экрана, и вы будете следовать за мышью. Вы действительно можете делать все, что хотите. Возможно, у вас есть распознавание цвета.
Чарли: Ты можешь делать действительно забавные вещи. Один из прототипов, который я построил, от которого я как бы отказался в какой-то момент, но я сделал немного… Я хотел, чтобы это было расширение для Chrome, но это не сработало. Я создал небольшое настольное приложение с помощью Electron. Также в JavaScript, где я мог просматривать веб-страницы, просто наклоняя голову. Таким образом, он распознает, что когда я наклоняю голову вниз, она прокручивается вниз, а когда я поднимаюсь, она идет вверх. Это были именно такие небольшие эксперименты, когда я думал: «Ну, если я смогу превратить это в расширение для Chrome, это может быть полезно для некоторых людей».
Чарли: Даже если вы просто едите перед своим компьютером и читаете новости, и я не хочу, чтобы моя клавиатура была грязной, я могу просто наклонить голову, но также, надеюсь, для доступности, мог бы на самом деле помочь людям перемещаться по определенным веб-страницам или что-то в этом роде. Существует множество доступных инструментов, и речь идет об идее, что вы можете придумать, наблюдая за ситуацией вокруг вас, и как вы могли бы решить некоторые из этих проблем с помощью машинного обучения?
Дрю: Говоря о машинном обучении, мы часто думаем о языках, Python. Я думаю, именно здесь в первую очередь происходит много такого рода развития. Но как веб-разработчики, мы, очевидно, более комфортно себя чувствуем с JavaScript в целом. Является ли машинное обучение чем-то, что мы можем реально ожидать? Я имею в виду, что маленькие забавные примеры — это одно, но действительно ли они полезны для реальной работы с JavaScript?
Чарли: Ну, я имею в виду, я так думаю, но я знаю, что большинство вещей, которые я делаю, являются прототипами, но я думаю, что тогда это зависит от ситуации, в которой ты находишься на работе. Существуют способы внедрить машинное обучение в качестве разработчика в вашу повседневную работу. Но что мне действительно нравится в JavaScript, так это то, что если вы уже являетесь фронтенд-разработчиком, вам не нужно идти и изучать новую экосистему, новый набор инструментов, новый синтаксис, новый язык. Вы уже находитесь в своей среде, в которой работаете каждый день.
Чарли: Обычно, когда вы изучаете подобные вещи, вам приходится начинать в свое личное время, если это не ваша повседневная работа, а время каждого дорого, а у вас его не так много. Так что, если вы можете устранить некоторые барьеры и остаться в той же экосистеме, которую вы знаете, то я думаю, что это довольно хорошо, но также вы можете начать… сила JavaScript для меня в том, что вы можете начать с создания небольшого прототипа, чтобы убедить людей, что возможно, есть идея, которую нужно исследовать, и, имея возможность быстро что-то раскрутить в JavaScript, вы можете подтвердить, что ваша идея верна.
Чарли: Тогда либо вы можете получить одобрение руководства, чтобы потратить больше времени или больше денег, либо вы можете затем передать это разработчикам Python, если вы хотите построить это на Python. Но для меня эта способность быстро подтверждать идею очень важна. Особенно, может быть, если вы работаете в стартапе, и все идет быстро, и вы можете показать, что это то, на что стоит обратить внимание, я думаю, что это очень важно.
Чарли: А также тот факт, что существует действительно большая экосистема инструментов и все больше и больше фреймворков и приложений машинного обучения. В JavaScript мы можем добавить машинное обучение не только на веб-страницу. Как я уже говорил, вы можете создавать расширения и настольные приложения для Chrome с помощью Electron, мобильные приложения с помощью React Native, а также аппаратное обеспечение и IoT с такими фреймворками, как Johnny-Five.
Чарли: Итак, с языком, который вы уже знаете, у вас фактически есть доступ к огромной экосистеме различных платформ, на которых вы можете проводить один и тот же эксперимент. И я думаю, что для меня это довольно удивительно. И именно здесь я вижу реальную силу машинного обучения в JavaScript. И по мере улучшения, возможно, вы действительно сможете интегрировать его в приложения, которые мы создаем каждый день.
Дрю: JavaScript повсюду, не так ли?
Чарли: Да.
Дрю: Хорошо это или плохо, но это везде. Кто бы мог подумать? Это звучит здорово, но это также звучит как много работы. И я думаю о наборах данных и вещах, как, черт возьми, вы начинаете выполнять такие задачи?
Чарли: На данный момент, по крайней мере, с TensorFlow.JS, есть три вещи, которые вы можете сделать с помощью фреймворка. И скажем, самый простой — это импорт существующей предварительно обученной модели. Так что их несколько, есть разные модели, которые были обучены с разными наборами данных, и я бы порекомендовал начать с этого, потому что вы можете изучить настоящие основы того, как на самом деле использовать сам фреймворк, и что вы можете сделать. с этими моделями.
Чарли: Итак, у вас есть определенные модели распознавания изображений, обученные на разных изображениях. Некоторые из них лучше подходят для распознавания объектов. Некоторые из них лучше подходят для распознавания людьми, и, поняв, какие модели использовать, мы можем свободно строить все, что захотим, в ограничениях этой модели.
Чарли: Но мне кажется, это хороший способ начать. Я до сих пор использую предварительно обученные модели для многих своих экспериментов, потому что зачем изобретать велосипед, если он уже есть? Давайте просто использовать инструменты, которые были даны. Затем, когда вы захотите пойти, может быть, на шаг дальше, вы можете сделать то, что называется переносом обучения, когда вы переобучаете важную модель. Таким образом, вы по-прежнему используете одну из предварительно обученных моделей, но затем вам предоставляется возможность переобучить ее в реальном времени с вашими собственными образцами.
Чарли: Например, если вы хотите использовать классификацию изображений, где у вас есть разные люди, то, возможно, вы захотите сделать классификацию жестов. Если ваша модель, например, обучается с людьми, у которых всегда, я не знаю, правая рука поднята или что-то в этом роде, но для вашего приложения вам нужна левая рука, вы можете переобучить эту модель с вашими образцами левой руки. руку, и тогда у вас будет модель, которая уже достаточно обучена распознавать правую руку, но затем вы добавите свой собственный образец, и вы сможете довольно быстро переобучить его в браузере, в зависимости от количества новых входных данных, которые вы ей даете. , это занимает немного времени, но через несколько секунд у вас есть переобученная модель, которая очень хорошо распознает эти два жеста, которые вы затем можете использовать в своем приложении.

Чарли: Обычно это второй шаг. И затем третий шаг, который немного сложнее, — это когда вы делаете все в браузере. Итак, вы пишете свою собственную модель с нуля и обучаете ее в браузере, и вы действительно обучаете, запускаете и генерируете модель, все в браузере. Но вообще единственное применение, которое я этому видел, это построение визуализаций. Когда вы хотите визуализировать процесс обучения модели и количество шагов, которые она выполняет, сколько времени это занимает, и вы можете видеть, как точность увеличивается или уменьшается, в зависимости от выбранных вами функций и параметров, которые вы настраиваете. .
Чарли: Так что я на самом деле не играл с этим, потому что я не нашел для себя приложения, с которым я хотел бы построить, но два первых шага использования только предварительно обученной модели или переобучения ее с моими собственными примерами где лично я видел. Я повеселился с этим.
Дрю: Как правило, это случай, когда модель создается заранее, как бы в автономном режиме, а затем браузер использует эту обученную модель или, может быть, немного добавляет, немного переобучает, но как правило, эта модель будет установлена до того, как она будет использована в браузере пользователя?
Чарли: В целом да. Тогда вы точно сможете создать свою собственную модель. Если вы это сделаете, я бы не рекомендовал тренировать это в браузере, но вы можете сделать это и в NodeJS. Если вы знаете, немного NodeJS. Я определенно создал свои собственные модели, но обычно запускаю их в NodeJS, потому что он более производительный. А затем я использую сгенерированную модель, которую создал потом в браузере.
Дрю: Какие инструменты доступны для этого с помощью JavaScript? Вы упомянули TensorFlow JS, но что это, где это? Это из Гугла?
Чарли: Да. Сначала у Google был инструмент TensorFlow на Python, а теперь, может быть, пару лет, может быть, чуть больше, они сделали версию JavaScript, поэтому он имеет тенденцию работать с JS. Но есть также ML5 JS, который является чем-то вроде абстракции. Так что, если вы немного запутались или если TensorFlow JS выглядит немного пугающе из-за некоторых слов, которые они используют в своей документации, вы можете использовать ML5 JS, который имеет большинство тех же функций, но скажем, что API или синтаксис немного более дружелюбный к новичкам.
Чарли: Вы можете начать с ML5, посмотреть, нравится ли вам машинное обучение или вы думаете о классном приложении, а затем, если у вас есть блокировщики в ML5 или во фреймворке нет определенных вещей, которые вы хотите сделать, вы затем можете перейти к TensorFlow JS, если хотите. И если вы действительно не заинтересованы в написании собственного кода, а просто хотите использовать уже существующие инструменты, есть несколько API-интерфейсов от Amazon, Google и Microsoft для распознавания изображений или голоса. Поэтому, если вам больше интересно посмотреть, на что он способен, но вы не хотите тратить слишком много времени на написание кода, вы можете пропинговать некоторые API и попробовать некоторые из их инструментов.
Дрю: Это довольно интересно. Таким образом, вы могли бы использовать браузер для приема данных с веб-камеры или микрофона или чего-то еще, а затем отправить их в Amazon, Microsoft или кого-то еще, а затем просто позволить им сделать тяжелую работу?
Чарли: Ага.
Дрю: И тогда вы только выигрываете от результатов.
Чарли: Точно.
Дрю: Звучит как хороший, заманчивый способ просто начать работу с идеями. Звучит здорово, но к каким проблемам мы можем применить это во внешнем интерфейсе? Мы поговорили о нескольких мелочах, но есть ли другие способы использовать это?
Чарли: Есть много способов. Если я начну с классификации изображений, да, вы могли бы. Вы можете использовать изображения из Интернета или с веб-камеры на вашем телефоне. Если вы просто используете свой веб-сайт на своем телефоне, и вы можете фотографировать и распознавать объекты, и либо делать… Небольшая вещь, которую я создал, была вокруг переработки, где, если я действительно не знаю, куда положить определенные объекты в какую корзину, мы есть желтый ящик, зеленый, это зависит от страны. Они имеют разные цвета, но иногда я не очень хорошо знаю, куда на самом деле бросать предметы, чтобы вы могли создавать такие маленькие инструменты, которые вживую могут распознавать два объекта перед вами, а затем классифицировать их, и вы можете создавать определенные вещи, такие как это.
Чарли: В противном случае у вас есть текстовая классификация, где ранее в этом году я использовал одну из моделей TensorFlow GS, чтобы просмотреть написанные комментарии, проблемы GitHub и PR GitHub, чтобы затем классифицировать и сказать: «Эй, если это токсичный комментарий, тогда у вас есть маленький бот, который говорит: «Эй, может быть, тебе не стоило это писать» или «Осторожно, это немного токсично. Мы хотим, чтобы это было безопасное пространство». Таким образом, вы можете использовать классификацию текста таким образом.
Чарли: Если хотите, есть звуковая классификация, где, когда Apple выпустила свои новые часы, ОС, у них было что-то, чтобы распознавать звук бегущей воды, чтобы сказать людям, чтобы помыть руки в течение 20 секунд с пандемией COVID, но вы можете сделать что и в JavaScript. И что было действительно интересно, я смотрел некоторые видео и думал: «О, я знаю, как это сделать в JavaScript».
Чарли: И я построил небольшой прототип. Я не знаю, работает ли он на часах Apple. Может быть. У меня его нет, но я знаю, что он работает на моем телефоне и ноутбуке. А затем это может стать источником идей и для других людей, например, мой друг Рамон Хуидобро написал @hola_soy_milk в Твиттере. В этом году он участвовал во многих онлайн-конференциях. И одна из его проблем заключается в том, что когда он хлопает в ладоши, чтобы поаплодировать кому-то, у него нет времени, чтобы добавить эмодзи аплодисментов в чат. И то, что он хотел сделать, это послушать звук его хлопков, и это автоматически отправит хлопающие смайлики в чат.
Чарли: И такие мелочи, если вы хотите, чтобы приложение, действительно более полезное в вашей повседневной работе, было связано с предиктивной предварительной выборкой. Это также использует машинное обучение во внешнем интерфейсе, где просматривается аналитика вашего сайта. Итак, какие страницы обычно просматриваются после каких и тому подобное. Вы можете заранее выбрать ресурсы на основе страницы, которую с наибольшей вероятностью посетят после. Это то, что я хотел изучить весь этот год, но у меня не было времени, но это позволяет вам действительно улучшить производительность и UX вашей страницы. И вы не запрашиваете ресурсы, которые вам не понадобятся, так что это может действительно улучшиться, и это тоже приложение машинного обучения.
Чарли: Так что вы можете делать забавные вещи, или вы можете делать более полезные вещи, но не бывает неправильного применения, могут быть неправильные приложения. Я беру свои слова назад, но я просто говорю, что если вы действительно начинаете этим заниматься, то нет ничего плохого в том, чтобы начать с чего-нибудь веселого, а затем я могу предложить несколько идей того, что вы можете делать на работе в качестве хорошо.
Дрю: Я думаю, действительно полезно знать, что все это возможно. А на самом деле просто творческие способы решения проблем, которые мы можем сделать самостоятельно. Традиционно мы создавали вещи путем модерации пользовательского контента, и это было довольно примитивно, и нам в основном приходилось заставлять людей смотреть на вещи и принимать по ним решения. Но с доступом к машинному обучению, в этом примере, мы могли бы передать больше, а затем просто попросить людей посмотреть на крайние случаи, например, на вещи, которые не имеют убедительного совпадения.
Дрю: Конечно, так и будет, нужно немного времени, чтобы разработать эту штуку и поставить ее на место, но потом вы думаете об экономии, связанной с отсутствием людей, проверяющих вещи вручную. Какие вещи, по вашему мнению, будут использоваться в будущем по мере совершенствования технологий?
Чарли: Для меня, может быть, в будущем, я думаю, что по мере того, как модели становятся меньше для загрузки и они становятся более производительными, мы, вероятно, улучшаем наборы данных, на которых они обучаются. Я надеюсь, что смогу увидеть более полезные инструменты. Я имею в виду, лично меня интересуют эти крошечные модели машинного обучения, которые могут работать на микроконтроллерах для создания чего-то. Но если мы останемся в большей части внешнего мира, я надеюсь на лучшее распознавание голоса, потому что я чувствую, что мы привыкли перемещаться по сети с помощью трекпада или клавиатуры, но на данный момент все еще есть распознавание голоса, но оно не всегда супер точное, или не точное с акцентами, например. И я надеюсь, что по мере того, как мы разрабатываем более совершенные модели, маленькие люди не будут так бояться добавлять их на свои веб-сайты, потому что это не сильно повлияет на производительность.
Чарли: Я заинтересован в использовании машинного обучения в таких вещах, как упреждающая предварительная выборка, чтобы мы могли создавать более умные веб-сайты, которые улучшают работу в спектре, потому что для пользователей это лучше, потому что страница будет загружаться быстрее, следовательно, производительность в целом. вашего сайта, это лучше. Но также скажем, если мы думаем об устойчивости, отказ от запроса бесполезных ресурсов также помогает, углеродный след вашего веб-сайта. Но есть еще и углеродный след моделей машинного обучения. Это не очень хорошо. Так что, пожалуй, не будем об этом. Я бы подумал на будущее, я просто надеюсь иметь модели, которые, возможно, будут более производительными или меньшими, чтобы люди с большей вероятностью попробовали это, потому что, скажем, у людей будет меньше блокировщиков, чтобы войти в это , но посмотрим.
Дрю: Существуют ли известные ограничения и ограничения, о которых нам следует знать, прежде чем приступать к проекту машинного обучения?
Чарли: Ага. Есть. Я думаю, независимо от того, делаете ли вы это на JavaScript или на Python, существуют ограничения. I think if you do want to build something, that's very customed, that there is no pre-trained model for, one of the limits is that you might need quite a lot of data and not everybody has that. So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.
Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.
Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.
Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.
Дрю: Да. I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?
Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.
Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.
Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. Let me fix that.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.
Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.
Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?
Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.
Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.
Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.
Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.
Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?
Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.
Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.
Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.
Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. Thanks for joining us today. Charlie, did you have any parting words?
Чарли: Не забудь повеселиться. Сегодня мы много говорили о забавных вещах, а затем о практических вещах, но если вы хотите разобраться в этом, не забудьте повеселиться, независимо от того, что вы решите построить.