Q Learning in Python: มันคืออะไร, คำจำกัดความ [Coding Examples]
เผยแพร่แล้ว: 2020-03-26การเรียนรู้การเสริมแรงคือเมื่อตัวแทนการเรียนรู้เรียนรู้ที่จะประพฤติตนอย่างเหมาะสมตามสภาพแวดล้อมผ่านการโต้ตอบอย่างต่อเนื่อง ตัวแทนต้องผ่านสถานการณ์ต่างๆ ซึ่งเรียกอีกอย่างว่ารัฐ อย่างที่คุณเดาได้ การเรียนรู้แบบเสริมกำลังมีการใช้งานมากมายในโลกของเรา เรียนรู้เพิ่มเติม หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับอัลกอริธึมวิทยาศาสตร์ข้อมูล
นอกจากนี้ยังมีอัลกอริธึมมากมาย หนึ่งในอัลกอริธึมที่ได้รับความนิยมมากที่สุดคือ การเรียนรู้ Q ในบทความนี้ เราจะพูดถึงว่าอัลกอริทึมนี้คืออะไรและทำงานอย่างไร
ดังนั้นโดยไม่ต้องกังวลใจต่อไป มาเริ่มกันเลย
สารบัญ
Q Learning คืออะไร?
การเรียนรู้ Q เป็นอัลกอริธึมการเรียนรู้แบบเสริมกำลัง และเน้นที่การค้นหาแนวทางปฏิบัติที่ดีที่สุดสำหรับสถานการณ์เฉพาะ ไม่ใช้นโยบายเนื่องจากการดำเนินการที่ฟังก์ชันการเรียนรู้ของ Q เรียนรู้อยู่นอกนโยบายที่มีอยู่ ดังนั้นจึงไม่จำเป็นต้องทำ เน้นการเรียนรู้นโยบายที่เพิ่มผลตอบแทนโดยรวม เป็นรูปแบบง่ายๆ ของการเรียนรู้เสริมแรงที่ใช้ค่าการกระทำ (หรือค่า Q) เพื่อปรับปรุงพฤติกรรมของตัวแทนการเรียนรู้
การเรียนรู้ Q เป็นหนึ่งในอัลกอริธึมที่ได้รับความนิยมมากที่สุดในการเรียนรู้แบบเสริมกำลัง เนื่องจากง่ายต่อการทำความเข้าใจและนำไปใช้ 'Q' ในการเรียนรู้ Q แสดงถึงคุณภาพ ดังที่เราได้กล่าวไว้ก่อนหน้านี้ การเรียนรู้ Q มุ่งเน้นไปที่การค้นหาการดำเนินการที่ดีที่สุดสำหรับสถานการณ์เฉพาะ และคุณภาพจะแสดงให้เห็นว่าการกระทำหนึ่งๆ มีประโยชน์เพียงใด และรางวัลใดที่จะช่วยให้คุณบรรลุเป้าหมายได้
คำจำกัดความที่สำคัญ
ก่อนที่เราจะเริ่มพูดคุยถึงวิธีการทำงาน ก่อนอื่น เราควรมาดูแนวคิดที่สำคัญของการเรียนรู้ q ก่อน มาเริ่มกันเลย.
Q-ค่า
ค่า Q เรียกอีกอย่างว่าค่าการกระทำ โดยจะแสดงด้วย Q(S, A) และให้ค่าประมาณว่าการดำเนินการ A ควรทำที่สถานะ S นั้นดีเพียงใด ตัวแบบจะคำนวณการประมาณนี้ซ้ำๆ โดยใช้กฎการอัปเดตส่วนต่างเวลาที่เราได้พูดคุยกันในภายหลัง ในส่วนนี้.
ตอนและรางวัล
เอเจนต์เริ่มต้นจากสถานะเริ่มต้น ผ่านช่วงการเปลี่ยนภาพหลายครั้ง จากนั้นจึงย้ายจากสถานะปัจจุบันไปยังสถานะถัดไปตามการกระทำและสภาพแวดล้อม เมื่อใดก็ตามที่ตัวแทนดำเนินการ มันจะได้รับรางวัล และเมื่อไม่มีการเปลี่ยนฉาก ก็เป็นตอนจบของตอน
TD-Update (ความแตกต่างชั่วคราว)
นี่คือกฎ TD-Update หรือ Temporal Difference:
Q(S,A) Q(S,A) + (R + Q(S',A')-Q(S,A))
ที่นี่ S หมายถึงสถานะปัจจุบันของตัวแทน ในขณะที่ S' หมายถึงสถานะถัดไป A หมายถึงการดำเนินการปัจจุบัน A' หมายถึงการดำเนินการที่ดีที่สุดต่อไปนี้ตามการประมาณค่า Q-value R แสดงรางวัลปัจจุบันตามการกระทำปัจจุบัน หมายถึงปัจจัยการลดราคา และ แสดงความยาวของขั้นตอน
อ่านเพิ่มเติมได้ที่: ข้อกำหนดเบื้องต้นสำหรับวิทยาศาสตร์ข้อมูล เปลี่ยนแปลงไปตามกาลเวลาอย่างไร?
ตัวอย่าง Q Learning Python
วิธีที่ดีที่สุดในการทำความเข้าใจ Q การเรียนรู้ Python คือการดูตัวอย่าง ในตัวอย่างนี้ เรากำลังใช้สภาพแวดล้อมในยิมของ OpenAI และฝึกโมเดลของเราด้วย ก่อนอื่น คุณจะต้องติดตั้งสภาพแวดล้อม คุณสามารถทำได้ด้วยคำสั่งต่อไปนี้:
pip ติดตั้งยิม
ตอนนี้ เราจะนำเข้าไลบรารีที่เราต้องการสำหรับตัวอย่างนี้:
ยิมนำเข้า
นำเข้า itertools
นำเข้า matplotlib
นำเข้า matplotlib.style
นำเข้า numpy เป็น np
นำเข้าแพนด้าเป็น pd
นำเข้าsys
จากคอลเลกชันนำเข้า defaultdict
จาก windy_gridworld นำเข้า WindyGridworldEnv
นำเข้าการวางแผน
matplotlib.style.use('ggplot')
หากไม่มีไลบรารีที่จำเป็น คุณจะไม่สามารถดำเนินการเหล่านี้ได้สำเร็จ หลังจากที่เรานำเข้าไลบรารีแล้ว เราจะสร้างสภาพแวดล้อม:
env = WindyGridworldEnv ()
ตอนนี้เราจะสร้าง นโยบาย -greedy:
def createEpsilonGreedyPolicy(Q, epsilon, num_actions):
“””
สร้างนโยบายตะกละเอปไซลอนตาม
บนฟังก์ชัน Q และเอปไซลอนที่กำหนด
ส่งกลับฟังก์ชันที่รับ state
เป็นอินพุตและส่งคืนความน่าจะเป็น
สำหรับแต่ละการกระทำในรูปแบบของอาร์เรย์จำนวนมาก
ของความยาวของพื้นที่ดำเนินการ (ชุดของคำตอบที่เป็นไปได้)
“””
def policyFunction(state):
Action_probabilities = np.ones (num_actions,
dtype = float) * epsilon / num_actions
best_action = np.argmax(Q[สถานะ])
Action_probabilities[best_action] += (1.0 – เอปไซลอน)
ผลตอบแทน Action_probabilities
นโยบายการคืนสินค้าFunction
นี่คือรหัสสำหรับสร้างโมเดล q-learning:

