İnanılmaz pekiştirmeli öğrenme ile küçük oyunlar nasıl oynanır?

Yazar | Jingsenbao

Baş Editör | Guo Rui

Zaman oklar gibi uçar ve göz açıp kapayıncaya kadar 9012 olmuştur. Şimdi sokakta yoldan geçenleri çekseniz bile AlphaGo, AlphaGo Zero duymuşsunuzdur.

Mart 2016'da Google, AlphaGo'nun en iyi insan Go oyuncusu Li Shiyao'yu yendiğini duyurdu.Kavun yiyen insanlar, yapay zekanın insanları yenip dünyayı işgal edeceğinden korkarak titredi. Google'ın AlphaGo Zero'yu piyasaya sürmesinden sonra, önceki AlphaGo daha küçük bir kardeşti.

Bu iki yazılımın temel algoritmaları pekiştirmeli öğrenmedir Bu makale, pekiştirmeli öğrenmenin temellerine bir göz atmanıza yardımcı olmayı amaçlamaktadır. Bu makale, pekiştirmeli öğrenmenin temel kavramlarını ve en temel giriş algoritması olan politika gradyanını tanıtacak ve bu algoritmayı, küçük oyunları oynayabilen bir model eğitmek için kullanacaktır. Ayrıntılı açıklamalarla herkesin pekiştirmeli öğrenmeyi anlamasına izin vereceğiz ve yüksek oranda okunabilir kod ekleyeceğiz.

Takviye öğrenmenin temel bilgisi

Takviyeli öğrenme, makinenin en başından hiçbir şey bilmemesini ve sürekli öğrenme yoluyla belirli bir hedefe ulaşmasını sağlayan bir algoritmadır. Öğrenme sürecinde, makine sürekli olarak deneme yanılma ve öğrenme olmuştur.Çevre her zaman makinenin eylemlerine göre cezalandırılmış veya motive edilmiştir.Makine, çevreden gelen geri bildirimlere dayanarak hedefe ulaşmak için doğru yolu sürekli olarak bulacaktır.

Örneğin, öğretmenin bir çocuğa aritmetik öğretmesi gibidir.Çocuk ilk başta hiçbir şey bilmiyor.Öğretmen çocuktan aritmetik problemler yapmasını istemeye devam ediyor.Çocuk iyi cevap verirse, öğretmen ona şeker verir.Çocuk kötü cevap verirse, öğretmen onu şiddetli bir şekilde kınar. Ancak bu süreçte öğretmen çocuklara soruları nasıl cevaplayacaklarını doğrudan söylememiştir.Çocuklar ancak öğretmenin tepkisine göre aritmetiği öğrenebilirler.Zamanla çocuklar kınamalardan kaçarken şeker almayı hatırlayacak ve sonunda aritmetiği öğrenme hedefine ulaşacaktır.

Pek çok güçlendirme öğrenimi faktörü: aracı, çevre, durum, eylem, ödül. Yukarıdaki örnekte, çocuk aracı, öğretmen çevre, çocuğun sorunu durum, çocuğun probleminin davranışı eylem ve öğretmen şeker veriyor veya kınama ödül.

Bilgisayarın bugün oynamayı öğrenmesine izin vermek istediğimiz küçük oyuna geri dönersek, bugün masa tenisi oynamak istiyoruz.Oyun ortamı şu web sitesinde bulunabilir: https://gym.openai.com/envs/#classic_control. Aşağıdaki resim bir oyun ekranıdır.

Oyundaki temsilci sağdaki tahtadır ve temsilcinin yapabileceği eylemler yukarı, aşağı ve hareketsizdir. Nihai amaç, sağdaki tahtanın soldaki tahta ile masa tenisi maçını kazanmasını sağlamaktır Gözlem, oyun ekranını ifade eder. Evironment bir oyun ortamıdır. Temsilci duruma göre her eylem yaptığında, ortam bir ödül ve mevcut duruma ve eyleme göre eylemden sonraki durumu verecektir.

Daha ayrıntılı bilgi için lütfen yukarıda belirtilen oyun ortamı web sitesine bakın.

Kod

Durumun ön işlemden geçirilmesi Durum bir RGB resmidir. Ön işleme, resmi gri tonlamalı bir resme dönüştürür ve bu da yakınsamayı hızlandırabilir. Aynı zamanda, ön işleme, eğitim sürecini daha istikrarlı hale getirmek için resmin alakasız kısımlarını kesecektir.

def prepro (o, image_size =): y = 0.2126 * o + 0.7152 * o + 0.0722 * o #gray ölçeği resized = skimage.transform.resize (y, image_size) #delete skor panosu return np.expand_dims (resized.astype (np.float32), axis = 2) #shape (yükseklik, genişlik) - > (1, yükseklik, genişlik)

