WEBVTT

00:02.520 --> 00:04.620
Instruktor: Witam wszystkich i serdecznie pozdrawiam.

00:04.620 --> 00:07.920
W tym filmie porozmawiamy o tym, jak wykorzystać

00:07.920 --> 00:11.640
ChatGPT do rozwiązania "Breakout", używając

00:11.640 --> 00:15.540
ChatGPT do wdrożenia A3C.

00:15.540 --> 00:19.470
Więc już podpowiadałem mu wiele szalonych podpowiedzi, uzyskaliśmy

00:19.470 --> 00:23.010
niesamowite wyniki, zobaczymy je za chwilę.

00:23.010 --> 00:25.170
Więc ten film będzie w zasadzie spaceru

00:25.170 --> 00:26.640
widok przez mój proces myślowy,

00:26.640 --> 00:28.740
jak ja rzeczywiście dostał wyniki,

00:28.740 --> 00:31.470
i jak można rzeczywiście korzystać ChatGPT do

00:31.470 --> 00:34.890
tworzenia algorytmu A3C, jak również.

00:34.890 --> 00:39.360
Ok, więc zacząłem podobnie do tego, co mieliśmy przy "DOOM", stwierdziłem,

00:39.360 --> 00:41.340
ok, jesteś w zasadzie ekspertem

00:41.340 --> 00:42.930
od uczenia maszynowego z

00:42.930 --> 00:46.110
wieloletnim doświadczeniem w robotyce.

00:46.110 --> 00:50.490
Zatrudniam Pana do wykonania algorytmu A3C dla "Breakoutu". Celem jest posiadanie w pełni funkcjonalnego

00:50.490 --> 00:52.110
algorytmu SOTA,

00:52.110 --> 00:56.100
A3C, który może grać w grę "Breakout".

00:56.100 --> 00:58.401
Zaimplementowałem klasy, środowisko

00:58.401 --> 01:00.150
kodu testowego i niestandardowe

01:00.150 --> 01:02.520
wersje optymalizatora Adam, który

01:02.520 --> 01:05.040
jest używany jako optymalizator wag dzielonych

01:05.040 --> 01:07.590
dla modelu A3C.

01:07.590 --> 01:09.361
Więc to jest nadanie temu większego

01:09.361 --> 01:13.076
kontekstu, co zrobiłem, dostarczę ci te trzy rzeczy.

01:13.076 --> 01:18.000
Tak więc, jak wspomniałem przed wygenerowaniem reszty kodu, twoim celem

01:18.000 --> 01:20.160
jest zaimplementowanie pełnego

01:20.160 --> 01:21.900
rozwiązania przy użyciu

01:21.900 --> 01:23.250
Pythona, Torch, podobnie

01:23.250 --> 01:25.650
do tego, co mieliśmy, i zoptymalizowanie

01:25.650 --> 01:27.690
kodu do wykonania w Google Colab,

01:27.690 --> 01:31.680
to samo, co mieliśmy wcześniej.

01:31.680 --> 01:33.540
Dodatkowo komentuj każdą

01:33.540 --> 01:35.850
linię kodu, aby uczniowie mogli

01:35.850 --> 01:38.590
zrozumieć, co zrobiłeś w kodzie.

01:40.710 --> 01:42.990
W razie potrzeby zadawaj pytania wyjaśniające, dostałeś.

01:42.990 --> 01:46.500
Mamy więc trochę pokrywające się to, co zrobiliśmy

01:46.500 --> 01:48.360
dla konwersacyjnego Deep

01:48.360 --> 01:54.600
Q dla "DOOM", ale dodałem dużo kontekstu, że mam już rzeczy zaimplementowane i chciałbym,

01:54.600 --> 01:57.390
żeby były używane.

01:57.390 --> 02:00.210
Więc od tego zaczynam i to się potwierdza.

02:00.210 --> 02:03.030
Tak, rozumiem i będę zadawał wszelkie

02:03.030 --> 02:06.840
pytania, proszę o podanie reszty kodu.

02:06.840 --> 02:09.510
Następnie stwierdziłem, to jest Adam optimizer,

02:09.510 --> 02:11.753
wkleiłem kod Adam optimizer, dla

02:11.753 --> 02:15.180
zasobów, które mamy, i dałem tę instrukcję, powiedziałem,

