티스토리 뷰

Study/AI

[MLY] 강화학습 예제

생각많은 소심남 2018. 10. 10. 00:04

 헬리콥터한테 복잡한 기동을 할 수 있도록 가르치는데 머신러닝을 활용한다고 가정해보자. 위의 사진은 시간대별로 컴퓨터가 조종하는 헬리콥터가 엔진이 꺼지면서 착륙하기까지의 사진을 나타내고 있다.

 이런 방식을 "자동회전식(autorotation)" 기동이라고 부른다. 이를 통해 헬리콥터의 엔진이 뭔가 예측하지 못한 사유로 인해 고장날 지라도 헬리콥터가 착륙할 수 있게끔 해준다. 인간 조종사는 교육과정 중 일환으로 이런 기동을 연습한다. 이제 해야할 목표는 학습 알고리즘을 사용해서 헬리콥터의 안정적인 착륙을 위해 T 경로를 따라서 헬리콥터가 비행하는 것이다.

 강화학습(reinforcement learning)을 적용하기 위해서는, 모든 가능한 경로 T에 대해서 얼마나 좋은지를 평가할 수 있는 "보상 함수(reward function)" R(.)을 설계해야 한다. 예를 들어 T 경로가 헬리콥터의 충돌을 야기한다면, 이때는 아마 reward가 R(T) = -1000 이라는 엄청나게 나쁜 값을 얻을 것이다. 정상적인 착륙을 유도하는 경로 T는 착륙이 얼마나 자연스러웠는지에 따라서 좋은 R(T)를 받게 될 것이다. 보상 함수 R(.)는 일반적으로 각 경로 T에 대해서 얼마나 선호하는지를 수치적으로 평가하기 위해 수동적으로 선택된다. 그래서 착륙시 얼마나 충격이 가해졌는지, 혹은 얼마나 목표 지점에 정확히 도달했는지 여부, 탑승객한테 얼마나 탑승감을 부여했는지에 따라서 다르게 나온다. 그렇기에 좋은 보상함수를 설계하기란 쉽지 않다.

 주어진 보상함수 R(T)가 있을 때, 강화학습 알고리즘은 maxR(T)를 얻게끔 헬리콥터를 조종하는 일을 한다. 하지만 해당 알고리즘 내에는 수많은 근사 기법이 적용되어 있고, 값을 최대화하는데 성공하지 못할 수도 있다.

 만약 몇몇 보상함수 R(.)를 골랐고, 그걸 가지고 학습 알고리즘을 돌린다고 가정해보자. 그런데 성능은 인간 조종사가 하는 것에 비해서는 성능이 나쁘게 나올 것이다. 착륙시 진동은 심할 것이고, 인간 조종사가 하는 것에 비해서는 덜 안전해 보일 것이다. 해당 강화학습 알고리즘에 문제가 있는지는 어떻게 말할 수 있을까? 예를 들어 maxR(T)를 얻는데 있어 경로를 선정하는 부분이나 보상 함수에 문제가 있다던가. 착륙시 충격과 착륙 지점의 정확성 사이의 이상적인 중간 지점을 측정하는 데 있어 문제였는지 말이다.

 이전 포스트에서 소개한 최적화 검증 테스트를 적용해보기 위해서, 인간 조종사에 의해서 얻을 수 있는 경로 T_human이 있고, 알고리즘에 의해서 얻을 수 있는 경로 T_out을 정의해본다. 위의 설명에 따르면 T_human은 T_out에 비해 좋은 경로이다. 그렇기 때문에 여기서 진행할 수 있는 테스트는 R(T_human) > R(T_out) 이냐는 것이다.

 Case 1: 만약 위의 관계가 참이라면, 보상함수 R(.)는 정확하게 T_human이 T_out보다 좋다는 것을 표현하고 있다. 하지만 우리가 사용하고 있는 강화학습 알고리즘은 안 좋은 T_out을 찾고 있다. 이를 통해서 우리가 개발하고 있는 강화학습 알고리즘을 개선시키는 것이 가치가 있는 것임을 알 수 있다.

 Case 2: 만약 위의 관계가 거짓이라면(R(T_human)  R(T_out)), 보상 함수 R(.)이 T_human 경로가 더 좋은 경로임에도 낮은 점수를 부여했다는 것을 의미한다. 이 때문에 좋은 착륙을 유도하기 위해서 R(.)을 개선시킬 필요가 있다.

 많은 머신러닝 어플리케이션들은 근사 검색 알고리즘을 활용해서 근사된 score function Score(.)를 최적화하는 형식을 갖추고 있다. 때때로 입력 x가 정의되지 않은 경우도 있기 때문에 Score(.)라고 줄여서 표현한다. 위에서 소개했던 예제의 경우에는 score function은 보상함수(Score(T) = R(T))이고, 최적화 알고리즘은 좋은 경로 T를 얻기 위해 사용한 강화학습 알고리즘이 된다.

 이전에 다뤘던 예제와 다른 부분은 이전에는 "이상적인" 출력값과 비교했던 것에 비해, 여기서는 인간 성능 지표인 T_human과 비교한다는 것이다. 여기서 T_human이 이상적이지 않을지는 몰라도 충분히 좋다고 가정하고 있다. 일반적으로는 y*(여기에 소개한 예제에서는 T_human)가 있는한, 이 값은 해당 값이 "이상적인" 출력값이 아닐지는 몰라도 우리가 적용하고 있는 학습 알고리즘 상에서는 가장 최적의 출력이 될 것이며, 결국 최적화 검증 테스트는 이를 통해 알고리즘을 개선하는게 좋을 것인지, 아니면 score function 을 개선하는 게 좋을 것인지를 알려주게 된다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 46. Reinforcement Learning Example를 번역한 내용입니다.>

댓글