def qLearning (env, num_episodes, discount_factor = 1.0,
อัลฟา = 0.6, เอปซิลอน = 0.1):
“””
อัลกอริทึม Q-Learning: การควบคุม TD นอกนโยบาย
ค้นหานโยบายโลภที่ดีที่สุดในขณะที่ปรับปรุง
ตามนโยบายตะกละเอปซิลอน”””
# ฟังก์ชันค่าการกระทำ
# พจนานุกรมซ้อนกันที่แมป
# state -> (action -> action-value)
Q = defaultdict(แลมบ์ดา: np.zeros(env.action_space.n))
# ติดตามสถิติที่เป็นประโยชน์
สถิติ = การวางแผน EpisodeStats (
episode_lengths = np.zeros (num_episodes),
episode_rewards = np.zeros (num_episodes))
# สร้างฟังก์ชันนโยบายโลภของเอปซิลอน
#เหมาะสมกับพื้นที่ปฏิบัติการสิ่งแวดล้อม
นโยบาย = createEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)
#ทุกตอน
สำหรับ ith_episode ในช่วง (num_episodes):
# รีเซ็ตสภาพแวดล้อมและเลือกการกระทำแรก
รัฐ = env.reset()
สำหรับ t ใน itertools.count():
# รับความน่าจะเป็นของการกระทำทั้งหมดจากสถานะปัจจุบัน
action_probabilities = นโยบาย (รัฐ)
#เลือกการกระทำตาม
#การแจกแจงความน่าจะเป็น
การกระทำ = np.random.choice(np.arange(
len(action_probabilities)),
p = การกระทำ_ความน่าจะเป็น)
# ดำเนินการและรับรางวัลขนส่งไปยังสถานะต่อไป
next_state, ให้รางวัล, เสร็จสิ้น, _ = env.step(action)
#อัพเดทสถิติ
stats.episode_rewards[i_episode] += รางวัล
stats.episode_lengths[i_episode] = t
# TD อัปเดต
best_next_action = np.argmax(Q[next_state])
td_target = รางวัล + ส่วนลด_factor * Q[next_state][best_next_action]
td_delta = td_target – Q[สถานะ][การกระทำ]
Q[state][action] += alpha * td_delta
#เสร็จสิ้นจะเป็นจริงหากตอนสิ้นสุด
ถ้าเสร็จแล้ว:
หยุดพัก
รัฐ = next_state
ส่งคืน Q สถิติ
มาฝึกโมเดลกันตอนนี้:
Q สถิติ = qLearning(env, 1000)
หลังจากที่เราสร้างและฝึกโมเดลแล้ว เราสามารถพล็อตสถิติที่สำคัญของโมเดลเดียวกันได้:
plotting.plot_episode_stats (สถิติ)
ใช้รหัสนี้เพื่อเรียกใช้แบบจำลองและลงจุดกราฟ เห็นผลแบบไหน? แบ่งปันผลลัพธ์ของคุณกับเรา และหากคุณพบความสับสนหรือข้อสงสัย โปรดแจ้งให้เราทราบ
อ่านเพิ่มเติม: อัลกอริธึมการเรียนรู้ของเครื่องสำหรับวิทยาศาสตร์ข้อมูล
เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูล จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
ความคิดสุดท้าย
เมื่อคุณพล็อตกราฟ คุณจะเห็นว่ารางวัลต่อตอนจะเพิ่มขึ้นเรื่อยๆ เมื่อเวลาผ่านไป และหลังจากบางตอน โครงเรื่องยังสะท้อนให้เห็นว่าระดับการจำกัดรางวัลสูงต่อตอน สิ่งนี้บ่งบอกถึงอะไร?
หมายความว่าโมเดลของคุณได้เรียนรู้ที่จะเพิ่มรางวัลรวมที่จะได้รับในตอนหนึ่งๆ โดยทำให้แน่ใจว่าโมเดลจะทำงานอย่างเหมาะสมที่สุด คุณต้องเคยเห็นด้วยว่าทำไม q การเรียนรู้ Python จึงเห็นแอปพลิเคชันในหลายอุตสาหกรรมและพื้นที่
ข้อเสียของการเรียนรู้แบบเสริมแรงคืออะไร?
1. การเรียนรู้แบบเสริมแรงที่มากเกินไปอาจส่งผลให้เกิดสภาวะที่มากเกินไป ทำให้คุณภาพของผลลัพธ์ลดลง
2. ไม่แนะนำให้เรียนรู้การเสริมแรงเพื่อการแก้ปัญหาที่ง่าย
3. การเรียนรู้การเสริมกำลังจำเป็นต้องมีข้อมูลและการคำนวณจำนวนมาก
4. การเรียนรู้การเสริมกำลังมีอุปสรรคที่ซับซ้อนและซับซ้อนมากในตัวเอง เช่น การตั้งค่าการออกแบบการฝึกอบรมที่ท้าทาย และปัญหาเกี่ยวกับความสมดุลของการสำรวจและการเสริมกำลัง
Q การเรียนรู้แบบอิงตามโมเดลหรือไม่?
ไม่ การเรียนรู้ของ Q ไม่ได้ขึ้นอยู่กับแบบจำลอง Q-learning เป็นเทคนิคการเรียนรู้การเสริมแรงแบบไม่มีโมเดลเพื่อกำหนดมูลค่าของการดำเนินการบางอย่างในสถานะที่กำหนด การเรียนรู้ของ Q เป็นหนึ่งในอัลกอริธึมการเรียนรู้แบบเสริมกำลังที่มีอยู่ในปัจจุบันซึ่งไม่มีโมเดล ซึ่งหมายความว่าอาจใช้ในบริบทที่หลากหลายและสามารถปรับให้เข้ากับสภาวะใหม่และที่ไม่รู้จักได้อย่างรวดเร็ว สามารถจัดการกับปัญหาที่เกี่ยวข้องกับการเปลี่ยนแปลงแบบสุ่มและผลตอบแทนโดยไม่ต้องมีการปรับเปลี่ยนและไม่ต้องการแบบจำลองสภาพแวดล้อม Q-learning เป็นอัลกอริธึมการเรียนรู้ที่ยึดตามค่านิยม อัลกอริธึมแบบอิงค่าจะใช้สมการเพื่ออัปเดตฟังก์ชันค่า (โดยเฉพาะสมการของเบลล์แมน)
Q Learning กับ SARSA ต่างกันอย่างไร?
SARSA เรียนรู้นโยบายที่ใกล้เคียงที่สุดในขณะที่สำรวจ ในขณะที่ Q-learning เรียนรู้นโยบายที่เหมาะสมที่สุดโดยตรง SARSA นอกนโยบายจะเรียนรู้ค่าการดำเนินการที่เกี่ยวข้องกับนโยบายที่ติดตาม ในขณะที่ SARSA ที่อยู่ในนโยบายจะเรียนรู้ค่าการดำเนินการที่เกี่ยวข้องกับนโยบายที่ติดตาม ในความสัมพันธ์กับนโยบายโลภ Q-Learning ทำเช่นนั้น ทั้งสองมาบรรจบกับฟังก์ชันค่าจริงภายใต้เงื่อนไขที่คล้ายคลึงกัน แต่มีความเร็วต่างกัน Q-Learning ใช้เวลานานขึ้นเล็กน้อยในการมาบรรจบกัน แต่อาจยังคงเรียนรู้ต่อไปในขณะที่กฎข้อบังคับมีการเปลี่ยนแปลง เมื่อรวมกับการประมาณเชิงเส้น Q-Learning ไม่รับประกันว่าจะมาบรรจบกัน SARSA จะพิจารณาบทลงโทษจากขั้นตอนการสำรวจเมื่อเข้าใกล้การบรรจบกัน ในขณะที่ Q-learning จะไม่พิจารณา หากมีโอกาสให้รางวัลเชิงลบอย่างมีนัยสำคัญตามเส้นทางในอุดมคติ Q-learning จะพยายามกระตุ้นมันขณะสำรวจ อย่างไรก็ตาม SARSA จะพยายามหลีกเลี่ยงเส้นทางที่เหมาะสมที่สุดที่มีความเสี่ยงและเรียนรู้ที่จะใช้มันหลังจากพารามิเตอร์การสำรวจลดลงเท่านั้น