Модуль I · Тема 7 «Генеративний ШІ» · урок 1 з 2 · 120 хвилин
На минулому уроці скрипт перегнав цілу теку файлів і склав
звіт manifest.json. Усі картинки там уже лежали готові.
Сьогодні готової картинки не буде. Буде текст — і з нього
народиться файл gen-1.png. Такого зображення
не існувало ніде.
Ти складеш запит із семи частин і збережеш його
в prompts.json.
А під картинкою підпишеш: це зробила машина, ось яка саме.
Слова «дифузія», «латент» і «seed» поки нічого не означають. Розберемо їх по черзі.
| Етап | Хв | Що робимо |
|---|---|---|
| Вхід: «справжнє чи згенероване?» | 15 | Дивимося на пари зображень, шукаємо, що видає машину |
| Як модель «вчиться» | 20 | Токени, латент, дифузія з шуму, seed |
| Анатомія промпта | 25 | Сім блоків, негативний промпт, конструктор |
| Перерва | 10 | — |
| Етика й авторське право | 25 | Три кейси, власне правило маркування |
| Перша ітерація промпта | 20 | Генерація локально, prompts.json, сторінка |
| Підсумок і ДЗ | 5 | Правило доброчесності модуля |
| Разом | 120 |
media/lesson-07/.
По FTP у кабінет їде тільки текст: prompts.json
і index.html. У prompts.json ти пишеш промпт,
негативний промпт, модель, параметри, що змінив і чим результат вийшов.
У index.html має бути блок .ai-disclosure.
Самі зображення вчитель дивиться очно, на твоєму екрані.
Якщо gen-1.png опиниться в кабінеті, критерій не зарахують.lesson-07/.
Теки lesson-13 немає, не шукай її.Всередині немає ані бази зображень, ані доступу до інтернету
Багато хто думає так: модель знайшла в інтернеті схожу картинку й трохи її підправила. Це не так.
Під час генерації модель нікуди не звертається. Інтернету в неї немає, бази картинок теж.
Усе, що в неї є, — величезний набір чисел. Ці числа накопичилися, поки модель навчалася. Звуться вони ваги.
Візьмімо Stable Diffusion 1.5. Цю модель можна завантажити й запустити в себе. Її файл важить приблизно 4 ГБ.
Навчалася вона на наборі LAION-5B. Це 5,85 мільярда пар «зображення + опис».
| Що рахуємо | Число |
|---|---|
| Розмір файлу моделі | ≈ 4 000 000 000 байтів |
| Пар «зображення + опис» у навчальному наборі | 5 850 000 000 |
| Скільки байтів «припадає» на одне зображення | ≈ 0,7 байта |
На один кольоровий піксель треба щонайменше 3 байти. У 0,7 байта не влізе навіть він. Отже, картинок усередині моделі немає.
Є інше — закономірності. Які форми, кольори й текстури зазвичай стоять поруч зі словом «туман». Які — поруч зі словом «пухнастий». Які — поруч зі словом «акварель».
Модель не читає букв. Спершу твій текст ріжуть на шматки. Коротке слово лишається цілим, довге розпадається на частини. Ці шматки звуться токени.
Кожен токен має свій номер у словнику. Замість слів модель отримує низку номерів.
Далі кожен номер перетворюється на довгий список чисел. Робить це окрема програма — текстовий кодувальник. У Stable Diffusion його звуть CLIP. Саме ці числа й «бачить» генератор.
Картинка 512×512 у трьох кольорах — це 512 × 512 × 3 = 786 432 числа. Перебирати таку купу на кожному кроці дорого й довго.
Тому Stable Diffusion працює не з пікселями. Вона стискає картинку до 64 × 64 × 4 = 16 384 чисел. Це у 48 разів менше. Такий стиснений вигляд зветься латент.
Уся генерація йде саме в цьому маленькому вигляді. Аж наприкінці окрема програма розгортає латент назад у пікселі. Її звуть декодер.
Звідси перший практичний наслідок. Дрібні деталі ламаються першими: літери, тонкі пальці, візерунок на тканині. У стисненому вигляді на них припадає надто мало чисел.
Ти написав «кіт у скафандрі на Марсі» і отримав картинку, якої точно ніде не існувало. Звідки вона взялася?
Модель не малює лінії. Вона крок за кроком прибирає шум
Уяви старий телевізор без антени. На екрані сіра «сніжинка» й більше нічого. Приблизно з такого стану модель і починає.
Навчали її з кінця. Брали справжнє фото й підсипали в нього шум крок за кроком. Так робили, аж поки не лишалася сама каша.
Потім модель учили робити навпаки. Вона дивиться на зашумлену картинку й на підпис до неї. І вгадує, який саме шум туди підсипали.
Генерація — та сама навичка з нуля. Беруть чистий шум і просять модель прибирати з нього потроху. Щоразу вона звіряється з твоїм текстом. Через 20–50 кроків із каші проступає зображення. Це і зветься дифузія.
| Кроків | Що виходить |
|---|---|
| 1–5 | модель не встигла прибрати шум — розмита мазанина без форм |
| 10–15 | композиція вгадується, деталі «пливуть» |
| 20–35 | робочий діапазон для більшості моделей і семплерів |
| 60+ | час і гроші майже без користі: зміни ледь помітні оком |
Числа орієнтовні: конкретний діапазон залежить від моделі й семплера. Перевіряй на своїй — це і є перша серйозна ітерація.
Поруч із кроками є ще одна ручка. Вона каже, наскільки строго триматися тексту. Зветься CFG scale.
Поставиш мало — модель фантазує й слабко слухає промпт. Поставиш багато (умовно понад 12) — кольори кричать, форми ламаються. Робоче значення для Stable Diffusion — 7–8. Воно ж стоїть за замовчуванням.
Щоб швидше, ти поставив 4 кроки замість 30. Вийшла розмита кольорова мазанина. Що саме не встигло статися?
Випадковий шум не такий уже й випадковий
Стартовий шум не береться нізвідки. Комп'ютер не вміє в справжню випадковість. Він рахує «випадкові» числа за формулою.
Такій формулі треба з чогось почати. Це стартове число й зветься seed. Працює воно як номер варіанта контрольної: той самий номер — той самий набір завдань.
Однакове seed дає однаковий шум. Інше seed — інший шум. А отже й інша картинка за тим самим текстом.
Тому seed записують одразу, а не «потім». Це єдиний спосіб повернутися до вдалого кадру. А далі міняти в ньому по одному слову. Саме цим ми й займемося на уроці 14.
params файлу prompts.json
так і пиши: seed недоступний у цьому сервісі.
Чесна прогалина краща за вигадане число.Ти згенерував ідеальну картинку, зберіг файл, але seed не записав. Чи зможеш завтра отримати рівно ту саму — щоб змінити в ній одне слово?
Усе, чого ти не сказав, модель добере сама — і зазвичай не так
Напиши «гарний дракон» — і модель вирішить решту сама. Де стоїть дракон. Звідки падає світло. Олівцем це намальовано чи фарбою.
Ці рішення нікуди не діваються. Питання тільки в тому, хто їх ухвалює. У робочому промпті їх ухвалюєш ти — і кажеш уголос.
| № | Блок | На що впливає | Приклад |
|---|---|---|---|
| 1 | Суб'єкт | хто або що головне в кадрі | a red fox |
| 2 | Дія | що він робить, у якій позі | sitting on a mossy stone |
| 3 | Оточення | де це відбувається, погода, час | in a foggy pine forest |
| 4 | Стиль | техніка: фото, олія, вектор, 3D | watercolor illustration |
| 5 | Освітлення | напрямок, м'якість, колір світла | soft morning backlight |
| 6 | Ракурс | звідки дивиться камера, крупність | low angle, close-up |
| 7 | Якість | деталізація, різкість, чистота кадру | highly detailed, sharp focus |
Це другий список — чого на картинці бути не має.
Слова моделі не «заборонені». На кожному кроці вона рахує два варіанти: один за твоїм промптом, другий за негативним. І тікає від другого.
Це та сама ручка CFG. Тільки замість порожнього рядка в неї підставили твій список заборон.
Стартовий набір збирають із трьох груп. Кожна закриває свою типову поломку.
Перша група — написи. text — будь-які літери на картинці.
watermark — водяний знак фотобанку. signature —
підпис художника в куті.
Модель бачила такі написи на мільйонах чужих зображень. Тому домальовує їх за звичкою, навіть коли ти про них не просив.
Друга група — руки. extra fingers — зайві пальці.
deformed hands — зламані кисті. Рахувати модель не вміє,
тому руки псуються найчастіше.
Третя група — якість кадру. blurry — розмито.
low quality — каша замість дрібних деталей.
cropped — герою зрізало маківку або ноги.
Ці вісім слів і є типовий стартовий набір. Далі дописуєш своє — те, що зіпсувало саме твою картинку.
Окреме поле для негативу є не всюди. У частині веб-сервісів його немає. Тоді бажане описують прямо: замість «без тексту» пишуть «clean surface».
(fox:1.4) розуміє не сама модель.
Його читає конкретний інтерфейс і сам підсилює ці слова перед відправкою.
В іншому сервісі той самий запис піде в промпт як звичайний текст із дужками.
Тому в prompts.json завжди пиши, у чому саме генерував.На кожній генерації в правому нижньому куті з'являється щось схоже на розмитий підпис художника. Модель це підглянула в даних. Що робиш найпростіше?
Збери свій запит із блоків — сторінка складе готовий текст англійською
Обери значення в кожному списку. Внизу видно, скільки блоків із семи ти вже задав і яких бракує.
Готовий промпт копіюється однією кнопкою. Поруч — заготовка запису
для prompts.json, який ти сьогодні здаєш.
Натисни те, чого не має бути на зображенні.
Кожна генерація описується одним записом у prompts.json.
Сьогодні запис буде один. На уроці 14 їх стане чотири.
prompts.json у звичайному редакторі: VS Code, Notepad++.
Зберігай як UTF-8. Якщо створити файл у Windows PowerShell 5.1
командою echo … > prompts.json, він вийде у UTF-16.
Чекер побачить не JSON, а кашу. Тож коли він каже «невалідний JSON»,
а дужки на місці, — першим перевіряй кодування файлу.Твій промпт — «beautiful dragon». Щоразу виходить щось інше і жодного разу не те, що ти уявляв. Що виправляти першим?
Чому модель ламається саме там, де ламається
У кисті людини 27 кісток. Вона згинається в десятках напрямків.
На фотографіях руки майже завжди дрібні. Розмиті, перекриті, обрізані краєм кадру. Модель бачила мільйони плям «щось видовжене біля зап'ястя» — і домальовує щось схоже.
Пальці вона не рахує. Рахувати вона взагалі не вміє. У неї є тільки ймовірність, що поруч із пальцем буває ще один палець.
Для генератора літера — просто форма. Він не знає, що «А» має бути саме таким. Правил письма в нього немає.
Додай сюди стиснення до 64×64. На вивіску в глибині кадру припадає кілька чисел. З них треба розгорнути осмислений напис — і не виходить.
Новіші великі моделі пишуть помітно краще. Але «краще» — ще не «правильно». Напис на картинці перечитуй завжди.
| Зона | Що шукати |
|---|---|
| Симетрія | різні сережки, різні очі, різне взуття, несиметричний комір |
| Кількість | пальці, зуби, ніжки меблів, колеса, вікна в ряду |
| Фон | об'єкти, що зливаються, обірвані лінії, люди без ніг |
| Тіні | тіні падають у різні боки — кілька сонць одночасно |
| Візерунки | клітинка, цегла чи літери на одязі «пливуть» і не сходяться |
| Стики | там, де окуляри переходять у вухо, а ремінець — у годинник |
Друг показує «фото» невідомого рок-гурту і клянеться, що воно справжнє. Куди ти дивишся в першу чергу?
У генератора немає етапу перевірки. Він не звіряє результат із реальністю. Слів «я цього не знаю» у нього теж немає.
На виході завжди щось буде. Це «щось» — найімовірніше за статистикою продовження твого опису.
Тому впевнений вигляд картинки не означає нічого. Схема ока з нечитабельними підписами виглядає переконливо саме тому, що модель гналася за правдоподібністю. Правильність вона не перевіряла. Це доводиться робити тобі.
Ти попросив схему будови ока з підписами для реферату. Модель видала красиву картинку, де підписи — набір псевдобукв. Чому вона не написала «я не вмію робити схеми з текстом»?
Це не мораль наприкінці уроку. Це половина вміння користуватися інструментом
Великі моделі навчають на наборах, зібраних із відкритого інтернету.
LAION-5B — це не архів картинок. Це 5,85 мільярда посилань: адреса зображення плюс підпис до нього. Зібрані вони з Common Crawl — величезної копії веб-сторінок.
Згоди в авторів ніхто не питав. Багато хто й досі не знає, що його малюнки туди потрапили.
Звідси й судові справи. Getty Images проти Stability AI. Andersen та інші проти Stability AI, Midjourney і DeviantArt. Частина питань досі без остаточної відповіді — в жодній країні.
З'явилися й сервіси перевірки. На Have I Been Trained художник шукає свою роботу в наборах і подає відмову від навчання.
| Де | Як зараз |
|---|---|
| США | Бюро авторського права: твір, створений без творчого внеску людини, охороні не підлягає. Так вирішено у справі коміксу «Zarya of the Dawn» (2023) і підтверджено у справі Thaler v. Perlmutter |
| Україна | Закон «Про авторське право і суміжні права» № 2811-IX, стаття 33. Картинку намалювала програма, а не людина — отже, авторського права на неї немає. Замість нього діє інше право, слабше й коротше: 25 років. У законі його звуть правом особливого роду, латиною sui generis |
| Сервіси | умови користування в різних генераторів різні: десь тобі передають права на використання, десь лише ліцензію, а безкоштовні плани часто забороняють комерційне використання |
Що з цього тобі. Згенероване — не «твій малюнок». Твоє тут інше: сам запит, вибір із десятка варіантів, правки й доробка.
Саме це й пиши в prompts.json. Не «я намалював»,
а «я склав запит і відібрав результат».
Ти згенерував обкладинку для шкільного проєкту й вона гарна. Як вчинити правильно?
Європейський Акт про штучний інтелект (Регламент ЄС 2024/1689) у статті 50 вимагає двох речей.
Перше: хто зробив генератор, той має ставити на результат позначку, яку прочитає програма. Друге: хто публікує дипфейк, той має прямо сказати, що це згенеровано. Обидва обов'язки діють з 2 серпня 2026 року.
Платформи вимагають цього вже зараз. YouTube просить розкривати реалістичний синтетичний контент. Meta й TikTok чіпляють позначку «AI info», часто самі.
Є й технічний стандарт такої позначки — C2PA, він же Content
Credentials. Це підпис усередині файлу: чим і коли зроблено зображення.
Такі приховані записи ми й правитимемо exiftool на уроці 14.
Причина тут не юридична. Людина має право знати, на що дивиться: на знімок події чи на вигадку.
Без позначки згенероване фото стає доказом того, чого не було.
class="ai-disclosure" обов'язковий. У ньому має бути назва
моделі й слова «згенеровано» та «ШІ» (або «AI»).
Поки цього блока немає, чекер тему не зарахує.Генерувати зображення реальної людини без її згоди не можна. Однокласники, вчителі, знайомі, публічні особи — правило для всіх одне.
Навіть жарт тут працює як підробка. Картинка показує те, чого не було, а виглядає як знімок. Такі підробки звуться дипфейками.
В Україні це не лише етика. Цивільний кодекс, статті 307 і 308: знімати людину й поширювати її зображення можна лише за її згодою.
Згенерована «фотографія» від цього не звільняє. Навпаки — вона ще й неправдива.
prompts.json.Попроси «лікаря», «прибиральницю» чи «програміста» без уточнень. Модель видасть той типаж, який частіше траплявся в навчальних даних.
Це не думка моделі — думок у неї немає. Це відбиток того, які фото й підписи частіше лежать в інтернеті.
Наслідки при цьому справжні. Тому описувати зовнішність і обставини в промпті — теж частина роботи.
Однокласник просить: «згенеруй смішне фото нашого вчителя, ми в чат кинемо». Що ти робиш?
Кроки 1—8 — у себе на комп'ютері, кроки 9 і 10 — у кабінеті на сервері. Галочки зберігаються, сторінку можна закрити.
gen-1.png лишається в локальній теці media/lesson-07/.
FTP-приймальня відхиляє зображення понад 500 КБ. Чекер окремо шукає
gen-*.png у ~/www/ і ~/upload/.
Зображення вчитель дивиться очно, на твоєму екрані.
Тому не видаляй файл і не закривай теку до перевірки.Чекер зайде у твій кабінет і перевірить текст. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає
check 07 від імені учня.
media/lesson-07/, у ній лежить
gen-1.png;id="ethics"
і пояснює, навіщо воно.Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
.ai-disclosure немає,
тему не зарахують.Візьми одну свою ідею. Напиши на папері три версії промпта до неї.
У кожній наступній міняй рівно один блок. У другій — стиль. У третій — ракурс або освітлення.
Під кожною версією допиши одне речення: якої зміни ти чекаєш.
На уроці 14 ці три версії стануть ітераціями gen-2,
gen-3, gen-4.
Наукові статті, документація моделей, тексти законів і офіційні рішення. Перевіряти дозволено й корисно.
trainedAlgorithmicMedia.
cv.iptc.org/newscodes/digitalsourcetypeПовний список із поясненнями, що саме звідки взято і які числа
є ілюстративними, — у файлі urok-13-джерела.md поруч
із цією сторінкою.