В развитие подтемы, начатой моим же сообщением:
Ну ещё вот такой мыслительный эксперимент: есть задача, но не известен алгоритм решения. Эвристическим методом найден один шаг алгоритма, который что-то выполняет с условием задачи, то есть формально этот шаг корректен. Этот шаг решает некую подзадачу.
Мы имеем две задачи, одна из которых претендует быть подзадачей другой. Как проверить, не предъявляя окончательный алгоритм большой задачи?
Возможно вам придется прочитать сообщения всей этой темы, чтобы вспомнить, о чем речь.
Продолжение темы:В машинном обучении (machine learning) я открыл для себя некий подход к обучению, который работает в том случае, когда нет данных для обучения. Этот подход называется
semi-supervised-learning. Суть: имеется
неразмеченный датасет, для этого датасета могут генерироваться положительные и отрицательные примеры. Положительные примеры характеризуются тем, что такие примеры заведомо относятся к тому же классу (похожи) на примеры из исходного датасета. Отрицательные примеры, напротив, заведомо не принадлежат классу примеров из датасета.
На практике в компьютерном зрении (CV) используется генерация положительных примеров: берется картинка кошки, масштабируется, обрезается, корректируются цвета всех пикселей. В итоге получается другая картинка, но той же кошки, при этом картинка по-прежнему остается картинкой кошки. Гуглить алгоритм
Simclr.
На практике в обработке естественного языка (NLP) используется генерация отрицательных примеров: генерируется набор случайных слов - это становится анти-примером того, как должно формироваться предложение. Подход называется Noise-contrastive estimation (NCE).
Это все к тому, что всегда имеются варианты, когда нет достаточного количества информации. И все это работает даже когда датасет сильно разбалансирован (отсутствует информация об одном из классов - one-class classification). Грубо говоря, вы занимаетесь исследованиями и нет никакой информации, что вы идете по правильному или неправильному пути, но есть чутье, что принятое направление все-таки верное нежели другое. Это чувство почти наверняка испытывали в свое время Ньютон и Гаусс.
Я хотел бы рассмотреть, как это связано с генерацией алгоритмов. То есть, как я ставил задачу в самом первом посте темы: есть задача, но неизвестен алгоритм. Как его сгенерировать? Но теперь с учетом подходов машинного обучения.
-- 13.12.2021, 01:05 --Если генерировать некий достаточно простой код (~алгоритм), то будет подозрительным вывод в консоль (print) где-то в начале функции, более естественен вывод в консоль в конце функции. И вообще генерация случайных инструкций кода - это тоже будет весьма подозрительным. Или, наоборот, взять некоторую функцию и изменить в ней число итераций цикла for, изменить число вложенных циклов, изменить входные данные, присоединить некоторый код, удалить часть кода - это все генерация положительных примеров.