То что сейчас делают генеративные нейросети кажется какой то магией, пока в ней не разберешься. Давайте разбираться.
Попробую умные статьи с непонятными терминами пересказать простыми словами. Что называется на пальцах.
Но для начала надо определиться что такое нейросети эти самые. В обычном программирование у нас есть линейная последовательность действий. Если одно условие выполняется, то значит другое действие выполняется. И мельчайшей единицей является бит, ноль или единица. У нейросетей мельчайшей единицей является "тензор", если на пальцах это n-мерная матрица значений, поэтому её сравнивают с нейроном, который имеет какое то количество аксонов по которым он связывается с другими нейронами и тоже образует n-мерную матрицу реакций. И смысл нейросетей в том, что они изначально пустые, как и в человеке, но они способны обучаться. Если вносить в данные что такое хорошо и что такое плохо они начинают соответствующим образом реагировать.
Большой толчок для развития нейросетей получило развитие графических процессоров и особенно языка CUDA от Nvidia. Потому что графические процессоры изначально были заточены под работу с тензорами.
Но начнём издалека, началось всё с работ по компьютерному зрению. Художник же не может рисовать без зрения, поэтому в основу легла задача научить компьютер видеть и самое главное различать объекты. Когда люди начали обучать компьютеры различать объекты в кадре, они в общем то не планировали, что это приведет к генерации изображений. Они решали чисто прикладные задачи, например создание беспилотных автомобилей или систем распознавания людей, или бороться с порнографией в интернете.
На самом деле генерация изображений это побочный выхлоп компьютерного обучения (machine learning), задача рисовать вообще не стояла во главе угла. Но вот оно вдруг получилось и всем стало вдруг интересно, что это за нейросети такие. А то, что они вообще сейчас во всех научных и промышленных сферах на переднем крае стоят, это мало кому интересно, ибо скучно.
Никто из ученых не жалуется, что нейросети у них работу отбирают, все наоборот думают как бы их ещё позамысловатее поиспользовать.
Сначала была задача научить нейросети описывать картинки. И решалась эта задача двумя способами, первый ручным, люди описывали картинки вручную, тысячи лаборантов писали описания. Параллельно шел второй способ описания - автоматический. В интернете миллиарды, да что там миллиарды, дохренилиарды изображений и их все больше и больше. И часто на сайтах, даже здесь в дзене картинки при публикации сопровождают описанием, на случай, если картинка не подгрузится. Поэтому можно спарсить эти изображения вместе с описаниями и засунуть их в нейросеть. Третий способ не совсем этичный, но тем не менее один из основных. Для обучения нейросети скачивались фотостоки вместе со словами описаниями. Так как они скачивались бесплатно, изображения были с вотермарками, поэтому часто нейросети и генерируют изображения с подобиями вотермарков. Они не понимают, что это вообще ненужный элемент, и воспринимают их как часть изображения.
Adobe запускает свою нейросеть FireFly, которую будет как раз отличать этичность обучения. Сеть будет обучена только из своих проиндексированных стоков или с обязательным вознаграждением авторов, чьи работы задействовались в обучении сетки.
И дальше генерируются нейронные связи в латентном пространстве, если серый с хоботом это слон, если цвет монохромный с одним оттенком - это сепия, а если мало градиентов, то это 2D мультипликация и так далее. Так нейросеть научилась распознавать изображения и описывать их словами.
Вторая задача, которую решали это научить нейросеть очищать изображения, то есть удалять шум на фотографиях. Давали чистую фотографию, потом ту же фотографию с каким то % шума, нейросеть убирала шум и сравнивала с чистой фотографией. Так и обучалась. Потом шума становилось все больше и на последнем этапе давался просто шум и описание. И задача разворачивалась задом наперёд. Теперь надо "восстановить" изображение, которого на самом деле нет. А что там было нарисовано? А тут на помощь приходят описания которые мы получили из прошлой нейросети, которая связывает слова и изображения.
И сейчас обучение генерирующей нейросети содержит в себе две задачи мы засовываем в них изображения с описаниями и нейросеть запоминает как объекты с определёнными описаниями выглядят при разном уровне шума.
И сам процесс генерации выглядит следующим образом: мы пишем запрос - промпт, нейросеть генерирует шум и пытается из этого шума "восстановить" картинку. Потому что она по большому счёту не "рисует" изображения, она "восстанавливает". Она считает, что изображение там под шумом есть, просто надо удалить лишнее.
И как только что-то получилось, включается "компьютерное зрение" оно сравнивает с "описанием" которые мы дали, если получилось не то, процесс перезапускается снова, и снова, и снова, и так десятки раз пока либо количество перезапусков не закончится, либо результат не удовлетворит запросу.
Надеюсь это как то поможет снять налёт черной магии с этого процесса.
Всем спасибо за внимания, до новых встреч!
Ссылка на мой курс по Stable Diffusion
Ссылки на статьи
https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-2/