WEBVTT

00:00.300 --> 00:02.000
Cześć i witamy w tym samouczku.

00:02.160 --> 00:05.090
Gratuluję jeszcze raz za to, że z tym skończyłem.

00:05.150 --> 00:08.200
Widzimy, że zrobiliśmy to, że stworzyliśmy mózgi, a my je szkoliliśmy.

00:08.400 --> 00:15.600
Ale teraz musimy stworzyć agenta testowego, który w ogóle nie będzie jutro, ale po

00:15.780 --> 00:19.430
prostu użyje modelu akcji do własnych poszukiwań.

00:19.530 --> 00:26.080
I oczywiście w tym kodzie nagrywamy kilka filmów, a oni będą agentami testowymi

00:26.090 --> 00:28.750
wideo z pewnym wynikiem.

00:28.810 --> 00:30.840
Przejdźmy więc przez ten kod.

00:30.850 --> 00:35.860
Najważniejsze jest to, ponieważ powiedziałem, że nie będziemy kodować linii po linii, ale myślę, że

00:35.860 --> 00:38.580
ważne jest, abyście zrozumieli, co się tutaj dzieje.

00:38.800 --> 00:42.680
Tak więc, jak zauważyłeś, idziemy z tym kodem w pierwszej sekcji.

00:42.790 --> 00:49.480
Importujemy biblioteki, a następnie znaleźliśmy tę funkcję testową, która sprawi, że ten agent testowy wykona własną eksplorację

00:49.480 --> 00:52.390
i zagra w grę typu breakout.

00:52.600 --> 00:58.610
Tak więc ta funkcja testowa pobiera trzy argumenty, pierwszą jest ranking, który wciąż ma zsynchronizować testowanego

00:58.850 --> 01:02.060
agenta, tak jak zrobiliśmy to dla agentów szkoleniowych.

01:02.230 --> 01:05.380
Mamy oczywiście nasze parametry, ponieważ potrzebujesz ich.

01:05.380 --> 01:12.220
I oczywiście mamy model współdzielony, ponieważ ten agent testowy użyje wspólnego modelu do

01:12.220 --> 01:13.360
własnych poszukiwań.

01:13.360 --> 01:18.790
W porządku, wchodzimy do funkcji i ten wiersz kodu synchronizujemy z agentem testowym.

01:18.820 --> 01:23.120
Dokładnie tak jak wcześniej, importujemy środowisko.

01:23.170 --> 01:27.070
Przypominam więc, że w głównym kodzie, który będzie w następnym samouczku.

01:27.250 --> 01:33.970
Cóż, a nazwa tutaj zostanie zastąpiona przerwą zerową, abyśmy mogli przejść do środowiska zerowego zerowego i

01:34.060 --> 01:40.180
zagrać w grę oraz Trumans Czerwonego Krzyża, którzy otrzymają filmy z naszego wieczornego wyjścia.

01:40.180 --> 01:46.680
Więc w sumie ta linia kodu w sumie oznacza, że uruchamiamy jedno środowisko z wideo.

01:47.080 --> 01:54.520
Następnie w następnym wierszu kodu synchronizujemy to środowisko, tak dokładnie z tą samą zasadą, co funkcja Trend.

01:54.700 --> 02:02.170
Następnie dostajemy nasz model i w tym celu tworzymy obiekt klasy aktywności i umieszczamy kształt wejściowy za

02:02.170 --> 02:08.920
pomocą naszej przestrzeni obserwacji środowiska, a zera kształtu są dokładnie takie same jak funkcja pociągu

02:09.190 --> 02:13.690
i nasze wyniki, które są działaniami z przestrzenią działania.

02:13.900 --> 02:19.770
Tak dokładnie jak wcześniej, coś nowego tutaj, odkąd skończyliśmy szkolenie.

02:19.870 --> 02:25.450
Nie chcemy wprowadzać modelu w tryb pociągu, ponieważ po prostu nie chcemy go ćwiczyć,

02:25.450 --> 02:26.880
chcemy go rozwijać.

02:27.160 --> 02:29.740
I to właśnie robimy tutaj z modelem, który ewoluował.

02:29.890 --> 02:36.940
Jest to po prostu ustawienie agenta testowego w trybie, który w zasadzie przetestuje

02:37.030 --> 02:38.350
testowaną wydajność.

02:38.720 --> 02:45.680
W tym momencie otrzymujemy stany wejściowe, które są wejściowymi obrazami z gry, które w tym momencie stanowią

02:45.680 --> 02:46.790
cały wyścig.

02:46.840 --> 02:49.360
Potem przekształcamy ich w tancerzy pochodni.

