WEBVTT

00:02.520 --> 00:04.620
Istruttore: Salve a tutti e bentornati.

00:04.620 --> 00:07.920
In questo video parleremo di come utilizzare

00:07.920 --> 00:11.640
ChatGPT per risolvere "Breakout", utilizzando

00:11.640 --> 00:15.540
ChatGPT per implementare A3C.

00:15.540 --> 00:19.470
L'ho già sollecitato con un sacco di richieste assurde e abbiamo ottenuto

00:19.470 --> 00:23.010
risultati sorprendenti, che vedremo tra un secondo.

00:23.010 --> 00:25.170
In questo video, quindi, vi illustrerò

00:25.170 --> 00:26.640
il mio processo di pensiero

00:26.640 --> 00:28.740
su come ho ottenuto i risultati

00:28.740 --> 00:31.470
e su come potete utilizzare ChatGPT per

00:31.470 --> 00:34.890
creare un algoritmo A3C.

00:34.890 --> 00:39.360
Ok, ho iniziato in modo simile a quello che abbiamo fatto per "DOOM", ho detto:

00:39.360 --> 00:41.340
"Ok, sei fondamentalmente un esperto

00:41.340 --> 00:42.930
di apprendimento automatico

00:42.930 --> 00:46.110
con anni di esperienza nella robotica".

00:46.110 --> 00:50.490
Vi assumo per fare l'algoritmo A3C per "Breakout. L'obiettivo è quello di avere un algoritmo SOTA e A3C

00:50.490 --> 00:52.110
completamente funzionante

00:52.110 --> 00:56.100
che possa giocare a "Breakout".

00:56.100 --> 00:58.401
Ho implementato le classi, l'ambiente

00:58.401 --> 01:00.150
di codice di test e le versioni

01:00.150 --> 01:02.520
personalizzate dell'ottimizzatore Adam

01:02.520 --> 01:05.040
che viene utilizzato come ottimizzatore di

01:05.040 --> 01:07.590
pesi condivisi per il modello A3C.

01:07.590 --> 01:09.361
Quindi, per dare un contesto più

01:09.361 --> 01:13.076
ampio, quello che ho fatto è stato fornirvi queste tre cose.

01:13.076 --> 01:18.000
Quindi, come ho accennato prima di generare il resto del codice, il vostro

01:18.000 --> 01:20.160
obiettivo è quello di implementare

01:20.160 --> 01:21.900
la soluzione completa utilizzando

01:21.900 --> 01:23.250
Python, Torch, in modo

01:23.250 --> 01:25.650
simile a quello che avevamo, e ottimizzare

01:25.650 --> 01:27.690
il codice da eseguire in Google

01:27.690 --> 01:31.680
Colab, lo stesso che avevamo prima.

01:31.680 --> 01:33.540
Inoltre, commentate ogni singola

01:33.540 --> 01:35.850
riga del codice in modo che gli studenti possano

01:35.850 --> 01:38.590
capire cosa avete fatto nel codice.

01:40.710 --> 01:42.990
Se necessario, fate domande di chiarimento.

01:42.990 --> 01:46.500
Abbiamo quindi una certa sovrapposizione di ciò che abbiamo

01:46.500 --> 01:48.360
fatto per la Deep Q conversazionale

01:48.360 --> 01:53.130
per "DOOM", ma ho aggiunto un sacco di contesto in cui ho già implementato delle

01:53.130 --> 01:54.600
cose e mi piacerebbe che

01:54.600 --> 01:57.390
venissero utilizzate.

01:57.390 --> 02:00.210
Quindi è quello che inizio ed è confermato.

02:00.210 --> 02:03.030
Sì, ho capito e farò qualsiasi domanda,

02:03.030 --> 02:06.840
per favore fornisci il resto del codice.

02:06.840 --> 02:09.510
Poi ho detto, questo è l'ottimizzatore Adam,

02:09.510 --> 02:11.753
ho incollato il codice per l'ottimizzatore

