Skip to content

למידת חיזוק ו־Q-learning מדוגמת צעצוע להערכה בטוחה

למידת חיזוק ו־Q-learning מדוגמת צעצוע להערכה בטוחה

גרסה לימודית מתוקנת; תאריך המקור האנגלי: 2026-07-17T10:11:17.324+03:00. המהדורה בעברית משתמשת בתאריך הפרסום שלה בפועל, ולא בתאריך המקור באנגלית. כל דוגמאות הקוד והמספרים להמחשה בלבד ולא הורצו או נמדדו במסגרת ההכנה הזאת. English original

כולנו ראינו את הכותרות. בינה מלאכותית כותבת קוד, מייצרת וידאו פוטוריאליסטי ומנצחת רבי־אמן בגו. אבל כמהנדסי תוכנה, יש פער עצום בין שימוש ב־API שאומן מראש לבין הבנת המנגנונים שבאמצעותם המערכות האלה לומדות. אם הצצתם במאמרים האקדמיים שמניעים את המהפכה, כנראה נתקלתם בחומה של סימונים מתמטיים צפופים, אותיות יווניות וז׳רגון אקדמי מאיים.

ל־The Little Book of Reinforcement Learning יש מאגר ציבורי תחת alxndrTL, המתאר מבוא מהיסודות ועד אלגוריתמים יישומיים וגרסה ראשונה ביוני 2026. הייחוס המקורי ל־Riccardo Fusaroli והטענות על השפעה בקהילה אינם מבוססים כאן. המאמר הוא הסבר מבוא עצמאי, לא סיכום מאומת או המלצה מבוססת על הספר. [מקור 1]

היום נעמיק במושגי היסוד של למידת חיזוק. נפרק את הארכיטקטורה של מערכת RL, נכתוב מאפס מימוש נקי וקריא של סוכן Q-learning ב־Python ונדון ביישום העקרונות באתגרי הנדסת תוכנה מעשיים, כמו הגבלת קצב, פינוי מטמון והקצאת משאבי ענן.

המודל הבסיסי מצב פעולה ותגמול

למידת חיזוק עוסקת בהחלטות סדרתיות באמצעות תגמולים מאינטראקציה או מניסיון שנאסף קודם. בניגוד לדוגמאות רגילות בלמידה מונחית עם תוויות יעד, פעולות משפיעות על תצפיות ותגמולים בהמשך. ניסוי וטעייה הוא דימוי למבוא, לא דרישה לבצע ניסויים במערכות ייצור חיות. [מקור 1]

חמישה מושגים מספקים נקודת התחלה; RL מעשי דורש גם הנחות זהירות, תכנון תגמול, חקירה, הערכה ואילוצי בטיחות. [מקור 1]

  • הסוכן: התוכנה או הישות שמאמנים, כלומר האלגוריתם שלכם.
  • הסביבה: העולם שאיתו הסוכן מתקשר. זה יכול להיות לוח משחק, טופולוגיית רשת או שוק מניות מדומה.
  • מצב S מתאר את מצב ההחלטה. במודל מרקובי שנצפה במלואו הוא מכיל את המידע הנחוץ לחיזוי המעבר הבא בהינתן פעולה; סוכנים אמיתיים מקבלים לעיתים קרובות רק תצפית חלקית. [מקור 1]
  • פעולה, A: המהלך או ההחלטה שהסוכן מבצע.
  • תגמול R הוא אות מספרי שמגדיר מתכנן המשימה. ערכים חיוביים ושליליים נפוצים, אך הסימן לבדו אינו מגדיר התנהגות טובה: תגמול שתוכנן לא נכון יכול לעודד קיצורי דרך לא רצויים. [מקור 1]

הקשר בין המרכיבים מיוצג בלולאה מתמשכת:

Environment -- state S and reward R --> Agent
Agent -- action A --> Environment
The cycle repeats; rewards may be delayed.

תרגום התרשים: הסביבה מעבירה לסוכן מצב S ותגמול R; הסוכן בוחר פעולה A המשפיעה על הסביבה; המחזור חוזר. ENVIRONMENT פירושו סביבה ו־AGENT פירושו סוכן.

המטרה היא בדרך כלל תוחלת התשואה, למשל סכום מהוון של תגמולים. מדיניות ממפה מצבים או תצפיות לפעולות או להתפלגות הסתברות על פעולות; היא אינה חייבת להיות טבלת חיפוש, ומדיניות שנלמדה אינה בהכרח מיטבית. [מקור 1]

