Witam i zapraszam do super ekscytującej części naszego stworzenia, części, w której sprawiamy, że jest inteligentna.
Tak właśnie dzieje się podczas treningu w powietrzu.
Będę trenować jego inteligencję, aby osiągnąć cel, który chcieliśmy osiągnąć.
Aby to zrobić, zamierzamy po prostu wyszkolić sieć neuronową, aby generowała prawidłowe prognozy.
A potem wszystko jest już gotowe, ponieważ te sygnały wyjściowe z mózgu mają już właściwą
transmisję do organizmu, aby odegrać ostatnie działania.
Więc w zasadzie teraz to, co zamierzamy zrobić, jest czymś, co już zrobiliśmy wcześniej.
Po prostu weźmiemy kilka losowych partii z pamięci, uzyskamy dane wejściowe z tych próbek, uzyskamy
dane wyjściowe, uzyskamy cel, uzyskamy prognozy, obliczymy ostatni błąd między przewidywaniami a celem, a
następnie wykonamy propagację wsteczną aby uzyskać spadek gradientu, aby zaktualizować wagi w zależności od tego,
jak bardzo przyczyniły się do tego ostatniego błędu.
Więc zróbmy to wszystko.
Zobaczysz, jak to będzie takie łatwe, ponieważ mamy już wszystkie narzędzia do implementacji.
Nie tylko mamy ścieżkę do narzędzi takich jak optymalizator i funkcje strat, ale także mamy wszystkie
klasy, które stworzyliśmy wcześniej, jak oczywiście nasz mózg, których będziemy używać do uzyskiwania
prognoz.
Następnie nasze doświadczenie, śledzenie kwalifikowalności wdrożenia powtórek i wszystkie te narzędzia połączone z pilotem, które narzędzia
sprawią, że szkolenie będzie super wydajne, a zatem ostatecznie otrzymamy super potężne
A. JA. Zróbmy więc to szkolenie.
Sprawmy, by nasze oczy były inteligentne.
Pierwszą rzeczą, którą teraz zrobimy, jest pobranie ostatniej funkcji, której użyjemy podczas szkolenia
podczas obliczania błędu i zoptymalizowanie jej.
To pierwsza rzecz, którą zrobimy.
Stwórzmy więc zmienną dla ostatniej funkcji.
Nazwiemy to stratą.
A to będzie równe funkcji strat MSE z modułu końcowego.
A potem ten Mercilus.
To ostatnia funkcja, której użyjemy, ponieważ w zasadzie nasze przewidywania są wartościami.
Wiesz, przewidujemy podstawowe wartości różnych działań.
A zatem, ponieważ są to liczby rzeczywiste, cóż, robimy coś w rodzaju sieci neuronowej w celu regresji,
a zatem funkcja straty jest środkiem do błędu.
To jest funkcja straty, której używamy ogólnie do regresji.
W porządku.
Więc teraz, gdy mamy naszą ostatnią funkcję, pobierzmy tutaj nasz optymalizator.
To jest zmienna, którą tworzymy dla niego optymalizator.
I będziemy postępować jak zwykle.
Jeśli chodzi o samojezdny samochód, optymalizator atomów, to bardzo potężny optymalizator, który zdziała cuda podczas
treningu.
Więc przenieśmy ten do tego atomu.
I pamiętajcie, że właśnie to auto jeżdżące musimy wprowadzić dwa zasadnicze argumenty.
Pierwsza to ta, która połączy optymalizator z parametrami naszej sieci neuronowej,
czyli wagami neuronów naszego mózgu.
Aby to zrobić, bierzemy mózg, który nazwaliśmy CNN.
To obiekt, który stworzyliśmy dla naszego mózgu.
A więc CNN, które pamiętają parametry, które idziemy i kilka nawiasów.
To tworzy związek między optymalizatorem a wagą neuronów w mózgu
naszego A. JA. A następnie drugim argumentem jest współczynnik uczenia się, który jest określony przez l. R.
Więc tutaj musimy przyjąć mniejszy współczynnik uczenia się, ponieważ nie chcemy zbieżności zbyt szybko i chcemy mieć trochę
eksploracji, a zatem dobry sposób uczenia się, który możemy tutaj powiedzieć, jest mały, który ma cztery
punkty lub taki, który wynosi 0. 01 proc.
Myślę, że tego samego używaliśmy w przypadku samochodu autonomicznego.
W porządku, więc mamy teraz optymalizator utraconych funkcji, więc jesteśmy prawie gotowi do rozpoczęcia pełnej pętli.
Cóż, właściwie zaczniemy teraz pełną pętlę.
Ale tuż przed tym, zanim to zrobimy, zdecydujemy o liczbie epok, w które
będziemy się przekształcać, i stworzymy tutaj nową zmienną, która będzie odpowiadać tej liczbie epok.
Ustawmy to na sto.
To wystarczy, aby wytrenować powietrze, a nawet założę się, że powietrze zdoła dotrzeć na najlepszą drogę
przed setką, na przykład dwadzieścia lub trzydzieści.
Zobaczmy.
Ale na razie weźmy sto.
A jeśli tego będziemy potrzebować, zwiększymy go.
Ale nie sądzę, żeby to było konieczne.
OK, więc teraz, gdy mamy naszą liczbę lotnisk, możemy zacząć robić pełną pętlę,
wiesz, tę główną pełną pętlę treningu, kiedy trenujemy nad lotniskami.
Więc wtedy cała siatkówka będzie w pracy.
Właśnie to wybieramy z powrotem.
Teraz oczywiście użyjemy funkcji zakresu, aby powiedzieć, że chcemy przejść od pierwszej
do liczby ok.
Plus jeden, ponieważ pamiętaj, że górna granica zakresu nie jest uwzględniana, a zatem,
jeśli chcesz podnieść do 100, cóż, musimy określić i być dodatnim, aby wzrosnąć do 100.
W porządku.
Więc, Colin.
A teraz przejdźmy do pętli.
W porządku.
Więc pierwszą rzeczą, którą zamierzamy zrobić, jest wykonanie 200 przebiegów po dziesięć kroków.
Tak więc każda epoka będzie trwała 200 biegów, jeden po drugim po 10 kroków.
Aby to zrobić, mamy tę jednoetapową funkcję z naszej klasy doświadczenia i dlatego używamy tej
funkcji, która jest w rzeczywistości metodą, ponieważ otrzymamy ją z naszego obiektu
pamięci, który jest obiektem z klasy zastępczej, aby wygenerować te dwa przebiegi dziesięciu kroków.
Cóż, musimy wziąć nasz obiekt pamięci, który przypominam, że stworzyliśmy tutaj.
Pamięć jest celem odtworzenia klasy pamięci z Insteps.
To jest 10 kroków i pojemność dziesięciu tysięcy.
Stworzyliśmy ten obiekt i z tego obiektu bierzemy dobrze, ta funkcja Rundstedt wykonuje kroki i
określamy dwieście kolejnych rund po dziesięć kroków, abyśmy po prostu wykonali 200 kroków.
A teraz, gdy mamy te 200 kroków uruchomionych w każdym apoc, cóż, czas na pobranie próbek z
tych serii i pobranie próbek.
Mamy inną funkcję z naszej pamięci, która jest próbką, która dokładnie wygeneruje kilka partii
z tych 200 uruchomień.
Ale pamiętaj, te partie są tym razem partiami serii przejść, które stanowią serię dziesięciu kroków, w przeciwieństwie
do wcześniejszych, gdzie partie były tylko partiami pojedynczych przejść tutaj.
Tym razem będą to partie dziesięciu kroków, dziesięciu przejść, a zatem teraz nadszedł czas,
aby wydobyć z naszej pamięci te losowe partie i je pobrać.
Skorzystaliśmy z prostej funkcji wsadowej, do której musimy zastosować wielkość partii, i do wielkości partii, gdzie możemy
wziąć trzydzieści dwie lub nawet sześćdziesiąt cztery lub nawet sto dwadzieścia osiem.
Pamiętaj, że przy tym rozmiarze często używa się trzydziestu dwóch.
To właśnie zobaczysz ogólnie w architekturach sieci neuronowych podczas uczenia wsadowego.
Ale tym razem jest zupełnie inaczej.
My, pobieramy tylko kilka partii po 10 kroków, więc lepiej jest wziąć partie o większych rozmiarach.
Tak więc możemy wziąć sześćdziesiąt cztery, sto dwadzieścia osiem.
Więc weźmiemy sto dwadzieścia osiem.
I faktycznie będzie to wewnątrz pętli, ponieważ chcemy wziąć kilka partii i bierzemy je w tym, co
jest zwracane przez tę prostą funkcję wsadową.
Więc ta pełna pętla dla partii w pamięci próbki, sto dwadzieścia osiem, oznacza, że co
sto dwadzieścia osiem kroków, cóż, nasza pamięć da nam partię rozmiaru, sto dwadzieścia
osiem, która będzie zawierać ostatnią sto dwadzieścia osiem kroków, które właśnie pokonaliśmy.
Otrzymujemy tylko sześć, sto dwadzieścia osiem partii i uczenie się będzie odbywać się na
tych partiach.
Poza tym w tych partiach będziemy mieć uruchomione tacki kwalifikacyjne, aby uczyć się co 10
kroków.
W porządku.
Więc teraz w tej pętli, która wciąż dzieje się w jednej epoce, ale teraz jesteśmy w określonej
partii.
Więc teraz pierwszą rzeczą, którą zamierzamy zrobić, jest oddzielne uzyskanie naszych danych wejściowych i celu.
A to, jak ci powiedziałem, jest bardzo łatwe.
Możemy to zrobić za pomocą jednego z wdrożonych przez nas narzędzi, jakim jest śledzenie uprawnień.
Jak widać tutaj, ta funkcja śledzenia uprawnień przyjmuje jako dane wejściowe, a teraz mamy partię i
zwroty jako dane wyjściowe, dane wejściowe i cele.
Teraz możemy po prostu stworzyć dwie nowe zmienne, które będą wejściami i
celem.
I czy te dane wejściowe dochodzą do celów, równa się dokładnie temu, co zwraca tę funkcję śledzenia kwalifikowalności stosowaną do
partii.
Więc zastosujemy tę funkcję do wsadu naszej pętli.
Więc to, co zrobimy, to tylko kwalifikowalność.
Ślad zastosowany do partii naszej nadziei.
W porządku, więc to daje nam dane wejściowe i cele, ale w przypadku ciosów zawsze jest coś więcej, co
musimy zrobić.
I oczywiście ma to na celu konwersję danych wejściowych sieci neuronowej, a także celu, na pewne zmienne
tahj.
Ale nie ma też nic nowego.
Wiemy, jak to zrobić.
Możemy to zrobić w ten sposób.
Bierzemy nasze dane wejściowe, potem nasze cele i cóż, będą one równe słowom.
Wejścia.
To na wejście i werbalne.
Cele, a to dla celów.
W porządku, więc dane wejściowe mózgu są zamieniane na pewne zmienne tahj, a cele również są przekształcane w
niektóre zmienne tahj.
Więc teraz możemy uzyskać dane wejściowe do sieci neuronowej.
I dlaczego musimy to zrobić?
Ponieważ następnym krokiem jest uzyskanie prognoz, mamy dane wejściowe, które musimy namierzyć.
Teraz oczywiście potrzebujemy naszych przewidywań, ponieważ wtedy obliczymy stratę między
przewidywaniami a celami.
Więc pobierzmy te prognozy, aby je uzyskać.
Cóż, znowu, to takie proste.
Teraz musimy tylko wziąć nasz mózg, którym jest CNN, nasza konwolucyjna sieć neuronowa, i zastosować go
do naszych danych wejściowych.
No to jedziemy.
Dane wejściowe trafiają do sieci neuronowej, a sieć neuronowa generuje prognozy.
Idealnie, więc teraz mamy prognozy, mamy cele, abyśmy mogli uzyskać prawa i to
jest następny krok, wprowadzimy nowy, więcej, ponieważ teraz otrzymamy ostatni błąd, który jest inny
niż ostatnia funkcja, ponieważ używamy jej jako funkcji do uzyskania ostatniego błędu.
Tak więc mniej błędów tutaj i otrzymamy go z mniejszą liczbą funkcji zastosowanych do naszych prognoz, a cele, do których
idziemy, zobaczą, jak wszystko jest teraz gładkie.
Wszystko jest logiczne.
Najpierw otrzymujemy dane wejściowe, cele, a następnie dzięki danym wejściowym otrzymujemy prognozy.
A potem dzięki przewidywaniom i otrzymanym celom mniej błędów.
Tak bardzo logiczne i płynne, a teraz jaki jest następny krok?
Cóż, ta sama ścieżka logiczna teraz, gdy mamy ostatnią, możemy z powrotem propagować ten mniejszy błąd z powrotem
do nowej sieci, aby zaktualizować wagi.
Robimy to ze stochastycznym zejściem w gradiencie i aby wykonać stochastyczne zejście w gradiencie.
Potrzebujemy naszego optymalizatora, ale już go mamy.
Oto Adam Optimizer.
Ale teraz w tym miejscu pamiętaj, co musimy zrobić.
Musimy go zainicjalizować i zainicjować.
Pamiętaj, bierzemy nasz obiekt optymalizatora, a następnie stosujemy metodę zerowego gradientu.
Idziemy, nie zapominamy o nawiasach, które go inicjalizują, a teraz następnym krokiem jest cofnięcie propagacji
ostatniego błędu z powrotem do nowej sieci i zrobienie tego, w którym bierzemy nasz ostatni błąd
i stosujemy na nim metodę wsteczną.
Więc to jest dokładnie w celu zastosowania propagacji wstecznej.
I wreszcie, teraz, gdy ostatni błąd powrócił, przenieś go do nowej sieci.
Cóż, możemy zaktualizować wagi za pomocą gradientu Cassiego.
Aby to zrobić, pamiętaj, bierzemy nasz optymalizator, a następnie stosujemy metodę krokową.
No to jedziemy.
Wagi są teraz zaktualizowane.
Jak już mówiłem, nie tylko już to zrobiliśmy, ale teraz wydaje się to takie proste i naturalne.
Więc teraz zrobimy coś fajnego.
Zamierzamy wydrukować średnią nagrodę na każdy apoc.
Więc wiesz, możemy śledzić, jak A. JA. idzie, jak idzie szkolenie.
Chcemy zobaczyć, jak średnia nagroda rośnie wraz z krokami, ponad pudełkiem.
Na początku jest oczywiście faza eksploracji.
Więc średnia nagroda może nie wzrosnąć na początku, ale potem, gdy osiągnie fazę eksploatacji,
zobaczymy, że średnia nagroda zdecydowanie wzrośnie i wzrośnie do pewnego poziomu, czyli wtedy, gdy dotrze na
zachód tak szybko, jak możliwy.
Zacznijmy więc od druku.
Wiesz, robimy to w jednym, więc musimy wrócić do bardziej zapętlonego wydruku,
a potem wypisujemy dobrze, najpierw około kolumny, potem procent.
S, ponieważ zamierzamy przekształcić wszystko w ciąg, który jest lepszy, a następnie
dodamy średnią nagrodę.
Następnie dodajemy również procent, a następnie zamykamy wycenę.
A potem dodajemy procent, a po drugiej stronie, wiesz, wprowadzamy zmienne, które będą pierwszą
osobą, ponieważ jest to epicka tutaj i druga zmienna odpowiadająca średniej nagrodzie, która zostanie
obliczona teraz.
Więc średnia zmienna nagrody jeszcze nie istnieje.
Stworzymy go teraz.
Więc zamierzamy używać ETR w pracy.
Nawet jeśli Époque jest liczbą, zamienimy ją na ciąg.
Tak jest lepiej i.
Dodamy, Estie, czy to będzie średnia nagroda, więc utworzymy
zmienną, którą nazwiemy dużą nagrodą, a teraz utworzymy tę zmienną i obliczymy ją ?
OK, więc zróbmy to.
To jedyna rzecz, którą musimy zrobić.
Tak więc Époque już mamy.
Teraz obliczmy średni świat i musimy obliczyć go tutaj.
Wciąż w pętli, ale poza pętlą, ponieważ teraz mamy próbkowanie partii i nasze szkolenie odbywa się
w serii.
Ale teraz propagacja do przodu plus propagacja do tyłu jest wykonywana w partii.
Więc wracamy do pętli i możemy teraz obliczyć skumulowane nagrody, które możemy zrobić z naszym
obiektem insteps.
Ponieważ nasz obiekt insteps zawiera tę funkcję, moglibyśmy wykonać kroki, które pozwolą nam uzyskać skumulowane nagrody, które mają
miejsce w tych krokach, wiesz, podczas wykonywania kroków.
Więc zamierzamy go teraz użyć, aby zaktualizować nowe nagrody za kroki.
Następnie zaktualizujemy obiekt średniej ruchomej, dodając skumulowane nagrody do poruszającego się obiektu codziennego użytku, a
następnie ponownie obliczymy średnią.
W ten sposób otrzymamy średnią nagrodę.
Więc zróbmy to.
Pierwszą rzeczą, której potrzebujemy, są dane dotyczące nagród DARABA.
Nazwijmy je więc nagrodami.
Kroki, a następnie, jak powiedzieliśmy, bierzemy nasz obiekt kroków końcowych, który, przypominam, został tutaj stworzony jako obiekt klasy
natychmiastowego postępu z naszego doświadczenia, który zrażamy tak wrażliwym podmiotem.
Następnie dodajemy nagrody, kroki i kilka nawiasów.
W porządku.
To zapewni nam nowe skumulowane nagrody za kroki.
W porządku.
Ale potem musimy dodać te nowe skumulowane nagrody do naszych ruchomych średnich obiektów.
Aby to zrobić, tym razem mamy metodę w klasie średniej ruchomej, która jest bardzo prostą metodą
reklam.
Bierzemy naszą średnią ruchomą obiekt, który stworzyliśmy tutaj w stu krokach.
Następnie użyjemy naszej metody ADD, a następnie w atmosferze wprowadzimy nasze kroki nagrody, a to doda
nagrody za kroki do średniej ruchomej.
W porządku.
Wreszcie możemy obliczyć średnią nagrodę i dobrze, wiesz, to jest ta sama zmienna.
Więc to będzie równe średniej nagrodzie.
Aby to uzyskać, musimy tym razem użyć metody średniej z naszego obiektu średniej ruchomej.
I to jest robimy i średnia kropkowa tak po prostu, ponieważ nasza średnia ruchoma została już zaktualizowana o nowe
kroki nagród, które właśnie dodaliśmy do metody ADD.
Wspaniały.
Więc teraz mamy naszą średnią nagrodę, więc to jest naprawdę popularne i to będzie drukowane każdego roku.
W porządku, więc skończyliśmy.
Tak więc nie mogę się doczekać wyników.
I faktycznie, w następnym samouczku będę miał dla Ciebie niespodziankę, oglądając wyniki.
Więc to będzie całkiem ekscytujące.
Więc teraz chyba pora pobawić się powietrzem i dobrze się bawić.
W porządku.
Dlatego przygotuj sobie dobrą kawę lub dobrą herbatę.
Teraz nadszedł czas, aby usiąść wygodnie w naszym fotelu i obejrzeć kilka bardzo fajnych filmów o naszym samolocie, aby zobaczyć, o czym
mowa w następnym samouczku.
I do tego czasu baw się dobrze.