Как определить проблему искусственного интеллекта

Определение проблемы искусственного интеллекта.

Лучший способ задать вопрос по искусственному интеллекту (AI) и машинному обучению (ML)

Towfiqu barbhuiya on Unsplash

С более чем 25-летним опытом разработки программного обеспечения я ответил на множество вопросов от разработчиков, которые только начинают заниматься искусственным интеллектом (AI) и машинным обучением (ML), поэтому я решил поделиться несколькими советами по размещению вопросов по AI/ML на чат-форумах, таких как Slack и Discord.

Фон

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

Учитывайте фон и опыт пользователей, дающих вам советы. Многие пользователи Discord – это старшеклассники и студенты бакалавриата без опыта работы с AI/ML или разработки программного обеспечения. Я указываю свои достижения в своем профиле (полная прозрачность).

Первый шаг в решении проблемы с AI/ML – это умение описать и понять проблему в деталях.

Обзор

Вот краткое описание моих советов по описанию проблемы с AI/ML [1]:

  1. Дайте некоторое описание вашего фона и опыта.
  2. Опишите проблему, включая категорию проблемы с ML.
  3. Подробно опишите набор данных и будьте готовы поделиться своими наборами данных.
  4. Опишите любые этапы подготовки данных и создания признаков, которые вы выполнили.
  5. Опишите любые модели, которые вы пробовали.
  6. Давайте предпочтение тексту и таблицам перед графиками и диаграммами.
  7. Избегайте просить пользователей помочь вам отлаживать ваш код.

Поскольку некоторые пользователи используют Discord с мобильных устройств, лучше всего делиться описанием проблемы и/или фрагментами кода через GitHub Gist, Pastebin и т.д. и делиться ссылкой на форуме.

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

Если кто-то предлагает помощь вам, может быть полезно скопировать/вставить ваше исходное сообщение при отправке им DM.

Если у вас возникли проблемы с кодированием, лучше всего поделиться ссылкой на исходный код/алгоритм и сказать, что у вас возникли проблемы с реализацией, а не публиковать фрагменты кода и спрашивать “что не так с моим кодом?”

Детали

В вашем сообщении на форуме вы должны кратко предоставить следующее (1-2 предложения для каждого пункта):

1. Дайте некоторое описание вашего фона и опыта.

Лучше всего заранее дать пользователям знать, если вы учитесь в старшей школе, университете, выпускником школы, исследователем, опытным профессионалом и т.д.

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

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

2. Опишите проблему.

В нескольких предложениях опишите проблему, включая тип проблемы с ML, если известно (числовая: классификация, регрессия: изображение: классификация объектов, обнаружение объектов, распознавание объектов: текст: анализ тональности, моделирование тем, генерация текста и т.д.).

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

Часть формулировки проблемы заключается в том, решаете ли вы задачу с учителем, без учителя, с подкреплением и т.д. [1].

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

Какова цель проекта? Исследование, инженерия, коммерческое применение, хобби и т.д.

3. Подробно опишите набор данных и будьте готовы поделиться им.

Опишите набор данных, включая входные и целевые характеристики.

Лучше всего предоставить сводную статистику данных, включая количество дискретных или категориальных характеристик, включая целевую характеристику.

Лучше всего предоставить полный набор данных (если вы хотите, чтобы кто-то вам помог, то вы должны быть открытыми и честными).

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

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

4. Опишите любые этапы подготовки данных и инженерии признаков, которые вы выполнили.

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

Самые распространенные шаги: исправление структурных ошибок, обработка отсутствующих или дублирующихся данных и фильтрация выбросов.

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

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

5. Опишите модели, которые вы попробовали (вы должны попробовать хотя бы одну).

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

6. Давайте предпочтение тексту и таблицам перед графиками.

Лучше не строить более одной метрики на одном графике, так как библиотеки, такие как matplotlib, автоматически настраивают оси, чтобы лучше показать разницу в значениях (для примеров см. Как диагностировать переобучение и недообучение).

Вот некоторые распространенные проблемы с графиками и диаграммами:

  • Таблицы используются для сравнения моделей и предоставления сводной статистики.
  • Графики и диаграммы могут использоваться для визуализации результатов модели, но не следует использовать их для оценки и сравнения результатов алгоритмов.
  • Графики и диаграммы трудно просматривать на мобильных устройствах (многие пользователи Discord используют мобильные устройства).
  • Графики и диаграммы могут вводить в заблуждение, намеренно или нет (см. Уроки о том, как обмануть статистикой).
  • Многие библиотеки, такие как Matplotlib, автоматически изменяют масштаб осей при возможности, чтобы показать разницу в значениях, что имеет свои плюсы и минусы.

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

Рисунок 1: Метрики ошибок для регрессии с использованием Orange.

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

Поскольку модели ИИ/МО являются динамическими/стохастическими, каждый раз при тренировке и подгонке модели вы получите немного разные результаты. Поэтому вы должны выполнить весь процесс (тренировка и подгонка модели, затем оценка модели путем вычисления показателей производительности) много раз (скажем, 10 раз). В конце вычислите среднее значение метрик. Также может быть полезно вычислить сводную статистику по метрикам, такую как среднее, медиана и стандартное отклонение.

Рисунок 2: Средние метрики ошибок для 10 запусков.

Вот несколько статей от J. Brownlee, которые показывают некоторые способы представления результатов машинного обучения:

Многомерное прогнозирование временных рядов с использованием LSTM в Keras

Как разработать модели многомерного многошагового прогнозирования временных рядов для загрязнения воздуха

7. Избегайте просить пользователей помогать отлаживать код.

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

Если вы запутались в отладке кода, это должно быть сигналом, что вам нужно перестроить или, скорее всего, выбрать более простую модель (Принцип Оккама).

Литература

[1] S. Russell и P. Norvig, Artificial Intelligence: A Modern Approach, 4-е изд., Upper Saddle River, NJ: Prentice Hall, ISBN: 978–0–13–604259–4, 2021 (в основном раздел 19.9).

[2] E. Alpaydin, Introduction to Machine Learning, 3-е изд., MIT Press, ISBN: 978–0262028189, 2014 (в основном глава 19).