지금까지는 강화학습의 이론적인 내용을 중심으로 살펴보았다면, 이번 DQN부터는 실제 코드를 통해 강화학습이 어떻게 작동하는지 직접 확인해볼 차례다.
앞서 학습한 것처럼, 우리는 인공신경망을 활용하여 행동가치함수(Q함수)를 근사할 수 있다. 이
때 신경망의 가중치 파라미터 w를 사용하며, 경사하강법을
통해 참된 행동가치함수와 신경망이 근사한 Q함수 간의 차이를 최소화하는 방향으로 w를 반복적으로 업데이트한다.
이 과정을 충분히 반복하다 보면, 신경망은 참된 행동가치함수를 매우
잘 모사하는 형태로 수렴하게 되고, 우리는 이를 통해 강화학습 에이전트가 어떤 상태에서 어떤 행동을
취해야 할지를 효과적으로 학습할 수 있게 된다.
DQN 예측
오류 함수
(1) 목표함수: 참 행동가치함수와의
차이 최소화
DQN에서 사용하는 인공신경망의 핵심 목표는, 실제 행동가치함수(참 행동가치함수)를
가능한 정확하게 흉내 내는 것이다. 이를 위해 우리는 신경망이 예측한 행동가치값과 실제 행동가치값 사이의
차이를 계산하고, 그 차이를 최소화하는 방향으로 신경망을 학습시킨다.
이 차이는 예측 오류로 표현되며, 신경망의 출력이 실제 정답과 얼마나 가까운지를 수치로
나타낸다.
(2) 학습 방향: 오차를
줄이는 방향으로 가중치 조정
행동가치의 예측과 실제 사이의 차이를 줄이기 위해, 신경망의 파라미터인
가중치 w를 지속적으로 수정해 나간다. 가중치가 바뀔수록
신경망의 출력도 달라지며, 이 과정을 반복하면서 예측값이 점점 실제값에 가까워지도록 만든다. 이상적으로는 신경망이 실제 행동가치함수와 완전히 일치하게 되면, 더
이상 수정할 필요 없는 최적의 파라미터 w를 찾게 되는 것이다.
(2)-1) TD 오차: 실제
경험값과 신경망 예측값의 차이
이 과정에서 우리가 사용하는 핵심 개념이 바로 시간차(TD, Temporal
Difference) 오차이다. 앞부분은 에이전트를 실행해서 얻은 실제 경험으로부터 계산된
가치이며, 뒷부분은 신경망이 현재 상태에서 해당 행동의 가치를 예측한 값이다. 이 두 값의 차이가 TD 오차이며,
이 값이 0에 가까워질수록 신경망이 실제 상황을 더 잘 반영하고 있다는 뜻이 된다. TD 오차는 신경망이 어느 정도 잘 학습되었는지를 판단하는 중요한 기준이 된다.
(3) 예측 오류 함수(Prediction
Error): 학습의 기준
예측 오류는 신경망이 학습해야 할 대상, 즉 줄여야 할 오차를 의미한다. 이 값이 클수록 신경망의 예측이 실제와 다르다는 뜻이며, 작을수록
예측이 정확하다는 뜻이다. DQN에서는 이 예측 오류를 최소화하는 방향으로 신경망을 학습시킨다. 결국 우리가 원하는 것은, 이 예측 오류가 0에 가까워지는, 즉 실제와 거의 동일한 행동가치함수를 예측할 수
있는 신경망을 만드는 것이다.
(3)-1 에이전트 실행을 통해 얻은 행동가치
이 부분은 에이전트가 환경에서 직접 행동을 취한 후 얻은 보상과, 그
다음 상태에서의 예측값을 바탕으로 계산한 실제 행동가치이다. 실제로 환경을 통해 경험한 데이터를 기반으로
만들어졌기 때문에, 일종의 정답 데이터 역할을 한다.
(3)-2 신경망이 예측한 현재 상태의 행동가치
이 값은 신경망이 현재 상태와 행동을 입력받아 예측한 행동가치이다. 즉, 신경망의 출력 결과이며, 앞의
(3)-1과 비교 대상이 된다. 우리가 학습을 통해 줄이고자 하는 오차는 바로 이 예측값과
실제 경험에서 얻은 행동가치의 차이다.
DQN의 핵심은, 에이전트를
통해 얻은 실제 경험을 바탕으로 인공신경망이 예측한 값과 비교하여 오차를 계산하고, 이 오차를 줄이는
방향으로 신경망을 반복적으로 업데이트하는 것이다. 이러한 과정을 통해 신경망은 점점 더 정확한 행동가치함수를
근사하게 되고, 결과적으로 더 똑똑한 에이전트로 성장하게 된다.
DQN 로직
DQN 알고리즘은 에이전트가 환경과 상호작용하며 최적의 행동을 학습해가는
과정이다. 이 알고리즘에서 에이전트는 별도의 정책 함수를 두지 않고,
인공신경망을 통해 예측한 q값 중 가장 높은 값을 가지는 행동을 선택함으로써 정책을 대신한다.
(1) 에이전트는 현재 상태를 인공신경망의 입력으로 넣는다. 인공신경망은 이 상태에 대해 가능한 모든 행동에 대한 q값을 계산해
행렬 형태로 출력한다.
(2) 출력된 q값들 중
가장 높은 값을 가지는 행동을 선택한다. 이 과정은 곧 에이전트가 선택할 행동을 결정하는 정책 행위와
동일하다.
(3) 선택된 행동은 실제 환경에서 실행된다. 에이전트는 그에 따라 움직이거나 특정 동작을 수행하게 된다.
(4) 환경은 에이전트의 행동 결과에 따라 보상(rt+1)과 다음 상태(st+1)를
반환한다. 이 정보는 에이전트가 학습하는 데에 중요한 피드백이 된다.
(5) 에이전트는 현재 상태에서의 예측 q값(qw)과 실제로 받은 보상 및 다음 상태의
최대 q값을 이용해 비용 함수(Cost Function)를
계산한다. 여기서 qw는 신경망이 예측한
q값으로, 프로그래머가 직접 계산하지 않고 상태와 행동을
입력하면 인공신경망이 자동으로 출력해주는 값이다. 따라서 프로그래머는 보상과 다음 상태에서의 최대 q값만 준비하여 학습 데이터를 구성하면 된다.
(6) 계산된 비용 함수는 경사하강법을 통해 최소화된다. 이 과정을 통해 신경망의 가중치 w는 점점 더 정확한 방향으로 조정되며, 결과적으로 신경망은 참 행동가치함수에 가까운 값을 예측할 수 있게 된다.
(7) 학습이 완료된 후, 에이전트는
새로운 상태(st+1)를 다시 인공신경망에 입력하여 다음 행동을 선택하고 위 과정을
반복한다. 이처럼 DQN은 상태 입력 → Q값 예측 → 행동 선택 → 보상
획득 → 학습 → 다음 상태 입력의 순환 구조를 가지며 학습을
진행한다.
결론적으로 인공신경망은 행동가치함수를 변수 w를 통해 근사하며, 우리는 이 w를 반복 학습을 통해 점차 실제 가치함수에 가까운 값으로
조정해나간다. 이 과정에서 가장 중요한 것은 예측값과 실제값의 차이를 최소화하는 것이며, 이를 위해 비용 함수와 경사하강법이 핵심 역할을 수행한다.