WEBVTT

00:00.560 --> 00:02.560
Ciao e benvenuto in questo tutorial.

00:02.750 --> 00:04.610
Ora abbiamo il cervello di domani.

00:04.610 --> 00:06.350
Abbiamo anche l'ottimizzatore.

00:06.350 --> 00:09.980
Quindi, in pratica, siamo pronti ad addestrare i nostri diversi agenti.

00:10.010 --> 00:11.620
Questo è il nostro diverso cervello.

00:11.720 --> 00:18.650
Quindi è da ora che farà questa grande funzione di treno che conterrà tutto l'algoritmo A3 e quindi quello che

00:18.650 --> 00:24.920
stiamo per implementare in questo treno che ho trovato è solo questa enorme funzione di treno che sarà

00:25.230 --> 00:31.200
solo questa grande funzione di treno nient'altro no classe ma chi userà questa funzione del treno.

00:31.250 --> 00:33.880
E l'ultimo passo di questo modulo con il codice principale.

00:34.100 --> 00:35.010
Quindi eccoci.

00:35.060 --> 00:37.340
Ma prima di iniziare puoi notarlo.

00:37.490 --> 00:42.020
Beh, per prima cosa importiamo alcune librerie in modo che siano le classiche librerie con il modulo torcia.

00:42.020 --> 00:49.040
Intendo dire che la tua libreria torcia termina la libreria per creare l'ambiente che si espanderà.

00:49.220 --> 00:54.470
Quindi, naturalmente, importeremo in realtà le classi del nostro modello.

00:54.620 --> 00:55.980
File questo.

00:56.420 --> 01:00.070
E infine useremo una variabile da TORCIDA.

01:00.150 --> 01:04.000
Mi dispiace di avere gare altamente performanti al gradiente.

01:04.100 --> 01:05.750
Grazie ai grafici dinamici.

01:05.990 --> 01:11.960
E quindi abbiamo questo garantire la funzione di laurea condivisa che non volevo dedicare troppo tempo a questo

01:11.960 --> 01:16.930
perché, in primo luogo, questa è solo una funzione che assicurerà che tutto funzioni correttamente.

01:17.030 --> 01:20.400
Se il modello utilizzato dall'agente non ha alcun gradiente di condivisione.

01:20.480 --> 01:25.640
Questo è il motivo per cui si chiama short grad's shared e l'altra ragione è che non penso che questa

01:25.640 --> 01:26.530
funzione sia necessaria.

01:26.630 --> 01:32.700
e almeno con questo sarà sicuro al 100% che il codice verrà eseguito correttamente ma non è molto importante.

01:33.080 --> 01:34.790
Ma non lo sappiamo mai

01:34.880 --> 01:40.640
Ciò su cui dobbiamo concentrarci è questa funzione di tendenza che tutti stiamo iniziando a fare proprio ora.

01:41.000 --> 01:41.600
Quindi eccoci qui.

01:41.610 --> 01:48.860
Def e il treno diventeranno presto un treno e questa trasformazione richiederà diversi argomenti.

01:49.010 --> 01:50.400
Il primo è rango.

01:50.420 --> 01:56.460
Ho intenzione di spiegare di cosa si tratta e il secondo il secondo è haram in modo che tutti

01:56.460 --> 01:57.840
i parametri siano l'ambiente.

01:57.920 --> 02:02.860
Quindi il terzo parametro sarà condiviso morale.

02:03.170 --> 02:09.260
Quindi sai che il modello condiviso è ciò che l'agente eseguirà la sua piccola esplorazione

02:09.260 --> 02:17.050
su un certo numero di passaggi e infine l'ultimo argomento sarà l'ottimizzatore che è quello che abbiamo creato in precedenza.

02:17.770 --> 02:20.040
Quindi è perfetto per argomenti.

02:20.090 --> 02:24.010
E ora siamo pronti per iniziare ad implementare la stessa funzione.

02:24.170 --> 02:30.890
Quindi la prima cosa che faremo è sapere che ricordi cosa A-380 rappresenta per gli agenti

02:31.010 --> 02:32.480
sincroni attivi di Crilley.

02:32.540 --> 02:34.980
Quindi in 8: 3 vedi c'è un sincrono.

02:34.980 --> 02:40.940
rango qui è solo per spostare il seme in modo che ogni agente di allenamento sia sincronizzato.

