จะจัดการกับการเคลื่อนไหวที่ไม่ถูกต้องในการเรียนรู้การเสริมแรงได้อย่างไร?


20

ฉันต้องการสร้าง AI ซึ่งสามารถเล่นห้าในแถว / gomoku ดังที่ฉันพูดถึงในชื่อเรื่องฉันต้องการใช้การเรียนรู้เสริมแรงสำหรับสิ่งนี้

ฉันใช้วิธีการไล่ระดับสีนโยบายคือ REINFORCE ที่มีพื้นฐาน สำหรับการประมาณค่าและนโยบายการทำงานของผมใช้โครงข่ายประสาทเทียม มันมีเลเยอร์ convolutional และเชื่อมต่ออย่างเต็มที่ เลเยอร์ทั้งหมดยกเว้นการส่งออกจะถูกแชร์ ชั้นผลผลิตของนโยบายมี8×8=64 (ขนาดของคณะกรรมการ) หน่วยส่งออกและsoftmaxกับพวกเขา ดังนั้นมันจึงสุ่ม แต่ถ้าเครือข่ายสร้างความน่าจะเป็นสูงมากสำหรับการย้ายที่ไม่ถูกต้อง การย้ายที่ไม่ถูกต้องคือเมื่อตัวแทนต้องการตรวจสอบสี่เหลี่ยมที่มีหนึ่ง "X" หรือ "O" ฉันคิดว่ามันสามารถติดอยู่ในสถานะเกมนั้น

คุณช่วยแนะนำวิธีแก้ปัญหาสำหรับปัญหานี้ได้ไหม?

ฉันเดาว่าจะใช้วิธีการของนักวิจารณ์ สำหรับการย้ายที่ไม่ถูกต้องเราควรให้รางวัลเป็นค่าลบและส่งต่อให้ฝ่ายตรงข้าม

คำตอบ:


10

เพียงเพิกเฉยต่อการเคลื่อนไหวที่ไม่ถูกต้อง

สำหรับการสำรวจมีแนวโน้มว่าคุณจะไม่เพียง แต่ดำเนินการย้ายด้วยความน่าจะเป็นสูงสุด แต่แทนที่จะเลือกการเคลื่อนที่แบบสุ่มโดยพิจารณาจากความน่าจะเป็นผลลัพธ์ หากคุณลงโทษการเคลื่อนไหวที่ผิดกฎหมายพวกเขาจะยังคงมีความน่าจะเป็นบางอย่าง (เล็ก ๆ น้อย ๆ ) และดังนั้นจึงจะถูกดำเนินการเป็นครั้งคราว (ไม่ค่อยจะมี) ดังนั้นคุณจะยังคงตัวแทนซึ่งมักจะทำให้เคลื่อนไหวผิดกฎหมาย

สำหรับฉันมันสมเหตุสมผลมากกว่าที่จะเพียงตั้งค่าความน่าจะเป็นของการเคลื่อนไหวผิดกฎหมายทั้งหมดให้เป็นศูนย์และปรับเวกเตอร์ผลลัพธ์ให้เป็นมาตรฐานก่อนที่คุณจะเลือกการย้าย


ขอขอบคุณ. อาจจะไม่ชัดเจน แต่ฉันเลือกการเคลื่อนที่แบบสุ่มโดยความน่าจะเป็นผลลัพธ์ ฉันจะลองคำแนะนำของคุณเพื่อตั้งค่าความน่าจะเป็นของการเคลื่อนไหวผิดกฎหมายเป็นศูนย์และดูว่าจะเกิดอะไรขึ้น ขอให้มีความสุขมาก ๆ ในวันนี้นะ
MolnárIstván

8

วิธีการ softmax มักจะอยู่ในวิธีการไล่ระดับนโยบายโดยใช้ฟังก์ชั่นการประมาณเชิงเส้นใช้สูตรต่อไปนี้ในการคำนวณความน่าจะเป็นของการเลือกการกระทำ นี่น้ำหนักθและคุณสมบัติφเป็นหน้าที่ของรัฐในปัจจุบันsและการกระทำที่มาจากชุดของการกระทำaθφsA

π(θ,a)=อีθφ(s,a)ΣAอีθφ(s,)

ที่จะกำจัดการเคลื่อนไหวที่ผิดกฎหมายอย่างใดอย่างหนึ่งจะ จำกัด ชุดของการกระทำเฉพาะผู้ที่ถูกกฎหมายจึงLอีก.aล.(A) )

π(θ,a)=อีθφ(s,a)ΣLอีก.aล.(A)อีθφ(s,),aLอีก.aล.(A)

ใน pseudocode สูตรอาจมีลักษณะเช่นนี้:

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

