카테고리 없음

패스트캠퍼스 환급챌린지 46일차 : 스크래치부터 시작하는 강화학습의 모든 것 강의 후기

dev-self 2025. 4. 19. 11:47

*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

|내용 정리|

<SARSA 알고리즘>

SARSA란?

 

SARSA는 강화학습에서 가장 널리 사용되는 시간차 학습(Temporal Difference Learning) 알고리즘 중 하나이다. 이름은 알고리즘이 사용하는 다섯 가지 요소 State(상태), Action(행동), Reward(보상), next State(다음 상태), next Action(다음 행동)의 첫 글자에서 유래했다.

 

SARSA(State-Action-Reward-State-Action) 알고리즘은 강화학습의 대표적인 알고리즘 중 하나이다. SARSA의 핵심은 현재 정책에서 실제로 선택한 다음 행동(a')을 사용하여 업데이트한다는 점이다. 이것은 "on-policy" 학습 방식으로, 현재 사용 중인 정책을 직접 평가하고 개선하며 이 방식은 Q-learning과 달리 실제로 취하는 행동을 기반으로 학습하기 때문에 보다 안전한 정책을 학습하는 경향이 있다.

핵심 특징

  1. 온-폴리시(On-policy) 학습: SARSA는 현재 정책으로 선택한 실제 행동을 사용하여 가치 함수를 업데이트한다. 이는 실제 에이전트가 따르는 정책과 동일한 정책으로 학습한다는 의미이다.
  2. 업데이트 공식:
Q(s, a) = Q(s, a) + α[r + γQ(s', a') - Q(s, a)]
  • α: 학습률(learning rate)
  • γ: 할인 계수(discount factor)
  • r: 즉각적인 보상
  • s, a: 현재 상태와 행동
  • s', a': 다음 상태와 행동

SARSA의 장점과 특성

  1. 안전한 정책 학습:
    • 실제로 따르는 정책의 행동을 사용하여 학습하므로, 위험한 상태를 피하는 안전한 정책을 학습하는 경향이 있다.
    • 탐험 중에 발생할 수 있는 부정적인 결과를 고려한다.
  2. 수렴 과정:
    • 정책 평가와 정책 개선을 반복하면서 지그재그 경로로 최적 정책에 점진적으로 수렴한다.
    • 충분한 탐험과 적절한 파라미터 설정 하에서 최적 정책에 수렴함이 이론적으로 보장된다.
  3. Q-Learning vs SARSA
    • SARSA는 on-policy로, 실제 선택한 a′을 사용해 보수적으로 학습.(탐험 중 발생할 수 있는 위험을 고려하므로 더 안전한 정책을 학습하는 경향)
    • Q-Learning은 off-policy로, 최대 Q값을 사용해 더 aggressive하게 학습.(최적의 행동만 고려하므로 더 공격적인 정책을 학습하는 경향)

알고리즘 흐름:

  1. 초기 상태 (왼쪽 상단)
    • 초기 Q 함수와 정책 π를 설정한다 (Q₀, π₀)
    • 여기서 Q는 상태-행동 가치 함수로, 특정 상태에서 특정 행동을 취했을 때 예상되는 보상의 가치를 나타낸다.
  2. 탐욕 정책 (오른쪽 상단)
    • 현재 Q 함수를 기반으로 탐욕적 정책을 생성한다. (π = greedy(Q))
    • 즉, 각 상태에서 가장 높은 Q 값을 가진 행동을 선택한다.
  3. 다음 상태와 행동 (오른쪽 하단)
    • 현재 정책에 따라 행동을 선택하고 환경과 상호작용하여 다음 상태 s'와 다음 행동 a'를 관찰한다.
  4. SARSA 업데이트 (왼쪽 하단) 
    • 현재 상태-행동 쌍 (s, a)의 Q 값을 다음 공식으로 업데이트한다:
    • Q(s,a) += α[r + γQ(s', a') - Q(s,a)]
    • 여기서 α는 학습률, r은 즉각적인 보상, γ는 할인 계수이다.
  5. 반복 (화살표로 연결된 순환)
    • 이 과정을 계속 반복하면서 Q 함수를 개선하고 최적 정책에 수렴해 강다.

ε-Greedy Policy란?

  • ε-Greedy Policy 수식
    • : 탐험 확률 (시간에 따라 감소).
    • ∣A∣: 가능한 행동의 수.
    • 최적 행동 선택 확률은 , 나머지는 균등 분배.
  • ε 감소 공식:
    • k: 감소 속도 조절 상수.
    • t: 시간 단계. 시간이 지남에 따라 ϵ이 0에 수렴 → 점점 탐험을 줄임.

ε-Greedy 내용 설명

기본 개념

ε-Greedy Policy는 다음과 같이 작동한다:

  • 확률 ε (epsilon)로 무작위 행동 선택 (탐험)
    • 새로운 행동을 시도하여 아직 알지 못하는 더 나은 보상을 찾을 기회를 제공한다.
  • 확률 (1-ε)로 현재 알고 있는 최적의 행동 선택 (활용)
    • 현재까지 학습한 정보를 바탕으로 가장 높은 가치를 가진 행동을 선택한다.
    • 일반적으로 Q 함수에서 가장 높은 값을 가진 행동을 선택한다 (Q[s]의 최댓값).

코드 구현

def epsilon_greedy_policy(Q, state, epsilon):
    # 확률 ε로 무작위 행동 선택 (탐험)
    if np.random.rand() < epsilon:
        return np.random.randint(Q.shape[1])  # 가능한 행동 중 무작위로 선택
    # 확률 (1-ε)로 최적 행동 선택 (활용)
    else:
        return np.argmax(Q[state])  # 가장 높은 Q 값을 가진 행동 선택

ε-Greedy의 중요성

  • 탐험-활용 딜레마 해결:
    • 새로운 가능성을 탐색하는 것(탐험)과 현재 알고 있는 최적의 전략을 사용하는 것(활용) 사이의 균형을 제공한다.
  • 수렴 보장:
    • ε 값이 적절히 감소하는 경우(점점 탐험을 줄이고 활용을 늘리는 경우), 충분한 학습 후에는 최적 정책에 수렴할 수 있다.
  • 단순성과 효율성:
    • 구현이 간단하면서도 강화학습에서 효과적인 성능을 보이는 방법입니다.

ε 값의 선택

  • 높은 ε 값 (예: 0.9): 탐험을 많이 하게 되어 새로운 경로와 가능성을 많이 발견할 수 있지만, 학습 속도가 느릴 수 있다.
  • 낮은 ε 값 (예: 0.1): 이미 알고 있는 최적의 행동을 주로 선택하게 되어 학습이 빠를 수 있지만, 더 나은 해결책을 놓칠 가능성이 있다.
  • 감소하는 ε 값: 학습 초기에는 높은 ε 값으로 많은 탐험을 하다가, 학습이 진행됨에 따라 ε 값을 점차 줄여 활용 비중을 높이는 전략이 자주 사용된다.
# 감소하는 ε 예시
epsilon = max(0.01, initial_epsilon * (decay_rate ** episode_num))

ε-Greedy Policy의 역할

  • 탐험(Exploration)과 활용(Exploitation) 균형:
    • 초기에는 높은 ϵ으로 다양한 행동 탐험.
    • 점차 ϵ이 감소하며 최적 행동(argmax Q(s,a))을 선택할 확률 증가.
  • 점진적 Greedy화:
    • ϵ→0이 되면 완전한 Greedy 정책()으로 수렴.

Policy Improvement Theorem 연결

  • MC Control의 ε-Soft Policy와 유사한 조건을 충족.
  • ε-Greedy 정책은 모든 상태에서 π(a∣s)>0을 보장하므로, Policy Improvement Theorem이 적용 가능.
  • 즉, Qπ(s,π′(s))≥Qπ(s,π(s))일 때 π′ π보다 우수함.

SARSA와의 연관성

  • SARSA는 ε-Greedy 정책을 사용해 On-policy로 학습.
  • 탐험을 통해 수집한 (s,a,r,s′,a′)으로 Q 함수를 업데이트하며, 동시에 정책을 개선.

정리

  • ε-Greedy 정책은 점진적으로 탐험을 줄이며 최적 정책으로 수렴하는 핵심 메커니즘이다.
  • 시간 의존적 ϵ설계는 초기 탐험을 보장하고, 후기에는 활용을 강조해 효율적인 학습을 가능하게 한다.
  • 이 접근법은 Policy Improvement Theorem을 만족하므로, 이론적으로 최적 정책 도달이 보장된다.

시각화 (ε-Greedy 정책 변화)

  • 별표(*)는 ε의 감소 추세를 나타냄. 초기에는 탐험 위주, 후기에는 활용 위주로 전환.

구현 예시

  • "Q = Q^π": 현재 정책에 대한 가치 함수 평가
    • "π = greedy(Q)": 가치 함수를 기반으로 정책 개선
    • 이 두 과정을 번갈아 반복하며 최적 정책에 수렴
import numpy as np

def sarsa(env, alpha=0.1, gamma=0.99, epsilon=0.1, episodes=1000):
    # Q 함수 초기화
    Q = np.zeros((env.observation_space.n, env.action_space.n))
    
    for _ in range(episodes):
        s, _ = env.reset()
        done = False
        # ε-greedy 정책으로 초기 행동 선택
        a = epsilon_greedy_policy(Q, s, epsilon)
        
        while not done:
            # 행동 실행 및 관측
            s_next, r, terminated, truncated, _ = env.step(a)
            done = terminated or truncated
            
            if done:
                # 에피소드 종료 시 업데이트
                Q[s, a] += alpha * (r - Q[s, a])
            else:
                # 다음 행동 선택
                a_next = epsilon_greedy_policy(Q, s_next, epsilon)
                # SARSA 업데이트
                Q[s, a] += alpha * (r + gamma * Q[s_next, a_next] - Q[s, a])
                # 상태와 행동 업데이트
                s, a = s_next, a_next
    
    return Q

def epsilon_greedy_policy(Q, s, epsilon):
    if np.random.rand() < epsilon:
        return np.random.randint(Q.shape[1])  # 탐험: 무작위 행동
    else:
        return np.argmax(Q[s])  # 활용: 최적 행동

 

 

|인증|

 

-------

패스트캠퍼스 링크

https://bit.ly/4hTSJNB