Unity 机器学习代理工具包 (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为训练智能代理的环境。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

14 KiB

Başlangıç Rehberi

Bu rehber, Unity'de örnek ortamlarımızdan birini açma, içinde bir Agent 'i eğitme ve eğitilmiş modeli Unity ortamına yerleştirme sürecini baştan sona anlatır. Bu rehberi bitirdikten sonra örnek ortamlardan herhangi birini kullanabilecek hale geleceksiniz. Unity Engine 'e aşina değilseniz, Background: Unity sayfasına bakarak yararlı noktaları öğrenebilirsiniz. Ek olarak, makine öğrenimine aşina değilseniz, kısa bir genel bakış ve ipuçları için Background: Machine Learning sayfamızı görüntüleyin.

3D Balance Ball

Bu rehber için, biz bir dizi agent(temsilci) küpleri ve topları içeren 3D Balance Ball ortamını kullanacağız (hepsi birbirinin kopyası). Her ajan(agent - temsilci) küpü yatay ve dikey olarak dönerek topun düşmesini önlemeye çalışır. Bu Unity ortamında, ajan Agent küp her adımında topu dengelediğinde ödül kazanacaktır. Bir temsilci(agent) ayrıca, topu düşürdüğü için olumsuz bir ödülle cezalandırılır. Eğitim sürecinin amacı, temsilcilerin topu kafalarında dengelemeyi öğrenmelerini sağlamaktır. Ödül - ceza mekanizmasıyla yapay zekayı eğitmeyi amaçlıyoruz.

Hadi başlayalım!

Kurulum

Henüz yapmadıysanız, kurulum talimatlarını izleyin. Daha sonra Unity ortamlarını içeren Project klasörünü açın:

  1. Unity Hub'ı başlatın.
  2. Projects iletişim kutusunda, pencerenin üst kısmındaki Add seçeneğini seçin.
  3. Açılan dosya diyalog penceresini kullanarak indirdiğiniz ML-Agents Toolkit içindeki Project klasörünü bulun ve Open'a tıklayın. Açılması için güncelleme isterse, projeyi güncelleyin.
  4. Unity içerisinde Project penceresinde Assets/ML-Agents/Examples/3DBall/Scenes dosyasını bulun ve 3DBall sahne dosyasını açın.

Unity Ortamlarını Anlamak

Bir ajan(agent), çevreyi gözlemleyen ve onunla etkileşime giren özerk bir aktördür. Unity bağlamında, ortam, bir veya daha fazla Ajan nesnesini ve tabii ki bir ajanın etkileşimde bulunduğu diğer varlıkları içeren bir sahnedir.

Unity Editor

Note: Unity'de, bir sahnedeki her şeyin temel nesnesi GameObject'tir. GameObject, temelde davranışlar, grafikler, fizik vb. dahil diğer her şey için bir kapsayıcıdır. Bir GameObject'i oluşturan bileşenleri görmek için, Sahne penceresinde GameObject'i seçin ve Inspector penceresini açın. Inspector penceresi, GameObject üzerindeki her bileşeni gösterir.

3D Balance Ball sahnesini açtıktan sonra fark edebileceğiniz ilk şey, bir değil, birkaç ajan küpü içermesidir. Sahnedeki her ajan küpü bağımsız bir ajandır, ancak hepsi aynı davranışı paylaşır. On iki temsilcinin tümü eğitime paralel olarak katkıda bulunduğundan, 3D Balance Ball eğitimini bu şekilde hızlandırabilirsiniz.

Agent

Temsilci(agent - ajan), ortamı gözlemleyen ve çevreyi harekete geçiren aktördür. 3B Balance Ball sahne ortamında, Agent bileşenleri on iki Agent GameObject'e yerleştirilir. Temel Agent nesnesinin davranışını etkileyen birkaç özelliği vardır:

  • Behavior Parameters — Her Agent'in bir Behavior(Davranış Modeli) olmalıdır. Davranış(Behavior) ajanın nasıl karar vereceğini belirler.
  • Max Step — Agent'ın bölümü bitirmeden önce kaç simülasyon adımı gerçekleştireceğini belirler. 3D Balance Ball'da, bir Ajan 5000 adımdan sonra yeniden başlatılır.

Davranış Parametreleri(Behavior Parameters): Vektör Gözlem Uzayı(Vector Observation Space)

Bir karar vermeden önce, bir temsilci dünyadaki durumu hakkındaki gözlemini toplar. Vektör gözlemi, ajanın karar vermesi için ilgili bilgileri içeren kayan nokta sayılarının bir vektörüdür.

3D Balance Ball örneğinin davranış(behavior) parametreleri, 8 Uzay Boyutu(Space Size) kullanır. Bu, Ajanın gözlemlerini içeren özellik vektörünün sekiz öğe içerdiği anlamına gelir: agent küpün dönüşünün x ve z bileşenleri ve topun göreceli konumu ve hızının x, y ve z bileşenleri.

Davranış parametreleri : Vektör Eylem Alanı - (Behavior Parameters: Vector Action Space)

Bir Ajana çeşitli değerler dizisi şeklinde talimatlar verilir. ML-Agent Toolkit, eylemleri iki türe sınıflandırır: sürekli ve ayrık(continuous and discrete). 3D Balance Ball örneği, sürekli olarak değişebilen bir sayı vektörü olan sürekli eylem alanını kullanmak üzere programlanmıştır. Daha spesifik olarak, topu kafasında dengede tutmak için kendisine uygulanacak x ve z dönüşlerinin miktarını kontrol etmek için 2 Uzay Boyutu(Space Size) kullanılabilir.

Önceden eğitilmiş modeli çalıştırma

Ajanlarımız (.nn dosyaları) için önceden eğitilmiş modeller ortamımıza ekliyoruz ve bu modelleri Unity içinde çalıştırmak için [Unity Inference Engine](Unity Inference Engine'i kullanıyoruz. Bu bölümde, 3D Ball örneği için önceden eğitilmiş modeli bir sinir ağı kullanacağız.

  1. Project penceresinde Assets/ML-Agents/Examples/3DBall/Prefabs klasörüne gidin. 3DBall'ın içerisini genişletin ve Agent hazır yapısına tıklayın. Agent hazır yapısını Inspector penceresinde görmelisiniz.

    Not: 3DBall sahnesindeki platformlar, 3DBall prefab kullanılarak oluşturuldu. 12 platformu tek tek güncellemek yerine, 3DBall prefabını değiştirerek diğer platformların da yapısını güncelleyebilirsiniz.

    Platform Prefab

  2. Project penceresinde, Assets/ML-Agents/Examples/3DBall/TFModels'te bulunan 3DBall sinir ağı modelini(.nn uzantılı dosya), Agent GameObject Inspector penceresindeki Behavior Parameters (Script) bileşeni altındaki Model özelliğine sürükleyin.

    3dball learning brain

  3. Hierarchy pencerelerindeki her bir 3DBall altındaki her Agent'ın artık Behavior Parameters'inde Model olarak 3DBall'ı içerdiğini fark etmelisiniz. Prefab'daki modeli değiştirdiğimizde bütün nesneleri etkiledik. Not : Sahne Hierarchy'deki arama çubuğunu kullanarak bir sahnedeki birden fazla oyun nesnesini aynı anda seçerek değiştirebilirsiniz.

  4. Inference Device'yi bu model için CPU olarak kullanılacak şekilde ayarlayın.

  5. Unity editöründeki Oynat(Play) düğmesine tıklayın ve platformların önceden eğitilmiş modeli kullanarak topları dengelediğini göreceksiniz.

Pekiştirmeli(Reinforcement) Öğrenme ile yeni bir model eğitmek

Bu ortamdaki aracılar için önceden eğitilmiş .nn dosyaları sağlasak da, kendi oluşturduğunuz herhangi bir ortamda yeni bir model dosyası oluşturmak için sıfırdan eğitim aracıları gerekir. Bu bölümde, bunu başarmak için ML-Agents Python paketinin parçası olan pekiştirmeli öğrenme algoritmalarının nasıl kullanılacağını göstereceğiz. Hem eğitim hem de çıkarım aşamalarını yapılandırmak için kullanılan argümanları kabul eden uygun bir mlagents-learn komutu sağladık.

Ortamı eğitmek

  1. Bir komut veya terminal penceresi açın.
  2. Terminalde ml-agent deposunu klonladığınız klasöre gidin. Not: Varsayılan kurulumu izlediyseniz, mlagents-learn'ü herhangi bir dizinden çalıştırabilmelisiniz.
  3. mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun komutunu çalıştırın.
    • config/ppo/3DBall.yaml sağladığımız varsayılan eğitimin konfigürasyon dosyasıdır. config/ppo klasörü, 3DBall dahil tüm örnek ortamlarımız için eğitim yapılandırma dosyalarını içerir.
    • run-id bu eğitime özel benzersiz bir addır.
  4. Ekranda "Start training by pressing the Play button in the Unity Editor" mesajı görüntülendiğinde, editör'de eğitime başlamak için Unity'deki Play(Oynat) düğmesine basabilirsiniz.

mlagents-learn doğru şekilde çalışırsa ve eğitime başlarsa, şuna benzer bir şey görmelisiniz:

INFO:mlagents_envs:
'Ball3DAcademy' started successfully!
Unity Academy name: Ball3DAcademy

INFO:mlagents_envs:Connected new brain:
Unity brain name: 3DBallLearning
        Number of Visual Observations (per agent): 0
        Vector Observation space size (per agent): 8
        Number of stacked Vector Observation: 1
        Vector Action space type: continuous
        Vector Action space size (per agent): [2]
        Vector Action descriptions: ,
INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain 3DBallLearning:
        batch_size:          64
        beta:                0.001
        buffer_size:         12000
        epsilon:             0.2
        gamma:               0.995
        hidden_units:        128
        lambd:               0.99
        learning_rate:       0.0003
        max_steps:           5.0e4
        normalize:           True
        num_epoch:           3
        num_layers:          2
        time_horizon:        1000
        sequence_length:     64
        summary_freq:        1000
        use_recurrent:       False
        memory_size:         256
        use_curiosity:       False
        curiosity_strength:  0.01
        curiosity_enc_size:  128
        output_path: ./results/first3DBallRun/3DBallLearning
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training.

Eğitim ilerledikçe ekrana yazdırılan Mean Reward değerinin nasıl arttığına dikkat edin. Bu, eğitimin başarılı olduğunun olumlu bir işaretidir.

Not: Editör yerine yürütülebilir bir dosya kullanarak eğitim yapabilirsiniz. Bunu yapmak için, Using an Executable bölümündeki talimatları izleyin.

Eğitim İlerlemesini Gözlemlemek

mlagents-learn kullanarak eğitime başladığınızda, önceki bölümde anlatıldığı şekilde ml-agent dizini bir results dizini içerecektir. Eğitim sürecini daha detaylı gözlemlemek için TensorBoard'u kullanabilirsiniz. Komut satırından şunu çalıştırın:

tensorboard --logdir results

Ardından, aşağıda gösterildiği gibi TensorBoard özet istatistiklerini görüntülemek için tarayıcınızda localhost:6006 adresine gidin. Bu bölümün amaçları doğrultusunda, en önemli istatistik, eğitim boyunca artması gereken ve sonunda temsilcinin toplayabileceği maksimum ödül olan 100'e yaklaşan Environment/Cumulative ödülüdür.

Example TensorBoard Run

Modeli Unity Ortamına yerleştirme

Eğitim süreci tamamlandığında ve eğitim süreci modeli (Saved Model mesajı ile gösterilir) kaydedildikten sonra, onu Unity projesine ekleyebilir ve uyumlu Agents'lar ile (modeli oluşturan ajanlar) kullanabilirsiniz. Not: Saved Model mesajı görünmeden Unity penceresini kapatmayın. Eğitim sürecinin pencereyi kapatmasını bekleyin veya komut satırı isteminde Ctrl + C tuşlarına basın. Pencereyi manuel olarak kapatırsanız, eğitimli modeli içeren .nn dosyası ml-agents klasörüne aktarılmaz.

Ctrl + C kullanarak eğitimden erken çıkarsanız ve eğitime tekrar kaldığı yerden devam etmek isterseniz, aynı komutu yeniden çalıştırın ve aşağıdaki gibi --resume işaretini ekleyin:

mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun --resume

Eğitimli modeliniz results/<run-identifier>/<behavior_name>.nn konumunda olacaktır; burada <behavior_name>, modele karşılık gelen aracıların Davranış Adının(Behavior Name) adıdır. Bu dosya, modelinizin en son kontrol noktasına karşılık gelir. Artık bu eğitimli modeli, yukarıda açıklanan adımlara benzer şekilde aşağıdaki adımları izleyerek Ajanlarınıza(Agents) yerleştirebilirsiniz.

  1. Model dosyanızı Project/Assets/ML-Agents/Examples/3DBall/TFModels/ içine taşıyın.
  2. Unity Editor'ü açın ve yukarıda açıklandığı gibi 3DBall sahnesini seçin.
  3. 3DBall prefab Agents nesnesini seçin.
  4. <behavior_name(davranış_adı)>.nn dosyasını editörün Proje penceresinden Ball3DAgent inspector penceresindeki Model yer tutucusuna sürükleyin.
  5. Editörün üst kısmındaki Oynat düğmesine basın.

Sonraki adımlar