ไม่ว่าจะใช้การประมาณฟังก์ชั่นเชิงเส้นหรือไม่เชิงเส้น (เครือข่ายประสาทของคุณ) ความคิดคือการใช้การเคลื่อนไหวทางกฎหมายเมื่อคำนวณ softmax ของคุณ วิธีการนี้หมายความว่าตัวแทนจะได้รับการย้ายที่ถูกต้องเท่านั้นซึ่งจะดีถ้าคุณต้องการเปลี่ยนเกมของคุณในภายหลังและความแตกต่างของมูลค่าระหว่างตัวเลือกที่ จำกัด ในการกระทำจะง่ายต่อการแยกแยะโดยตัวแทน มันจะเร็วขึ้นเมื่อจำนวนการกระทำที่เป็นไปได้ลดลง


มีประโยชน์มาก. ขอบคุณที่โพสต์ทั้งสมการและรหัสเทียม!
DukeZhou

1
คณิตศาสตร์และรหัสเทียมไม่ตรงกับที่นี่ Softmax มากกว่าความน่าจะเป็นที่ถูกกฎหมายจะปรับความน่าจะเป็นที่สัมพันธ์กัน เช่น (0.3, 0.4, 0.2, 0.1) ที่กรองด้วยการลบรายการแรกและรายการที่สามจะเป็น (0.0, 0.8, 0.0, 0.2) ด้วยสูตรของคุณ แต่จะเป็น (0.0, 0.57, 0.0, 0.42) โดยใช้รหัสเทียม รหัสเทียมต้องใช้การบันทึกก่อนการคำนวณความน่าจะเป็นของการกระทำ
Neil Slater

4
หนึ่งจะคำนวณการไล่ระดับสีของรุ่น Softmax ที่กรองได้อย่างไร ดูเหมือนว่าสิ่งนี้จำเป็นสำหรับการ backpropagation ที่จะทำงานได้สำเร็จใช่ไหม
brianberns

@brianberns คุณจัดการเพื่อหาคำตอบหรือไม่? ดูเหมือนว่าจะเป็นกรณีสำหรับฉัน แต่อย่างใดในตัวอย่างของเล่นของฉันฉันจะได้รับคำตอบที่ถูกต้องเมื่อใช้ความน่าจะเป็นบันทึกของ softmax ที่ไม่มีการกรอง ...
trytolearn

5

IMHO ความคิดเกี่ยวกับการเคลื่อนไหวที่ไม่ถูกต้องนั้นไม่ถูกต้อง ลองนึกภาพการวาง "X" ที่พิกัด(9, 9)ที่พิกัด คุณสามารถพิจารณาว่ามันเป็นการเคลื่อนไหวที่ไม่ถูกต้องและให้รางวัลเชิงลบ ไร้สาระ? แน่นอน!

แต่ในความเป็นจริงการเคลื่อนไหวที่ไม่ถูกต้องของคุณเป็นเพียงการระลึกถึงการเป็นตัวแทนเท่านั้น การรักษาที่ดีที่สุดของพวกเขาคือการแยกพวกเขาออกจากการคำนวณใด ๆ

นี่จะชัดเจนมากขึ้นในหมากรุก:

  • ในการเป็นตัวแทนตำแหน่งคุณอาจพิจารณาการย้ายa1-a8ซึ่งเป็นของเกมเท่านั้นหากมีโกงหรือราชินีที่a1(และเงื่อนไขอื่น ๆ ถือ)

  • Qb2ในการแสดงที่แตกต่างกันคุณอาจพิจารณาย้าย อีกครั้งนี้อาจเป็นหรือไม่เป็นของเกม เมื่อผู้เล่นปัจจุบันไม่มีราชินีมันจะไม่แน่นอน

เนื่องจากการเคลื่อนไหวที่ไม่ถูกต้องเกี่ยวข้องกับการเป็นตัวแทนแทนที่จะเป็นเกมพวกเขาไม่ควรพิจารณาเลย


1
จุดที่ดี ในเกม [M] ที่เล่นบน Sudoku ข้อ จำกัด ทำให้หลายตำแหน่ง (พิกัด + ค่า) ผิดกฎหมายหลังจากตำแหน่งแรก ไม่มีค่าในการพิจารณาตำแหน่งที่ผิดกฎหมายเหล่านี้จากมุมมองของตำแหน่งแต่เลเยอร์กลยุทธ์ที่สำคัญคือการรับรู้ว่าตำแหน่งใดลดมูลค่าของตำแหน่งที่เหลือและไม่เล่น (เช่นถ้าฉันวาง 8 ตรงนี้มันจะบล็อคคู่ต่อสู้ของฉันจากการวาง 8 ในแถวคอลัมน์หรือภูมิภาคนั้นโดยพื้นฐานแล้ว "ตำแหน่งทางยุทธศาสตร์นี้มีตำแหน่งเชิงกลยุทธ์กี่ตำแหน่งที่ลบออกจากกระดานเกม")
DukeZhou

