딥러닝 머신 그리고 TensorFlow R word2vec 코드 구현/모델링

TensorFlow Life

최근 TensorFlow를 팀에서 주로 사용하면서 이런저런 내부 프로젝트를 진행하고 있고, 과거에 보지 못했던 성과도 볼 수 있었으며, 이런 도구 사용과 경험을 통해 무엇보다 1년 전과는 문제를 바라보는 관점이 달라졌다는 것을 깊히 실감할 수 있었다. 이 때문에 거의 매일매일 새로운 경험을 하는 셈인데 그러면서 알고리즘에 대한 더 깊은 이해를 하게 되는거 같다.

과거 모든 속성에 대해서 뭔가의 가정을 기반으로 데이터를 준비해서 모델링을 했다면, 딥러닝의 경우 속성에 대해서는 머신에게 최대한 자유를 주고 더 많은 데이터와 복잡한 아키텍처와 많은 학습을 기반으로 기존 모형보다 더 좋은 성능을 꾀하는 것에 방점을 두고 있다. 필자도 과거 오해를 하고 딥러닝을 바라봤으나 결국 어떠한 문제이든 많은 데이터가 준비되어 있으면 기존 모델링 방법보다 좋은 성능을 보장한다는걸 경험적으로 알게 되었다. 그러나 이런 결과를 보기 위해서는 도구에 대한 확실한 이해와 알고리즘에 대한 이해를 담보하고 있다. 만일 그렇지 않고 사용하게 되면 큰 성능은 커녕 실망만 하게 된다.

성능 이외에 느낄 수 있는 딥러닝의 좋은 장점은 역시나 온라인 러닝에 있다고 생각한다. 이 부분은 학술 연구를 하는 분들에게는 중요하지 않을 수 있으나, 나와 같이 실무 모델링을 하는 사람에게는 매우 큰 장점으로 다가오고 모델 운영의 묘미를 느끼게 하는 중요한 부분이다. 어떻게 모형을 Fresh하게 유지할 수 있느냐의 문제는 딥러닝에서는 다소 어렵지 않은 문제이다.

매우 안타까운 이야기지만, TensorFlow로 이런 저런 실전 모델링 및 실전 차원 축소를 해본 결과 텐서플로와 같은 딥러닝 프레임웍은 개발자(여기서 개발자라 칭함은 개발 경험이 충분히 있는 부류를 의미한다.)들이 더 유리한 접근을 할 수 있다라는 생각에 다시한번 확신이 들게 된다. 일단 대용량,고차원 데이터 핸들링 경험이 없으면 실전에서 딥러닝 모델링을 할 수 있는 문턱에도 갈 수 없으며, 이를 넘었다 하더라도 API 레벨을 원활히 검증하면서 흡사 개발과 같은 과정을 거쳐야 제대로 돌려볼 수 있다. 다소 머신러닝 알고리즘에 대해서 패키지 레벨로만 접근해서 돌려봤던 분석가 및 데이터 과학자들은 매우 어려운 도구이나, 직접 머신러닝을 구현해본 개발자들에게 확실히 유리한 도구다라는 생각을 해본다.

물론 keras같은 하이레벨 wrapper를 쓰면 어느정도 쉽게 접근이 가능하나, 실전문제에서는 그보다 더 큰 데이터와 차원을 다뤄야 되어서 결국 로 레벨 API를 써야 된다. 이때 개발자적인 경험/능력이 매우 큰 도움이 된다.

하지만 개발자들이 항상 유리한건 아니다. 뭔가 모델이 잘 못 돌고 있을때 개발자들은 데이터 자체를 리뷰하거나 중간 결과에 대한 EDA를 잘 하지 않는 경향이 있고, 그냥 바로 API 수정이나 하이퍼파라메터를 추가/제거 하고 돌리는 것을 반복하곤 한다. 데이터의 특징을 파악하고 입력이든 중간 데이터 변환이든 목적에 맞는 통계적 데이터 변환 방법은 무수히 많은데, 이를 잘 할 수 있는 사람들은 전통적인 통계 기반의 사람들이다. 하지만 통계기반의 사람들이 그러한 문제점을 파악하고 조언하는 역할만 할 것인가이다. 현실적으로 조언만 해서는 자신이 한 성과라 할 수 없다. 결국 상호의 영역에 대한 공부를 하고 경험을 쌓아야 풀스텍 딥러닝 모델러가 될 수 있는것이다.

딥러닝 같은거 쓰지 않고서라도 데이터 과학자 역할을 할 수 있으나, 일반적인 모델링 패키지를 사용하면 성능의 편차가 개인마다 크지 않아 고수든 하수든 별다른 경험적 차별점을 도모하기 쉽지 않으나, 딥러닝의 경우 프레임웍에 익숙해지고 경험이 많을수록 성능을 짧은 시간에 극한으로 끌어올릴 수 있는 가능성이 매우 커진다. 물론 큰 데이터를 손쉽게 핸들링하고 이를 적합한 딥러닝 구조에 녹여 돌릴 수 있는 경험적인 부분과 이론적인 부분에 대한 밸런스를 반드시 이뤄야 된다.

무엇보다, 누구에게 어렵거나 쉬운것에 상관없이, 누구든 데이터로 밥먹고 산다면 반드시 한번정도는 충분히 경험해보고 넘어가야 되는 방법론이고 프레임웍이다라는 생각은 하면 할수록 확신이 든다.

딥러닝 머신 구축

작년에 개인적인 프로젝트를 수행하면서 개인 리서치에 쓸 수 있는 자금이 생겼는데, 이 자금으로 개인 딥러닝 머신을 조립했다. 뭔가 올해 들어서 딥러닝에 대한 경험과 학습에 대한 의지의 표현이라 보면 된다. ㅋ

  • 보드 : ASUS PRIME Z270-A
  • 메모리 : SD4 16GB x 4
  • CPU : I7-7700K
  • SSD : 삼성 500GB
  • HDD : WD 2TB
  • 파워 : 정격 850W
  • GPU : GTX 1080 x 2
  • 모니터 : LG 27인치 IPS

사실 GTX 1080 2개까지 설치할 생각은 없었는데, 용산 조립 대행 업체에 방문한날 그 자리에서 성급하게 한장 더 넣어달라고 했다. 당시 가격으로 80만원 정도가 더 나갔는데, 후회는 없다. ㅋ