איך סוכנים לומדים משוואת בלמן ו־Q-learning

איך סוכן יודע איזו פעולה תוביל לתגמול הטוב ביותר בטווח הארוך? פעולה פשוטה עשויה להעניק תגמול קטן עכשיו, אך להוביל למבוי סתום בהמשך. לעומת זאת, הקרבה זמנית בדמות תגמול שלילי עשויה להכין את הקרקע לרווח גדול בהמשך.

Q-learning טבלאי הוא שיטה ללא מודל השומרת אומדני ערך לצמדי מצב ופעולה. הערך אומד את תוחלת התשואה המהוונת לאחר פעולה, עם יעד המשך חמדני. הייצוג בטבלה מתאים למרחבים בדידים קטנים; יש גם גרסאות של Q-learning עם קירוב פונקציות ושיקולי יציבות אחרים. [מקור 1]

הביטוי הבא הוא עדכון Q-learning המבוסס על דגימה ונגזר מיחס האופטימליות של בלמן, ולא משוואת בלמן עצמה. למעבר שמסתיים באמת אין ערך עתידי להמשך האומדן. [מקור 1]

# PSEUDOCODE, not executable Python; no experimental result:
bootstrap = 0 if terminated else max_a_prime Q(s_prime, a_prime)
target = reward + gamma * bootstrap
Q(s, a) = Q(s, a) + alpha * (target - Q(s, a))

אל תתנו לסימון להפחיד אתכם. נפרק אותו לפרמטרים שאפשר להגדיר בקוד:

  • אלפא היא גודל הצעד, בדרך כלל בין 0 ל־1. ערך קבוע של 0.1 הוא בחירה לימודית, לא הוכחת התכנסות; התכנסות תאורטית דורשת תנאים נוספים על ביקורים וקצב למידה. [מקור 1]
  • גמא מהוונת תגמולים עתידיים. ערכים קטנים מ־1 נפוצים במשימות מתמשכות עם היוון; 0.9 פירושו שתגמול בצעד הבא מקבל מקדם של 0.9. האופק האפקטיבי תלוי במשך הצעד ובמשימה; גמא השווה ל־1 דורשת הנחות מתאימות על אפיזודות. [מקור 1]
  • המקסימום על הפעולות במצב הבא הוא אומדן ערך הפעולה הגדול ביותר ב־s-prime, ולא רק התגמול המיידי הבא. מאפסים את רכיב ההמשך בסיום אמיתי, אך לא אוטומטית כשמגיעים למגבלת זמן חיצונית. [מקור 1] [מקור 2]

תרגול בניית סוכן Q-learning ב־Python

נשתמש ברשת צעצוע חד־ממדית עם מצבים 0–4. מצב 0 מסיים עם ‎-10, מצב 4 מסיים עם ‎+10, וצעדי הביניים עולים ‎-1. פעולת האיפוס המתוקנת בוחרת באקראי מצב 1 או 2, בהתאם לתיאור; קוד המקור התחיל תמיד ב־1.

הדוגמה הבאה לא הורצה ומשתמשת ב־Python וב־NumPy, לא ב־PyTorch או TensorFlow. היא מוסיפה זרע אקראיות קבוע, בדיקת פעולות, טיפול מפורש בסיום, שבירת שוויון אקראית ותקרת אימון של 100 צעדים. קטיעה בגלל מגבלת צעדים עדיין כוללת אומדן המשך; היא אינה מתבלבלת עם הגעה לבור או ליעד. אין טענה לפלט אימון שהתקבל או לתוצאת ביצועים. [מקור 1] [מקור 2]

# Runtime-untested teaching example. Requires NumPy.
import numpy as np
rng = np.random.default_rng(42)

class GridWorld:
    def __init__(self):
        self.state = 1
    def reset(self):
        self.state = int(rng.choice([1, 2]))
        return self.state
    def step(self, action):
        if action not in (0, 1):
            raise ValueError("action must be 0 (left) or 1 (right)")
        if self.state in (0, 4):
            raise RuntimeError("reset after termination")
        self.state += -1 if action == 0 else 1
        terminated = self.state in (0, 4)
        reward = -10 if self.state == 0 else 10 if self.state == 4 else -1
        return self.state, reward, terminated