5

ฉันประสบปัญหาคล้ายกันเมื่อเร็ว ๆ นี้กับ Minesweeper

วิธีที่ฉันแก้ไขมันก็คือการเพิกเฉยต่อการเคลื่อนไหวที่ผิดกฎหมาย / ไม่ถูกต้องทั้งหมด

  1. ใช้เครือข่าย Q เพื่อทำนายค่า Q สำหรับการกระทำทั้งหมดของคุณ (ถูกต้องและไม่ถูกต้อง)
  2. ประมวลผลค่า Q ล่วงหน้าล่วงหน้าโดยตั้งค่าการย้ายที่ไม่ถูกต้องทั้งหมดให้เป็นค่า Q ของเลขศูนย์ / จำนวนลบ (ขึ้นอยู่กับสถานการณ์ของคุณ)
  3. ใช้นโยบายที่คุณเลือกเพื่อเลือกการกระทำจากค่า Q ที่ปรับปรุงแล้ว (เช่นโลภหรือ Boltzmann)
  4. ดำเนินการกระทำที่เลือกและดำเนินการตรรกะ DQN ของคุณต่อ

หวังว่านี่จะช่วยได้


1
เกี่ยวกับสิ่งเดียวที่ฉันจะเพิ่มในสิ่งนี้คือคุณต้องจำไว้ว่าต้องทำ backprop ใน DQN เมื่อคุณตั้งค่า Q สำหรับคู่ที่ผิดกฎหมาย (s, a) เป็นค่าลบที่มีขนาดใหญ่ คู่ต่อไป
SN

แต่ฉันสงสัยว่าการตั้งค่าค่า Q เป้าหมายขนาดใหญ่จะทำอย่างไรกับความต่อเนื่องหรือรูปร่างของฟังก์ชันการสูญเสีย / ผิดพลาด (ซึ่งส่งผลต่อการค้นหาไล่ระดับสี) ประสบการณ์ของคุณคืออะไร?
SN

1
@SN ฉันเห็นจุดของคุณ ความคิดที่จะเลือกการกระทำที่มีQ-ค่าสูงสุดที่เป็นไม่ได้เป็นการกระทำที่ไม่ถูกต้อง ถัดไปคุณเรียกใช้การกระทำนั้นและใช้การกระทำนั้นในกฎการอัปเดตของคุณ (เช่นฝึกอบรม DQN ของคุณเพื่อสนับสนุนการกระทำนี้ในระยะยาว) สิ่งนี้จะทำให้ค่า Q ในอนาคตของการกระทำที่เลือกสูงขึ้นและทำให้เป็นที่น่าพอใจยิ่งขึ้น มันจะไม่ทำการกระทำผิดกฎหมายค่า Q ต่ำกว่าซึ่งไม่สำคัญเพราะจะถูกกรองออกมาเสมอ (ไม่ได้พิจารณา) แจ้งให้เราทราบหากคุณต้องการให้ฉันอธิบายเพิ่มเติมด้วยตัวอย่าง :)
Sanavesa

1
@Sanavesa ทำให้รู้สึกว่าคุณกำลังหลักในการ DQN ในที่สุดก็เรียนรู้สิ่งที่ตัวเลือกที่ถูกต้องคือผ่านโรงเรียนของความทุกข์ยาก แต่ในสถานการณ์ที่มีเพียงตัวเลือกทางกฎหมายเพียงไม่กี่ตัวคุณจะจบลงด้วยการเรียนรู้ที่ช้ามาก วิธีที่ฉันแนะนำคือวิธีการรวมโดเมน K เข้ากับปัญหาเพื่อเพิ่มความเร็วในการเรียนรู้นั้น มันเป็นสิ่งที่ฉันคิดว่าคุณกำลังทำในโพสต์ต้นฉบับของคุณที่คุณเขียนว่า "การตั้งค่าการย้ายที่ไม่ถูกต้องเป็นค่า Q เป็นศูนย์ / จำนวนลบ"
SN

1
@SNPrecisely! ทั้งสองวิธีมีข้อดี ขึ้นอยู่กับแอพพลิเคชั่นหากการเรียนรู้การเคลื่อนไหวทางกฎหมายง่ายขึ้นหรือไม่สนใจก็ได้ สำหรับแอพพลิเคชั่นที่ซับซ้อนขนาดใหญ่ฉันรู้สึกว่าการเพิกเฉยต่อการเคลื่อนไหวที่ไม่ถูกต้องนั้นเร็วกว่าที่เอเจนต์จะเรียนรู้ แต่อย่าอ้างฉันถึงสิ่งนั้น
Sanavesa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.