02:40.940 --> 02:49.010
Quindi, come hai capito, dobbiamo privare di franchigia ogni agente di addestramento e le diseconomie, quindi useremo il rango per spostare ciascun

02:49.220 --> 02:52.230
lato con questo grado, quindi questo parametro di

02:52.580 --> 02:59.390
Quindi, per esempio se ci sono agenti di addestramento, i ranghi passeranno da 1 a 10 e ci sarà

02:59.390 --> 03:02.600
un numero intero per agente da 1 a 10.

03:02.630 --> 03:08.840
Quindi, quando spostiamo il seme di un thread, tutti i numeri pseudo casuali creati da questo

03:08.840 --> 03:11.340
thread saranno totalmente indipendenti dagli altri thread.

03:11.480 --> 03:14.250
Tuttavia il seme o numeri fissi.

03:14.510 --> 03:19.640
Quindi quando riproduciamo l'esperienza troveremo esattamente gli stessi eventi.

03:19.880 --> 03:23.450
E questo perché è deterministico rispetto al sedile.

03:23.690 --> 03:30.470
Quindi è importante capire che ed è per questo che dobbiamo fare è sincronizzare ogni agente tirocinante usando

03:30.800 --> 03:34.260
il diritto di spostare il seme con il rango.

03:34.350 --> 03:36.110
Quindi facciamo questo per farlo.

03:36.140 --> 03:39.170
Prenderemo la nostra biblioteca di torche.

03:39.170 --> 03:45.350
Quindi otterremo il seed con parentesi manuale con seme di parentesi.

03:45.350 --> 03:51.040
Questa è una funzione e ora prenderemo i semi di tutti gli agenti ai quali

03:51.220 --> 03:55.620
possiamo accedere da quel seme e spostarli per il rango per sincronizzarli.

03:55.660 --> 04:05.420
Ognuno di questi agenti aggiungerà qui più rec e questo sposterà il seed al rango per privarli di ogni agente tirocinante

04:05.510 --> 04:09.970
perché c'è un seme per ogni agenzia di addestramento.

04:09.980 --> 04:15.390
Va bene, prima cosa fatta e ora il prossimo passo è quello di ottenere l'ambiente.

04:15.530 --> 04:21.470
Quindi creeremo una nuova variabile che chiameremo e che ora useremo per creare Atari e

04:21.590 --> 04:26.120
la funzione dal modulo finale per creare l'ambiente per il breakout.

04:26.150 --> 04:28.130
Questo è per ottenere l'ambiente di scoppiare.

04:28.250 --> 04:38.070
Quindi prendiamo questa funzione per creare Terry e ora dobbiamo inserire solo un argomento che sono i

04:38.070 --> 04:39.060
parametri dell'ambiente.

04:39.270 --> 04:42.730
E li abbiamo perché questo è uno degli input della funzione cerebrale.

04:42.750 --> 04:48.270
Questo è questo parametro che sarà i parametri dell'ambiente di breakout

04:48.330 --> 04:58.320
e quindi per ottenere gli ambienti di breakout prendiamo questi argomenti di programma e poi otteniamo un nome che in futuro

04:58.320 --> 05:03.240
è nel prossimo codice con la funzione principale che eseguirà

05:03.240 --> 05:06.010
l'intero codice sarà breakout brachiale visir.

05:06.010 --> 05:09.450
Va bene così che ci ottiene l'ambiente perfetto.

05:09.610 --> 05:16.080
E ora il prossimo passo è allineare la sede dell'ambiente a quella degli agenti.

05:16.180 --> 05:17.650
E perché lo facciamo.

05:17.650 --> 05:24.220
È perché ricorda che ogni agente dell'A-3 Silmaril ha una sua visione dell'ambiente come la

05:24.220 --> 05:31.000
sua copia dell'ambiente e quindi abbiamo bisogno di allineare ciascuno degli agenti su una versione specifica

05:31.000 --> 05:36.520
dell'ambiente e per farlo andiamo utilizzare il sedile perché ogni sedile determina un

05:36.520 --> 05:37.320
ambiente specifico.

05:37.450 --> 05:43.390
Quindi associando un seme diverso a ciascun agente, otterremo esattamente ciò che vogliamo

05:43.390 --> 05:46.340
che ogni agente abbia il proprio ambiente.

05:46.500 --> 05:54.730
E quindi come possiamo fare che possiamo prendere il nostro ambiente allora che poi usare la funzione seme per sapere

