ML Atlas

02 · Dane · 4 min czytania · aktualizacja

Czym jest augmentacja danych i kiedy pomaga modelowi?

W skrócie

Augmentacja tworzy nowe przykłady przez przekształcenia, które nie zmieniają etykiety, np. przesunięcia. Uczy model niezmienniczości bez zbierania danych.

Co to jest

Augmentacja danych (ang. data augmentation) to sztuczne powiększanie zbioru treningowego przez przekształcanie istniejących przykładów w sposób, który nie zmienia ich etykiety. Dla obrazów to przesunięcia, obroty, odbicia, przycięcia, zmiany jasności i kontrastu; dla dźwięku — szum, zmiana tempa, maskowanie fragmentów spektrogramu; dla tekstu — synonimy, parafrazy, tłumaczenie tam i z powrotem.

Każde takie przekształcenie to informacja o świecie wpisana w dane: „kot przesunięty o kilka pikseli to nadal kot”, „cyfra 7 lekko obrócona to nadal 7”. Model nie musi odkrywać tej wiedzy z tysięcy przykładów — dostaje ją wprost.

Intuicja: ucząc dziecko rozpoznawać psy, nie pokazujemy mu jednego zdjęcia psa w jednej pozie. Pokazujemy psy z daleka, z bliska, z boku i w różnym świetle.

Mechanizm — dlaczego tak działa

Model uczy się tylko tych niezmienniczości, które widzi w danych. Jeśli każda cyfra w zbiorze treningowym jest idealnie wyśrodkowana, model nie ma powodu, by rozpoznawać cyfrę przesuniętą — dla niego to inny układ zapalonych pikseli. Augmentacja pokazuje modelowi wiele wersji tego samego obiektu z tą samą etykietą, więc funkcja straty karze go za reagowanie na przekształcenie. W efekcie uczy się cech, które przekształcenie zachowuje.

Formalnie augmentacja działa jak regularyzacja: zawęża zbiór funkcji, które dobrze pasują do danych, do tych, które są (w przybliżeniu) niezmiennicze względem wybranych przekształceń. To sposób na zmniejszenie przeuczenia bez zbierania nowych danych, szczególnie skuteczny przy małych zbiorach. Krizhevsky, Sutskever i Hinton (2012) podkreślali, że losowe wycinki i odbicia były kluczowe dla ograniczenia przeuczenia sieci AlexNet.

Dwa warunki muszą być spełnione. Po pierwsze, przekształcenie naprawdę nie może zmieniać etykiety. Odbicie lustrzane jest bezpieczne dla zdjęć zwierząt, ale nie dla cyfr i liter („b” staje się „d”), a obrót o 180° zamienia 6 w 9. Po drugie, model musi mieć dość pojemności, by nauczyć się niezmienniczości. Model liniowy na pikselach nie potrafi wyrazić „ta sama cyfra w dowolnym miejscu” jedną granicą — augmentacja może go wtedy tylko zdezorientować. Sieci konwolucyjne, k-NN czy SVM z jądrem RBF radzą sobie z tym znacznie lepiej.

Augmentację stosuje się zwykle „w locie”, losowo przy każdej epoce, więc model prawie nigdy nie widzi dokładnie tego samego przykładu dwa razy. Nowsze metody idą dalej: mixup miesza dwa obrazy i ich etykiety, AutoAugment szuka najlepszej polityki przekształceń automatycznie. Augmentacji nie stosuje się do zbioru testowego (wyjątkiem jest uśrednianie predykcji z kilku wersji obrazu, tzw. test-time augmentation).

Na przykładzie

Zbiór Digits (obrazy 8 × 8), do uczenia tylko 100 losowych cyfr, test na 540 innych, średnia z 20 losowań. Augmentacja: do każdego obrazu dodajemy cztery kopie przesunięte o jeden piksel (w prawo, w lewo, w górę, w dół). SVM z jądrem RBF bez augmentacji osiąga 88,0%, z augmentacją 92,5%. Na obrazach testowych przesuniętych o piksel różnica jest dramatyczna: 41,8% bez augmentacji wobec 85,5% z nią. Model nauczył się, że cyfra przesunięta to nadal ta sama cyfra.

Ten sam zabieg szkodzi regresji logistycznej: na zwykłym teście jej trafność spada z 89,3% do 75,9%, choć na przesuniętych obrazach rośnie z 37,9% do 61,0%. Model liniowy nie ma jak pogodzić pięciu wersji każdej cyfry jedną granicą. Zła augmentacja szkodzi każdemu modelowi: dodanie odbić lustrzanych obniża trafność regresji logistycznej z 89,3% do 83,6%, bo lustrzana cyfra nie jest już tą samą cyfrą.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • Obrazy w PyTorch: torchvision.transforms.v2 (RandomResizedCrop, RandomHorizontalFlip, RandomRotation, ColorJitter), składane przez Compose; gotowe polityki: AutoAugment, RandAugment, TrivialAugmentWide.
  • Biblioteka Albumentations — szybkie przekształcenia obrazów razem z maskami i ramkami obiektów.
  • Augmentacja tylko na danych treningowych, nigdy na walidacyjnych i testowych (poza świadomym test-time augmentation).
  • Siłę przekształceń dobieraj jak hiperparametr; zbyt silne zamieniają obraz w coś, czego model nigdy nie zobaczy w rzeczywistości.
  • Dla danych tabelarycznych augmentacja jest trudniejsza — tam zwykle stosuje się nadpróbkowanie (np. SMOTE) lub szum na cechach liczbowych.
  • Typowy błąd: przekształcenie zmieniające etykietę (odbicia dla tekstu i cyfr, obroty dla obrazów z orientacją, np. zdjęć rentgenowskich z oznaczeniem strony).

Najczęstsze pytania

Czy augmentacja zastępuje zbieranie danych?
Częściowo. Dodaje wiedzę o niezmienniczościach, którą sami zakładamy, ale nie dodaje nowej różnorodności, której w danych nie ma — nowych teł, ras, stylów pisma. Prawdziwe nowe dane zwykle pomagają bardziej.
Dlaczego augmentacja „w locie”, a nie raz przed treningiem?
Losowanie przekształceń w każdej epoce daje praktycznie nieskończenie wiele wariantów bez zajmowania pamięci, a model rzadko widzi dwa razy identyczny przykład. To silniejsza regularyzacja niż stały, powiększony zbiór.
Czy augmentacja działa na tekst?
Działa, ale ostrożniej, bo małe zmiany potrafią zmienić znaczenie. Stosuje się zamianę synonimów, losowe usuwanie słów, tłumaczenie zwrotne i parafrazy generowane modelami językowymi — każdą z nich warto sprawdzić walidacją.

Źródła

  • Goodfellow I., Bengio Y., Courville A. „Deep Learning”. MIT Press, 2016, rozdz. 7.4 (Dataset Augmentation).
  • Krizhevsky A., Sutskever I., Hinton G. E. (2012). „ImageNet Classification with Deep Convolutional Neural Networks”. NIPS 2012.
  • Shorten C., Khoshgoftaar T. M. (2019). „A survey on Image Data Augmentation for Deep Learning”. Journal of Big Data, 6, 60.
  • Zhang H., Cisse M., Dauphin Y. N., Lopez-Paz D. (2018). „mixup: Beyond Empirical Risk Minimization”. ICLR 2018.
  • Dokumentacja torchvision: Transforming and augmenting images, https://pytorch.org/vision/stable/transforms.html

Zobacz też