An Opinionated Guide to ML Research
John Schulman
blog: http://joschu.net/blog/opinionated-guide-ml-research.html
reddit: https://www.reddit.com/r/MachineLearning/comments/ewki8s/d_an_opinionated_guide_to_ml_research/
최근 새로운 프로젝트를 시작하면서 머리속이 복잡하고 정리가 안되는 느낌이 있었는데 우연하게 레딧에서 해당글을 접하고 큰 도움이되어 나중에 또 보려고 남겨둡니다. 원문은 위의 링크를 참고해주세요.
연구할 올바른 문제를 선택할 수 있는 능력은 technical skill보다 훨씬 중요하다. 이러한 감각은 시간이 지남에 따라 어떤 아이디어가 성공하고 어떤 아이디어가 잊혀지는지를 보면서 발전될 수 있다.
어떤 문제를 해결하기 위해 빠르게 감각을 키우는 과정이 있는지 궁금할것이다. 실제로 몇 가지 좋은 방법이 있다.
어떤 연구가 유용하고 유익한지를 반영한다. 다음과 같은 질문에 대해 생각해본다.
1~3 항목은 환경을 최적화하고 다른 연구원의 의견을 받는것과 관련이 있으며 항목 4는 혼자 수행하는 일이다. 1~3의 중요성에 대한 경험적 증거로써 소수의 연구 그룹과 기관에서 가장 큰 영향을 미치는 작업 파일이 어떻게 밀접하게 모이는 경향이 있는지 고려한다. 소수의 연구 그룹 및 기관에서 가장 큰 영향을 미치는 연구가 어떻게 밀접하게 집약되는 경향이 있는지 생각해보자. 이는 이 사람들이 똑똑한게 아니라 높은 수준의 전문 지식과 관점을 가지고 있기 때문에 조금 더 앞서서 새로운 결과를 내는것이다. 당신은 그들보다 더 앞서기 위해 더 열심히 해야할 것이고 자기 자신의 관점을 전문화하고 발전시키는것이 더 중요하다.
대략적으로 말하면 다음에 수행할 작업을 결정하는 방법에는 두 가지가 있다.
아이디어 중심 연구
목표중심 연구
물론 두 가지 접근법은 상호 배타적이지는 않다. 모든 “아이디어 중심 연구”는 subfield의 목표를 향한 진전을 나타내므로 어떤 의미에서는 목표중심의 연구 사례이다. 그러나 목표 중심의 연구를 통해 목표가 전체 subfield 목표보다 구체적임을 의미하고 X가 더 잘 잘동하는것 보단 X가 처음으로 작동하는 것과 비슷하다.
대부분의 사람들에게 목표 중심의 연구를 권장하며 대부분 사람들이 이 전략을 따랐다.
아이디어 중심 연구의 한가지 주요 단점은 다른 사람의 연구를 보다 빠르게 발표하거나 또는 표절할 위험이 있다. 전 세계의 연구원들은 같은 논문을 읽으며 비슷한 아이디어로 이어지고 있다. 아이디어 중심의 연구를 통해 획기적인 발전을 이루려면 주제에 대한 매우 깊은 이해와 다른 관점을 개발해야 한다. 일부사람들은 할 수 있지만 매우 어렵다.
반면 목표중심의 연구를 통해 목표는 다른 커뮤니티와 차별화된 관점을 제공한다. 다른 누구도 묻지않는 연구를 수행 하게되어 더 큰 발전을 이룰 수 있다. 또한 목표중심의 연구는 훨씬 더 동기부여가 될 수 있다. 따라서 기복이있는 장기 연구프로그램을 보다 쉽게 수행할 수 있다. 또한 목표중심연구는 연구팀이 협력하여 문제의 다른 측면을 공격할 수 있도록 하는 반면, 아이디어 중심 연구는 1~2명의 “팀”에 의해 가장 효과적으로 수행된다.
박사 과정의 전반기 동안 나의 목표는 로봇이 매듭을 묶는 수술용 로봇, 옷을 접는 가정용 로봇 등 변형 가능한 물체를 조작할 수 있게 하는것이였다. 이 목표는 연구실의 advisor인 Pieter Abbeel이 결정했지만 목표를 달성하는 방법에 대해서는 본인의 의견을 개발하였다. 연구를 수행하던 중 예상치 못한 subproblem들이 발생했으며 그 중 하나는 trajectory optimization이였다. 이 subproblem에 대한 연구는 매듭 묶기 프로젝트에서 가장 영향력있는 결과물이 되었다.
박사 후반기에는 강화 학습에 관심을 갖게 되었다. 강화학습을 적용할 수 있는 많은 문제영역이 있지만 목표가 구체적이고 최종 결과 흥미로웠기 때문에 로봇연구에 집중하기로 결정하였다. 이 기간동안 TRPO와 GAE를 개발하여 3D 휴머노이드 운동의 목표를 달성하였다.
DeepMind팀은 Atari에서 DQN을 사용하여 결과를 발표하고 이것은 Q-learning으로 발전했지만 진행중인 목표에는 적합하지 않다고 결론을 내렸다. 따라서 policy gradient method를 계속 연구하여 TRPO, GAE및 PPO로 연구를 진행했다. 이 예시는 다른 커뮤니티와 다른 문제를 선택하여 다른 아이디어를 탐색하는 방법을 보여준다.
목표 중심 연구의 한 가지 함정은 당신의 목표를 너무 문자 그대로 받아들이고 있다. 특정 기능을 염두에두고 있다면 머신 러닝 분야를 발전시키지 않는 흥미로운 방법으로 이를 달성 할 수있는 방법이있을 것이다. 일반적이고 다른 문제에 적용될 수 있는 솔루션으로 제한해야한다.
예를 들어, 로봇 운동에 대해 연구하면서 도메인 정보를 솔루션에 통합하는 것을 피했다. 목표는 시뮬레이션에서 운동이 일반적이고 다른 문제에 적용될 수있는 방식으로 달성하는 것이었다. 나는 생명의 첫 징후를보기 위해 약간의 기능 공학과 보상 형성을했지만 변경 사항을 단순하게 유지하고 개발중인 알고리즘에 영향을 미치지 않도록주의를 기울였다. 비디오 게임을 테스트 베드로 사용하고 있으므로 나의 알고리즘 아이디어가 이 설정에만 한정되지 않고 로봇 공학에도 동일하게 적용될 수 있도록 한다.
때로는 똑똑하고 열심히 일하는 사람들이 훌륭한 연구를 하지 않는 경우가 있다. 나의 생각에 이 실패의 주된 이유는 중요하지 않은 문제에 대해 연구하기 때문이다. 연구 프로젝트에 착수할 때 스스로에게 자문을 구해야 한다. 이것이 10% 또는 10배를 개선하나? 나는 종종 연구자들이 합리적인 것처럼 보이지만 일부 지표를 약간 개선할 수 있는 프로젝트를 수행하는것을 본다.
Incremental work(10% 개선)는 달성하려는 더 큰 목표와 관련하여 가장 유용하다. 예시로 Convolution neural network를 사용한 ImageNet Classification에 대한 주요 논문은 근본적으로 새로운 algorithm components를 포함하지 않고, 전례없는 결과를 달성하기 위해 많은 수의 작은 개선점을 쌓는다. 당시에는 거의 모든 사람들에게 놀라운 일이다(지금은 당연한것으로 생각함). 일상적인 작업 중에 성능과 이해가 점진적으로 향상된다. 그러나 이 작은 단계들은 non-incremental advance를 나타내는 더 큰 목표로 당신을 움직여야 한다.
Incremental 아이디어로 연구하는 경우 유용성은 복잡성에 따라 달라진다. baseline을 약간 개선하는 방법은 매우 간단하다. 10%가 개선되면 2줄의 코드가 더 나은 반면 50%가 개선되면 10줄의 코드 등을 추가할 수 있다.
돌아가서 여러분이 가장 존경하는 머신러닝 성취 목록을 확인해보세요. 장기 연구 계획이 이러한 성과의 수준에 도달할 가능성이 있습니까? 자랑스럽게 생각할만한 길을 찾을 수 없다면 계획을 수정하여 잠재력을 갖도록 해야한다.
기계 학습에서 새로운 알고리즘과 통찰력을 개발하려면 오랫동안 문제에 집중해야 한다. 이 섹션은 장기적인 문제해결 프로세스를 위한 효과적인 습관을 개발하여 훌륭한 결과를 지속적으로 구축할 수 있도록 한다.
매일 아이디어와 실험을 기록할 수 있는 노트를 보관하는 것이 좋다. 나는 5년의 대학원과 OpenAI에서 2년동안 일을 해왔으며 그것이 큰 도움이 되었다고 생각한다.
매일 항목을 만든다. 이 항목에서는 내가하고있는 일, 가지고있는 아이디어, 실험 결과 (plot과 table 붙여넣기)를 기록한다. 1주 또는 2주 마다 노트를 검토하고 노트를 요약한다. 일반적으로 내 검토에는 실험 결과, 통찰력 (나, 동료 또는 내가 읽은 내용에서 나올 수 있음), 코드 진행 (구현 한 내용) 및 다음 단계 / 향후 작업에 대한 섹션이 포함된다. 일주일을 검토 한 후 나는 종종 이전의 내용을 보고 그 주에 대해 생각한 모든 것을 추적했는지 확인한다.
노트를 유지하고 정기적으로 검토하는것이 어떤 가치가 있을까?
첫째로 아이디어가 생기는 즉시 노트에 적어두면 나중에 확인할 수 있다. 종종 검토중인 노트를 보면서, 그때 생각하지 못했던 한 조각의 퍼즐을 채울 것이다.
둘째로 노트를 사용하면 실험결과를 통합된 장소에 유지할 수 있으므로 나중에 결과를 쉽게 찾을 수 있다. 예를 들어 어떤 hyperparameter가 차이를 냈는지에 대한 결론을 잊어버리기 쉬우므로 기존 노트을 통해 확인할 수 있다.
셋째로 노트를 사용하면 시간 사용에 대해 모니터링할 수 있다. 예시로 몇 개월을 되돌아 보면서 프로젝트가 반쯤 완료되었지만 주목할만한 결과를 얻을 수 있을만큼 스레드를 따르지 않았다는 사실도 확인할 수 있다.
어려운 문제를 해결하려면 충분한 시간을 소비해야한다. 그러나 경험적인 머신러닝 연구에서 아이디어를 충분히 시도했는지 알기가 어렵다. 때로 아이디어가 효과가 있을 수 있지만 세부 사항이 잘못되면 반대일 수 있다. 또 다른 아이디어는 아무리 노력해도 실패 할 수밖에 없다.
나의 경험상 문제를 너무 자주 전환하고 유망한 아이디어를 포기하는 것은 전환하지 않는것 보다 더 흔한 실패를 불러온다. 종종 현재 아이디어를 실현하기 위해 오랜 시간에 걸쳐 고군분투하는 동안 다른 유망한 아이디어가 나와 그 아이디어로 넘어가고 싶을때가 있다. 만약 그 아이디어를 빠르게 실행할 수 있고 잠재력이 크다면 그것을 수행해라. 하지만 일반적으로 새로운 아이디어에 대한 초기결과는 실망스러울 것이고, 중요한 결과를 얻기 위해서는 더 지속적인 노력이 필요할 것이다.
지금까지의 경험에 비추어 보면 몇 개월 동안 프로젝트를 되돌아보면 작은 막다른 골목들도 있었지만, 대부분의 시간은 논문이나 블로그 포스트와 같은 결과물을 산출하는 프로젝트들을 지향해왔다. 당신의 시간을 뒤돌아보고 확실히 실패한것이 아니라 새로운 아이디어를 통해 포기한 미 완료 프로젝트에 상당한 부분이 소비된것을 본다면 앞으로 일관성과 후속 조치에 대해 더 강한 노력을 기울여야 한다.
개인적으로는 시도하지 않았지만 많은 의미있는 전략 중 하나는 고정된 시간 예산을 주 업무 라인과 다른 새로운 아이디어를 시도하는 것이다. 예를 들어 주 프로젝트에서 주 프로젝트와 완전히 다른 무언가를 하여라. 이것은 지식을 넓히는데 도움이 될 것이다.
연구수행 중 시간을 어떻게 할당하든 많은것을 배울 수 밖에 없다. 각 프로젝트는 새로운 과제를 제시하고 background와 skill을 익힐 수 있다. 그러나 자기개발 시간을 정기적으로 따로 설정하면 장기적으로 훌륭한 일을 할 수 있는 기회를 크게 향상시킬 수 있다. 구체적으로, 현재 프로젝트에 대한 작업과는 반대로 시간의 일부를 기계학습에 대한 일반적인 지식을 향상시키는데 할당해야 한다.
기계학습에 대한 지식을 쌓는 주요 방법은 책과 논문을 읽는 것이다. 커리어의 초반에는 책과 논문을 골고루 나눠서 시간을 할당하는것이 좋다.
기계학습의 대부분 학생들은 학교 과정을 끝내고 교과서를 읽는데 시간을 사용하지 않는다. 그러나 교과서는 논문보다 지식을 흡수하는 훨씬더 dense한 방법이다. 논문에는 일반적으로 하나의 새로운 아이디어와 함께 너무 간결한 background가 있다. 일반적으로 아이디어 자체보다 표기법과 용어를 이해하는데 더 많은 시간을 소비해야하므로 많은 오버헤드가 있다. 반면에 좋은 책은 수십년의 아이디어를 모아서 같은 표기법과 올바른 순서로 제시한다. 기계학습 이외에도 다른 분야의 책을 읽는것을 추천한다. 내가 가장 좋아하는것은 Numerical Optimization by Nocedal & Wright, and Elements of Information Theory by Cover & Thomas.
책 이외에도 본인이 관심있는 연구의 박사 논문을 읽는것이 좋다. 기계학습 박사 학위 논문은 다음과 같이 순서를 정한다.
1, 3은 전문가가 작성한 필드의 과거와 미래에 대한 통일된 견해를 포함하고 있기 때문에 대부분의 이점을 얻을 수 있다. 최근 논문은 종종 활동 분야에 대해 검토하기 좋은 방법이지만 오래된 논문에는 종종 귀중한 통찰력이 포함되어 있다.
책은 기초 지식을 쌓는데 좋지만 지식을 개척하기 위해서는 많은 논문을 읽어야 한다. 연구 경력을 시작할 때 논문에서 아이디어를 다시 구현하고 결과를 논문과 비교하는데 많은 시간을 할애하는것이 좋다. 첫째, 이것은 수동적으로 읽는것보다 주제에 대한 더 깊은 이해를 제공한다. 둘째, 실험을 수행한 경험을 얻을 수 있을 것이고 원래 연구를 수행하는것보다 기존작업(원하는 수준의 성능이 알려진)을 다시 구현하여 훨씬 빠른 피드백을 얻을 수 있다. SotA(State-of-the-Art)를 재현할 수 있으면 그 이상을 경험할 수 있다.
중요한 논문을 읽고 다시 구현하는것 외에도 자신의 분야에서 덜 발간되는 논문을 추적해야 한다. 비판적인 시각으로 논문을 읽고 훑어보는 것은 당신의 분야의 동향을 알아채는데 도움이 된다.
계속해서 훌륭한 연구를 수행해라!