05:54.770 --> 05:57.340
scegliere quelli che ottiene per l'ambiente.

05:57.520 --> 06:01.370
E così ora per allineare la sede dell'ambiente al seme dell'agente.

06:01.600 --> 06:08.460
Beh, abbiamo semplicemente bisogno di ottenere questo perché questo corrisponde alla sede dell'agente che ha spostato le cose al

06:08.530 --> 06:14.170
rango per ottenere agenti di addestramento organizzati decenti perché sono tutti su un set diverso.

06:14.200 --> 06:20.020
Quindi dobbiamo solo pagare qui e questo allineerà la sede dell'ambiente a quella

06:21.210 --> 06:24.660
dell'agente. Okay, ora prenderemo il nostro modello.

06:24.670 --> 06:27.060
Questo è il nostro cervello A-3.

06:27.180 --> 06:32.320
E così ora useremo la classe attiva dal nostro file di modello.

06:32.350 --> 06:38.500
di questa classe di attività e chiameremo questo modello di oggetto o cervello, se lo desideri.

06:38.500 --> 06:40.960
Quindi, in pratica, creeremo un nuovo oggetto

06:41.200 --> 06:47.650
Ma fondamentalmente questo oggetto conterrà tutte le convoluzioni del CM La connessione lineare e la funzione

06:47.650 --> 06:49.500
Ford per propagare il segnale.

06:49.600 --> 06:55.630
Quindi in pratica conterrà il cervello dell'attore nel critico con la capacità di propagare il

06:55.630 --> 06:59.120
segnale in tutto il cervello per ottenere l'output finale.

06:59.170 --> 07:06.850
Facciamo così, creiamo il nostro modello così come abbiamo detto che vogliamo chiamare questo modello di oggetto.

07:07.150 --> 07:15.040
E così creiamo un oggetto della classe di creazione Act e quindi prendiamo un critico di attore di classe e ora ricordiamo

07:15.040 --> 07:17.250
quali argomenti quando i due input.

07:17.350 --> 07:20.420
Questo è in realtà gli argomenti della funzione.

07:20.640 --> 07:26.230
Quindi noi dobbiamo inserirlo, sai che è quello che dobbiamo fare per usare l'oggetto nel metodo.

07:26.530 --> 07:33.010
Ma poi gli argomenti che dobbiamo mettere sono nomine che sono in cattive condizioni che si fanno in

07:33.010 --> 07:38.680
catene d'arte nelle immagini stampate e lo spazio reale che contiene conosce l'insieme delle azioni.

07:38.680 --> 07:42.550
Quindi mettiamo questi argomenti nella funzione del treno.

07:42.760 --> 07:51.580
Quindi il primo lo possiamo ottenere con il nostro ambiente e quello e poi usiamo lo spazio di osservazione che

07:51.580 --> 07:59.020
è lo spazio delle osservazioni e poi otteniamo il numero di input che otteniamo zero parentesi.

07:59.190 --> 07:59.550
Tutto ok.

07:59.550 --> 08:01.120
Questo è per gli input.

08:01.290 --> 08:04.690
E ora per lo spazio di azione.

08:04.860 --> 08:10.480
Beh, è ​​quasi la stessa cosa di cui abbiamo bisogno per ottenere dal nostro ambiente che siamo importanti.

08:10.500 --> 08:12.920
E poi lo spazio di azione.

08:12.920 --> 08:13.260
Tutto ok.

08:13.260 --> 08:17.860
E questo ci dà gli argomenti che dobbiamo inserire quando creiamo un oggetto.

08:17.860 --> 08:20.130
Il modello della classe execrate.

08:20.400 --> 08:25.150
OK, ora abbiamo il nostro modello e ora il prossimo passo è preparare i nostri stati di input.

08:25.170 --> 08:31.230
Quindi, ricordiamo che stiamo ancora approfondendo l'apprendimento informale, quindi l'input indica le nostre immagini di input e quindi

08:31.560 --> 08:37.080
questo sarà originariamente fatto da Ray che conterrà un canale perché lavoreremo con immagini in bianco

08:37.080 --> 08:40.670
e nero e avremo tempo in 42 oceani di 42.

08:40.980 --> 08:46.680
Ma è importante capire e tenere presente che gli stati di input sono immagini di input.

