Q-Learning yordamida bilimlarni chuqurroq o'rganish

Ushbu maqola Tensorflow bilan chuqurlashtirilgan bilimlarni oshirish kursining bir qismi . O'quv dasturini bu erda tekshiring.

Bugun biz Q-Learning haqida bilib olamiz. Q-Learning - bu qiymatga asoslangan mustahkamlovchi ta'lim algoritmi.

Ushbu maqola chuqur qayta o'rganish bo'yicha bloglardagi bepul nashrlarning ikkinchi qismi. Qo'shimcha ma'lumot va qo'shimcha manbalar uchun kursning dasturini ko'rib chiqing. Birinchi maqolani bu erda ko'ring.

Ushbu maqolada quyidagilarni bilib olasiz:

  • Q-Learning nima
  • Numpy bilan buni qanday amalga oshirish kerak

Katta rasm: Ritsar va malika

Aytaylik, siz ritsar ekansiz va yuqoridagi xaritada ko'rsatilgan qasrga tushib qolgan malikani qutqarishingiz kerak.

Bir vaqtning o'zida bitta plitkani ko'chirishingiz mumkin. Dushman qila olmaydi, lekin dushman bilan bir xil plitka ustiga qo'nadi va siz o'lasiz. Sizning maqsadingiz qasrga imkon qadar tezkor yo'l bilan borishdir. Buni "ballarni to'plash" tizimi yordamida baholash mumkin.

  • Siz har bir bosqichda -1 yo'qotasiz (har bir bosqichda ochko yo'qotish bizning agentimizga tezkor bo'lishga yordam beradi).
  • Agar siz dushmanga tegsangiz, siz 100 ball yo'qotasiz va epizod tugaydi.
  • Agar siz qal'ada bo'lsangiz, g'alaba qozonsangiz, +100 ball olasiz.

Savol: siz buni qila oladigan qanday qilib agentni yaratasiz?

Mana birinchi strategiya. Aytaylik, bizning agentimiz har bir plitkaga borishga harakat qiladi va keyin har bir plitkani rangga bo'yaydi. Yashil "xavfsiz" uchun, agar bo'lmasa - qizil rangda.

Xuddi shu xarita, ammo qaysi plitalarga tashrif buyurish xavfsizligini ko'rsatish uchun rangli.

Keyin, bizning agentimizga faqat yashil plitkalarni olishni aytamiz.

Ammo muammo shundaki, bu unchalik foydali emas. Yashil plitkalar bir-biriga ulashganda eng yaxshi plitka olishni bilmaymiz. Shunday qilib, bizning agentimiz qasrni topishga urinib, cheksiz pastadirga tushishi mumkin!

Q-jadval bilan tanishtirish

Ikkinchi strategiya: har bir shtatdagi har bir harakat uchun kelajakda kutilgan maksimal mukofotni hisoblab chiqadigan jadval tuzing.

Buning yordamida har bir shtat uchun qaysi amallarni bajarish yaxshiroq ekanligini bilib olamiz.

Har bir holat (kafel) to'rtta mumkin bo'lgan harakatlarga ruxsat beradi. Bular chapga, o'ngga, yuqoriga yoki pastga siljiydi.

0 - imkonsiz harakatlar (agar siz chap tomonning chap burchagida bo'lsangiz, chapga yoki yuqoriga o'tolmaysiz!)

Hisoblash nuqtai nazaridan biz ushbu panjara jadvaliga aylantiramiz.