02:49.480 --> 02:52.810
Tutaj zainicjujemy niektóre z tych słów.

02:52.840 --> 02:54.980
Inicjujemy do wersji true.

02:55.200 --> 03:03.430
Tak więc wciąż tak jak ostatnio, a potem znowu coś nowego, wprowadzamy tę trzecią z użyciem funkcji czasu

03:03.850 --> 03:05.990
do pomiaru czasu obliczeń.

03:06.190 --> 03:08.680
A to dlatego, że chcesz uzyskać punkt wyjścia.

03:08.890 --> 03:15.160
W tym przypadku używamy bardzo praktycznego typu wskazówki, która pozwala dodać element do cue z prawej

03:15.160 --> 03:16.550
lub lewej strony.

03:16.600 --> 03:21.960
To bardzo praktyczne i dam ci referencję, którą myślę w dekrementowanej wersji kodu.

03:22.180 --> 03:27.320
Spójrz więc na to, co to jest "skasowanie" i to właśnie pozwala to zrobić.

03:27.490 --> 03:33.370
Następnie zainicjalizujemy długość odcinka o wartości zero, a następnie zwiększamy rozmiar w

03:33.400 --> 03:34.690
tej pętli.

03:34.870 --> 03:36.480
Używamy tutaj tej samej sztuczki.

03:36.680 --> 03:42.290
Prawda i pętla zwiększają długość epizodu o jeden.

03:42.490 --> 03:49.700
Kiedy gra jest skończona, gdy gra się kończy, przeładowujemy ostatni zestaw modelu współdzielonego, model udostępniania, który jest

03:49.730 --> 03:51.460
datowany przez inne modele.

03:51.460 --> 03:55.610
Pamiętaj, że wspólny model nie jest już wtedy datowany.

03:55.660 --> 04:04.030
Nadal, jeśli gra się skończy, jeśli gra się skończy, my Reinette ponownie zainicjujemy stany komórek, zobaczmy

04:04.190 --> 04:13.840
X, a następnie Stany H x, a jeśli gra nie jest zbyt dobrze, zachowamy te same stany komórek i stany.

04:13.840 --> 04:18.030
Ale aby upewnić się, że są one nauczane zmienne, tak aby mogły być dołączone do gradientu.

04:18.170 --> 04:25.240
OK, więc to jest coś, co już nie żyjemy w funkcji trendu, a następnie nadal w pętli while i

04:25.240 --> 04:30.870
po danych, które stwierdza w ukrytych stanach właściwą drogę, w zależności od dwóch przypadków tutaj.

04:31.060 --> 04:34.360
Co robimy? Dostajemy prognozy jutra.

04:34.450 --> 04:37.380
Dokładnie to robimy tutaj z tą linią kodu.

04:37.750 --> 04:43.360
Otrzymujemy więc wartość, która jest wynikiem wartości krytycznej rzeczywistej wartości, która jest wynikiem działania aktora.

04:43.600 --> 04:49.750
A potem wszystkie ukryte stany H x i komórka stwierdzi X, a następnie generujemy rozkład

04:49.750 --> 04:54.130
prawdopodobieństw działań, które mają tutaj wartość akcji wartości Q.

04:54.270 --> 04:56.380
I robimy to z następną funkcją.

04:56.470 --> 05:01.230
I oczywiście nie potrzebujemy tutaj prawdopodobieństw szczęścia, ponieważ jest to tylko szkolenie dla

05:01.480 --> 05:02.650
agenta testowego.

05:02.650 --> 05:09.130
Po prostu zagrają w akcje, które po prostu wykorzystamy, wiesz, jak zagrać w określoną grę, ale nie

05:09.190 --> 05:10.920
robimy tutaj żadnego treningu.

05:10.960 --> 05:19.040
Tak więc mamy tylko rekwizyt i od tego odgrywamy akcję, biorąc bezpośrednio do RMX tych prawdopodobieństw, to

05:19.040 --> 05:22.720
znaczy, że to działanie ma największe prawdopodobieństwo.

05:22.810 --> 05:26.860
Powodem jest to, że agent testowy nie wykonuje żadnych eksploracji.

05:26.860 --> 05:32.830
Pamiętaj, że chcemy mieć szansę na podjęcie pewnych działań, które mają niskie prawdopodobieństwo, gdy

05:32.830 --> 05:38.170
chcesz zrobić eksplorację tych innych działań i wiesz, że nie podejmujesz za

05:38.170 --> 05:44.260
każdym razem akcji, która ma największe prawdopodobieństwo, ale tutaj agent testowy może wykonać dowolną eksplorację

