본문 바로가기

강화 학습

강화 학습 기초 - 다이나믹 프로그래밍의 한계(Limitation of Dynamic programming)

https://wikibook.co.kr/reinforcement-learning/

 

파이썬과 케라스로 배우는 강화학습: 내 손으로 직접 구현하는 게임 인공지능

“강화학습을 쉽게 이해하고 코드로 구현하기” 강화학습의 기초부터 최근 알고리즘까지 친절하게 설명한다! ‘알파고’로부터 받은 신선한 충격으로 많은 사람들이 강화학습에 관심을 가지

wikibook.co.kr

해당 포스팅은 위의 책을 보고 정리한 내용입니다.

 

이번 포스팅은 자세한 설명은 넘어가고 다이나믹 프로그래밍의 한계와 강화 학습에 대한 제 의견만 남겨보려 합니다.

이유는 다이나믹 프로그래밍이라는 알고리즘을 설명하는 것이 앞으로 배워갈 강화학습의 큰틀이라고 보기 어렵다고 생각했습니다.

다만, 다이나믹 프로그래밍의 한계가 있어, 강화학습이 등장 했다는 배경이라고 생각해서입니다.

자세한 내용은 위의 링크된 책 3장을 보시면 될거같습니다.


 

앞서 배운 MDP나 가치함수 그리고 벨만방정식 등의 개념은 강화 학습이라기 보다는 연속적인 결정 문제(상태1->행동1->상태2->행동2)에서 어떻게 해야하는지를 배웠다고 하는게 맞는거 같습니다.

이렇게 설정한 가치 함수를 어떻게 에어전트가 업데이트 해가면서 최적의 정책을 찾느냐의 고전적인 접근에는 다이나믹 프로그래밍이 있습니다. (*다이나믹 프로그래밍에 대한 설명은 다른 자료를 참고해 주세요)

 

이전 포스팅의 그리드 월드에 대해서는 위의 책 3장에서 다이나믹 프로그래밍을 적용하면 꽤 잘 되는 것을 확인할 수 있습니다.

그렇다면 강화 학습은 왜 등장했느냐?

다이나믹 프로그래밍에는 명확한 한계점이 다음과 같이 있기 때문입니다.

  • 계산복잡도: 다이나믹 프로그래밍의 계산복잡도는 O(n^3)입니다. 그리드 월드가 5x5가 아닌 더 큰 크기이면 그거에 3제곱 비례해서 계산복잡도가 커진다는 이야기 입니다. 우리가 사는 세상의 상태는 25가지의 상태, 4가지의 행동으로만 정의되지 않기 때문에, 계산복잡도가 3제곱 비례한다는 것은 다른 복잡한 문제를 푸는데 큰 걸림돌이 됩니다. 
  • 차원의 저주: 상태 S의 차원이 늘어날 수록 상태의 수는 지수적으로 증가합니다. 이 부분또한 위와 비슷한 이야기 입니다. 하지만 특정 알고리즘의 영향이 아닌 문제에서 알아야 하는 차원이 늘어난다는 것입니다. 풀어야 하는 문제가 복잡해질 수록 처리해야하는 상태가 늘어나는데 이를 차원의 저주라고 합니다. 따라서, 복잡한 문제를 풀수록, 많은 상태를 수용할 수 있는 알고리즘이 요구됩니다.
  • 환경에 대한 완벽한 정보가 필요: 다이나믹 프로그래밍을 이용해서 풀때, 보상과 상태 변환 확률을 정확히 안다는 가정하에 풀게됩니다. 하지만 실제하는 문제(in the wild)에서는 보상과 상태 변환 확률을 정확히 안다는 것이 거의 불가능합니다. 

책에서는 "바둑을 다이나믹 프로그래밍으로 푸는 것은 바둑을 둘때 모든 경우를 고려해서 어떤수를 둬야 하는지 계산하는것과 같다" 라는 예시를 듭니다. 그만큼 엄청난 계산이 요구된다는 것이죠.

커제와 알파고의 대국: 알파고를 다이나믹 프로그래밍으로 만들었으면 대국 시간이 모자랐을 수도 있겠다. (출처: https://www.hani.co.kr/arti/sports/baduk/796462.html)

따라서 이 한계점들을 극복하기 위해 제안된 것이 강화학습입니다.

이렇게 이번 포스팅은 한계가 있어 강화학습이 제안된 배경정도로 마무리 하겠습니다.

다음 장 부터는 강화학습에 대한 포스팅을 이어가겠습니다.


여기서 부터는 제 개인적인 생각또는 궁상입니다.

 

포스팅을 하기전 여러가지 자료들을 뒤적뒤적해보면서

우연히 어떤 분께서 테트리스를 프로그래밍으로 컴퓨터가 잘 되게 하신 유튜브 동영상을 보게되었습니다.

감사하게도, 코드도 공유해주셔서 호기심에 들여다 보았는데, 강화학습이 아닌 if-else, max, min같은 코드로 구현한 것이였습니다.

 

이때, 저는 너무나도 당연히 강화학습을 통해 이 문제를 풀었을거라 생각했기 때문에, 좀 충격이였습니다.

다름아닌, 제 자신에게요. 테트리스라는 문제가 어떤 문제인지, 어느정도 복잡도를 가지고 있는지 생각도 못하고,

단지 강화학습을 해야겠다는 생각을 하고있었던 것입니다.

 

저는 저 상황에서는 학습 알고리즘을 이용해서 문제를 푸는거 말고는 모르는 사람이였습니다.

다른 문제를 해결할 수 있는 알고리즘은 하나도 적용시킬줄 모르는 사람이 된거죠.

어디가서 AI, Deep learning 공부한다 하고 다니지만,

그보다 먼저 어떤 문제를 풀줄 아는 연구자가 되어야 할텐데 말이죠..

 

혹시 이 글을 감사하게도 읽어주시는 분들도 저와같이 이런사고에 갇히는 일이 없기를 바라며 글을 마칩니다.

 

읽어주셔서 감사합니다.