Ajan modelini oluşturun Buradaki ajan, iki katmanlı, tamamen bağlı bir sinir ağı ile uygulanır.Tabii ki, evrişimli bir sinir ağı da kullanılabilir, ancak tam olarak bağlı sinir ağının ve eğitimin sonunda evrişimli sinir ağı modelinin performansı benzerdir. Kolaylık sağlamak ve yakınsamayı hızlandırmak amacıyla, tamamen bağlantılı bir sinir ağını benimsedik.

self.model = nn.Sequential ( nn.Linear (80 * 80 * 1, 256), nn.ReLU (), nn.Doğrusal (256; 1), nn.Sigmoid ()

Ortamı başlatın:

def init_game_setting (öz): self.last_frame = Yok geçmek

Politika gradyanının algoritma uygulama süreci aşağıdaki gibidir:

Kod aşağıdaki gibi uygulanır. 130 satırdan fazla kod içeren bu kadar uzun bir liste gördüğünüzde paniğe kapılmayın. GitHub kodunu düzenlediğimizde, her anahtar değişkene gerekli yorumlar ve açıklamalar verildi. Biraz dikkatli çalışın. Size inanıyorum. Kesinlikle anlayabilirsiniz. Parametreler güncellendiğinde, yakınsama hızını artırmak için varyans azaltma hilesi benimsenir.

aralıktaki bölüm için (self.hyper_param): o = self.env.reset () self.last_frame = prepro (o) # ilk kareyi başlatın, aksi takdirde self.last_frame Yoktur eylem = self.env.action_space.sample () # rastgele örnek başlatma için bir eylem o, _, _, _ = self.env.step (eylem) episode_r = True iken: # make_action yapılacak eylemi ve olasılığını döndürür. # bitti demek oyunun bittiği ya da olmadığı anlamına gelir, eğer bittiyse güncelleme yaparız # modelin parametreleri. # Ödül! = 0 olduğunda, avantaj fonksiyonunu kullanarak # indirim faktörü ve referans. Ve bunu "kümülatif_r" olarak koyun. # her eyleme. o = prepro (o) residual_state = o-self.last_frame self.last_frame = o eylem, p = self.make_action (residual_state, test = False) o, ödül, tamamlandı, _ = self.env.step (eylem) BCELoss için p_list.append (p) #left BCELoss için action_list.append (action-2) #left ödül! = 0 ise: # Birisi puan aldığında indirim parametresini sıfırlayın, # ve deneyimi kaydedin # cumulated_r, biri puan alana kadar deneyim anlamına gelir # ayrıca ortalamayı hesaplayın ve ödül normalleştirme yapmak için var # bu bayrak, normal politika notu ile karşılaştırmak için kullanılır self.hyper_param değilse: T = len (kümülatif_r) aralıktaki i için (T): kümülatif_r + = (gama ** (T-i)) * ödül cumulated_r.append (ödül) reward_mean + = toplam (kümülatif_r) n_reward + = len (kümülatif_r) kümülatif_r'deki i için: reward_var + = i ** 2 episode_r.append (cumulated_r) total_reward.extend (cumulated_r) cumulated_r = Başka: T = len (kümülatif_r) kümülatif_r = * (T + 1) episode_r.append (cumulated_r) total_reward.extend (cumulated_r) cumulated_r = Başka: cumulated_r.append (ödül) yapılırsa ve n_b! = toplu: n_b + = 1 self.init_game_setting () eğer len (lastest_r) < 30: lastest_r.append (np.sum (episode_r)) elif len (lastest_r) == 30: lastest_r.pop (0) lastest_r.append (np.sum (episode_r)) self.training_curve.append (np.mean (lastest_r)) #print ("Bölüm:% d Ortalama:% 4f"% (bölüm, np.ortalama (lastest_r)), bitiş = '') kırmak elif bitti ve n_b == toplu: self.init_game_setting () eğer len (lastest_r) < 30: lastest_r.append (np.sum (episode_r)) elif len (lastest_r) == 30: lastest_r.pop (0) lastest_r.append (np.sum (episode_r)) self.training_curve.append (np.mean (lastest_r)) print ("Bölüm:% d Ortalama:% 4f"% (bölüm, np.ortalama (lastest_r)), bitiş = '') Bölüm başına # güncelleme self.optimizer.zero_grad () kayıp = 0 self.hyper_param değilse: reward_mean = reward_mean / n_reward reward_stddev = (reward_var / n_reward- (reward_mean) ** 2) ** 0.5 total_reward = torch.Tensor (total_reward) .to (cihaz) total_reward = (total_reward-ödül_ortalama) / reward_stddev Başka: total_reward = torch.Tensor (total_reward) .to (cihaz) action_list = torch.Tensor (action_list) .to (cihaz) p_list = torch.stack (p_list) .view (-1) kayıp = F.binary_cross_entropy (input = p_list, target = action_list, weight = total_reward, azaltma = 'toplam') kayıp / = n_b loss.backward () self.optimizer.step () # tüm kayıtları sıfırla n_b = 1 n_reward = 0 reward_mean = 0 reward_var = 0 reward_stddev = 0 total_reward = cumulated_r = p_list = action_list = print ("Kayıp:% 4f"% (loss.item ()), end = '\ r') kırmak bölüm% 500 == 0 ve bölüm! = 0 ise: 100 bölüm başına #Test baskı ("Test") test_env = Çevre ('Pong-v0', self.argument, test = True) sonuç = draw_curve (aracı = self, env = test_env) sonuç ise > = best_result: best_result = sonuç torch.save (self.model, "./log/"+self.hyper_param+".pkl"+str(episode)) torch.save (self.optimizer.state_dict (), "./log/"+self.hyper_param+".optim") np.save ("training_curve _" + str (bölüm) + ". npy", np.array (self.training_curve))

Deneysel sonuçlar

Herkesin pekiştirmeli öğrenmenin ne kadar güçlü olduğunu sezgisel olarak görmesini sağlamak için, modelin eğitim sonuçlarını animasyonlu bir resimle göstereceğiz.Videoda sağdaki ahşap tahta eğittiğimiz ajandır.

Aşağıdaki şekil eğitim eğrisidir. Ödül ne kadar yüksekse model eğitimi o kadar iyi olur. Varyans azaltma hilesi olmadan, modelin eğitilmesinin zor olduğu ve varyans azaltma hilesinin ardından modelin hızlı bir şekilde iyi performans elde edebileceği görülebilir.

Referans

https://www.bilibili.com/video/av10590361/

Bu makaledeki kod, yukarıda bahsedilen eğitim videosunun bir ödevidir.Makine öğrenimi ile ilgilenen arkadaşlar göz atabilir. Konuşmacı, kişisel olarak anlaşılması çok kolay olan Ulusal Tayvan Üniversitesi'nde internette ünlü bir profesör olan Li Hongyi.

Son olarak, binlerce nehir ve dağ her zaman aşıktır, GitHub yıldız verebilir: https://github.com/sky1456723/Secret-MLDS-2018/blob/master/hw4/agent_dir/agent_pg.py.

Yazar: Wells Sen Fort, Fort operatörlerinin bireysel halka açık Sen No.ları var. İlgili küçük benzer düşünen ortaklara hoş geldiniz, halka açık sayı, iyi bir metin kalitesi ve kodun yüksek okunabilirliği ile birlikte zaman zaman makine öğrenimi tekniklerine güncellenecektir.

Sorumluluk Reddi: Bu makale yazar tarafından gönderilmiştir, lütfen izinsiz yeniden yazdırmayın.

1000 kilometre pil ömrüne sahip elektrikli bir araba düşünün? Ideal Smart ONE'ın daha fazla resmi iç resmi
önceki
Heihe buz ve kar vaftizinin altında keskin dünyayı değerlendirmek için, bu sefer ciddiyiz (bölüm 1)
Sonraki
Kobe, şehir ekibini desteklemek için Dodge soyunma odasında göründü.
Az önce, Başbakan'ın hükümet çalışma raporunda tekrar yer aldı
Her zaman doğru temperli filmi mi seçin? İlk önce hileleri anlamak daha iyidir!
Gıda ve tıp biliminin yaygınlaştırılması, tıbbi danışma, ücretsiz danışmanlık hizmeti ... Pekin öğrenme Leifeng etkinliği başlatıldı
Yang Mi AI yüz değişikliği: Yüklediğiniz fotoğraflar size ihanet ediyor!
Kia'nın yeni KX5 yapılandırması ortaya çıktı, 4 model 1.6T / 2.0L güçle piyasaya sürüldü
Birkaç gün içinde fiyat indirilecek mi? Tesla Model Y, yurt içinde 435.000-52.6 milyon yuan'a satıldı
NetEase ve Apple işten çıkarmalar; Douyin 5,7 milyon dolar para cezası verdi; Huawei ve Samsung anlaştı | Geek Headlines
Tren bileti kapma yazılımı güvenilir mi? Kimin bilet alma konusunda güçlü yeteneği var? Sekiz uygulamayı ölçtü ve sonuçlandırıldı!
Xi Da Pu Ben, nihayet arabayı aldı, Hui Ang ile 600.000 artış
AMD Athlon 200GE, 3,9 GHz hız aşırtma: çok parçacıklı yaklaşım i3-7100
Pekin, tek tıklamayla "Mali ve Vergilendirme Entegrasyonu" nu teşvik ediyor, tüm süreç yalnızca üç dakika sürüyor
To Top