Bu Q-jadval deb ataladi (harakatlarning "sifati" uchun "Q"). Ustunlar to'rtta harakatlardan iborat bo'ladi (chapga, o'ngga, yuqoriga, pastga). Qatorlar davlatlar bo'ladi. Har bir katakning qiymati ushbu holat va harakat uchun kelajakda kutilgan maksimal mukofot bo'ladi.

Q-jadvalning har bir balli eng yaxshi siyosat bilan ushbu holatda harakat qilsam, olishim mumkin bo'lgan kelajakdagi maksimal mukofot bo'ladi.

Nima uchun biz "berilgan siyosat bilan" deb aytyapmiz? Biz siyosat yuritmayotganimiz sababli. Buning o'rniga biz har doim eng yaxshi harakatni tanlash uchun Q-jadvalimizni yaxshilaymiz.

Ushbu Q-jadvalni "hiyla varaqasi" o'yini deb o'ylab ko'ring. Buning natijasida biz har bir davlat uchun (Q-jadvaldagi har bir satr) eng yaxshi harakatni qaysi chiziqda eng yuqori ochkoga ega bo'lishini bilamiz.

Ha! Qal'a muammosini hal qildik! Ammo kuting ... Q jadvalning har bir elementi uchun qiymatlarni qanday hisoblaymiz?

Ushbu Q-jadvalning har bir qiymatini bilish uchun biz Q o'rganish algoritmidan foydalanamiz.

Q-o'rganish algoritmi: Amaliy qiymat funktsiyasini o'rganish

Harakatlarning qiymat funktsiyasi (yoki "Q-funktsiya") ikkita kirishni oladi: "holat" va "harakat". Bu holat ushbu harakatning kelajakdagi mukofotini qaytaradi.

Biz ushbu Q funktsiyani davlatimiz bilan bog'liq bo'lgan chiziqni va bizning harakatlarimiz bilan bog'liq bo'lgan ustunni topish uchun Q-jadval bo'ylab harakatlanadigan o'quvchi sifatida ko'rishimiz mumkin. Mos keladigan katakdan Q qiymatini qaytaradi. Bu kelajakdagi kutilgan mukofot.

Ammo biz atrof-muhitni o'rganishdan oldin, Q-jadval bir xil o'zboshimchalik bilan sobit qiymatni beradi (ko'pincha 0). Atrof-muhitni o'rganar ekanmiz, Q-jadval Bellman tenglamasidan foydalanib Q (lar, a) ni iterativ ravishda yangilash orqali bizga yaxshiroq va yaxshiroq yaqinlashishga imkon beradi (pastga qarang!).

Q-o'rganish algoritmi jarayoni

Q o'rganish algoritmining soxta kodi

1-qadam: Q-qiymatlarni boshlang
Q jadvalini tuzamiz, unda m ustunlar (m = harakatlar soni) va n qatorlar (n = holatlar soni) bo'ladi. Biz qiymatlarni 0 ga boshlaymiz.

2-qadam: Hayot uchun (yoki o'qish to'xtatilgunga qadar)
3-5 qadamlar biz epizodlarning maksimal soniga (foydalanuvchi tomonidan ko'rsatilgan) yoki biz qo'lda mashg'ulotni to'xtatmaguncha takrorlanadi.

3-qadam: Harakatni tanlang
Joriy Q qiymat qiymatiga asoslangan a holatini tanlang.

Ammo ... agar har bir Q qiymati nolga teng bo'lsa, biz boshida qanday harakatlarni amalga oshiramiz?

Bu erda biz o'tgan maqolada aytib o'tgan geologiya-qidiruv ishlari muhim ahamiyatga ega bo'ladi.

Gap shundaki, boshida biz epsilon ochko'z strategiyasidan foydalanamiz:

  • Biz qidiruv tezligini "epsilon" deb belgilaymiz, uni boshida 1 ga o'rnatdik. Bu biz tasodifiy bajaradigan qadamlar tezligi. Dastlab bu stavka eng yuqori qiymatga ega bo'lishi kerak, chunki biz Q-jadvaldagi qiymatlar haqida hech narsa bilmaymiz. Bu bizning xatti-harakatlarimizni tasodifiy tanlab, ko'p kashf qilishimiz kerakligini anglatadi.
  • Biz tasodifiy sonni hosil qilamiz. Agar bu raqam> epsilon bo'lsa, unda biz "ekspluatatsiya qilamiz" (demak, har bir qadamda eng yaxshi harakatni tanlash uchun biz bilgan narsadan foydalanamiz). Yo'q, biz qidiruv ishlarini olib boramiz.
  • Fikr shundan iboratki, biz Q funktsiyasini o'qitish boshida katta epsilonga ega bo'lishimiz kerak. Keyin, uni asta-sekin kamaytiring, chunki agent Q qiymatlarini aniqlashda ishonchliroq bo'ladi.

4-5 qadamlar: baholang!
A harakatini bajaring va natija holatini va mukofot r-ni kuzating. Endi Q (s, a) funktsiyasini yangilang.

Biz 3-bosqichda tanlagan harakatni amalga oshiramiz va keyin bu harakat bizga yangi holatni va mukofotni qaytaradi (birinchi maqolada Reinforimentni o'rganish jarayonida ko'rganimizdek).

Keyin Q (s, a) ni yangilash uchun Bellman tenglamasidan foydalanamiz:

Bu erda fikr bizning Q (holat, harakat) ni quyidagicha yangilashdir:

Yangi Q qiymati =
   Joriy Q qiymati
   lr * [Mukofot + chegirma_rate * (yangi holatdagi mumkin bo'lgan harakatlar orasidagi eng yuqori Q qiymat) - joriy Q qiymati]

Bir misol keltiraylik:

  • Bitta pishloq = +1
  • Ikkita pishloq = +2
  • Katta qoziq pishloq = +10 (qism oxirida)
  • Agar siz kalamush zaharini iste'mol qilsangiz = -10 (qism oxirida)

1-qadam: Biz Q-jadvalni yaratamiz

Dastlabki Q-jadval

2-qadam: Harakatni tanlang
Boshlang'ich pozitsiyadan boshlab o'ngga yoki pastga tushishni tanlashingiz mumkin. Bizda epsilon darajasi yuqori bo'lgani uchun (atrof-muhit haqida hali bilmasligimiz sababli) biz tasodifiy tanlaymiz. Masalan ... o‘ngga siljiting.

Biz tasodifiy ravishda harakatlanamiz (masalan, o'ngda)

Biz bir bo'lak pishloq (+1) topdik va endi boshlash va to'g'ri borishning Q-qiymatini yangilashimiz mumkin. Buni Bellman tenglamasidan foydalanib qilamiz.

4-5 qadamlar: Q-funktsiyani yangilang

  • Birinchidan, Q qiymatining o'zgarishini hisoblaymiz ΔQ (boshlash, o'ng)
  • Keyin boshlang'ich Q qiymatini rateQ ga qo'shamiz (boshlang'ich, o'ng) va o'qish tezligiga ko'paytiriladi.

O'qish tezligini tarmoq yangi uchun avvalgi qiymatdan qanchalik tez voz kechish usuli sifatida o'ylang. Agar o'qish darajasi 1 bo'lsa, yangi baho yangi Q-qiymat bo'ladi.

Yangilangan jadval

Yaxshi! Biz faqat birinchi Q qiymatimizni yangiladik. Endi biz o'rganish to'xtatilgunga qadar buni qayta-qayta qilishimiz kerak.

Q-o'rganish algoritmini amalga oshiring

Biz Numpy bilan Taxi-v2 o'ynashni o'rganadigan Q-learning agentini amalga oshiradigan video yaratdik.

Endi biz qanday ishlashini bilganimizdan so'ng, Q-learning algoritmini bosqichma-bosqich amalga oshiramiz. Kodning har bir qismi to'g'ridan-to'g'ri quyidagi Jupyter daftarida tushuntiriladi.

Siz unga chuqur bilimlarni oshirish kursi repo-da kirishingiz mumkin.

Yoki unga to'g'ridan-to'g'ri Google Colab Laboratoriyasida kirishingiz mumkin:

Natijalar ...

  • Q-learning - bu q funktsiyasidan foydalanib, eng maqbul harakatlarni tanlash siyosatini topishda foydalaniladigan qiymatga asoslangan qayta o'rganish algoritmi.
  • U ma'lum bir holatda bo'lish qiymatini belgilaydigan va shu holatda muayyan harakatni amalga oshirishni aniqlaydigan harakat-qiymat funktsiyasi asosida qaysi harakatni amalga oshirishni baholaydi.
  • Maqsad: Q qiymat funktsiyasini maksimal darajaga ko'tarish (kelajakda kutilayotgan mukofot holati va harakati).
  • Q jadvali har bir shtat uchun eng yaxshi harakatni topishga yordam beradi.
  • Barcha mumkin bo'lgan harakatlarning eng yaxshisini tanlab, kutilgan mukofotni maksimal darajada oshirish.
  • Savol ma'lum bir holatdagi muayyan harakatlar sifatidan kelib chiqadi.
  • Funktsiya Q (holat, harakat) → ushbu holatda ushbu harakatning kelajakdagi mukofotini qaytaradi.
  • Ushbu funktsiyani Q (S, a) ni Bellman Tenglamasidan foydalanib takroran yangilaydigan Q-learning yordamida aniqlash mumkin.
  • Atrof-muhitni o'rganishdan oldin: Q jadvali bir xil ixtiyoriy sobit qiymatni beradi →, ammo atrof-muhitni o'rganganimiz kabi → Q bizga yaxshiroq va yaxshiroq yaqinlashishni beradi.

Hammasi shu! Kodning har bir qismini o'zingiz bajarishni unutmang - bu men bergan kodni o'zgartirishga harakat qilish juda muhimdir.

Davrlarni qo'shishga, o'rganish tezligini o'zgartirishga va qattiqroq muhitdan foydalanishga harakat qiling (masalan, 8x8 plitkali muzlatilgan ko'l). Maza qiling!

Keyingi safar biz Deep Q-learning ustida ishlaymiz, bu 2015 yildagi chuqurlashtirishni o'rganishdagi eng katta yutuqlardan biri. Va biz Doom o'ynaydigan va dushmanlarni o'ldiradigan agentni o'qitamiz!

Qiyomat!

Agar siz mening maqolamni yoqtirgan bo'lsangiz, iltimos quyida ni bosing, maqolani sizga shuncha yoqdi, shuning uchun boshqalar bu erda Medium-da ko'rishadi. Va menga ergashishni unutmang!

Agar sizda biron bir fikr, sharh, savol bo'lsa, quyida izoh qoldiring yoki menga elektron pochta orqali yuboring: hello@simoninithomas.com yoki menga @ThomasSimonini-ni yuboring.

O'qishni davom eting, ajoyib bo'ling!

Tensorflow yordamida chuqur bilimlarni oshirish kursi

Yl O'quv dasturi

Video versiyasi

1-qism: Armaturani o'rganishga kirish

2-qism: Q-Learning yordamida bilimlarni chuqurroq o'rganish

3-qism: Chuqur Q-Learning-ga kirish: keling Doom o'ynaymiz

3+ Qism: Chuqur o'rganishni takomillashtirish: Ikkita DQN dueli, ustuvor tajribani takrorlash va belgilangan Q-maqsadlar

4-qism: Doom va Cartpole bilan siyosat gradyanlariga kirish

5-qism: Aktyorni tanqid qilish usullari bilan tanishtirish: keling Sonic Kirpi o'ynaymiz!

6-qism: Sonic kirpi 2 va 3 bilan Proksimal siyosatni optimallashtirish (PPO)

7-qism: Qiziqishni o'rganishni o'rganish I qismni osonlashtirdi