В традиционной разработке программного обеспечения изобретать велосипед — смертный грех. Но AI изменил картину. В разработке программного обеспечения на основе ИИ традиционные многократно используемые компоненты, такие как агрегация данных, — это только начало. А как насчет реального конвейера ИИ, можем ли мы сделать его многоразовым? Должны ли мы захотеть инвестировать свое время в многоразовый ИИ?

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

Современные программные решения все чаще основаны на моделях «искусственного интеллекта» (ИИ). Заманчиво исследовать, какую часть инструментов на основе ИИ можно повторно использовать и применять в другом контексте. В этом тексте делается попытка разобрать и более подробно рассмотреть процесс разработки программного обеспечения на основе ИИ, а также обсудить возможности и подводные камни при попытке сделать ИИ многоразовым.

Как работают современные системы ИИ

Что такое ИИ сегодня? В основном это система, которая во многом полагается на глубокие нейронные сети. В прошлые десятилетия, в зависимости от выполненных или невыполненных обещаний различных методов, ИИ означал разные вещи, но в 2022 году ИИ, безусловно, представляет собой систему, которая использует одну или несколько глубоких нейронных сетей для получения результатов.

Что такое глубокая нейронная сеть? Это сложная функция F, которая отображает ввод в вывод. Входом или выходом может быть любой объект, о котором вы только можете подумать.

Каждая функция имеет форму и конкретные параметры. Например,

F(x) = 3x² + 4x +1

имеет вид квадратичной функции с параметрами 3,4,1. Обратите внимание, что существует бесконечное число возможных форм, которые может принимать функция. Форма глубокой нейронной сети в принципе очень сложна.

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

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

Со временем, имея достаточно данных, компьютер узнает параметры, которые минимизируют значение функции потерь, то есть наилучшее соответствие X и F(X) для любого X из области определения F. Это «время» может быть достаточно конечным, неоправданно длинный, но все же конечный или бесконечный. Это зависит от того, насколько хорошо была спроектирована функция потерь, насколько хорошо была создана форма F и насколько хорошо входные данные были адаптированы к задаче.

Чтобы все эти составляющие были, команде нужны объединенные знания и понимание

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

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

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

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

Введите возможность повторного использования

Предположим, вы хотите создать многоразовый программный инструмент для ИИ, который можно повторно использовать в другом контексте или для решения другой задачи. Что это значит? Какие части системы ИИ можно полностью автоматизировать и использовать повторно?

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

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

Затем создание модели (архитектуры нейронной сети). Вы можете сделать это с нуля в одной из общих сред глубокого обучения. Но затем мы увидели, что модель специфична для проблемы и набора данных. Если вы хотите сделать здесь повторно используемый компонент, вы можете сделать генератор моделей, который даст пользователю выбор, ручной или автоматический, из множества моделей, подходящих для решения задачи. Создание этого генератора занимает время; тем не менее, ваш окончательный результат с точки зрения точности будет настолько хорош, насколько вы можете получить от заранее определенного выбора моделей. Ваша модель не будет современной моделью для конкретной проблемы и типа данных, а также не будет включать экспертное понимание проблемы и данных. Эта автоматизация или повторное использование экономит время пользователей за счет качества результатов. Вместо потенциально 98% ваша модель будет иметь точность 91%.

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

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

So…

Мы увидели, что единственная часть, которая может создать повторно используемый компонент, не влияя на окончательные результаты, — это процесс агрегации данных. На последующих этапах каждый раз, когда вы используете что-то готовое, вы делаете это за счет качества конечных результатов. С другой стороны, большая часть рабочей нагрузки на следующих этапах связана скорее с интеллектуальной, чем с программной. Код адаптации данных представляет собой сценарий Python, который вызывает стандартные библиотеки; но вы должны точно знать, что вы делаете с вашими данными. Модель также состоит из нескольких сотен строк кода. Функция потерь обычно представляет собой несколько строк кода. Это самое большее десятки строк кода, если вы кодируете в него свои (очень индивидуальные) знания предметной области. Обученная модель может представлять собой гигабайты автоматически сгенерированной машиночитаемой, а не человекочитаемой многомерной матрицы. По иронии судьбы, прежде чем думать о возможности повторного использования обученной модели и сделать вашу модель переносимой, давайте отметим, что уже достаточно сложно повторно использовать модель на будущих данных, для которых она изначально предназначалась.

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

Особая благодарность Patrick Bos, Tom Bakker и Lieke de Boer за улучшение поста.