• We wcześniejszych wykładach zbadaliśmy najprostszą sieć neuronową z w pełni połączonymi warstwami liniowymi. W tym wykładzie skupimy się na tweakowaniu pierwszej i ostatniej warstwy, a w kolejnych tygodniach na tweakowaniu środkowej części sieci neuronowej.
  • Przegląd notatnika Road to Top część 2 i gratulacje dla studentów fastai, którzy pokonali Jeremy’ego na 1. i 2. miejscu.
  • Jakie są korzyści z używania większych modeli? Jakie są problemy z większymi modelami? (zużycie pamięci GPU, ponieważ GPU nie jest tak sprytny jak CPU, aby znaleźć sposoby na uwolnienie się; więc duży model wymaga bardzo drogiego GPU) Co możemy zrobić, gdy GPU zabraknie pamięci? najpierw, aby ponownie uruchomić notebook; następnie Jeremy ma zamiar pokazać nam sztuczkę, która pozwoli nam trenować bardzo duże modele na Kaggle, Wow!
  • Jak duży jest procesor graficzny Kaggle? Czy czasami trzeba uruchamiać notebooki na Kaggle, na przykład w konkursach kodu? Dlaczego używanie notebooka Kaggle do wygrywania w rankingach jest dobre i uczciwe?
  • W jaki sposób Jeremy użył procesora graficznego 24G, aby dowiedzieć się, co może zrobić procesor graficzny 16G? W jaki sposób Jeremy dowiedział się, ile pamięci GPU wykorzysta dany model? W jaki sposób Jeremy wybrał najmniejszą podgrupę obrazów jako zestaw treningowy? Czy dłuższe trenowanie modelu zajmie więcej pamięci? (Nie) Tak więc, najmniejszy zestaw treningowy + 1 epokowy trening może szybko powiedzieć nam, ile pamięci potrzebuje model.
  • Następnie Jeremy wytrenował różne modele, aby sprawdzić, ile pamięci zużywają. Ile pamięci zajmuje model convnext-small? Której linii kodu używa Jeremy, aby dowiedzieć się, ile pamięci GPU zajmuje model? Których dwóch linii kodu używa Jeremy, aby zwolnić niepotrzebnie zajętą pamięć GPU, tak aby nie trzeba było ponownie uruchamiać jądra w celu uruchomienia następnego modelu?

