NeuroWhAI의 잡블로그

DQN 비용함수 이해가 잘 안되네요. 본문

개발 및 공부

DQN 비용함수 이해가 잘 안되네요.

NeuroWhAI 2018. 2. 20. 19:29


골빈해커 책의 마지막 챕터인 DQN을 보는데 비용 함수의 정의가 이해가 안되서 하루종일 사무실에서 코드랑 공식만 보고 있었네요...

공식은
cost = 평균 {보상 + max(targetQ(다음 상태)) - predictQ(현재 상태)}2
좀 생략됬지만 핵심적인 부분만 보면 이렇게 생겨먹었습니다.
targetQ, predictQ는 상태를 받아서 그 상황에 할 수 있는 각 행동의 점수(가치=Q)를 출력하는 신경망입니다.
predictQ가 학습이 이뤄지는 신경망이고
targetQ는 일정 주기로 predictQ와 같게 갱신되는, 그냥 고정된 녀석이라고 봐도 됩니다.
보상은 현재 상태에서 한 어떤 행동으로 인해 변경된 게임 상태에 대한 점수를 의미합니다.

제가 이해가 안됬던건 왜 targetQ에 다음 상태를 넣느냐는 거였습니다.
현재 상태 기준으로 어떤 행동을 해야하는지 학습하는건데 왜 다음 상태가 뜬금없이 튀어나오나 싶었죠.
아직도 뭔가 찝찝한데 예를 드니까 일단 저게 동작은 한다는걸 알았습니다.

예시1)
현재 상태 : 친구가 슬퍼하고 있음.
predictQ(현재 상태) : 친구를 위로해주는 행동이 가장 높은 가치인걸로 나옴. (0.8)
행동 : 위로해줌.
다음 상태 : 친구가 고맙다고 좋아함.
보상 : 위로하니 친구가 좋아하므로 큰 수를 얻는다. (1.0)
max(targetQ(다음 상태)) : 먹을거라도 사준다. (0.7)
수는 임의로 넣었고 이걸 공식에 대입하면
(1.0 + 0.7 - 0.8)2 = 0.81의 비용이 나오고 비용을 더 줄이기 위해선
고정된 보상(1.0), targetQ(0.7)는 놔두고 predictQ(0.8)를 더 높혀야 합니다.
다시 말해서 친구를 위로해주는 행동에 더 높은 가치를 매겨야 한다는 뜻이고
올바른 학습 방향이 됩니다.

예시2)
현재 상태 : 친구가 슬퍼하고 있음.
predictQ(현재 상태) : 친구에게 죽빵을 때리는게 가장 높은 가치인걸로 나옴. (0.7)
행동 : 죽빵을 때림.
다음 상태 : 친구가 화냄.
보상 : 친구가 화를 내므로 낮은 수를 얻는다. (-0.8)
max(targetQ(다음 상태)) : 미안하다고 말한다. (0.9)
계산하면 (-0.8 + 0.9 - 0.7)2 = 0.36의 비용이 나옴.
비용을 줄이려면 predictQ(0.7)을 낮춰야 함.
친구에게 죽빵을 때리는 행동에 대한 가치를 낮춤.

예시3)
현재 상태 : 친구가 슬퍼하고 있음.
predictQ(현재 상태) : 친구를 툭 치는게 가장 높은 가치인걸로 나옴. (0.7)
행동 : 툭 침.
다음 상태 : 친구가 약간 짜능냄.
보상 : 친구가 약간 짜증을 내므로 낮은 수를 얻는다. (-0.4)
max(targetQ(다음 상태)) : 무슨 일이냐고 묻는다. (0.9)
계산하면 (-0.4 + 0.9 - 0.7)2 = 0.04의 비용이 나옴.
비용을 줄이려면 predictQ(0.7)을 낮춰야 함.
친구를 툭 치는 행동에 대한 가치를 낮춤.
다만 이 예시에선 안좋은 행동을 했음에도 유발된 다음 상태에서 점수가 높은 행동을 할 수 있었으므로
비용이 크진 않았습니다.

예시3번이 중요한것 같습니다.
바로 앞만 보고 행동을 결정하지 않게 해주는 역할이 되는것 같기도 하고...
한국어로 된 이론적 내용이 설명된 자료를 못찾겠어서 이렇게 이해하는 중인데 너무 슬픕니다 흙흙

정리하자면 저 공식은
현재 상태에서의 행동으로 인한 보상뿐만 아니라 유발된 다음 상태의 가치(= 가치가 높은 행동을 할 수 있느냐)도 포함하여 행동의 가치를 학습한다.
이게 아닐까 싶습니다.


Comments