Aby podzielić się magią DALL E 2 z szeroką publicznością, musieliśmy zmniejszyć ryzyko związane z potężnymi modelami generowania obrazów. W tym celu stawiamy różne poręcze w miejscu, aby generowane obrazy nie naruszały naszych polityka treści. Ten post koncentruje się na łagodzenia przedtreningowe, podzbiór tych poręczy, które bezpośrednio modyfikują dane, z których uczy się DALL·E2. W szczególności DALL·E 2 jest szkolony na setkach milionów obrazów z napisami z Internetu, a my usuwamy i ponownie ważymy niektóre z tych obrazów, aby zmienić to, czego uczy się model.
Ten post jest podzielony na trzy sekcje, z których każda opisuje różne ograniczenia przedtreningowe:
- W pierwszej sekcji opisujemy, w jaki sposób odfiltrowaliśmy obrazy przedstawiające przemoc i sceny seksualne ze zbioru danych treningowych DALL·E 2. Bez tego złagodzenia model nauczyłby się tworzyć graficzne lub wyraźne obrazy, gdy zostanie o to poproszony, a nawet może zwrócić takie obrazy nieumyślnie w odpowiedzi na pozornie nieszkodliwe podpowiedzi.
- W drugiej części stwierdzamy, że filtrowanie danych treningowych może wzmacniać błędy systematyczne i opisujemy naszą technikę łagodzenia tego efektu. Na przykład bez tego ograniczenia zauważyliśmy, że modele wytrenowane na filtrowanych danych czasami generowały więcej obrazów przedstawiających mężczyzn i mniej obrazów przedstawiających kobiety w porównaniu z modelami wyszkolonymi na oryginalnym zbiorze danych.
- W ostatniej części zajmiemy się kwestią zapamiętywania, stwierdzając, że modele takie jak DALL·E 2 mogą czasami odtwarzać obrazy, na których były szkolone, zamiast tworzyć nowe obrazy. W praktyce stwierdziliśmy, że to regurgitacja obrazu jest powodowany przez obrazy, które są wielokrotnie replikowane w zestawie danych, i łagodzi ten problem, usuwając obrazy, które są wizualnie podobne do innych obrazów w zestawie danych.
Redukcja graficznych i wyraźnych danych treningowych
Ponieważ dane szkoleniowe kształtują możliwości każdego wyuczonego modelu, filtrowanie danych jest potężnym narzędziem do ograniczania niepożądanych możliwości modelu. Zastosowaliśmy to podejście do dwóch kategorii — obrazów przedstawiających przemoc graficzną i treści o charakterze seksualnym — za pomocą klasyfikatorów w celu odfiltrowania obrazów w tych kategoriach ze zbioru danych przed szkoleniem DALL·E 2. Przeszkoliliśmy te klasyfikatory obrazów we własnym zakresie i nadal badamy wpływ filtrowania zestawu danych na nasz wytrenowany model.
Aby przeszkolić nasze klasyfikatory obrazów, ponownie zastosowaliśmy podejście, które wcześniej stosowaliśmy do filtrowania danych szkoleniowych POŚLIZG. Podstawowe kroki do tego podejścia są następujące: najpierw tworzymy specyfikację dla kategorii obrazów, które chcielibyśmy oznaczyć; po drugie, dla każdej kategorii zbieramy kilkaset pozytywnych i negatywnych przykładów; po trzecie, używamy aktywnej procedury uczenia się, aby zebrać więcej danych i poprawić kompromis między precyzją a przywoływaniem; i wreszcie uruchamiamy powstały klasyfikator na całym zbiorze danych z konserwatywnym progiem klasyfikacji, aby faworyzować przypominanie nad precyzją. Aby ustawić te progi, nadaliśmy priorytet odfiltrowaniu wszystkich zły dane o opuszczeniu we wszystkich dobry dane. Dzieje się tak dlatego, że zawsze możemy dostroić nasz model z większą ilością danych później, aby nauczyć go nowych rzeczy, ale znacznie trudniej jest sprawić, by model zapomniał czegoś, czego już się nauczył.
Podczas aktywnej fazy uczenia się wielokrotnie ulepszaliśmy nasze klasyfikatory, zbierając ludzkie etykiety dla potencjalnie trudnych lub błędnie sklasyfikowanych obrazów. Warto zauważyć, że zastosowaliśmy dwie techniki aktywnego uczenia się, aby wybrać obrazy z naszego zbioru danych (zawierającego setki milionów nieoznakowanych obrazów) do zaprezentowania ludziom do oznaczenia. Po pierwsze, aby zmniejszyć współczynnik fałszywie pozytywnych wyników naszego klasyfikatora (tj. częstotliwość, z jaką błędnie klasyfikuje on łagodny obraz jako przedstawiający przemoc lub seksualny), przypisaliśmy ludzkie etykiety obrazom, które według obecnego modelu są klasyfikowane jako pozytywne. Aby ten krok działał dobrze, dostroiliśmy nasz próg klasyfikacji, aby uzyskać prawie 100% przypomnienia, ale wysoki wskaźnik wyników fałszywie dodatnich; w ten sposób nasi etykieciarki w większości oznaczały naprawdę negatywne przypadki. Chociaż ta technika pomaga zredukować liczbę fałszywych alarmów i zmniejsza potrzebę sprawdzania przez osoby zajmujące się etykietowaniem potencjalnie szkodliwych obrazów, nie pomaga w znajdowaniu bardziej pozytywnych przypadków, których obecnie brakuje w modelu.
Aby zmniejszyć odsetek wyników fałszywie ujemnych naszego klasyfikatora, zastosowaliśmy drugą technikę aktywnego uczenia się: wyszukiwanie najbliższego sąsiada. W szczególności przeprowadziliśmy wielokrotną walidację krzyżową, aby znaleźć pozytywne próbki w naszym bieżącym, oznaczonym zbiorze danych, który model błędnie klasyfikował jako negatywne (w tym celu dosłownie wytrenowaliśmy setki wersji klasyfikatora z różnymi podziałami walidacji pociągu). Następnie przeskanowaliśmy naszą dużą kolekcję nieoznakowanych obrazów w poszukiwaniu najbliższych sąsiadów tych próbek w percepcyjnej przestrzeni cech i przypisaliśmy odkryte obrazy ludzkie etykiety. Dzięki naszej infrastrukturze obliczeniowej skalowanie zarówno szkolenia klasyfikatorów, jak i wyszukiwania najbliższego sąsiada do wielu procesorów graficznych było trywialne, dzięki czemu etap aktywnego uczenia się trwał kilka minut, a nie godzin lub dni.
Aby zweryfikować skuteczność naszych filtrów danych, wytrenowaliśmy dwa modele GLIDE z tymi samymi hiperparametrami: jeden na danych niefiltrowanych, a drugi na zestawie danych po przefiltrowaniu. Do poprzedniego modelu odnosimy się jako model niefiltrowany, a ten ostatni jako filtrowany model. Zgodnie z oczekiwaniami stwierdziliśmy, że niefiltrowany model zazwyczaj generował mniej wyraźne lub graficzne treści w odpowiedzi na prośby o tego rodzaju treści. Jednak znaleźliśmy również nieoczekiwany efekt uboczny filtrowania danych: stworzyło lub wzmocniło uprzedzenia modelu w stosunku do pewnych danych demograficznych.
Naprawianie błędu wprowadzonego przez filtry danych
Modele generatywne próbują dopasować rozkład swoich danych szkoleniowych, w tym wszelkie występujące w nich błędy. W rezultacie filtrowanie danych uczących może potencjalnie tworzyć lub wzmacniać błędy systematyczne w modelach dalszych. Ogólnie rzecz biorąc, naprawianie błędów systematycznych w oryginalnym zbiorze danych jest trudnym zadaniem socjotechnicznym, które nadal badamy i wykracza poza zakres tego postu. Problem, który tutaj rozwiązujemy, to wzmocnienie błędów systematycznych spowodowanych w szczególności przez samo filtrowanie danych. Dzięki naszemu podejściu dążymy do tego, aby filtrowany model nie był jeszcze stronniczy niż model niefiltrowany, zasadniczo zmniejszając przesunięcie rozkładu spowodowane filtrowaniem danych.
Jako konkretny przykład wzmocnienia stronniczości spowodowanego filtrowaniem, rozważ podpowiedź „dyrektor”. Kiedy nasz niefiltrowany model generował obrazy dla tego monitu, zwykle generował więcej obrazów mężczyzn niż kobiet i spodziewamy się, że większość tego błędu jest odzwierciedleniem naszych aktualnych danych treningowych. Jednak, gdy uruchomiliśmy ten sam monit przez nasz filtrowany model, odchylenie wydawało się wzmocnione; pokolenia były prawie wyłącznie wizerunkami mężczyzn.
Stawiamy hipotezę, że ten konkretny przypadek wzmocnienia uprzedzeń pochodzi z dwóch miejsc: po pierwsze, nawet jeśli kobiety i mężczyźni mają mniej więcej równą reprezentację w oryginalnym zbiorze danych, zbiór danych może być stronniczy w kierunku przedstawiania kobiet w bardziej zseksualizowanych kontekstach; a po drugie, nasze klasyfikatory same w sobie mogą być stronnicze ze względu na implementację lub definicję klasy, pomimo naszych wysiłków, aby upewnić się, że nie miało to miejsca w fazie zbierania i walidacji danych. Ze względu na oba te efekty, nasz filtr może usunąć więcej zdjęć kobiet niż mężczyzn, co zmienia proporcje płci, które model obserwuje podczas treningu.
Aby dokładniej zbadać nastawienie wywołane przez filtr, chcieliśmy zmierzyć, w jakim stopniu nasze filtry danych wpływają na nastawienie w stosunku do różnych koncepcji. W szczególności nasze filtry dotyczące przemocy i treści erotycznych opierają się wyłącznie na obrazach, ale multimodalny charakter naszego zbioru danych pozwala nam bezpośrednio mierzyć wpływ tych filtrów na tekst. Ponieważ każdemu obrazowi towarzyszy podpis tekstowy, mogliśmy przyjrzeć się względnej częstotliwości ręcznie wybranych słów kluczowych w przefiltrowanym i niefiltrowanym zbiorze danych, aby oszacować, jak bardzo filtry wpłynęły na daną koncepcję.
Aby zastosować to w praktyce, użyliśmy Apache Spark do obliczenia częstotliwości kilku słów kluczowych (np. „rodzic”, „kobieta”, „dziecko”) we wszystkich podpisach zarówno w naszych filtrowanych, jak i niefiltrowanych zbiorach danych. Mimo że nasz zbiór danych zawiera setki milionów par tekst-obraz, obliczenie częstotliwości słów kluczowych przy użyciu naszego klastra obliczeniowego zajęło tylko kilka minut.
Po obliczeniu częstotliwości słów kluczowych byliśmy w stanie potwierdzić, że nasze filtry zestawu danych rzeczywiście zniekształciły częstotliwość niektórych słów kluczowych bardziej niż innych. Na przykład filtry zmniejszyły częstotliwość występowania słowa „kobieta” o 14%, podczas gdy częstotliwość słowa „mężczyzna” zmniejszyła się tylko o 6%. Potwierdziło to na dużą skalę to, co już zaobserwowaliśmy anegdotycznie, próbując z modeli GLIDE wytrenowanych na obu zestawach danych.
Teraz, gdy mieliśmy proxy do pomiaru błędu spowodowanego przez filtr, potrzebowaliśmy sposobu na jego złagodzenie. Aby rozwiązać ten problem, postanowiliśmy ponownie ważyć przefiltrowany zbiór danych, aby jego rozkład lepiej odpowiadał rozkładowi niefiltrowanych obrazów. Jako przykład zabawki ilustrującej ten pomysł, załóżmy, że nasz zbiór danych składa się w 50% ze zdjęć kotów i 50% ze zdjęć psów, ale nasze filtry danych usuwają 75% psów, ale tylko 50% kotów. Ostateczny zbiór danych składałby się z ⅔ kotów i ⅓ psów, a oparty na prawdopodobieństwie model generatywny wyszkolony na tym zbiorze danych prawdopodobnie wygenerowałby więcej obrazów kotów niż psów. Możemy naprawić tę nierównowagę, mnożąc utratę treningu każdego obrazu psa przez 2, naśladując efekt dwukrotnego powtórzenia każdego obrazu psa. Okazuje się, że możemy przeskalować to podejście do naszych prawdziwych zestawów danych i modeli w sposób w dużej mierze automatyczny — to znaczy, że nie musimy ręcznie wybierać funkcji, które chcemy ponownie ważyć.
Wagi obrazów w filtrowanym zbiorze danych obliczamy przy użyciu prawdopodobieństw ze specjalnego klasyfikatora, podobnie jak w podejściu stosowanym przez Choi i in. (2019). Aby wytrenować ten klasyfikator, jednolicie próbkujemy obrazy z obu zestawów danych i przewidujemy, z którego zestawu danych pochodzi obraz. W szczególności model ten przewiduje: P(niefiltrowany|obraz), biorąc pod uwagę a priori P(niefiltrowane) = 0.5. W praktyce nie chcemy, aby ten model był zbyt potężny, w przeciwnym razie może w pierwszej kolejności nauczyć się dokładnej funkcji zaimplementowanej przez nasze filtry. Zamiast tego chcemy, aby model był bardziej płynny niż nasze oryginalne filtry danych, przechwytując szerokie kategorie, na które wpływają filtry, jednocześnie nie mając pewności, czy dany obraz zostanie przefiltrowany, czy nie. W tym celu wytrenowaliśmy sondę liniową na małej CLIP model.
Gdy już mamy klasyfikator, który przewiduje prawdopodobieństwo, że obraz pochodzi z niefiltrowanego zbioru danych, nadal musimy przekonwertować tę prognozę na wagę obrazu. Załóżmy na przykład, że P(niefiltrowany|obraz) = 0.8. Oznacza to, że prawdopodobieństwo znalezienia próbki w danych niefiltrowanych jest 4 razy większe niż w danych filtrowanych, a waga 4 powinna skorygować niewyważenie. Ogólnie rzecz biorąc, możemy użyć wagi P(niefiltrowany|obraz)/P(filtrowany|obraz).[1]
Jak dobrze ten schemat ponownego ważenia faktycznie łagodzi wzmocnioną stronniczość? Kiedy dostroiliśmy nasz poprzedni filtrowany model za pomocą nowego schematu ważenia, zachowanie modelu dostrojonego znacznie bardziej odpowiadało modelowi niefiltrowanemu na przykładach tendencyjnych, które znaleźliśmy wcześniej. Chociaż było to zachęcające, chcieliśmy również dokładniej ocenić to łagodzenie za pomocą naszej heurystyki stronniczości opartej na słowach kluczowych. Aby zmierzyć częstotliwość słów kluczowych, biorąc pod uwagę nasz nowy schemat ważenia, możemy po prostu zważyć każde wystąpienie słowa kluczowego w przefiltrowanym zbiorze danych według wagi próbki, która je zawiera. W ten sposób otrzymujemy nowy zestaw częstotliwości słów kluczowych, który odzwierciedla wagi próbek w przefiltrowanym zbiorze danych.
W przypadku większości słów kluczowych, które sprawdziliśmy, schemat ponownego ważenia zmniejszył zmianę częstotliwości wywołaną filtrowaniem. Dla naszych poprzednich przykładów „mężczyzny” i „kobiety” względne redukcje częstotliwości wyniosły 1% i –1%, podczas gdy ich poprzednie wartości wynosiły odpowiednio 14% i 6%. Chociaż ta metryka jest tylko wskaźnikiem rzeczywistego błędu filtrowania, uspokaja to, że nasz schemat ponownego ważenia oparty na obrazach rzeczywiście tak znacząco poprawia metrykę tekstową.
Kontynuujemy badanie pozostałych błędów systematycznych w DALL·E 2, po części poprzez szersze oceny zachowania modelu i badania wpływu filtrowania na błąd systematyczny i rozwój zdolności.
Zapobieganie regurgitacji obrazu
Zaobserwowaliśmy, że nasi wewnętrzni poprzednicy DALL·E 2 czasami odtwarzali dosłownie obrazy treningowe. To zachowanie było niepożądane, ponieważ chcielibyśmy, aby DALL·E 2 domyślnie tworzył oryginalne, niepowtarzalne obrazy, a nie tylko „zszywał” fragmenty istniejących obrazów. Ponadto dokładne powielanie obrazów szkoleniowych może rodzić pytania prawne dotyczące naruszenia praw autorskich, własności i prywatności (jeśli zdjęcia osób były obecne w danych szkoleniowych).
Aby lepiej zrozumieć problem regurgitacji obrazu, zebraliśmy zestaw danych z podpowiedziami, które często skutkowały zduplikowanymi obrazami. Aby to zrobić, użyliśmy wytrenowanego modelu do próbkowania obrazów dla 50,000 50 monitów z naszego szkoleniowego zestawu danych i posortowaliśmy próbki według podobieństwa percepcyjnego do odpowiedniego obrazu szkoleniowego. Na koniec sprawdziliśmy ręcznie najlepsze dopasowania, znajdując tylko kilkaset prawdziwych duplikatów z łącznie 1 tys. Mimo że wskaźnik regurgitacji wydawał się być mniejszy niż 0%, uznaliśmy, że konieczne jest obniżenie wskaźnika do XNUMX z powodów wymienionych powyżej.
Kiedy przestudiowaliśmy nasz zbiór danych ze zwróconych obrazów, zauważyliśmy dwa wzorce. Po pierwsze, obrazy były prawie wszystkimi prostymi grafikami wektorowymi, które prawdopodobnie były łatwe do zapamiętania ze względu na niską zawartość informacji. Po drugie, i co ważniejsze, wszystkie obrazy miały wiele prawie duplikatów w zestawie danych treningowych. Na przykład może istnieć grafika wektorowa, która wygląda jak zegar pokazujący godzinę pierwszą — ale wtedy odkrylibyśmy próbkę treningową zawierającą ten sam zegar pokazujący godzinę drugą, potem trzecią itd. Raz zdaliśmy sobie z tego sprawę, użyliśmy rozproszonego wyszukiwania najbliższych sąsiadów, aby sprawdzić, czy rzeczywiście wszystkie zwrócone obrazy miały percepcyjnie podobne duplikaty w zbiorze danych. Inne działa zaobserwowali podobne zjawisko w dużych modelach językowych, stwierdzając, że powielanie danych jest silnie powiązane z zapamiętywaniem.
Powyższe odkrycie sugeruje, że jeśli zdeduplikujemy nasz zbiór danych, możemy rozwiązać problem niedomykalności. Aby to osiągnąć, planowaliśmy użyć sieci neuronowej do zidentyfikowania grup obrazów, które wyglądały podobnie, a następnie usunąć z każdej grupy wszystkie obrazy oprócz jednego.[2] Wymagałoby to jednak sprawdzenia dla każdego obrazu, czy jest on duplikatem każdego innego obrazu w zbiorze danych. Ponieważ cały nasz zbiór danych zawiera setki milionów obrazów, naiwnie musielibyśmy sprawdzić setki biliardów par obrazów, aby znaleźć wszystkie duplikaty. Chociaż jest to technicznie w zasięgu ręki, zwłaszcza w przypadku dużego klastra obliczeniowego, znaleźliśmy znacznie wydajniejszą alternatywę, która działa prawie równie dobrze za niewielki ułamek kosztów.
Zastanów się, co się stanie, jeśli przed wykonaniem deduplikacji zgrupujemy nasz zbiór danych. Ponieważ pobliskie próbki często należą do tego samego klastra, większość zduplikowanych par nie przekroczyłaby granic decyzyjnych klastrów. Moglibyśmy następnie deduplikować próbki w każdym klastrze bez sprawdzania duplikatów poza klastrem, pomijając jedynie niewielką część wszystkich par zduplikowanych. Jest to znacznie szybsze niż podejście naiwne, ponieważ nie musimy już sprawdzać każdej pary obrazów.[3] Kiedy empirycznie przetestowaliśmy to podejście na małym podzbiorze naszych danych, okazało się, że 85% wszystkich zduplikowanych par przy użyciu K = 1024 klastry.
Aby poprawić wskaźnik powodzenia powyższego algorytmu, wykorzystaliśmy jedną kluczową obserwację: kiedy grupujesz różne losowe podzbiory zbioru danych, wynikowe granice decyzji klastra są często zupełnie inne. W związku z tym, jeśli zduplikowana para przekracza granicę klastra dla jednego klastrowania danych, ta sama para może znajdować się w jednym klastrze w innym klastrowaniu. Im więcej grupowania spróbujesz, tym większe prawdopodobieństwo, że odkryjesz daną zduplikowaną parę. W praktyce zdecydowaliśmy się na użycie pięciu klastrów, co oznacza, że szukamy duplikatów każdego obrazu w połączeniu pięciu różnych klastrów. W praktyce znaleziono 97% wszystkich zduplikowanych par w podzbiorze naszych danych.
Co zaskakujące, prawie jedna czwarta naszego zbioru danych została usunięta przez deduplikację. Kiedy przyjrzeliśmy się znalezionym parom, które prawie się powtarzały, wiele z nich zawierało znaczące zmiany. Przypomnij sobie powyższy przykład zegara: zbiór danych może zawierać wiele obrazów tego samego zegara o różnych porach dnia. Chociaż te obrazy prawdopodobnie sprawią, że model zapamięta wygląd tego konkretnego zegara, mogą również pomóc modelowi w nauce rozróżniania pór dnia na zegarze. Biorąc pod uwagę ilość usuniętych danych, obawialiśmy się, że usunięcie takich obrazów może pogorszyć wydajność modelu.
Aby przetestować wpływ deduplikacji na nasze modele, wytrenowaliśmy dwa modele z identycznymi hiperparametrami: jeden na pełnym zestawie danych, a drugi na zdeduplikowanej wersji zestawu danych. Aby porównać modele, wykorzystaliśmy te same oceny na ludziach, których użyliśmy do oceny naszego oryginalnego modelu GLIDE. Co zaskakujące, odkryliśmy, że osoby oceniające ludzi nieznacznie Korzystny model wyszkolony na zdeduplikowanych danych, co sugeruje, że duża liczba nadmiarowych obrazów w zestawie danych w rzeczywistości negatywnie wpływała na wydajność.
Gdy model został wytrenowany na danych deduplikowanych, ponownie przeprowadziliśmy wyszukiwanie regurgitacji, które wcześniej wykonaliśmy, ponad 50 tys. monitów z zestawu danych uczących. Odkryliśmy, że nowy model nigdy nie zwracał obrazu szkoleniowego, gdy otrzymał dokładny monit o obraz z zestawu danych szkoleniowych. Aby pójść o krok dalej w tym teście, przeprowadziliśmy również wyszukiwanie najbliższego sąsiada w całym uczącym zestawie danych dla każdego z 50k wygenerowanych obrazów. W ten sposób pomyśleliśmy, że możemy złapać model, który zwraca inny obraz niż ten, który jest powiązany z daną podpowiedzią. Nawet przy tej dokładniejszej kontroli nigdy nie znaleźliśmy przypadku regurgitacji obrazu.
Następne kroki
Chociaż wszystkie omówione powyżej środki łagodzące stanowią znaczny postęp w realizacji naszego celu, jakim jest zmniejszenie ryzyka związanego z DALL·E 2, każde łagodzenie nadal może ulec poprawie:
- Lepsze filtry przedtreningowe mogą pozwolić nam na trenowanie DALL·E 2 na większej ilości danych i potencjalnie jeszcze bardziej zredukować błąd systematyczny w modelu. Nasze obecne filtry są dostrojone pod kątem niskiego współczynnika chybień kosztem wielu fałszywych alarmów. W rezultacie odfiltrowaliśmy około 5% całego naszego zbioru danych, mimo że większość z tych filtrowanych obrazów w ogóle nie narusza naszej polityki treści. Udoskonalenie naszych filtrów może umożliwić nam odzyskanie niektórych danych treningowych.
- Bias jest wprowadzany i potencjalnie wzmacniany na wielu etapach rozwoju i wdrażania systemu. Ocena i łagodzenie stronniczości w systemach takich jak DALL·E 2 oraz szkody wywoływane przez to stronniczość to ważny problem interdyscyplinarny, który nadal badamy w OpenAI w ramach naszej szerszej misji. Nasza praca w tym zakresie obejmuje tworzenie ocen w celu lepszego zrozumienia problemu, opracowywanie nowych zestawów danych i stosowanie technik, takich jak opinie ludzi i dostrajanie, w celu tworzenia bardziej niezawodnych i reprezentatywnych technologii.
- Bardzo ważne jest również, abyśmy kontynuowali naukę zapamiętywania i uogólniania w systemach głębokiego uczenia się. Chociaż deduplikacja jest dobrym pierwszym krokiem w kierunku zapobiegania zapamiętywaniu, nie mówi nam wszystkiego, co jest potrzebne do dowiedzenia się, dlaczego iw jaki sposób modele takie jak DALL·E 2 zapamiętują dane treningowe.
- 000
- 2019
- a
- O nas
- Konto
- Osiągać
- w poprzek
- aktywny
- adres
- wpływający
- algorytm
- Wszystkie kategorie
- Pozwalać
- pozwala
- już
- alternatywny
- zawsze
- ilość
- Inne
- pojawił się
- stosowany
- Stosowanie
- podejście
- na około
- przydzielony
- powiązany
- publiczność
- bo
- zanim
- jest
- Ulepsz Swój
- pomiędzy
- Poza
- budować
- Budowanie
- możliwości
- podpisy
- walizka
- Etui
- zapasy
- Kategoria
- powodowany
- pewien
- zmiana
- kontrola
- Dodaj
- klasa
- klasyfikacja
- sklasyfikowany
- zegar
- kolekcja
- w porównaniu
- obliczać
- computing
- pojęcie
- Rozważać
- zawiera
- zawartość
- konteksty
- kontynuować
- prawo autorskie
- naruszenie praw autorskich
- Odpowiedni
- mógłby
- Stwórz
- stworzony
- Tworzenie
- istotny
- Aktualny
- Obecnie
- dane
- dzień
- Dni
- decyzja
- głęboko
- Demografia
- Wdrożenie
- opisać
- Mimo
- oprogramowania
- różne
- trudny
- bezpośrednio
- odkryj
- odkryty
- dystans
- dystrybuowane
- 分配
- na dół
- duplikaty
- podczas
- każdy
- efekt
- faktycznie
- skuteczność
- ruchomości
- wydajny
- starania
- zachęcający
- szczególnie
- istotnie
- oszacowanie
- itp
- oceniać
- wszystko
- przykład
- przykłady
- wyłącznie
- Przede wszystkim system został opracowany
- oczekiwać
- spodziewany
- szybciej
- Cecha
- Korzyści
- informacja zwrotna
- Postać
- filtracja
- filtry
- W końcu
- znalezieniu
- i terminów, a
- Fix
- koncentruje
- następujący sposób
- znaleziono
- od
- pełny
- funkcjonować
- dalej
- zebranie
- Płeć
- Ogólne
- ogólnie
- Generować
- wygenerowane
- generacja
- Pokoleń
- generatywny
- cel
- dobry
- GPU
- grafika
- Zarządzanie
- Grupy
- gwarantowane
- garstka
- pomoc
- pomaga
- tutaj
- Wysoki
- W jaki sposób
- Jednak
- HTTPS
- człowiek
- Ludzie
- Setki
- pomysł
- zidentyfikować
- obraz
- zdjęcia
- realizacja
- realizowane
- ważny
- podnieść
- ulepszony
- poprawy
- zawierać
- włączony
- obejmuje
- Włącznie z
- Informacja
- Infrastruktura
- przykład
- Internet
- badać
- problem
- IT
- samo
- Klawisz
- Etykieta
- etykietowanie
- Etykiety
- język
- duży
- większe
- UCZYĆ SIĘ
- dowiedziałem
- nauka
- Regulamin
- Prawdopodobnie
- Popatrz
- wyglądał
- robić
- znak
- Mecz
- wymowny
- znaczy
- zmierzyć
- zmierzenie
- Mężczyzna
- może
- Wojsko
- miliony
- Misja
- model
- modele
- jeszcze
- większość
- mnożenie
- Natura
- niezbędny
- ujemny
- sieć
- numer
- zamówienie
- Zorganizowany
- oryginalny
- Inne
- własność
- część
- szczególny
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- wykonywania
- faza
- sztuk
- planowany
- polityka
- pozytywny
- możliwy
- potencjał
- mocny
- praktyka
- przewidzieć
- przepowiednia
- teraźniejszość
- zapobieganie
- poprzedni
- prywatność
- sonda
- Problem
- wygląda tak
- produkować
- Wytworzony
- protest
- pełnomocnik
- Kwartał
- podnieść
- dosięgnąć
- realizowany
- Przyczyny
- zmniejszyć
- Zredukowany
- redukcja
- odzwierciedlić
- refleksja
- pozostały
- usuwanie
- reprezentować
- reprezentacja
- przedstawiciel
- wywołań
- wymagać
- Wymaga
- odpowiedź
- wynikły
- powrót
- ryzyko
- run
- taki sam
- Skala
- schemat
- Szukaj
- zestaw
- kształty
- Share
- przesunięcie
- znaczący
- podobny
- Prosty
- ponieważ
- pojedynczy
- Rozmiar
- mały
- So
- ROZWIĄZANIA
- kilka
- coś
- Typ przestrzeni
- specjalny
- swoiście
- specyfikacja
- Dzieli
- etapy
- początek
- stwierdził,
- Nadal
- Badanie
- sukces
- system
- systemy
- biorąc
- Techniki
- Technologies
- test
- Połączenia
- w związku z tym
- rzeczy
- całkowicie
- trzy
- próg
- Przez
- czas
- czasy
- narzędzie
- Top
- w kierunku
- Pociąg
- Trening
- zrozumieć
- unia
- wyjątkowy
- us
- posługiwać się
- uprawomocnienie
- różnorodny
- zweryfikować
- wersja
- poszukiwany
- Co
- czy
- Podczas
- w ciągu
- bez
- Kobieta
- Praca
- działa
- zmartwiony
- by
- X