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

Многие из нас видели большое количество новостей и различных статей про ChatGPT –  нейросеть, с которой можно разговаривать, задавать вопросы, а также просить ее помочь в написании кода. Уже больше месяца я пробую использовать ее для рабочих задач и чем глубже изучаю, тем больше открываю ее скрытые возможности.
И так как дисклеймер «данная статья была написана полностью при помощи ChatGPT» больше не является чем-то новым, то по традиции, дадим слово самой ChatGPT рассказать о себе:

«Я – ChatGPT, крупнейшая модель языкового обучения, созданная OpenAI для предоставления ответов на разнообразные вопросы и участия в разговорах на различные темы. Я обучена на огромном количестве текстовых данных и могу генерировать ответы, похожие на человеческие, используя техники обработки естественного языка».

Далее обращаться мы будем к ней на английском языке. Так проще задавать вопросы, связанные с конкретной имплементацией кода.

Построение основ

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

“Construct a CNN model for the MNIST task”

Теперь, когда модель у нас готова, запросим создать пример обучающего пайплайна.

  • “Give me a short baseline example of tensorflow data loader for image classification task using MNIST as an example”

В конце попросим ее подготовить графики обучения.

  • “Create plots for training losses and accuracies”

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

Улучшение ответов

В большинстве случаев ChatGPT отлично справляется со стандартными запросами, но как добиться качественного ответа на более сложные вопросы?

  1. Итеративные вопросы

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

  • “How to save the state of an optimizer in a keras model?”

Здесь мы можем увидеть стандартный ответ. Однако, в этой задаче стоит цель получить именно состояние оптимизатора, а не всей модели.
Поэтому, чтобы получить нужный для нас ответ, зададим уточняющий вопрос:

  • “Can I save only the state of the optimizer?”

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

  • “Yes, the same but in tensorflow/keras”

Именно то что и было нужно!

  1. Детализированные запросы

ChatGPT использует большую часть всех ключевых слов, которые вы ей даете. Чем точнее запрос и чем больше в нем содержится контекста – тем больше вероятность получить качественный ответ. Этот способ может отлично подойти, когда вам понятен желаемый результат и методы его получения.
Вспомним наш пример готового бейзлайна, который мы получили в начале. Теперь мы хотим добавить аугментации в процесс обучения. Исходим из того, что мы знаем библиотеку, которую хотим использовать – Albumentations. А также, мы знаем примерный вид решения и методы, которые будут использоваться. В таком случае зададим как можно более конкретный вопрос ChatGPT:

  • “Create a tensorflow data loader for image classification task, MNIST as an example. Prepare a class called Transformation that gets a list of albumentations, uses __call__ to process a sample with tf.numpy_function”

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

  1. Корректировка ошибок

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

  • “Provide an example of how to use albumentations on MNIST dataset with tensorflow”

Здесь мы получаем очевидную ошибку: 

  • ModuleNotFoundError: No module named 'albumentations.tensorflow'

В данном случае ChatGPT совместила методы из PyTorch’а и Tensorflow и придумала albumentations.tensorflow.ToTensorV2. Задав тот же вопрос, на второй раз мы получаем рабочий вариант без ошибок.

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

  • “Give me a script for pruning a tensorflow keras model”

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

  • Q:“tf.keras.callbacks has no PruningCallback”

  • A:“My apologies, you are correct. As of my knowledge cutoff (2021), the PruningCallback was not available in the tf.keras.callbacks module. Instead, you can use the tf.keras.mixed_precision module, which provides a pruning API for both weight and activation pruning.”

  • A:“Sure, here's an example of pruning a TensorFlow Keras model using the MNIST dataset and tf.keras.optimizers.schedules.PolynomialDecay:”

  • Q:(обнаруживая, что в ответе не существует таких аргументов) I think the arguments in PolynomialDecay are wrong here

  • A:“You're correct, I apologize for the mistake. Here is the corrected version of the code using the correct arguments for tf.keras.optimizers.schedules.PolynomialDecay:”

  • Q:“This code gives me this error: RuntimeError: You must compile your model before training/testing. Use `model.compile(optimizer, loss)`.”

  • A:“... Here is an updated version of the code to include the compile step:”

  • Q:“ValueError: Index out of range using input dim 0; input has only 0 dims for '{{node sequential_1/prune_low_magnitude_dense_2/strided_slice}}”

Заключение

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

  •  ускорить свою разработку;

  •  получать быстрые готовые варианты для прототипирования;

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

Используете ли вы ChatGPT в своих задачах? Делитесь вашим опытом в комментариях????????

Комментарии (5)


  1. APXEOLOG
    00.00.0000 00:00
    +9

    С моей точки зрения на данный момент у ChatGPT есть единственная область применения - задачи, где нужно генерировать большое количество текста на определенную тему. Доклады, статьи, рекламная информация. Затем специалист вычитает и поправит материал и готово.

    Если мы говорим конкретно про программирование, то смысла в этом нет практически никакого. Во-первых, написание кода это лишь часть работы программиста (причем не самая "мозгоемкая"). Гораздо важнее как именно написан этот код - с учетом планируемой архитектуры приложения и взаимодействия с другими модулями программы. Во-вторых, самая большая проблема ChatGPT - возможность в любой момент начать втирать какую-то дичь с умным видом.

    Получаем ситуацию:

    • Если человек хорошо разбирается в задаче и том как ее реализовать, он скорее будет думать об архитектуре и для него десяток сгенерированных строк кода будет лишней тратой времени

    • Если человек плохо разбиарается в задаче и ChatGPT сгенерирует ему дичь, он может не увидеть этого и полчить дичь вместо результата


  1. anonymous
    00.00.0000 00:00

    НЛО прилетело и опубликовало эту надпись здесь


  1. syrus_the_virus
    00.00.0000 00:00
    +1

    Текст статьи: как ИИ помогает создавать инструменты для обучения ИИ. А в чём, собственно соль? Где результаты? Конечная цель любого вычисления - выходные данные, где они?


    1. friflex_dev Автор
      00.00.0000 00:00

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


  1. Estis
    00.00.0000 00:00

    Блок "Интерактивные вопросы", вот весь смысл и особенность ChatGPT. Его можно использовать для вопросов, на которые текущие поисковики ответить не могут, или ты будешь искать там ответ 6ч. Это отличный компилятор имеющейся в интернете информации. Всё остальное, это как через сортировщик пытаться микробов разглядывать.