08:46.680 --> 08:51.940
Quindi quello che dobbiamo fare è ottenere la non-potenza, quindi la convertiremo in una risposta di tortura.

08:52.050 --> 08:57.770
Ma il primo passo come quello che abbiamo fatto in precedenza è ottenere un arbitro e ottenerlo.

08:57.840 --> 08:58.970
In realtà è abbastanza semplice.

08:58.980 --> 09:06.080
dobbiamo creare una variabile per lo stato di input che attraverserà lo stato e questo per ottenere un array di umpire.

09:06.080 --> 09:07.130
Per prima cosa

09:07.230 --> 09:13.000
Abbiamo semplicemente bisogno di prendere il nostro ambiente e quindi adattarci e quindi utilizzare la funzione di reset.

09:13.200 --> 09:19.940
E questo inizializzerà gli Stati come una serie di dimensioni dell'impero una per 42 per 42.

09:20.190 --> 09:27.170
Uno significa 1 canale, quindi l'immagine in bianco e nero e 42 per 42 è ovviamente la dominanza dell'immagine.

09:27.210 --> 09:30.860
Il numero di pixel e la larghezza e il numero di pixel e l'altezza.

09:30.870 --> 09:32.630
Quindi in pratica è solo l'istanza temporale.

09:32.670 --> 09:34.660
E quelli con cui lavoriamo

09:34.820 --> 09:40.830
questo in realtà, perché questo ci procurerà queste immagini di un'assicurazione del genere in Empire.

09:40.830 --> 09:42.670
E ora ora che abbiamo

09:42.870 --> 09:48.510
Ora possiamo convertirli in torch dancers e per fare questo bene stiamo andando a uno stato dei dati di nuovo perché

09:48.510 --> 09:50.890
non abbiamo bisogno di mantenere gli array di numeri.

09:51.180 --> 09:55.030
Ed è qui che usiamo la torcia per il modulo torcia.

09:55.260 --> 10:02.790
E ricorda che l'abbiamo già fatto con la funzione da una parentesi non-sottolineatura.

10:02.880 --> 10:08.350
E all'interno di questa funzione abbiamo bisogno di inserire la frequenza numerica che vogliamo convertire in un sensore di torcia.

10:08.610 --> 10:14.880
E questo è lo stato in cui la versione precedente dello stato non-pay array diventerà pipeline dalla

10:14.880 --> 10:20.510
funzione pipe un sensore di torcia in modo tale da creare solo uno stato più intenso.

10:20.550 --> 10:24.870
E ora abbiamo solo bisogno di inizializzare il fatto fattibile.

10:24.870 --> 10:30.650
Ricorda che la variabile è generalmente la variabile che dice se un episodio è finito o se il gioco è finito.

10:30.870 --> 10:37.110
Bene, qui vogliamo solo introdurre questo fatto molto bene e inizializzare a true per specificare che questo

10:37.160 --> 10:41.230
Doiv Voivode sarà uguale a true quando il gioco è finito.

10:41.260 --> 10:46.790
Questo sarà utile per dopo in modo che l'IA non giochi indefinitamente per scoppiare.

10:46.820 --> 10:47.350
Tutto ok.

10:47.390 --> 10:54.320
Quindi questo è stato fondamentalmente l'inizio di questa funzione di tendenza con alcune inizializzazioni e alcune cose

10:54.320 --> 10:55.370
che dobbiamo fare.

10:55.370 --> 11:00.560
La parte più importante qui è stata la necessità di escludere ogni agente tirocinante.

11:00.560 --> 11:04.890
Questo è un primo principio dell'A3 simile che dobbiamo applicare.

11:05.160 --> 11:09.780
E ora nel prossimo tutorial procederemo alla sincronizzazione con il modello condiviso.

11:09.830 --> 11:14.810
Non dimentichiamo che esiste un modello diverso ma anche il modello di condivisione che è un modello

11:14.810 --> 11:16.180
condiviso da tutti gli agenti.

11:16.190 --> 11:22.430
E quindi dobbiamo sincronizzarci con il modello di show in modo che ogni agente possa ottenere questo modello condiviso per

11:22.520 --> 11:25.990
procedere a una piccola esplorazione di un certo numero di passaggi.

11:26.000 --> 11:28.080
Questo è quello che faremo nel prossimo Statoil.

11:28.130 --> 11:29.710
E fino ad allora goditi l'intelligenza artificiale.