02:11.753 --> 02:15.180
Adam, per le risorse che abbiamo, e ho dato questa istruzione,

02:15.180 --> 02:16.920
ho detto, aspettate il resto

02:16.920 --> 02:18.870
del codice prima di implementare,

02:18.870 --> 02:21.963
ho solo, prima di ottenere buoni risultati, ho incollato

02:23.130 --> 02:27.210
e subito è saltato all'implementazione di A3C, senza aspettare

02:27.210 --> 02:30.510
il resto.

02:30.510 --> 02:32.310
Quindi ho aggiunto questo

02:32.310 --> 02:33.750
come una sorta di codice

02:33.750 --> 02:38.750
sistemico, un prompt sistemico, e mi ha detto: "Ok, fornisci l'ambiente

02:39.060 --> 02:41.820
e testa il codice".

02:41.820 --> 02:42.653
Quindi si riferisce in realtà a ciò

02:42.653 --> 02:43.650
che abbiamo dato nel primo prompt.

02:43.650 --> 02:46.323
Ho detto: "Bene, ecco l'implementazione

02:47.160 --> 02:51.030
dell'ambiente Gym".

02:51.030 --> 02:52.173
Ho incollato il codice principale,

02:53.760 --> 02:56.010
ho aggiunto un contesto qui, se date un'occhiata,

02:56.010 --> 02:57.128
e questo è il file principale

02:57.128 --> 02:59.040
che esegue tutto.

02:59.040 --> 03:01.383
E poi ho detto: "Ok, va bene, aspettiamo

03:03.690 --> 03:05.267
il codice di prova".

03:05.267 --> 03:06.813
E mi ha detto: "Sì, ma devo ancora

03:07.830 --> 03:08.766
vedere il codice di

03:08.766 --> 03:11.880
prova prima di implementare l'A3C", e io ho detto: "Bene, ecco

03:11.880 --> 03:13.410
il codice di prova".

03:13.410 --> 03:15.813
E vedete come, se avete un

03:16.920 --> 03:19.170
progetto più grande, potete

03:19.170 --> 03:21.480
usarlo per usare quel pezzo

03:21.480 --> 03:23.230
di codice o come riferimento,

03:24.330 --> 03:27.810
nello stile, in modo da poter generare

03:27.810 --> 03:33.630
qualcosa nel vostro stile di codice.

03:33.630 --> 03:34.983
Bene, e quando l'ho fatto,

03:36.360 --> 03:38.370
mi ha detto: "Fantastico, fallo".

03:38.370 --> 03:41.190
E dice che in pratica userò questo

03:41.190 --> 03:45.840
codice principale e i test e implementerò questo.

03:45.840 --> 03:49.200
E poi diceva: modello creato. che in realtà abbiamo fatto anche durante

03:49.200 --> 03:52.800
il corso.

03:52.800 --> 03:55.830
E ha detto: "Ecco il modello di ActorCritic

03:55.830 --> 03:58.620
e lo confronto con il nostro".

03:58.620 --> 04:00.630
Questa è la versione più recente di python, quindi

04:00.630 --> 04:02.310
gran parte dell'inizializzazione dei

04:02.310 --> 04:05.640
pesi e cose simili possono essere fatte in modo più elegante.

04:05.640 --> 04:09.060
Lo ha fatto e lo usa abbastanza bene, poi

04:09.060 --> 04:13.680
ha generato il codice del treno e fondamentalmente

04:13.680 --> 04:15.663
ActorCritic.

04:16.500 --> 04:19.860
E se si dà un'occhiata, è piuttosto semplicistico,

04:19.860 --> 04:23.039
quindi va sicuramente migliorato.

04:23.039 --> 04:25.980
Quindi si può dire: "Ok, ho detto

04:25.980 --> 04:27.423
di continuare"

04:28.500 --> 04:31.560
e si continua a scrivere.

04:31.560 --> 04:35.373
Ha creato questo come una sorta di perdita,

04:37.920 --> 04:41.040
ma c'è, sì, fondamentalmente

