본문 바로가기

Data & AI

강화학습 트레이딩 4. 논문과 유전알고리즘으로 성능 개선

지금까지 강화학습으로 주식투자를 해보는 내용을 주로 작성하고 있었습니다. 
 
그런데 저는 주식투자뿐 아니라 암호화폐도 트레이딩 하고 있어서 
 
암호화폐트레이딩에 강화학습을 적용해보는 내용으로 번외로 콘텐츠를 만들어보려고 합니다. 
 

암호화폐 트레이딩과 강화학습

 
강화학습중에서도 Deep RL은 강화학습의 에이전트가
 
심층 신경망을 가지는 구조를 갖고 있습니다. 
 
저는 A2C(Actor-Critic) 알고리즘을 사용해 Actor, Critic이라는 두 에이전트가 필요합니다. 

 
각 에이전트가 가지고 있는 신경망의 역할은 
 
각각 정책함수와 가치함수근사입니다. 
 
정책함수는 주어진 시장상황에서 어떤 행동을 할지, 가치함수는 상황과 행동을 취했을때의 가치를 추산합니다. 
 
물론 복잡하고 간단한 변수몇개로는 알 수 없는 고차원 영역, 그중 끝판왕인 주식/암호화폐 분야이지만 
 
특정 구간에서 상승확률 50%에서 51%로라도 올리는게 DeepRL을 적용하는 가장 핵심적인 이유입니다. 
 
1%의 확률우위의 작업을 무한반복하면 수익은 확실시 되는게 트레이딩 단위에서의 원칙이라고 생각합니다.
 

데이터 라벨링 - Triple Barrier

 
사실 강화학습에서 라벨링된 데이터는 필요 없습니다.
 
라벨링데이터는 지도학습을 위해 필요한 데이터였기 때문인데요
 
저는 특정 i.i.d마다 라벨데이터로 지정하고 싶었습니다.
 
쉽게 말해 한 캔들데이터가 추후에 어떤 방향으로 진행될지 적어나간다는 것입니다. 
 
 

 

 

위 그림에서 박스 표기된 시점의 캔들만 보면 
 
이 캔들이 후에 +1% 선에 닿을지, -1%선에 닿을지, 계속 횡보를 할지 그 시점에는 알 수 없으나
 
데이터가 어느 정도 모인 이후에는 이를 라벨링 할 수 있습니다. 
 
삼중베리어라는 기법으로 머신러닝을 위한 금융에서 지도학습을 위해 많이 사용되고 있는 방법입니다. 
 
가지고 있는 차트데이터에 데이터라벨링 작업을 진행해 주었습니다. 
 
상한선에 도달한 캔들은 +1, 하단은 -1의 라벨로 기입했고
 
최대한 +1, -1의 라벨 비율이 50%가 될 수 있도록 했고 이더리움차트의 경우 1%로 설정하면 55%/45% 정도인데
 
5% 정도는 데이터를 지워 1:1의 비율을 맞춰주었습니다. 
 
이제 특정 상태의 캔들 종가에서 이 상태에서는 +1%에 먼저도달했는지, -1%에 먼저 도달했는지 알게 되면
 
해당 캔들이 종료되는 시점에 Actor Agent가 이 데이터를 참고 삼아 (보상과 연동 지어) Policy를 학습할 수 있게 되었습니다. 

 

 

Deep Exploration - Boootstrap 

 

데이터사이언스 연구원분의 논문 리뷰를 듣다가 좋은 논문을 소개받아서 한 번 읽어보았습니다. 
 
연구원분의 주관적인 견해로는 강화학습이 다양한 어플리케이션을 만들어보거나 관심을 끌만한 소재거리에서는 활발하지만
 
알고리즘이 DQN, A2C 이후 뛰어난 발전이 없이 더딘 상황이라고 생각한다고 합니다. 
 
그 이유로 Exploration에 대한 벽을 뛰어넘지 못함을 이유로 삼고 있었는데 Deep Exploration via Bootstrapped DQN 논문에서
 
다양한 상태공간을 탐험하기 위한 방안들이 제시되어 있어서 이를 따라 구현해 보았습니다. 
 
