|
# λͺ¨λ°©νμ΅μ ν΅ν μμ΄μ νΈ νμ΅ |
|
|
|
μμ΄μ νΈκ° μνμ°©μ€λ₯Ό ν΅ν΄ μ€μ€λ‘ νμ΅νλ κ²λ³΄λ€ λ¨μν μμ΄μ νΈκ° μννκΈ°λ₯Ό μνλ νλμ μ°λ¦¬κ° μλ €μ£Όλ κ²μ΄ λ μ§κ΄μ μΌ μ μμ΅λλ€. μμλ³ NPCλ₯Ό νμ΅νκΈ° μν [μ€ν μμ](ML-Agents-Overview.md#running-example-training-npc-behaviors) λ¬Έμ λ΄μ©μ λν΄ μκ°ν΄λ³΄κ² μ΅λλ€. 보μ ν¨μλ₯Ό μ΄μ©νμ¬ μμλ³μ νλμ κ°μ μ μΌλ‘ νμ΅νλ κ²μ΄ μλλΌ κ²μμμ μ»μ΄μ§ κ΄μΈ‘ (observation)κ³Ό κ²μ 컨νΈλ‘€λ¬λ₯Ό ν΅ν΄ μ»μ΄μ§ νλλ€ (actions)μ μ€μ λ°μ΄ν°λ₯Ό ν΅ν΄ μμλ³μ νλμ κ²°μ νλλ‘ νμ΅ν©λλ€. λͺ¨λ°©νμ΅ (Imitation Learning)μ μ€μ νλ μ΄λ₯Ό ν΅ν΄ μ»μ΄μ§ κ΄μΈ‘κ³Ό νλ λ°μ΄ν° μμ μ΄μ©νμ¬ μμ΄μ νΈμ μ μ±
μ νμ΅ν©λλ€. [λΉλμ€ λ§ν¬](https://youtu.be/kpb8ZkMBFYs). |
|
|
|
## μλ² (Demonstration) λ°μ΄ν° κΈ°λ‘ |
|
|
|
μ λν° μλν°λ₯Ό μ΄μ©νμ¬ μμ΄μ νΈμ νλ μ΄λ₯Ό κΈ°λ‘νκ³ μμ
μΌλ‘ μ μ₯νλ κ²μ΄ κ°λ₯ν©λλ€. μ΄λ° νλ μ΄ λ°μ΄ν°μλ κΈ°λ‘μ μ§ννλ λμμ κ΄μΈ‘, νλ κ·Έλ¦¬κ³ λ³΄μ μ λ³΄κ° ν¬ν¨λ©λλ€. μ΄κ²λ€μ λ°μ΄ν°λ₯Ό ν΅ν΄ κ΄λ¦¬κ° κ°λ₯νλ©° Behavioral Cloningκ³Ό κ°μ μ€νλΌμΈ νμ΅μ μ¬μ©λ μ μμ΅λλ€. (μλ λ΄μ© μ°Έκ³ ) |
|
|
|
μμ΄μ νΈμ νλ μ΄ λ°μ΄ν°λ₯Ό κΈ°λ‘νκΈ° μν΄μλ μ¬(Scene)μμ `Agent` μ»΄ν¬λνΈλ₯Ό ν¬ν¨νκ³ μλ GameObjectμ `Demonstration Recorder` μ»΄ν¬λνΈλ₯Ό μΆκ°ν΄μ£Όμ΄μΌ ν©λλ€. μΌλ¨ μΆκ°λκ³ λλ©΄ μμ΄μ νΈλ‘λΆν° νλ μ΄ λ°μ΄ν°λ₯Ό κΈ°λ‘ν μ μκ² λ©λλ€. |
|
|
|
<p align="center"> |
|
<img src="images/demo_component.png" |
|
alt="BC Teacher Helper" |
|
width="375" border="10" /> |
|
</p> |
|
|
|
`Record`κ° μ²΄ν¬λλ κ²½μ° μ¬μ΄ μ€νλλ©΄ λ°μ΄ν°κ° μμ±λ©λλ€. νκ²½μ λμ΄λμ λ°λΌ λͺ¨λ°©νμ΅μ μ¬μ©νκΈ° μν΄ λͺλΆμμ λͺμκ° μ λ νλ μ΄ λ°μ΄ν°λ₯Ό μμ§ν΄μΌν©λλ€. μΆ©λΆν λ°μ΄ν°κ° κΈ°λ‘λμμΌλ©΄ μ λν° μμμ κ²μμ μ€νμ μ μ§ν©λλ€. κ·Έλ κ² νλ©΄ `.demo` νμΌμ΄ `Assets/Demonstations` ν΄λ λ΄λΆμ μμ±λ©λλ€. μ΄ νμΌμλ μμ΄μ νΈμ νλ μ΄ λ°μ΄ν°κ° μ μ₯λμ΄ μμ΅λλ€. μ΄ νμΌμ ν΄λ¦νλ©΄ μΈμ€νν° μμ λ°λͺ¨ νμΌμ λν μ 보λ₯Ό μλμ κ°μ΄ μλ €μ€λλ€. |
|
|
|
<p align="center"> |
|
<img src="images/demo_inspector.png" |
|
alt="BC Teacher Helper" |
|
width="375" border="10" /> |
|
</p> |
|
|
|
|
|
## Behavioral Cloningμ ν΅ν νμ΅ |
|
|
|
λͺ¨λ°©νμ΅μ μν λ€μν μκ³ λ¦¬μ¦μ΄ μ‘΄μ¬νλ©° λͺ¨λ°©νμ΅ μκ³ λ¦¬μ¦ μ€ κ°μ₯ κ°λ¨ν μκ³ λ¦¬μ¦μ΄ Behavioral Cloning μ
λλ€. μ΄ μκ³ λ¦¬μ¦μ λ§μΉ μ΄λ―Έμ§ λΆλ₯λ₯Ό μν μ§λνμ΅ (Supervised Learning)μ΄λ κΈ°ν κ³ μ μ μΈ λ¨Έμ λ¬λ κΈ°λ²λ€μ²λΌ μ λ¬Έκ°μ νλ μ΄λ‘λΆν° μμ§λ λ°μ΄ν°λ₯Ό μ§μ μ μΌλ‘ λͺ¨λ°©νλλ‘ μ μ±
(Policy)μ νμ΅ν©λλ€. |
|
|
|
|
|
### μ€νλΌμΈ νμ΅ |
|
|
|
μ€νλΌμΈ Behavioral Cloningμμ μ°λ¦¬λ μμ΄μ νΈμ νλμ νμ΅νκΈ° μν΄ `Demonstration Recorder`λ₯Ό ν΅ν΄ μμ±λ `demo` νμΌμ λ°μ΄ν° μ
μΌλ‘ μ΄μ©ν©λλ€. |
|
|
|
1. μ λ¬Έκ°μ νλ μ΄ λ°μ΄ν°λ₯Ό λͺ¨λ°©νλλ‘ νμ΅νλ μμ΄μ νΈ μ ν |
|
2. `Demonstration Recorder`λ₯Ό μ΄μ©νμ¬ μ λ¬Έκ°μ νλ μ΄λ₯Ό κΈ°λ‘ν©λλ€. (μμ λ΄μ© μ°Έκ³ ) |
|
μμΌλ‘ μ€λͺ
μ μν΄ μ΄ κΈ°λ‘λ νμΌμ μ΄λ¦μ `AgentRecording.demo`λΌκ³ νκ² μ΅λλ€. |
|
3. μ¬μ λΉλνκ³ μμ΄μ νΈμκ² λ¬λ λΈλ μΈ (Learning Brain)μ ν λΉν©λλ€. κ·Έλ¦¬κ³ μμΉ΄λ°λ―Έμ Broadcast Hubμμ μ΄ λΈλ μΈμ Controlμ 체ν¬ν΄μ€λλ€. λΈλ μΈμ λν μ λ³΄κ° νμνμλ©΄ λ€μμ [λ¬Έμ](Learning-Environment-Design-Brains.md)λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ. |
|
4. `config/offline_bc_config.yaml` νμΌμ μ΄μ΄μ€λλ€. |
|
5. `demo_path` νλΌλ―Έν°λ₯Ό μ€ν
2μμ κΈ°λ‘ν λ°λͺ¨ νμΌμ κ²½λ‘λ‘ μμ ν΄μ€λλ€. μ΄λ² μμμ κ²½μ° μ€μ λ κ²½λ‘λ λ€μκ³Ό κ°μ΅λλ€: `./UnitySDK/Assets/Demonstrations/AgentRecording.demo` |
|
6. `./config/offline_bc_config.yaml` μ μ€μ νλΌλ―Έν°λ‘ νλ mlagent-learnμ μ€ννλ©° `--run-id` μ `--train` μ μ
λ ₯ν©λλ€. λΉλλ νκ²½μ΄ standaloneμΌλ‘ μ»΄νμΌλμκ±°λ μλν°μμ trainμ΄ μλ΅λ κ²½μ° `--env` νλΌλ―Έν°μ λΉλλ νκ²½μ κ²½λ‘λ₯Ό κΈ°μ
ν΄μ£ΌμΈμ. |
|
β |
|
7. (μ νμ ) ν
μ 보λλ₯Ό νμ©νμ¬ νμ΅ μ±λ₯μ νμΈν΄λ³΄μΈμ!. |
|
|
|
μ λ°©λ²μ λ°λͺ¨ νμΌμ μ΄μ©νμ¬ μμ΄μ νΈκ° μ§μ μ μΌλ‘ μ λ¬Έκ°μ νλμ λ°λΌνλλ‘ μΈκ³΅μ κ²½λ§μ νμ΅νλ κΈ°λ²μ
λλ€. νκ²½μ νμ΅μ΄ μ§νλλ λμ μμ΄μ νΈμ μ±λ₯μ νκ°νκΈ° μν΄ μ€νλλ©° μ¬μ©λ κ²μ
λλ€. |
|
|
|
### μ¨λΌμΈ νμ΅ |
|
|
|
미리 μμ±λ λ°λͺ¨ νμΌ μμ΄ νμ΅μ΄ μ§νλλ λμ μ€μκ°μΌλ‘ μ λ¬Έκ°μ νλ μ΄ λ°μ΄ν°λ₯Ό μ 곡νλ©° μμ΄μ νΈλ₯Ό νμ΅νλ κ²λ κ°μΌν©λλ€. μ΄ λ°©λ²μ λ€μμ λ¨κ³λ₯Ό λ°λΌ μ§νλ©λλ€: |
|
without pre-recording a demonstration file. The steps to do this are as follows: |
|
|
|
1. λ¨Όμ λκ°μ λΈλ μΈλ€μ μμ±ν©λλ€. νλλ "μ μλ"μ΄ λ κ²μ΄κ³ νλλ "νμ"μ΄ λ κ²μ
λλ€. μ΄λ² μμμμλ λκ°μ λΈλ μΈ μμ
μ μ΄λ¦μ κ°κ° "Teacher"μ "Student"λ‘ μ€μ ν κ²μ
λλ€. |
|
2. "Teacher" λΈλ μΈμ λ°λμ **νλ μ΄μ΄ λΈλ μΈ (Player Brain)**μ΄μ΄μΌ ν©λλ€. |
|
3. "Student" λΈλ μΈμ λ°λμ **λ¬λ λΈλ μΈ (Learning Brain)**μ΄μ΄μΌ ν©λλ€. |
|
4. "Teacher" λΈλ μΈκ³Ό "Student" λΈλ μΈμ νλΌλ―Έν°λ μμ΄μ νΈμμ μ€μ νλλ‘ λμΌνκ² μ€μ λμ΄μΌ ν©λλ€. |
|
5. "Teacher" λΈλ μΈκ³Ό "Student" λΈλ μΈμ μμΉ΄λ°λ―Έμ `Broadcast Hub`μ μΆκ°νκ³ "Student" λΈλ μΈμ `Control` 체ν¬λ°μ€μ 체ν¬λ₯Ό ν΄μ€λλ€. |
|
6. λΈλ μΈλ€μ μνλ μμ΄μ νΈλ€μκ² μ°κ²°ν΄μ€λλ€. (νλμ μμ΄μ νΈλ μ μλμΌλ‘ μ€μ λμ΄μΌ νλ©° μ μ΄λ νλμ μμ΄μ νΈλ νμμΌλ‘ μ€μ λμ΄μΌ ν©λλ€). |
|
7. `config/online_bc_config.yaml` νμΌμμ, "Student" λΈλ μΈμ λν νλͺ©μ μΆκ°ν΄μΌν©λλ€. `trainer` νλΌλ―Έν°λ₯Ό `online_bc`λ‘ μ€μ νκ³ `brain_to_imitate` νλΌλ―Έν°λ₯Ό μ μλ μμ΄μ νΈμ λΈλ μΈ μ΄λ¦μΈ "Teacher"λ‘ μ€μ ν©λλ€. μΆκ°μ μΌλ‘ κ° μκ°λ§λ€ μΌλ§λ λ§μ νμ΅μ μ§νν μ§ κ²°μ νλ `batches_per_epoch`λ₯Ό μ€μ ν©λλ€. μμ΄μ νΈλ₯Ό λ μ€λ κΈ°κ°λμ νμ΅νκ³ μΆμ κ²½μ° `max_steps` κ°μ μ¦κ°μμΌμ£ΌμΈμ. |
|
8. `mlagents-learn config/online_bc_config.yaml |
|
β--train βslow`λ₯Ό ν΅ν΄ νμ΅κ³Όμ μ μ€ννκ³ νλ©΄μ _"Start training by pressing the Play button in the Unity Editor"_ λΌλ λ©μΈμ§κ° μΆλ ₯λλ©΄ μ λν°μ :arrow_forward: λ²νΌμ λλ¬μ£ΌμΈμ |
|
9. μ λν° μλμ° μμμ μ μλ λΈλ μΈμ κ°μ§ μμ΄μ νΈλ₯Ό μ μ΄νλ©΄μ μνλλλ‘ νλ μ΄ λ°μ΄ν°λ₯Ό μμ±ν©λλ€. |
|
10. νμ λΈλ μΈμ κ°μ§ μμ΄μ νΈ(λ€)μ μ΄ν΄λ³΄λ©΄ μ μλ λΈλ μΈμ κ°μ§ μμ΄μ νΈμ νλ μ΄μ μ μ¬νκ² νλνκΈ° μμν©λλ€. |
|
11. νμ μμ΄μ νΈλ€μ΄ μνλλλ‘ νλνκ² λλ©΄ 컀λ©λ λΌμΈμμ `CTL+C`λ₯Ό λλ¬μ νμ΅μ μ€λ¨νμμμ€. |
|
12. μμ±λ `*.nn` νμΌμ Assets ν΄λμ νμ ν΄λμΈ `TFModels` ν΄λλ‘ μ΄λμν€κ³ μ΄ νμΌμ `λ¬λ` λΈλ μΈμ μ¬μ©νμΈμ. |
|
|
|
**BC Teacher Helper** |
|
|
|
λ νΈλ¦¬ν μ¬μ©μ μν΄μ, `BC Teacher Helper` μ»΄ν¬λνΈλ₯Ό μ μλ μμ΄μ νΈμ μ¬μ©ν μ μμ΅λλ€. |
|
|
|
<p align="center"> |
|
<img src="images/bc_teacher_helper.png" |
|
alt="BC Teacher Helper" |
|
width="375" border="10" /> |
|
</p> |
|
|
|
μ΄κ²μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ ν€λ³΄λ λ¨μΆν€λ₯Ό μ¬μ©ν μ μμ΅λλ€: |
|
|
|
1. κΈ°λ‘μ μμνκ±°λ μ€λ¨ν μ μμ΅λλ€. μ΄κ²μ μμ΄μ νΈλ₯Ό ν΅ν΄ κ²μμ νλ μ΄νλ μμ΄μ νΈκ° νμ΅μ λμ§ μλλ‘ μ¬μ©ν λ μ μ©ν©λλ€. μ΄κ²μ λν κΈ°λ³Έμ μΈ μ€νμ ν€λ³΄λμ `R` λ²νΌμ λλ₯΄λ©΄ λ©λλ€. |
|
2. νΈλ μ΄λ λ²νΌλ₯Ό 리μ
ν©λλ€. μ΄ λͺ
λ Ήμ ν΅ν΄ μμ΄μ νΈκ° μ΅κ·Όμ κ²½νμ λν λ²νΌλ₯Ό λΉμ°λλ‘ μ€μ ν©λλ€. μ΄κ²μ μμ΄μ νΈκ° λΉ λ₯΄κ² μλ‘μ΄ νλμ λ°°μ°κ² νκ³ μΆμλ μ¬μ©νλ©΄ μ μ©ν©λλ€. λ²νΌλ₯Ό 리μ
νκΈ° μν κΈ°λ³Έ λͺ
λ Ήμ ν€λ³΄λμ `C` λ²νΌμ λλ₯΄λ©΄ λ©λλ€. |
|
|
|
|
|
|
|
## νκΈ λ²μ |
|
|
|
ν΄λΉ λ¬Έμμ νκΈ λ²μμ [λ―Όκ·μ (Kyushik Min)]([https://github.com/Kyushik](https://github.com/Kyushik))μ μν΄ μ§νλμμ΅λλ€. λ΄μ©μ μ€λ₯λ μ€νμκ° μλ κ²½μ° [email protected] μΌλ‘ μ°λ½μ£Όμλ©΄ κ°μ¬λλ¦¬κ² μ΅λλ€. |
|
|