05:44.260 --> 05:50.800
i dlatego właśnie bezpośrednio podejmujemy akcję, która ma maksymalne prawdopodobieństwo, gdy raz wykonamy akcję, osiągniemy następny

05:50.800 --> 05:53.340
stan i otrzymamy kolejne słowo.

05:53.470 --> 05:56.920
I to jest dzień, kiedy gra się kończy.

05:57.160 --> 06:03.700
Tak więc otrzymujemy to wszystko za pomocą tej linii kodu, grając w akcję po wybraniu jej tutaj z

06:03.790 --> 06:04.630
naszym Maxem.

06:04.840 --> 06:13.000
Więc gramy tutaj i otrzymujemy stan, w którym otrzymujemy nagrodę i zrobiliśmy to ponownie, a potem, odkąd dostaliśmy

06:13.090 --> 06:18.950
nową nagrodę. Zamierzamy zaktualizować część nagrody, po prostu dodając to nowe słowo.

06:19.180 --> 06:21.480
I w końcu, gdy gra jest skończona.

06:21.490 --> 06:28.510
Jeśli więc oznacza to, że gra jest skończona, kiedy skończę grać dobrze, wydrukujemy

06:28.510 --> 06:31.210
wyniki z czasem przeciwnym.

06:31.230 --> 06:36.100
Chcieliśmy, aby długość odcinka była długa.

06:36.100 --> 06:42.890
Świetna gra i tak właśnie drukujemy wszystkie te zmienne za pomocą tych drobnych sztuczek.

06:42.910 --> 06:46.280
To na czas, kiedy chcemy, żeby to była tylko zmienna.

06:46.340 --> 06:51.960
Niektóre słowa i idee są długością obecnego czasu.

06:52.160 --> 06:57.860
A kiedy już wydrukowaliśmy wszystkie wyniki, od zakończenia gry i chcemy rozpocząć nową grę,

06:58.220 --> 06:59.930
zamierzamy ponownie zainicjować wszystko.

06:59.930 --> 07:04.170
Jest to suma dwóch słów zero długości epizodu do zera.

07:04.230 --> 07:10.100
Zamierzamy odtworzyć wszystkie czynności, używając tej funkcji klawiszy, która resetuje znane

07:10.100 --> 07:13.360
obrazy wejściowe, powtarzając wszystkie przerwy.

07:13.610 --> 07:21.980
I w końcu wykorzystujemy ten czas, aby spać 60 sekund, aby zrobić przerwę minutową, aby pozwolić innym agentom

07:21.980 --> 07:22.840
ćwiczyć.

07:22.850 --> 07:24.810
A jeśli gra się skończy.

07:25.210 --> 07:25.840
DOBRZE.

07:25.940 --> 07:32.210
I wreszcie mamy ostatnią linię kodu, która dostarczy nam nowego stanu, a następnie możemy iść do przodu.

07:32.240 --> 07:34.550
Możemy kontynuować w tej nowej grze.

07:34.550 --> 07:35.840
Więc idziemy.

07:35.870 --> 07:37.430
To jest funkcja testu.

07:37.430 --> 07:40.550
Rzeczy, w których zobaczysz filmy w jednym lub dwóch samouczkach.

07:40.550 --> 07:45.310
Mam nadzieję, że po raz ostatni będziecie oglądać wyniki, które są z wami.

07:45.350 --> 07:47.360
Kurialny i ja, to będzie dobra zabawa.

07:47.480 --> 07:48.400
I mówię ci.

07:48.440 --> 07:50.330
Spodziewaj się dobrych wyników.

07:50.360 --> 07:55.130
Pamiętaj jednak, że ta gra była bardzo trudna.

07:55.130 --> 07:58.430
Myśleliśmy, że to prosta gra, aby zagrać jako pierwsza, ale w ogóle nie.

07:58.430 --> 08:01.480
Okazało się to znacznie trudniejsze niż doom.

08:01.670 --> 08:03.890
I dlatego umieściliśmy to w ostatnim module.

08:04.190 --> 08:09.510
Ale w każdym razie, zróbmy tę główną funkcję w następnym samouczku.

08:09.590 --> 08:11.770
To samo nie jest tutaj najważniejsze.

08:11.780 --> 08:18.860
Teraz, gdy A-380 jest obłąkany, nie będziemy go kodować wiersz po wierszu, to rozszerzy kod i bardzo

08:18.980 --> 08:20.570
szybko otrzymamy wyniki.

08:20.570 --> 08:22.130
Do tego czasu ciesz się AI.
