Merhaba ve yaratımımızın süper heyecan verici kısmına, onu akıllı hale getirdiğimiz kısma hoş geldiniz.
İşte yapay zekayı eğitmek, zekasını bizim istediğimiz hedefe ulaşması için
eğitecektir.
Bunu yapmak için temel olarak sinir ağını doğru tahminleri üretmesi için eğiteceğiz ve ardından
her şey zaten hazır olacak çünkü beyinden gelen bu çıkış sinyalleri nihai eylemleri gerçekleştirmek
üzere vücuda doğru şekilde iletilecek.
Yani temelde şimdi yapmak üzere olduğumuz şey daha önce zaten yaptığımız bir şey.
Bellekten bazı rastgele gruplar alacağız, bu örneklerden girdilerimizi alacağız, çıktıları alacağız,
hedefleri alacağız, tahminleri alacağız, tahminler ve hedefler arasındaki son alanı hesaplayacağız ve
daha sonra ağırlıkları bu son hataya ne kadar katkıda bulunduklarına göre güncellemek için stokastik
gradyan inişi ile geriye doğru yayılma gerçekleştireceğiz.
O zaman hepsini yapalım.
Bunun nasıl çok kolay olacağını göreceksiniz çünkü bunu uygulamak için tüm araçlara zaten
sahibiz.
Sadece Optimizer ve kayıp fonksiyonlar gibi PyTorch araçlarımız değil, aynı zamanda tahminleri elde
etmek için kullanacağımız beynimiz gibi daha önce yaptığımız tüm sınıflarımız da var.
Daha sonra deneyimimiz, tekrarımız, uygulamamız, uygunluk takibimiz ve PyTorch araçlarıyla birleştirilen tüm bu araçlar
eğitimi süper performanslı hale getirecek ve böylece sonunda süper güçlü bir yapay zeka elde edeceğiz.
O halde bu eğitimi gerçekleştirelim.
Yapay zekamızı akıllı hale getirelim.
Şimdi yapacağımız ilk şey, eğitim sırasında hatayı hesaplarken kullanacağımız
son fonksiyonu ve bir optimize edici elde etmektir.
Şimdi son fonksiyon için bir değişken oluşturalım.
Buna kayıp diyeceğiz.
Bu da RN modülündeki MSI kayıp fonksiyonuna eşit olacaktır.
Ve sonra MSI kaybı, bu kullanacağımız son işlevdir çünkü temelde tahminlerimiz Q değerleridir.
Farklı eylemlerin Q değerlerini tahmin ediyoruz.
Bu nedenle, bunlar gerçek sayılar olduğundan, regresyon için bir tür sinir ağı yapıyoruz ve bu
nedenle son işlev ortalama karesel hatadır.
Bu, genel olarak regresyon için kullandığımız son işlevdir.
Tamam.
Artık son fonksiyonumuz olduğuna göre, optimize edicimizi alalım.
Optimizer burada, optimizer için oluşturduğumuz değişken.
Ve her zamanki gibi alacağız.
Sürücüsüz otomobile gelince, Atom Optimizer, eğitim için harikalar yaratacak çok güçlü bir optimize
edici.
O zaman bunu o atom seviyesine çıkaralım.
Ve unutmayın, bu tam olarak sürücüsüz otomobil için.
İki temel argümanı ortaya koymamız gerekiyor.
Birincisi, optimize edici ile sinir ağımızın parametreleri, yani beynimizin nöronlarının
ağırlıkları arasında bağlantı kuracak olandır.
Bunu yapmak için de CNN adını verdiğimiz beynimizi kullanıyoruz.
Beynimiz için yarattığımız nesne bu.
Bu yüzden CNN parametreleri hatırlamıyor.
İşte oldu.
Ve biraz da parantez.
Böylece optimize edici ile yapay zekamızın beynindeki nöronların ağırlıkları arasında bağlantı
kurulur.
İkinci argüman ise bir öğrenme oranıdır ve bu da hata ile verilir.
Ve burada küçük bir öğrenme oranı almamız gerekiyor çünkü çok hızlı yakınsamak istemiyoruz ve
biraz keşif yapmak istiyoruz ve bu nedenle burada alabileceğimiz iyi bir öğrenme
oranı küçük bir oran olan 0'dır. 01 %1 açık.
Sanırım sürücüsüz araba için de aynı şeyi kullandık.
Pekala, şimdi son bir fonksiyonumuz var, bir optimize edici.
Yani tam döngüye başlamak için neredeyse hazırız.
Aslında, tam döngüyü şimdi başlatacağız.
Ancak bunu yapmadan hemen önce, epok sayısının büyüklüğüne karar vereceğiz.
Yapay zekayı eğiteceğiz ve bu nedenle burada bu epok sayısına karşılık gelecek yeni bir değişken
oluşturuyorum.
Ve bunu 100'e eşit olarak ayarlayalım.
Bu, gözü eğitmek için yeterli bir yol olacaktır.
Ve hatta bahse girerim ki yapay zeka 100'den önce, 20 veya 30 gibi en iyi seviyeye ulaşmayı başaracaktır.
Bakalım.
Ama şimdilik 100 alalım.
Ve eğer ihtiyacımız olursa, bunu artıracağız.
Ama bunun gerekli olacağını sanmıyorum.
Tamam.
Artık epok sayımıza sahip olduğumuza göre, epoklar üzerinde eğitim yaparken for döngüsünü eğitimin bu ana for döngüsü
haline getirmeye başlayabiliriz.
Bu durumda yinelenen değişken epoch olacaktır.
Çağ için seçtiğimiz şey bu.
Şimdi elbette, ilk dönemden dönem sayısına gitmek istediğimizi söylemek için
aralık işlevini kullanacağız.
Artı bir, çünkü unutmayın, bir aralığın üst sınırı dahil değildir.
Bu nedenle, 100'e kadar çıkmak istiyorsak, 100'e kadar çıkmak için bir kutu artı bir belirtmemiz ve olmamız
gerekir.
Pekala, Colin.
Ve şimdi döngüye girelim.
Tamam.
Bu yüzden yapacağımız ilk şey on adımlık 200 koşu yapmaktır.
Böylece her bir epok, birbiri ardına on adımdan oluşan 200 koşu olacaktır.
Ve bunu yapmak için, deneyimli tekrar sınıfımızdan bu çalıştırma adımları işlevine sahibiz.
Bu nedenle, aslında bir yöntem olan bu işlevi kullanmak için, bellek nesnemizi
almamız gereken on adımdan oluşan bu 200 çalıştırmayı oluşturmak için replay bellek sınıfından bir nesne olan bellek
nesnemizden alacağız.
Burada yarattığımızı hatırlatırım.
Bellek, MN adımları on adım ve kapasitesi 10.000 olan tekrar bellek sınıfının bir nesnesidir.
Bu nesneyi yarattık ve bu nesneden, bu çalıştırma, adım, fonksiyon, çalıştırma adımlarını alıyoruz
ve on adımlık 200 ardışık çalıştırma belirliyoruz.
Böylece her epokta temel olarak 200 adım çalıştırılacaktır.
Ve şimdi her epokta bu 200 adımı çalıştırdığımıza göre, bu çalışmalardan bazı gruplar örneklemenin
zamanı geldi.
Ve bu partileri denemek için.
Hafızamızdan örnek parti olan başka bir fonksiyonumuz var ve bu tam olarak bu 200 çalışmadan
bazı partiler oluşturacak.
Ancak unutmayın, bu gruplar bir dizi geçişten oluşan zaman gruplarıdır.
Bu, daha öncekinin aksine on adımdan oluşan bir seridir ve burada gruplar sadece tekli geçişlerden oluşan
bazı gruplardır.
Bu kez on adımlık, on geçişlik gruplar olacaklar ve bu nedenle şimdi hafızamızdan
bu rastgele grupları almanın zamanı geldi ve bunları almak için grup boyutunu uygulamamız gereken örnek grup fonksiyonunu
kullanıyoruz.
Ve 32, hatta 64 veya hatta 128 alabileceğimiz parti boyutu için.
Unutmayın, parti büyüklükleri için bu yaygın bir uygulamadır.
32 Toplu öğrenme yaparken sinir ağları mimarilerinde genel olarak göreceğiniz şey budur.
Ama bu sefer durum oldukça farklı.
Sadece on adımlık bazı partilerden örnek alıyoruz, bu nedenle daha büyük boyutlarda partiler almak daha iyi olacaktır.
İşte bu yüzden 64 veya 128 alabiliriz.
Yani 128'i alacağız.
Ve aslında bu bir dört döngü içinde olacak çünkü birkaç parti almak istiyoruz ve bunları bu örnek parti
fonksiyonu tarafından döndürülen şeyde alıyoruz.
Dolayısıyla, bellekteki bu for döngüsü için batch örnek batch 128, her 128 adımda bir, belleğimizin bize 128 boyutunda
bir batch vereceği anlamına gelir, bu da aslında çalıştırılan son 128 adımı içerecektir.
Sadece 128 boyutunda bazı partiler alıyoruz ve öğrenme bu partiler üzerinde gerçekleşecek.
Ayrıca, bu grupların içinde, her on adımı öğrenmek için uygunluk, izleme çalışmamız
olacak.
Tamam.
Şimdi bu döngünün içinde, hala bir dönemde gerçekleşiyor, ancak şimdi bu sefer belirli bir partideyiz.
Şimdi yapacağımız ilk şey, girdilerimizi ve hedeflerimizi ayrı ayrı almak olacak.
Ve size söylediğim gibi, bu çok kolay.
Bunu, uyguladığımız araçlardan biri olan uygunluk takibi ile yapabiliriz.
Burada görebileceğiniz gibi, bu uygunluk izleme fonksiyonu girdi olarak bir toplu iş alır ve şimdi toplu
işimiz var ve çıktı olarak girdileri ve hedefleri döndürür.
Şu anda basitçe yapabileceğimiz şey, girdiler ve hedef olacak iki yeni değişken
oluşturmak ve bu girdinin hedefe gelmesini sağlamaktır.
Eşittir.
Bu uygunluk izleme fonksiyonunun bir toplu iş için tam olarak hangi getirileri uyguladığı.
Bu yüzden bu fonksiyonu döngümüzün yığınına uygulayacağız.
Yapacağımız şey sadece uygunluk.
Döngümüzün yığınına uygulanan izleme.
Pekala, bu bize girdileri ve hedefleri verir.
Ancak PyTorch'ta her zaman yapmamız gereken daha fazla şey vardır.
Ve tabii ki bu, sinir ağının girdilerini ve ayrıca hedefleri bazı işkence değişkenlerine dönüştürmektir,
ancak serbest bırakma yoktur.
Yeni bir şey yok.
Bunu nasıl yapacağımızı biliyoruz.
Bu şekilde yapabiliriz.
Girdilerimizi ve ardından hedeflerimizi alırız ve bunlar değişken girdilere eşit olur.
Bu girdiler ve değişken hedefler için, bu da hedefler için.
Tamam.
Böylece beynin girdileri bazı torç değişkenlerine dönüştürülür ve hedefler de bazı torç değişkenlerine
dönüştürülür.
Şimdi sinir ağına girdileri alabiliriz.
Peki bunu neden yapmamız gerekiyor?
Bunun nedeni, bir sonraki adımın elimizdeki tahminleri, hedeflememiz gereken girdileri elde etmek olmasıdır.
Şimdi, elbette tahminlerimize ihtiyacımız var, çünkü o zaman ne olacak, tahminler ve hedefler
arasındaki kaybı hesaplayacağız.
Öyleyse bu tahminleri alalım.
Tekrar söylüyorum, bu çok basit.
Şimdi beynimizi, yani CNN'i, yani evrişimli sinir ağımızı alıp girdilerimize
uygulamamız gerekiyor.
İşte oldu.
Girdiler sinir ağına girecek ve sinir ağı tahminlerin çıktısını verecektir.
Mükemmel.
Şimdi tahminlerimiz var, hedeflerimiz var, böylece zararı alabiliriz.
Bu da bir sonraki adım.
Yeni bir değişken tanıtacağız çünkü şu anda son hatayı alacağız, bu son fonksiyondan
farklıdır, çünkü son hatayı almak için son fonksiyonu kullanıyoruz.
Yani burada daha az hata ve tahminlerimize uygulanan son fonksiyon ile elde edeceğiz.
Ve hedefler.
İşte oldu.
Şimdi her şeyin nasıl pürüzsüz olduğunu görün.
Her şey mantıklı.
Önce hedeften girdi alırız.
Daha sonra girdi sayesinde tahminleri elde ederiz.
Ve sonra tahminler ve hedefler sayesinde daha az hata elde ederiz.
Çok mantıklı ve pürüzsüz.
Peki şimdi bir sonraki adım ne?
Aynı mantıksal yol.
Artık sonuncusuna sahip olduğumuza göre, ağırlıkları güncellemek için bu daha az hatayı sinir ağına geri yayabiliriz.
Ve bunu stokastik gradyan inişi ile yapıyoruz ve stokastik gradyan inişi gerçekleştirmek için optimize
edicimize ihtiyacımız var, ama zaten burada var, atom optimize edicimiz.
Ama şimdi bu noktada ne yapmamız gerektiğini hatırlayın.
Onu başlatmalı ve ilk haline getirmeliyiz.
Unutmayın, optimizer nesnemizi alıyoruz ve ardından sıfır ızgara yöntemini uyguluyoruz.
O zaman gidiyoruz.
Onu başlatan parantezi unutmuyoruz.
Ve şimdi bir sonraki adım, son hatayı sinir ağına geri yaymaktır.
Bunu yapmak için de son hatamızı alır ve ona geriye dönük yöntemi uygularız.
Yani bu tam olarak geriye doğru yayılımı uygulamaktır.
Ve son olarak, artık son hata yeni ağa geri yayıldığına göre, ağırlıkları stokastik gradyan
inişi ile güncelleyebiliriz.
Ve bunu yapmak için, hatırlayın, optimize edicimizi alıyoruz ve sonra bu adım yöntemini uyguluyoruz.
İşte oldu.
Ağırlıklar şimdi güncellenmiştir.
Size söylediğim gibi, bunu zaten yapmakla kalmadık, şimdi çok basit ve çok doğal görünüyor.
Şimdi eğlenceli bir şey yapacağız.
Her epokta ortalama ödülü yazdıracağız, böylece yapay zekanın nasıl gittiğini, eğitimin nasıl gittiğini
takip edebiliriz.
Epokların adımları boyunca ortalama ödülün arttığını görmek istiyoruz.
Ve ilk başta, elbette, bu keşif aşaması var.
Yani ortalama ödül başlangıçta artmayabilir, ancak sömürü aşamasına ulaştığında, ortalama
ödülün kesinlikle arttığını göreceğiz ve belirli bir seviyeye kadar artacak, bu da mümkün olduğunca hızlı
bir şekilde yeleğe ulaştığı zamandır.
Öyleyse baskı ile başlayalım.
Biliyorsunuz, bunu tek bir dönemde yapıyoruz, bu yüzden buradaki döngüye geri dönmemiz
gerekiyor print ve sonra ilk dönem bir sütun sonra yüzde se yazdıracağız çünkü her şeyi daha iyi bir dizeye dönüştüreceğiz.
Ve sonra ortalama ödülü ekleyeceğiz.
Ve sonra yüzdeleri de ekliyoruz.
Sonra alıntıyı kapatacağız.
Ve sonra bir yüzde ekliyoruz.
Ve diğer tarafta, bilirsiniz, burada EPC olan bu ilk kişi se ve şu anda hesaplayacağımız
ortalama ödüle karşılık gelen ikinci değişken olacak değişkenleri giriyoruz.
Yani ortalama ödül değişkeni henüz mevcut değildir.
Hemen şimdi oluşturacağız.
Bu yüzden STR dönemini kullanacağız.
Epoch bir sayı olsa bile, bunu bir dizeye dönüştüreceğiz.
Bu daha iyi ve.
Ortalama ödül olabilecek bir yıldız ekleyeceğiz.
VG ödülü olarak adlandıracağımız bir değişken oluşturacağız ve şimdi bu değişkeni oluşturup
hesaplayacağız.
O zaman şöyle yapalım.
Yapmamız gereken tek şey buydu.
Yani elimizde zaten bir çağ var.
Şimdi ortalama ödülü hesaplayalım ve bunu tam burada hesaplamamız gerekiyor.
Hala döngüdeyiz ancak toplu iş döngüsünün dışındayız çünkü artık toplu iş örneklememiz var ve eğitimimiz toplu iş içinde
gerçekleşiyor.
Ancak şimdi ileri yayılma artı geriye doğru yayılma toplu olarak yapılmaktadır.
Böylece epok döngüsüne geri dönüyoruz ve artık kümülatif ödülleri hesaplayabiliriz ki bunu end
steps nesnemizle yapabiliriz çünkü end step nesnemiz bu fonksiyonu içeriyor.
Adımların çalışması sırasında adımlarda gerçekleşen kümülatif ödülleri almamızı sağlayan adımlar atardık.
Şimdi bunu adımların yeni ödüllerini güncellemek için kullanacağız ve ardından kümülatif ödülleri hareketli ortalama
nesnesine ekleyerek ve ardından ortalamayı yeniden hesaplayarak hareketli ortalama nesnesini güncelleyeceğiz.
Ortalama ödülü de bu şekilde alacağız.
O zaman şöyle yapalım.
İhtiyacımız olan ilk şey güncellenen ödüllerdir.
O zaman bunlara ödül diyelim.
Adımlar.
Ve sonra, dediğimiz gibi, PN adımlarımızı atıyoruz.
Burada oluşturulan bir hatırlatma olan nesne, deneyim tekrar dosyamızdan PN Adım İlerleme sınıfının
bir nesnesi, yani PN adımları nesnesi.
Daha sonra ödül adımlarını ve ardından bazı parantezleri ekleriz.
Pekala, bu bize adımların yeni kümülatif ödüllerini verecektir.
Tamam, ancak daha sonra bu yeni kümülatif ödülleri hareketli ortalama nesnemize eklememiz gerekir.
Bunu yapmak için, bu kez hareketli ortalama sınıfında ADD yöntemi olan bir yöntemimiz var.
Yani bu çok basit.
Burada 100 adımla oluşturduğumuz hareketli ortalama nesnemizi alıyoruz, ardından ADD yöntemimizi
kullanacağız ve ardından reklam yönteminde ödül adımlarımızı giriyoruz ve bu, adımların ödüllerini hareketli ortalamaya
ekleyecektir.
Tamam.
Ve son olarak, ortalama ödülü hesaplayabiliriz ve bu, bilirsiniz, burada aynı değişkendir.
Yani ortalama ödüle eşit olacak olan şey budur.
Ve bunu elde etmek için, bu sefer hareketli ortalama nesnemizden ortalama yöntemini kullanmamız gerekiyor.
Ve işte bunun gibi bir nokta ortalaması yapıyoruz çünkü hareketli ortalamamız ADD yöntemi sayesinde yeni eklediğimiz
ödül adımlarıyla zaten güncellenmişti.
Harika.
Şimdi ortalama ödülümüz var, böylece burayı dolduracağız.
Ve bu her çağda basılacak.
Tamam.
Yani işimiz bitti.
Bu yüzden sonuçları göreceğim için çok heyecanlıyım.
Ve aslında, sonuçları izlerken bir sonraki derste sizin için bir sürprizim olacak.
Yani oldukça heyecanlı olacak.
Sanırım şimdi yapay zeka ile oynamanın ve eğlenmenin zamanı geldi.
Pekâlâ, kendinize iyi bir kahve ya da çay hazırlayın.
Şimdi koltuğumuzda rahatça oturmanın ve Doom oynayan yapay zekamızın bazı çok güzel videolarını izlemenin zamanı geldi.
Bunu bir sonraki derste yapalım.
Ve o zamana kadar, keyfini çıkarın.
I.