어려운 코드로 제공하기보단 간단히 그림으로 설명드리면
 

 
Memory Buffer에서 데이터를 가져와 학습하는 방식에서 
 
Actor Agent를 여러 개 두고, Memory Buffer의 데이터를 중복을 허용해서 k개의 Actor 들에게 제공해서 학습합니다. 
 
앙상블 모델과 같이 학습 분산을 낮추고 각 agent들이 Q-value 함수 추정치를 독립적으로 학습해서 
 
explorlation을 향상하는 효과를 만듭니다. 
 
원리는 일단 Memory buffer에 저장되어 있는 차트데이터를 가져와서
 
특정 시점의 상태를 읽고 Actor Agent들이 학습을 진행합니다. 
 
각 Actor들은 각자 딥러닝 네트워크로 학습하고 있는 정책함수에 근거해 매수, 매도 의견을 제시합니다. 
 
각자 독립적인 환경에서 딥러닝학습을 하다 보니 하나의 추정기가 불안정한 상태를 보인다 하더라도 다른 추정기가 이를 보완해 줄 수 있고
 
의견들을 종합해서 최종 의견을 내리고 이를 최종 정책으로 채택합니다. 
 
 

탐험 - 인류의 진화와 유전알고리즘

위 방법으로도 좋은 성과를 낼 수 있었습니다. 
 
좌측은 보상으로 설정한 그래프이며, 우측은 손실함수로 정의한 부분인데 
 
보상은 에피소드가 지나면서 증가하고, 손실함수는 감소하는 경향을 띄었습니다. 
 
 

 
좌측 보상으로 특정 구간에서  1~2% 정도의 우위를 얻을 수 있는 정도의 성과는 얻을 수 있었습니다. 
 
실제로 학습이 잘 된 에피소드의 딥러닝 네트워크들을 투자에 투입해도 되지만 더 다양한 연구를 해보고 싶었습니다. 
 
인간이 원시시대부터 지금까지 직면한 문제들을 해결하고 
 
지구를 정복하며 살아갈 수 있었던 이유는 진화라고 생각합니다. 
 
진화는 유전적 형질이 다음세대에 전이되고 그 과정에 발생하는 일부 돌연변이들이
 
다음 세대에서 자연선택, 살아남은 유전형질을 세대를 통해 이어가면서 발생했습니다. 
 
트레이딩에선 끝없이 새로운 데이터가 들어옵니다.
 
기존의 데이터로만 학습해서는 새로운 데이터에 적응하지 못한 Actor들은 기존과 다르게 저조한 성과를 내게 됩니다. 
 
자연과 같이 시장은 끝없이 변화합니다. 변화하는 시장에 살아남는 유리한 Actor가 나타날 때까지
 
우수한 Actor의 유전형질을 전파하고 성능이 저조한 Actor는 죽이고 새로운 Actor를 만들어가면서
 
변화하는 시장에 유전적 다양성을 부여하려고 설계해 보았습니다. 
 
 

 
유전알고리즘이 강화학습 이론상 Exploration을 적절히 할 수 있는 방안이 될 수 있다고 생각하고 있습니다. 
 
하지만 돌연변이를 발생시키기 위해 단순히 초기화된 뉴럴네트워크를 가진 Agent를 탄생시키는 것이 아닌
 
은닉층의 수도 변이시키거나 인간은 이해할 수 없는 목적함수 공간을 잘 탐험할 수 있는 초기값으로 생성하는 방법을
 
앞으로 연구할 예정입니다. 
 
 
강화학습을 통한 트레이딩 번외 편으로 암호화폐를 트레이딩 하기 위한 과정을 전반적으로 설명드렸는데요
 
개발을 하다가 궁금했던 연구 주제에 푹 빠져버려서 솔직히 개발을 많이 진행하지 못했습니다. 
 
예전부터 제가 유전알고리즘으로 소개했던 연구 내용을 궁극적으로 트레이딩에 접목하고 싶었고
 
결과를 떠나서 과정이 즐거워서 이 부분을 앞으로도 중점적으로 연구해 볼까 하는 생각을 가지고 있습니다. 
 
다음에도 더 좋은 내용으로 경험한 것들을 이야기해 보겠습니다. 
 
감사합니다.