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 จะพยายามหลีกเลี่ยงเส้นทางที่เหมาะสมที่สุดที่มีความเสี่ยงและเรียนรู้ที่จะใช้มันหลังจากพารามิเตอร์การสำรวจลดลงเท่านั้น