02:15.180 --> 02:16.920
poczekaj na resztę kodu przed

02:16.920 --> 02:18.870
wdrożeniem, po prostu, zanim

02:18.870 --> 02:21.963
otrzymałem jakieś dobre wyniki, właściwie tylko

02:23.130 --> 02:27.210
wkleiłem i natychmiast przeskoczył do wdrożenia A3C, bez czekania

02:27.210 --> 02:30.510
na resztę.

02:30.510 --> 02:32.310
Więc dodałem to jako rodzaj

02:32.310 --> 02:33.750
systemowego kodu,

02:33.750 --> 02:38.750
systemowego podpowiedzi, i powiedział, ok, proszę podać środowisko

02:39.060 --> 02:41.820
i przetestować kod.

02:41.820 --> 02:42.653
Czyli tak naprawdę odnosi się do tego,

02:42.653 --> 02:43.650
co podaliśmy w pierwszej podpowiedzi.

02:43.650 --> 02:46.323
Powiedziałem: fajnie, tu

02:47.160 --> 02:51.030
jest implementacja środowiska Gym.

02:51.030 --> 02:52.173
Wkleiłem ten główny kod,

02:53.760 --> 02:56.010
dodałem kontekst tutaj, jeśli spojrzysz,

02:56.010 --> 02:57.128
a to jest główny plik

02:57.128 --> 02:59.040
uruchamiający wszystko.

02:59.040 --> 03:01.383
I wtedy powiedziałem: ok, fajnie, poczekaj

03:03.690 --> 03:05.267
na kod testowy.

03:05.267 --> 03:06.813
I powiedział, tak, ja jednak

03:07.830 --> 03:08.766
muszę jeszcze zobaczyć

03:08.766 --> 03:11.880
kod testowy przed wdrożeniem A3C, powiedziałem, fajnie,

03:11.880 --> 03:13.410
tu jest kod testowy.

03:13.410 --> 03:15.813
I widzisz to, jak jeśli masz większy,

03:16.920 --> 03:19.170
większy projekt, możesz użyć

03:19.170 --> 03:21.480
tego, aby rodzaja kołysać go,

03:21.480 --> 03:23.230
aby użyć tego kawałka

03:24.330 --> 03:27.810
kodu lub jako odniesienia, w stylu, więc możesz

03:27.810 --> 03:30.870
faktycznie wygenerować coś w swoim stylu

03:30.870 --> 03:33.630
kodu.

03:33.630 --> 03:34.983
Fajnie, a jak to zrobiłem,

03:36.360 --> 03:38.370
to powiedziało: super, idź na to.

03:38.370 --> 03:41.190
I powiedział zasadniczo, że zamierzam

03:41.190 --> 03:45.840
użyć tego głównego kodu, i testowania, i zaimplementować to.

03:45.840 --> 03:49.200
A potem napisało: created model. py, co właściwie robiliśmy

03:49.200 --> 03:52.800
też na kursie.

03:52.800 --> 03:55.830
I powiedział: tu jest model ActorCritic,

03:55.830 --> 03:58.620
a ja porównuję do naszego.

03:58.620 --> 04:00.630
Jest to nowsza wersja pythona, więc

04:00.630 --> 04:02.310
wiele z inicjalizacji wag i rzeczy

04:02.310 --> 04:05.640
tego typu można zrobić w bardziej elegancki sposób.

04:05.640 --> 04:09.060
Więc zrobił to i faktycznie używa całkiem

04:09.060 --> 04:13.680
dobrze, a następnie wygenerował kod pociągu, a w zasadzie

04:13.680 --> 04:15.663
ActorCritic.

04:16.500 --> 04:19.860
I jeśli spojrzeć, to jest to dość uproszczone,

04:19.860 --> 04:23.039
więc zdecydowanie wymaga poprawy.

04:23.039 --> 04:25.980
Więc co możesz zrobić, możesz powiedzieć,

04:25.980 --> 04:27.423
ok, powiedziałem kontynuuj,

04:28.500 --> 04:31.560
i kontynuuje zapisywanie tego.

04:31.560 --> 04:35.373
Stworzył to jako pewnego rodzaju stratę,

04:37.920 --> 04:41.040
ale jest, tak, w zasadzie wszystko,

