Всем привет! На связи Андрей Нестеров, я занимаюсь компьютерным зрением в  применении к мобильным приложениям в компании 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 отлично справляется со стандартными запросами, но как добиться качественного ответа на более сложные вопросы?
- Итеративные вопросы 
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” 

Именно то что и было нужно!
- Детализированные запросы 
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 датасета, который можем использовать в реальных задачах.
- Корректировка ошибок 
Несмотря на отличные результаты 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)
 - syrus_the_virus00.00.0000 00:00+1- Текст статьи: как ИИ помогает создавать инструменты для обучения ИИ. А в чём, собственно соль? Где результаты? Конечная цель любого вычисления - выходные данные, где они?  - friflex_dev Автор00.00.0000 00:00- Каждый сам для себя решает, какой инструмент полезно использовать в работе. Если кратко, то ChatGPT – очень сырой инструмент, но в некоторых ситуациях он может помочь. Как эффективнее использовать ChatGPT ? Если у вас нет уверенности в запросе, то итеративно задавайте вопросы и постепенно подбирайтесь к сути. Если у вас есть точное понимание вопроса, то помогает детализированный запрос. Во всех случаях не забывайте про ошибки ChatGPT и выполняйте самостоятельную редактуру. 
 
 - Estis00.00.0000 00:00- Блок "Интерактивные вопросы", вот весь смысл и особенность ChatGPT. Его можно использовать для вопросов, на которые текущие поисковики ответить не могут, или ты будешь искать там ответ 6ч. Это отличный компилятор имеющейся в интернете информации. Всё остальное, это как через сортировщик пытаться микробов разглядывать. 
 
           
 
APXEOLOG
С моей точки зрения на данный момент у ChatGPT есть единственная область применения - задачи, где нужно генерировать большое количество текста на определенную тему. Доклады, статьи, рекламная информация. Затем специалист вычитает и поправит материал и готово.
Если мы говорим конкретно про программирование, то смысла в этом нет практически никакого. Во-первых, написание кода это лишь часть работы программиста (причем не самая "мозгоемкая"). Гораздо важнее как именно написан этот код - с учетом планируемой архитектуры приложения и взаимодействия с другими модулями программы. Во-вторых, самая большая проблема ChatGPT - возможность в любой момент начать втирать какую-то дичь с умным видом.
Получаем ситуацию:
Если человек хорошо разбирается в задаче и том как ее реализовать, он скорее будет думать об архитектуре и для него десяток сгенерированных строк кода будет лишней тратой времени
Если человек плохо разбиарается в задаче и ChatGPT сгенерирует ему дичь, он может не увидеть этого и полчить дичь вместо результата