gc

  • Co zrobić, jeśli model powoduje awarię cuda z powodu braku pamięci? Co to jest GradientAccumulation? Co to jest dzielenie liczb całkowitych? (//).

gradientaccumulation

  • Jaki jest problem z używaniem mniejszego rozmiaru partii? (mniejszy rozmiar partii, większa zmienność współczynnika uczenia i wag) Jak możemy sprawić, aby model trenował w mniejszym rozmiarze partii, tak jakby był w dużym rozmiarze partii? Jak wyjaśnić metodę GradientAccumulation w kodzie?

training-loop-without-gradientaccumulation

gradientaccumulation-explained

  • Jakie są konsekwencje korzystania z GradientAccumulation? Jak duża jest różnica w wyniku liczbowym między użyciem GradientAccumulation a nie? Jaka jest główna przyczyna tej różnicy?
  • Więcej pytań: w powyższym kodzie powinno być count >= 64 podczas wykonywania GradientAccumulation; lr_find używa rozmiaru partii z DataLoadera;
  • Dlaczego po prostu nie użyć mniejszego rozmiaru partii zamiast GradientAccumulation? Jaka jest praktyczna zasada wybierania wielkości partii? Jak dostosować szybkość uczenia się do wielkości partii?
  • W jaki sposób Jeremy użył GradientAccumulation, aby dowiedzieć się, ile accum jest potrzebne do uruchomienia tych dużych modeli na 16G GPU Kaggle? (accum=1 zawsze zabraknie pamięci, ale accum=2 działa dla wszystkich dużych modeli).

gradientaccumulation-large-models

Tworzenie ensemble

  • W jaki sposób Jeremy połączył wszystkie modele i ich ustawienia w celu późniejszego eksperymentowania? Czy na razie musimy używać rozmiaru specyfikacji modelu, a co z przyszłością?

models-testing

training-set-images

  • Jak uruchomić wszystkie modele ze specyfikacjami bez wyczerpania pamięci?

run-all-models-without-out-memory

  • Dlaczego Jeremy nie używa tutaj seed=42 w treningu? Jaki jest tego efekt?
  • Czym jest ensemble lub bagging różnych dobrych architektur głębokiego uczenia? Dlaczego jest to przydatne?
  • Jak stworzyć zespół różnych modeli głębokiego uczenia?

ensemble1

ensemble2

ensemble3

ensemble4

  • Dlaczego powinniśmy codziennie ulepszać i zgłaszać się do Kaggle? W jaki sposób historia zgłoszeń może pomóc w śledzeniu rozwoju i ulepszania modeli?
  • Więcej pytań: Co to jest k-krotna walidacja krzyżowa i jak można ją zastosować w tym przypadku? Dlaczego Jeremy jej nie używa?
  • Czy są jakieś wady GradientAccumulation? Jakieś rekomendacje dotyczące GPU?
  • W części 2 Jeremy może omówić, jak trenować mniejszy model, aby radził sobie dobrze, jak w dużych modelach, aby szybciej wnioskować

Multi-target model

  • Jak ustawić podział danych oraz transformacje pozycji i partii?

datablock-2-labels

  • Jak utworzyć model do przewidywania zarówno chorób, jak i odmian? Czy możemy zobaczyć przewidywanie zarówno choroby, jak i odmiany w kategoriach przewidywania 20 rzeczy, 10 dla choroby, 10 dla odmiany?
  • Czego potrzebuje teraz nowy model (i nowi dostawcy danych), aby przewidywać choroby?

new-disease-error-rate-loss

new-model

  • Kiedy i jak zapewnić własną funkcję straty? fastai może wykryć odpowiednią stratę dla twoich modeli danych i użyć jej domyślnie w prostych przypadkach. W tym szczególnym przypadku, w jaki sposób możemy utworzyć i użyć naszej niestandardowej straty dla nowego modelu?

Entropia krzyżowa i softmax

  • Co dokładnie robi F.cross_entropy? Ta funkcja należy do pierwszej i ostatniej warstwy, dlatego musimy je zrozumieć. Jaki jest surowy wynik modelu przewidywania 5 rzeczy?

softmax1

  • Jaka jest formuła softmax i jak ją obliczyć w arkuszu kalkulacyjnym?

softmax-calculated

  • Na czym polega problem softmax? Jak to się dzieje, że podając obraz kota do klasyfikatora niedźwiedzi, softmax dokonuje oczywistej błędnej prognozy?
  • Co możemy zrobić z powyższym problemem softmax? (wszystkie prawdopodobieństwa predykcji nie sumują się do 1). Kiedy używać softmax, a kiedy nie?
  • Jaka jest pierwsza część wzoru na stratę cross_entropy?

part1-crossentropy

  • Jak obliczyć entropię krzyżową z softmax?

calc-cross-entropy

  • Jak obliczyć binarną entropię krzyżową? Jak zrozumieć jego formułę w przewidywaniu, czy jest to obraz kota, czy nie? Jak ostatecznie uzyskać stratę binarnej entropii krzyżowej dla partii 5 obrazów?

binary-cross-entropy-calc

  • Jakie są dwie wersje entropii krzyżowej w pytorch i kiedy używać każdej z nich? Której wersji używamy tutaj?

cross-entropy-v1

cross-entropy-v2

Aktywacje wielu celów

  • Ponieważ dataloader ma dwa cele, nasz nowy model musi zostać poinformowany, jaka dokładnie jest funkcja straty, metryka i rozmiar danych wyjściowych?

model-specifications

  • Jak utworzyć model uczący się do przewidywania dwóch celów lub 20 elementów? W jaki sposób uczący się wykorzystuje straty związane z chorobami i odmianami, aby wiedzieć, które 10 elementów to prognozy dotyczące chorób, a które 10 to prognozy dotyczące odmian? Jak połączyć ze sobą dwie funkcje strat? Jak zrozumieć połączoną stratę?

model-output-20

loss-disease

loss-variety

combine-loss

  • Jak obliczyć poziom błędu dla typów chorób i odmian? Jak je połączyć i wyświetlić podczas treningu?

metrics-all-together

  • Jak stworzyć nowy model uczący się i jak przebiegało jego szkolenie? Dlaczego model wielozadaniowy nie poprawił się, a nawet był nieco gorszy od poprzedniego modelu? Dlaczego dłuższe trenowanie modelu wielozadaniowego może poprawić dokładność przewidywania chorób? Dlaczego przewidywanie drugiej rzeczy razem może pomóc poprawić przewidywanie pierwszej rzeczy? Korzystanie z modelu wielozadaniowego poprawiło wynik w konkursie Kaggle dotyczącym przewidywania ryb, który Jeremy przeprowadził wcześniej. Jakie są powody lub korzyści z tworzenia modeli wielozadaniowych?

train-combined-loss-metrics-all

result-little-worse

Jak sprawić, by modelowanie wielozadaniowe było mniej mylące? (build a multi-task for Titanic dataset from scratch; explore and experiment this notebook) by Chris Said of binary-cross-entropy?

Collaborative filtering

  • Głębokie nurkowanie w filtrowaniu kolaboratywnym jako rozdział 8 bez zmian. Jaki jest używany zbiór danych? Której wersji danych używamy? Jak odczytać plik tsv za pomocą pand? Jak odczytać/zrozumieć zawartość/kolumny zbioru danych? Branża systemów rekomendacji i Radek. Jak Jeremy woli widzieć dane? (Dlaczego obraz, na którym Jeremy mówi o swoim preferowanym sposobie wyświetlania danych, ma tak mało pustych lub brakujących danych?

zbiór danych

read-tsv

Jeremy-see-this-way

  • Jak uzupełnić brakujące dane lub luki w zestawieniu tabelarycznym? Jak dowiedzieć się, czy nowemu użytkownikowi spodoba się konkretny film, którego wcześniej nie oglądał? Czy możemy dowiedzieć się, jakiego rodzaju/gatunku jest konkretny film, o którym tutaj mówimy? Jak wygląda prawdopodobieństwo typu filmu? Jak wygląda prawdopodobieństwo preferencji użytkownika? Jeśli dopasujemy te dwa zestawy prawdopodobieństw, czy możemy wiedzieć, jak bardzo użytkownik lubi film? Jak to obliczyć?

types-movie

user-preference-sum

lower-value

  • Jak dotąd dobrze, jaki jest problem z podejściem polegającym na wykonaniu iloczynu kropkowego między prawdopodobieństwami preferencji użytkownika i prawdopodobieństwami typu filmu w celu ustalenia oceny filmu przez naszego nowego użytkownika (nie znamy żadnego z prawdopodobieństw)? Jak poradzimy sobie z tym problemem? Czy możemy stworzyć takie prawdopodobieństwo typu filmu, nie znając nawet typów?
  • Czym są czynniki ukryte? Jeśli nie wiem nic o filmach, czy możemy użyć SGD (stochastic gradient descent), aby je znaleźć? Czy możemy utworzyć losowe 5 liczb jako 5 ukrytych czynników filmu, aby opisać typy filmu i dowiedzieć się ich później? Czy możemy również utworzyć ukryte czynniki dla każdego użytkownika? Jak obliczyć prawdopodobieństwo, że użytkownik polubi film? (suma lub iloczyn kropkowy między dwiema grupami ukrytych czynników).

latent-factors-movie

latent-factor-for-all-movies

latent-factors-user

matrix-multiply-dot-product

  • Teraz iloczyn macierzy i kropek może dać nam przewidywania dotyczące tego, jak bardzo użytkownik lubi film, więc możemy porównać przewidywania z prawdziwą etykietą. Co zrobić, gdy brakuje etykiety lub danych? (czynimy prognozę pustą lub zerową). Czy możemy użyć SGD, aby poprawić ukryte czynniki, porównując przewidywania z etykietami za pomocą funkcji straty? Jak użyć solvera Excela do aktualizacji czynników ukrytych przy użyciu SGD i straty?

missing-data-empty

make-missing-zero

the-loss-pred-label

excel-solver

Dlaczego excel tak wolno oblicza gradienty nawet przy małych zbiorach danych? Na czym opiera się filtrowanie kolaboracyjne? (jeśli wiemy, że A lubi (a, b, c), a B lubi (a, b, c), to jeśli A lubi (d, e), to może B też lubi (d, e)). - Czy cosinus kąta między dwoma wektorami jest tym samym, co iloczyn skalarny? - Jak zrobić powyższe rzeczy w pytorch, ponieważ mają one inny format danych niż excel? Jak wygląda zestaw danych w pytorch?

collab-dataset-pytorch

Embeddings

  • Co to jest osadzanie? Co to jest macierz osadzania, osadzanie użytkowników i osadzanie filmów? (embeddings = wyszukiwanie czegoś w tablicy). Im bardziej onieśmielające słowa są tworzone w polu, tym mniej onieśmielające jest to pole.

embeddings

  • Jak wygląda nasz zbiór danych przed utworzeniem na nim dataloadera? Jak utworzyć dataloaders do filtrowania kolaboracyjnego przy użyciu CollabDataloaders.from_df? Jak wygląda jego show_batch? Jak utworzyć czynniki ukryte użytkownika i filmu?

dataset-movie-dataloader

build-dataloader-cf

cf-show-batch

create-latent-factors

  • Jak wybrać liczbę ukrytych czynników w fastai?
  • Jak zrozumieć, że szukanie w Excelu ukrytych czynników i robienie iloczynu kropkowego z osadzeniami one-hot to w rzeczywistości to samo? Czy możemy myśleć o zagnieżdżeniach jako o obliczeniowym skrócie do pomnożenia czegoś przez wektor zakodowany jednym rzutem? Czy możemy myśleć o osadzaniu jako o sztuczce matematycznej kucharza polegającej na przyspieszeniu mnożenia macierzy za pomocą zmiennych fikcyjnych (bez tworzenia zmiennych fikcyjnych ani wektora zakodowanego na jeden strzał)?

look-up-dot-product

one-hot-encoding-look-up

mmultiplication

Programowanie obiektowe

  • Jak zbudować model filtrowania kolaboracyjnego od podstaw? Jak utworzyć klasę (skoro model jest klasą)? Jak zainicjować obiekt klasy przez __init__? Czy __init__ mówi nam, jakie parametry należy podać, aby utworzyć instancję klasy? Jak działa funkcja klasy say? Czym jest superklasa? Gdzie ją umieszczamy podczas tworzenia klasy? Co ona nam daje? Jaka jest nadklasa (moduł), której pytorch i fastai używają podczas tworzenia klasy? Jak wygląda klasa DotProduct?

learn-create-class

class-example

super-class

Dot-product-class

  • Jak rozumieć funkcję forward w klasie DotProduct? Co oznacza .sum(dim=1) (suma każdego wiersza)?

forward-understanding

Improving collaborative filtering

  • Jak utworzyć kolaboracyjnego ucznia i rozpocząć szkolenie? Trening jest bardzo szybki nawet na CPU.

one-batch-look-like

collab-learner

  • Dlaczego powyższy model współpracy nie jest świetny? (ludzie, którzy wystawiają oceny, to ludzie, którzy kochają filmy, nie rzadko dają 1, ale wiele wysokich ocen. Podczas gdy przewidywania mają wiele okazji z ocenami powyżej 5). Przejrzyj użycie sigmoidy. Jak możemy wykonać transformację sigmoidalną do prognoz? Jak działa ta sigmoida? Dlaczego używamy górnej granicy zakresu 5.5 zamiast 5? Czy dodanie sigmoidy zawsze poprawia wynik?

sigmoid-transform

  • Jakie interesujące rzeczy zaobserwował Jeremy na podstawie zbioru danych? (niektórzy użytkownicy lubią wystawiać wysokie oceny wszystkim filmom, inni mają tendencję do nielubienia wszystkich filmów). Czy możemy dodać jedną wartość stronniczości do ukrytych czynników użytkownika i filmu, aby wyjaśnić tę interesującą obserwację? Jak używać czynników bias w modelu collab?

user-tendency

bias-factor

adding-biases-to-prediction

  • Dlaczego ulepszony model z biasem pogorszył się? (nadmierne dopasowanie).

overfitting-collab

Weight decay

  • Czym jest weight decay i w jaki sposób pomaga? Jak rozumieć rozkład wagi w rozwiązywaniu problemu nadmiernego dopasowania?

weight-decay

  • Jak właściwie używać weight decay w kodzie fastai? Czy fastai ma dobre ustawienia domyślne dla filtrowania kolaboracyjnego, takiego jak CV? W jaki sposób Jeremy sugeruje znalezienie odpowiedniej wartości wd dla własnego zbioru danych?

weight-decay2

weight-decay3

  • Co to jest regularyzacja? Co jest nie tak, gdy wagi mają wysokie lub niskie wartości? W jaki sposób rozkład wag pomaga zrównoważyć wyniki?
  • Więcej pytań: czy istnieją inne zasady poza regułą kciuka Jeremy’ego dotyczącą liczby ukrytych czynników, a rekomendacja na podstawie średniej oceny jest opłacalna tylko wtedy, gdy istnieje wiele metadanych.