alpha, gamma, epsilon = 0.1, 0.9, 0.3
q_table = np.zeros((5, 2))
env = GridWorld()
for episode in range(500):
    state = env.reset()
    for step_index in range(100):
        if rng.random() < epsilon:
            action = int(rng.integers(2))
        else:
            ties = np.flatnonzero(q_table[state] == q_table[state].max())
            action = int(rng.choice(ties))
        next_state, reward, terminated = env.step(action)
        bootstrap = 0.0 if terminated else float(q_table[next_state].max())
        target = reward + gamma * bootstrap
        q_table[state, action] += alpha * (target - q_table[state, action])
        state = next_state
        if terminated:
            break
        # Reaching 100 steps truncates training, but is not task termination.
print("Q-table: rows=states 0..4; columns=left,right")
print(q_table)
# No output has been generated or validated for this article.

הבנת הקוד

מבדיקת תכנון התגמול בדוגמת הצעצוע עולה שתנועה ימינה במצב 3 מעניקה ‎+10 ומסיימת. עדכונים יכולים להעביר את המידע הזה למצבים 2 ו־1. יש לבדוק בנפרד אם ריצה סופית מסוימת לומדת את המדיניות החמדנית המצופה, באמצעות זרעים שונים ואפיזודות הערכה ללא חקירה; לא בוצעה כאן ריצה כזאת. [מקור 1]

למה מהנדסי תוכנה צריכים להכיר זאת גם מחוץ למשחקים

RL הוא מועמד לחלק מבעיות האופטימיזציה הסדרתית, לא תחליף אוטומטי לבקרים דטרמיניסטיים. השוו אותו להיוריסטיקות ולבקרים פשוטים יותר, והתחשבו בנתוני אימון, שינויי עומס, יעילות דגימות, השהיה, יכולת הסבר וסיכון החקירה. [מקור 1]

1 הגבלת קצב ועיצוב תעבורה דינמיים

תכנון מחקרי יכול לצפות בעומס ובהשהיה, להציע שינויים מוגבלים במגבלת הקצב ולדרג השלמות ויציבות. אין בכך הוכחה ש־RL עדיף על מגבילים מסתגלים רגילים. אכפו מגבלות קשיחות של קיבולת והוגנות מחוץ למדיניות הנלמדת, העריכו לא מקוון או בסימולטור ואז בדקו במצב צל לפני ששוקלים פריסה מבוקרת.

2 פינוי מטמון חכם

LRU ו־LFU הן נקודות ייחוס שימושיות שיעילותן תלויה בתיעוד הגישה. אפשר להעריך מדיניות פינוי נלמדת מולן בעומסי עבודה משתנים ומייצגים, כולל עלות ההסקה וטביעת הזיכרון שלה. לא מוצג כאן כשל גורף של ההיוריסטיקות או שיפור בשיעור הפגיעות בזכות RL.

3 הרחבה אוטומטית של תשתיות ענן

HPA של Kubernetes משנה את מספר עותקי עומס העבודה לפי מדדי משאבים, מדדים מותאמים או חיצוניים; הוא אינו מוגבל לסף מעבד ואינו מקצה בעצמו צמתים. מדיניות הרחבה נלמדת היא חלופה ניסיונית הדורשת גבולות בטוחים, מנגנון גיבוי והערכה. אופטימיזציה של תגמול אינה מבטיחה SLA או חשבון נמוך יותר. [מקור 1]

לסיכום התחילו בקטן

התחילו בסימולטור קטן שמוגדר במלואו ובקו בסיס מובן. מאגר הספר המקושר הוא משאב קריאה אחד; המאמר אינו טוען לסקירת מלוא תוכנו. הבנת מצב, תגמול ועדכונים היא התחלה, לא ראיה שבקר תשתית מוכן לייצור. [מקור 1]

Gymnasium הוא פרויקט של Farama Foundation שהתפצל מ־OpenAI Gym. ה־API שלו מבחין בין תצפיות, תגמולים, סיום וקטיעה, ואוסף הסביבות תומך בניסויים ניתנים לשחזור. פעלו לפי ה־API העדכני שלו, במקום להניח שקטעי קוד ישנים של Gym תואמים אוטומטית. [מקור 1]

האם ניסיתם לממש קבלת החלטות בסיסית המבוססת על היוריסטיקות ביישומים שלכם, או שאתם שוקלים להוסיף סוכן RL לאופטימיזציה של התשתית? כתבו בתגובות או שתפו את המאמר עם מוביל ה־DevOps בצוות!

תכנות מהנה!

מקורות ראשוניים לתיקונים

Post a Comment

Previous Post Next Post