04:41.040 --> 04:51.333
co było nam potrzebne, zoptymalizował wszystko i widać ten optymalizator.

04:51.333 --> 04:51.333
zatrzymaj się na końcu.

04:53.160 --> 04:56.550
Więc w zasadzie używał wszystkiego,

04:56.550 --> 04:58.080
co zdefiniowaliśmy do tej pory,

04:58.080 --> 04:59.220
a także odpowiedniej

04:59.220 --> 05:02.490
straty, a także tak, optymalizatora, wszystkiego.

05:02.490 --> 05:05.730
Więc to jest to.

05:05.730 --> 05:07.591
W kilku prostych krokach

05:07.591 --> 05:10.530
udało nam się zaimplementować cały kod

05:10.530 --> 05:13.170
dla jednego z najnowocześniejszych

05:13.170 --> 05:15.270
modeli, który zdarzył się jak

05:15.270 --> 05:18.450
jeden z najlepszych w 2017, 2018 roku.

05:18.450 --> 05:21.060
Do dnia dzisiejszego, to rzeczywiście

05:21.060 --> 05:24.900
trzymać dużo zdolności do rozwiązywania złożonych środowisk,

05:24.900 --> 05:27.240
takich jak "Breakout. Więc widziałeś, teraz, gdy mamy na przykład

05:27.240 --> 05:28.710
ChatGPT, możesz go poprowadzić,

05:28.710 --> 05:32.490
aby zaimplementować pewne określone części kodu.

05:32.490 --> 05:35.250
A jeśli nie wiesz, co właściwie

05:35.250 --> 05:36.990
robią pewne części

05:36.990 --> 05:39.450
kodu, możesz pójść i zapytać

05:39.450 --> 05:42.450
go, na przykład, fajnie, czy możesz

05:42.450 --> 05:44.853
wyjaśnić część treningową

05:47.310 --> 05:51.840
i gdzie jest zwyczaj Adama?

05:51.840 --> 05:56.200
Więc skłaniam go do faktycznego wyjaśnienia się, więc jest to inny

05:58.320 --> 05:59.223
sposób, aby zasadniczo

06:04.740 --> 06:10.290
skłonić go do podania więcej argumentów za jego generowaniem.

06:10.290 --> 06:12.570
I widać, że faktycznie

06:12.570 --> 06:16.803
będzie wyjaśniać krok po kroku.

06:17.730 --> 06:18.563
Więc tak, możemy

06:18.563 --> 06:21.213
na to poczekać, możesz zrobić te same podpowiedzi

06:22.920 --> 06:25.890
i otrzymasz naprawdę podobne wyniki do moich,

06:25.890 --> 06:27.510
ale generalnie teraz to,

06:27.510 --> 06:30.030
co zrobi, weźmie funkcję pociągu, którą

06:30.030 --> 06:31.950
zdefiniował na samej górze tutaj,

06:31.950 --> 06:34.050
i w zasadzie przejdzie przez każdy

06:34.050 --> 06:38.010
pojedynczy krok i wdroży go.

06:38.010 --> 06:40.890
Więc tak, to by było na tyle.

06:40.890 --> 06:43.803
Zdecydowanie zachęcam do wypróbowania tego

06:44.700 --> 06:46.053
kodu w Google Colab,

06:47.580 --> 06:48.600
Można to zrobić,

06:48.600 --> 06:52.863
To będzie trochę zbyt skomplikowane, aby to działało, ze względu

06:53.730 --> 06:54.780
na wizualizację

06:54.780 --> 06:58.380
i ograniczenia środowiska Goggle Colab.

06:58.380 --> 06:59.760
Jednak zdecydowanie możesz

06:59.760 --> 07:02.430
iść i wkleić błędy tutaj, i możesz, możesz iść

07:02.430 --> 07:03.840
i uzyskać całkiem przyzwoite

07:03.840 --> 07:07.083
wyniki dla tego, aby debugować proces.

07:08.580 --> 07:11.310
I tak, z tym pozwolę ci być, a teraz

07:11.310 --> 07:13.890
masz sposób, aby użyć ChatGPT,

07:13.890 --> 07:16.860
jak uzyskać wartość dla A3C.

07:16.860 --> 07:20.400
I tak, mam nadzieję, że jak

07:20.400 --> 07:24.960
na razie kurs się podobał, pa.
