STAG 프로젝트 진행 현황, 추후 계획
10 Oct 2022 | STAG#2
2달간의 여정
첫번째 STAG 프로젝트의 개요를 올리고 난지 2달가량이 지났다.
저번에 언급했던 클린 코드& 아키텍처를 모두 읽고난 뒤에 여러가지 코드에 대한 생각을 간추려냈다.
당시 수능공부가 겹쳐있어 굉장히 적은시간동안의 코딩이 허용되었지만 위의 책을 접한 나의 코드 접근법은 완전히 달라졌었다.
먼저 해당 프로젝트의 중요도를 4가지 케이스로 나누어 가장 우선시 되야하고 중요한 요소인 모델링과 학습을 시간을 쪼개 코드를 완성시키는데 성공했다.
단지 아쉬운 점이 있었다면 코드스타일을 정할때 UpperCase로 작성하게되는 이상한 버릇이 들었었다.
과도기라 생각하고 수능이 끝나는대로 리펙토링을 진행할꺼지만, 대체로 여러 언어들의 스타일을 접해본결과 스크립트, C, Java와 같이 C의 색이 묻어나는 언어들같은 경우엔 UpperCase 사용이 대다수이고 파이써닉한 언어가 snake_case 사용,
C#이나 소수의 언어가 camelCase를 사용하는것 같다.
UpperCase로 깔끔하게 정리하는 것은 좋으나 파이썬 자체의 문법 생태구조를 면밀히 파악하지 못한 나의 실수라고 생각한다.
본론인 강화학습 모델링 과정을 서술하자면, 전단계 버전에서 코인 트레이딩 성공 확률이 50퍼에 수렴하는 도박모델이 되었는데, 이것은 손절 익절에 대한 자발적인 조작환경이 주어지지 않았기 때문에 발생한 결과였다.
아무래도 코인 트레이딩이란 대상을 강화학습 관점으로 보기엔 어떤 행동을 하면 보상을 줘야할지 제대로 모른 탓이 컸으며, 다시금 현재 유튜브나 영상매체들로 코인이나 주식 고수라 칭하는 사람들의 행동패턴을 정리하여 3가지 조작키를 이용한 강화학습 보상 환경과 에이전트를 구현하는데 성공했다.
이후 저번의 모델링이 단순한 CNN모델을 Transformer를 가미해 PPO를 거치는 과정이었는데,
비교적 논문들의 발전 수준이 2019년도까지가 한계치였다는 것을 발견하고는 새로운 모델을 도입하기로 마음을 먹었다. 딥러닝 계열에선 3년의 기술적 차이가 전체적 수치상으로 30% 이상의 성능적 혁신을 가하기 때문에 새로나온 학회나 컨퍼런스의 논문을 읽어둬야 하기 때문이다.
여러가지 강화학습 모델들을 살펴본 결과
Dreamer라는 구글사의 강화학습 신경망 모델 디자인을 보고 꽤나 흥미롭다 생각하여 앞선 모델에 활용, 코드 가독성이 우수한편인 Pytorch를 개발툴킷으로 정했다.
비교적 강화학습은 AlphaStar 이후로 구글이 관심을 쓰지않아 열화되었고 GPT씨리즈 등장이래 Transformer 기반의 연구가 대세이어서 기대가 되는 고성능의 모델이나 알고리즘이 개발되지 않은 것이 지금의 강화학습계의 상황인데, 본인은 Settings를 기존의 CNN이 아닌 Transformer로 해석하여 강화학습 모델을 돌리면 어떤가란 접근법에 의문을 가지고 있었다.
그러나 현재까지 Transformer를 이용한 강화학습연구는 크게 진행되고 있지 않고, 본인이 직접 개발해본 Transformer 기반의 모델이 Atari가 아닌 코인 트레이딩 환경에서 취약한 모습을 보이는 것을 보고 Transformer는 일단 다음 버전의 모델을 구현할때 차용하기로 하고, 일단 성과를 낼거같은 Dreamer 모델을 사용, 추후에 다음 알고리즘에서 얻은 접근방식을 다음 버전의 모델링에서 사용하기로 결정했다.
비교적 Pytorch 유저들의 적극적인 Tensorflow 코드의 Pytorch 코드 변환을 하는 추세 덕분인지,
내가 모델링에 공을 들이지 않아도 해당 코드를 참조 할 수 있었다. MIT 라이선스를 지원하는 juliusfrost의 작성된 Dreamer 구현 코드를 참조하고 rlpyt 으로 구현된 텐서환경을 본인코드에 맞게 수정했다.
원래의 저작권 인식을 감안하면 코드작성 시간을 늘려서라도 직접 변환코드를 만드는 사안을 채택하려 했으나, MIT 라이선스라는 것을 확인, 또한 의존성을 RLpyt 환경을 벗어나 Pytorch쪽에만 배정한 코드를 작성하고 또 이를 상업적인 이용을 하지 않았기 때문에 애써서 먼 길을 가지 않는 방향을 채택했다.
그리고 해당 코드의 포크 수가 갑자기 5개씩이나 늘어났던것을 보고 해당 프로젝트를 상업적인 용도로 사용하거나 개인이 한방성 투자에 사용해 막대한 손실이 일어날까봐 걱정이 되어 비공개로 전환하였다. 해당 소스코드를 모두 공개하진 않지만 요소의 설명을 위해서 일부 공개할 것이다.
또한 자체 모델의 구조는 인터넷 검색을 통해 용이하게 구할 수 있으니 도전하고 싶다면 해도 좋다.
그 후 직접 다시 10만원가량의 거래 경험, 그리고 고수라 불리는 사람들의 이론이 표현된 지표들을 참고해 차트환경을 만드는 코드를 구현하였다.
다음과 같은 코드들은 TDD를 통해 테스트 코드로 검증되었으며, 아래의 코드는 테스트의 일부다.
테스트 코드예시
TestTradeManager.py
from stag.TradeManager import
def test():
trader = FutureTrader()
try:
trader.CurrentPrice('BTCUSDT')
finally:
print("Checking current price doesn't Work.")
try:
trader.CallableUsdt()
finally:
print("Account calling doesn't work.")
TestCsvModify.py
from stag.DatasetBuilder import
URL = 'C:/Users/XXXXX/XXXXX/GitHub/STAG/stag/test/BTCUSDT-1.csv'
def test():
try:
BuildCsv(TIME_ONE_HOUR, 'BTCUSDT', URL)
finally:
print("Building Csv Doesn't Work.")
try:
TakeCsvData(URL)
finally:
print("Taking Csv Data Doesn't Work.")
try:
UpdateCsv(TIME_ONE_HOUR,'BTCUSDT', URL)
finally:
print("Updating Csv Doesn't Work.")
위를 보면 코드들이 이전 프로젝트 Cryptonalytics에서 보여준 하드한 코드들을 모두 높은 단계의 추상화 코드들로 감싸 구현하여 복잡해 보일수 있는 내부 함수를 보이지 않도록 작성했다.
또한 프로그램 자체의 파이토치 코드와의 분리를 시도하여 프레임워크에 끌려다니는, 의존성 문제를 해결하기 위한 구획 분리를 진행했다.
마치며
아직까지 포트폴리오 작성에 대한 방식을 유보해둔 상황이나, 머지않아 txt 파일이나 csv 파일 두가지 중 하나의 방법을 채택할 것이다.
아직까지 프로젝트가 완벽하게 구현되지 않았고 수능이 머지않아 다가오는 입장에서 일단은 개발 속도를 늦출 수 밖에 없어 아쉬울 따름이다.
임시 연장 기간 추가
현재 괜찮은 프로젝트 아이디어가 떠올라 본 프로젝트의 개발은 임시로 연기하기로 했습니다.
2달간의 여정
첫번째 STAG 프로젝트의 개요를 올리고 난지 2달가량이 지났다.
저번에 언급했던 클린 코드& 아키텍처를 모두 읽고난 뒤에 여러가지 코드에 대한 생각을 간추려냈다.
당시 수능공부가 겹쳐있어 굉장히 적은시간동안의 코딩이 허용되었지만 위의 책을 접한 나의 코드 접근법은 완전히 달라졌었다.
먼저 해당 프로젝트의 중요도를 4가지 케이스로 나누어 가장 우선시 되야하고 중요한 요소인 모델링과 학습을 시간을 쪼개 코드를 완성시키는데 성공했다.
단지 아쉬운 점이 있었다면 코드스타일을 정할때 UpperCase로 작성하게되는 이상한 버릇이 들었었다. 과도기라 생각하고 수능이 끝나는대로 리펙토링을 진행할꺼지만, 대체로 여러 언어들의 스타일을 접해본결과 스크립트, C, Java와 같이 C의 색이 묻어나는 언어들같은 경우엔 UpperCase 사용이 대다수이고 파이써닉한 언어가 snake_case 사용, C#이나 소수의 언어가 camelCase를 사용하는것 같다.
UpperCase로 깔끔하게 정리하는 것은 좋으나 파이썬 자체의 문법 생태구조를 면밀히 파악하지 못한 나의 실수라고 생각한다.
본론인 강화학습 모델링 과정을 서술하자면, 전단계 버전에서 코인 트레이딩 성공 확률이 50퍼에 수렴하는 도박모델이 되었는데, 이것은 손절 익절에 대한 자발적인 조작환경이 주어지지 않았기 때문에 발생한 결과였다.
아무래도 코인 트레이딩이란 대상을 강화학습 관점으로 보기엔 어떤 행동을 하면 보상을 줘야할지 제대로 모른 탓이 컸으며, 다시금 현재 유튜브나 영상매체들로 코인이나 주식 고수라 칭하는 사람들의 행동패턴을 정리하여 3가지 조작키를 이용한 강화학습 보상 환경과 에이전트를 구현하는데 성공했다.
이후 저번의 모델링이 단순한 CNN모델을 Transformer를 가미해 PPO를 거치는 과정이었는데, 비교적 논문들의 발전 수준이 2019년도까지가 한계치였다는 것을 발견하고는 새로운 모델을 도입하기로 마음을 먹었다. 딥러닝 계열에선 3년의 기술적 차이가 전체적 수치상으로 30% 이상의 성능적 혁신을 가하기 때문에 새로나온 학회나 컨퍼런스의 논문을 읽어둬야 하기 때문이다.
여러가지 강화학습 모델들을 살펴본 결과 Dreamer라는 구글사의 강화학습 신경망 모델 디자인을 보고 꽤나 흥미롭다 생각하여 앞선 모델에 활용, 코드 가독성이 우수한편인 Pytorch를 개발툴킷으로 정했다.
비교적 강화학습은 AlphaStar 이후로 구글이 관심을 쓰지않아 열화되었고 GPT씨리즈 등장이래 Transformer 기반의 연구가 대세이어서 기대가 되는 고성능의 모델이나 알고리즘이 개발되지 않은 것이 지금의 강화학습계의 상황인데, 본인은 Settings를 기존의 CNN이 아닌 Transformer로 해석하여 강화학습 모델을 돌리면 어떤가란 접근법에 의문을 가지고 있었다.
그러나 현재까지 Transformer를 이용한 강화학습연구는 크게 진행되고 있지 않고, 본인이 직접 개발해본 Transformer 기반의 모델이 Atari가 아닌 코인 트레이딩 환경에서 취약한 모습을 보이는 것을 보고 Transformer는 일단 다음 버전의 모델을 구현할때 차용하기로 하고, 일단 성과를 낼거같은 Dreamer 모델을 사용, 추후에 다음 알고리즘에서 얻은 접근방식을 다음 버전의 모델링에서 사용하기로 결정했다.
비교적 Pytorch 유저들의 적극적인 Tensorflow 코드의 Pytorch 코드 변환을 하는 추세 덕분인지, 내가 모델링에 공을 들이지 않아도 해당 코드를 참조 할 수 있었다. MIT 라이선스를 지원하는 juliusfrost의 작성된 Dreamer 구현 코드를 참조하고 rlpyt 으로 구현된 텐서환경을 본인코드에 맞게 수정했다.
원래의 저작권 인식을 감안하면 코드작성 시간을 늘려서라도 직접 변환코드를 만드는 사안을 채택하려 했으나, MIT 라이선스라는 것을 확인, 또한 의존성을 RLpyt 환경을 벗어나 Pytorch쪽에만 배정한 코드를 작성하고 또 이를 상업적인 이용을 하지 않았기 때문에 애써서 먼 길을 가지 않는 방향을 채택했다.
그리고 해당 코드의 포크 수가 갑자기 5개씩이나 늘어났던것을 보고 해당 프로젝트를 상업적인 용도로 사용하거나 개인이 한방성 투자에 사용해 막대한 손실이 일어날까봐 걱정이 되어 비공개로 전환하였다. 해당 소스코드를 모두 공개하진 않지만 요소의 설명을 위해서 일부 공개할 것이다. 또한 자체 모델의 구조는 인터넷 검색을 통해 용이하게 구할 수 있으니 도전하고 싶다면 해도 좋다.
그 후 직접 다시 10만원가량의 거래 경험, 그리고 고수라 불리는 사람들의 이론이 표현된 지표들을 참고해 차트환경을 만드는 코드를 구현하였다.
다음과 같은 코드들은 TDD를 통해 테스트 코드로 검증되었으며, 아래의 코드는 테스트의 일부다.
테스트 코드예시
TestTradeManager.py
from stag.TradeManager import
def test():
trader = FutureTrader()
try:
trader.CurrentPrice('BTCUSDT')
finally:
print("Checking current price doesn't Work.")
try:
trader.CallableUsdt()
finally:
print("Account calling doesn't work.")
TestCsvModify.py
from stag.DatasetBuilder import
URL = 'C:/Users/XXXXX/XXXXX/GitHub/STAG/stag/test/BTCUSDT-1.csv'
def test():
try:
BuildCsv(TIME_ONE_HOUR, 'BTCUSDT', URL)
finally:
print("Building Csv Doesn't Work.")
try:
TakeCsvData(URL)
finally:
print("Taking Csv Data Doesn't Work.")
try:
UpdateCsv(TIME_ONE_HOUR,'BTCUSDT', URL)
finally:
print("Updating Csv Doesn't Work.")
위를 보면 코드들이 이전 프로젝트 Cryptonalytics에서 보여준 하드한 코드들을 모두 높은 단계의 추상화 코드들로 감싸 구현하여 복잡해 보일수 있는 내부 함수를 보이지 않도록 작성했다.
또한 프로그램 자체의 파이토치 코드와의 분리를 시도하여 프레임워크에 끌려다니는, 의존성 문제를 해결하기 위한 구획 분리를 진행했다.
마치며
아직까지 포트폴리오 작성에 대한 방식을 유보해둔 상황이나, 머지않아 txt 파일이나 csv 파일 두가지 중 하나의 방법을 채택할 것이다.
아직까지 프로젝트가 완벽하게 구현되지 않았고 수능이 머지않아 다가오는 입장에서 일단은 개발 속도를 늦출 수 밖에 없어 아쉬울 따름이다.
임시 연장 기간 추가
현재 괜찮은 프로젝트 아이디어가 떠올라 본 프로젝트의 개발은 임시로 연기하기로 했습니다.