04:41.040 --> 04:46.980
tutto ciò di cui avevamo bisogno, ha ottimizzato tutto e

04:46.980 --> 04:47.910
si può vedere

04:47.910 --> 04:51.333
l'ottimizzatore. fermarsi alla fine.

04:53.160 --> 04:56.550
Quindi, in pratica, ha utilizzato

04:56.550 --> 04:58.080
tutto ciò che abbiamo definito

04:58.080 --> 04:59.220
finora, oltre alla perdita

04:59.220 --> 05:02.490
corretta e all'ottimizzatore, tutto.

05:02.490 --> 05:05.730
Quindi è tutto.

05:05.730 --> 05:07.591
In un paio di semplici passaggi,

05:07.591 --> 05:10.530
siamo riusciti a implementare l'intero

05:10.530 --> 05:13.170
codice di uno dei modelli all'avanguardia

05:13.170 --> 05:15.270
che si è rivelato come uno dei

05:15.270 --> 05:18.450
migliori del 2017, 2018.

05:18.450 --> 05:21.060
A tutt'oggi, ha una grande

05:21.060 --> 05:24.900
capacità di risolvere ambienti complessi

05:24.900 --> 05:27.240
come "Breakout". Così avete visto, ora che abbiamo ChatGPT,

05:27.240 --> 05:28.710
per esempio, potete guidarlo

05:28.710 --> 05:32.490
per implementare alcune parti del codice.

05:32.490 --> 05:35.250
E se non si sa cosa fanno certe

05:35.250 --> 05:36.990
parti del codice,

05:36.990 --> 05:39.450
si può andare a chiederlo,

05:39.450 --> 05:42.450
ad esempio, cool, puoi spiegare

05:42.450 --> 05:44.853
la parte di formazione e

05:47.310 --> 05:51.840
dove si trova l'usanza di Adam?

05:51.840 --> 05:56.200
Quindi lo sto spingendo a spiegarsi, e questo è un altro

05:58.320 --> 05:59.223
modo per spingerlo

06:04.740 --> 06:10.290
a fornire più motivazioni alla base della sua generazione.

06:10.290 --> 06:12.570
E potete vedere che in

06:12.570 --> 06:16.803
realtà vi spiegherà passo dopo passo.

06:17.730 --> 06:18.563
Quindi si può

06:18.563 --> 06:21.213
aspettare, si possono fare le stesse richieste

06:22.920 --> 06:25.890
e si otterranno risultati molto simili ai miei,

06:25.890 --> 06:27.510
ma in genere quello che farà

06:27.510 --> 06:30.030
sarà prendere la funzione treno che ha

06:30.030 --> 06:31.950
definito proprio qui in alto

06:31.950 --> 06:34.050
e in pratica passerà attraverso

06:34.050 --> 06:38.010
ogni singolo passo e lo implementerà.

06:38.010 --> 06:40.890
Quindi sì, è così.

06:40.890 --> 06:43.803
Vi incoraggio sicuramente a provare questo

06:44.700 --> 06:46.053
codice in Google Colab,

06:47.580 --> 06:48.600
si può fare, ma sarà

06:48.600 --> 06:54.780
un po' troppo complicato farlo funzionare, a causa della visualizzazione e delle limitazioni

06:54.780 --> 06:58.380
dell'ambiente Goggle Colab.

06:58.380 --> 06:59.760
Tuttavia, è possibile

06:59.760 --> 07:02.430
incollare qui gli errori e ottenere dei

07:02.430 --> 07:03.840
risultati piuttosto

07:03.840 --> 07:07.083
decenti per eseguire il debug del processo.

07:08.580 --> 07:11.310
E sì, con questo vi lascio stare, e

07:11.310 --> 07:13.890
ora avete il modo di usare ChatGPT

07:13.890 --> 07:16.860
su come ottenere valore per A3C.

07:16.860 --> 07:20.400
E sì, spero che il corso vi

07:20.400 --> 07:24.960
sia piaciuto finora, ciao.
