안녕하세요. 2일 전, 토요일 새벽에 첫 저널 논문을 투고한 기념으로, 논문 작성하며 느꼈던 것에 대해서 공유하고자 이렇게 x-diary를 작성합니다.
저는 첫 저널 논문을 작성하고자 무려 2024년의 1월~10월을 사용하였다고 말할 수 있는데요. 물론 해당 기간 중간에 과제 회의 준비, 데모 준비, 시험 등 온전히 모든 시간을 논문을 위한 실험 및 논문 작성에 할애했다고 말할 수는 없지만, 아이디어 구상부터 실험 및 논문 작성까지 다른 사람에 비해서 정말 많은 시간이 걸렸습니다.
해당 기간동안 논문을 작성하며 제가 생각했던 바를 말씀드리고자 합니다.
1. 실수하지 않으려면 시스템을 구축해야 한다.
저는 실수가 정말 정말 정말 많은 사람입니다. 심지어 실수를 너무 많이 한 나머지 제가 한 행위에 대해서 확신을 가지지 못하고 저를 믿지 못하는 상황도 많이 있습니다. 작년에 ICCAS에 도전하고자 여러 실험을 한 경험이 있습니다. 이 때는 한 실험에 정말 많은 실수를 하며 높은 자괴감에 빠진 적이 있었습니다. 이번에는 이러한 상황이 다시 반복되는 상황을 막고 싶었습니다.
어떻게 하면 Human error를 줄일 수 있을까?라는 생각을 많이 했었는데, 첫 번째로 생각한 것은 check list를 만드는 것이었습니다. 실험 프로그램을 실행시키기 전에 check할 부분을 list화 해서 실험을 하는 것이었습니다. 좋은 생각이라고 처음에는 생각했지만 점점 check list를 보는 행위를 잊어버려서 원점으로 돌아가게 되었습니다.
두 번째로 생각한 것은, 실수를 방지하도록 bash 파일을 만드는 것이었습니다. 또한 bash 파일의 매개변수를 log의 파일명으로 저장하게 하는 것이었습니다. bash 파일로 관리해야 하는 파라미터를 따로 넣어주고 log 파일명을 자동으로 할당되게 하였더니, 어떤 실험이 어떤 성능을 내었고 이 성능을 재현할 수 있게 되었습니다.
세 번째로 생각한 것은, wandb를 사용하는 것이었습니다. bash 파일을 통해 파라미터를 정리하는 것도 좋았지만 wandb를 통해서 이를 백업 해두고 실험 결과를 중간에 그래프로 확인할 수 있어 좋았습니다.
위의 방식을 적용하니 정말로 실수가 매우 줄었고 안정적으로 실험을 수행할 수 있는 제 자신을 볼 수 있었습니다. 처음에는 ‘어? 실수가 엄청 줄었는데 왜 그런거지?’라고 생각했는데, 지금 생각하면 bash 파일, log 파일, wandb라는 시스템을 구축하여서 이런 것이 아닐까 생각됩니다. 제 시스템이 모두에게 적용되지는 않겠지만 제 경험을 통해 도움이 되기를 바랍니다.
2. 꾸준히 남의 코드를 보고 실행해보자
이번에 제가 제안한 논문의 주요 contribution은 model-agnostic하게 동작한다는 것이었습니다. 이 때문에 제가 제안한 모듈을 여러 backbnone에 붙여 실험해봤어야 했는데요. 정말 신기하고 힘들었던 것이 저자마다 각자 모델을 구축 및 실행하는 방식이 달랐고, 저는 빠르게 실험 결과를 보기 위해서 여러 논문의 코드를 실행해보고 변형했어야 했습니다. 논문 하나당 할당하는 시간이 길수록 그만큼 실험 결과가 느리게 나오기 때문에 애를 쓰면서 논문의 저자가 모델 구조를 어떻게 설정했는지 여러 파일을 오가며 파악하고자 했습니다.
이런 경험 덕분일까요? 어느순간 저도 모르는 사이에 새로운 코드를 작성할 때 생각한 시간 보다 훨씬 적은 시간으로 수행한다는 것을 알게되었습니다. 덕분에 과제 관련해서 빠르게 성능을 봐야할 때 많은 도움이 되었습니다. 그래서 코딩 실력을 빠르게 향상시키고 싶다면 흥미있는 논문의 코드를 보면서 실행해보고 뜯어보는 것이 정말 많이 도움이 된다는 말씀을 꼭 드리고 싶습니다.
3. 내 방법론은 어떤 문제를 해결할 수 있을까? (성능 올리는 거 말고, 그래서 뭐를 할 수 있는데?)
이번에는 논문 방법론에 대해서 말해보고자 합니다. 저는 24년도 상반기 동안 제가 생각한 아이디어를 접목해서 기존 baseline에 성능을 향상하는데 급급했습니다. 24년도 하반기에 들어서면서야 얼추 성능을 향상시키고, 논문 작성 기미를 보일 때 그제서야 제 방법론의 대전제가 무엇일까에 대해서 생각하게 되었습니다.
처음에는 ‘내 방법론을 접목시키면 성능 향상이 된다.’라는 정말 나이브한 생각만 있었는데, 해당 생각을 주장하기 위해서는 성능이 많이 올라야할 것 같은데 생각처럼 성능이 많이 오른 것도 아니였고, ‘해당 방법론을 사용하면 뭐가 좋은데? 성능 말고’라는 대답에 질문할 수 없었습니다.
그래서 결국 처음으로 돌아가서 내 방법론은 무엇을 해결하는 방법론일까? 내 방법론의 문제 상황이 뭘까? 하나하나 질문하면서 구체화하였고, 교수님의 가이드에 따라 질문에 꼬리를 물고 답변을 해보니 ‘이러한 상황에 내 방법론이 강인하게 동작할 수 있겠다!’라는 생각을 하게 되었습니다. 이제서야 논문을 쓸 수 있는 시작점에 온 것이죠.
제 방법론의 강점이 뭐가 있을까를 여러 방면으로 많이 생각하였는데, 먼저 성능에 집착하면 방법론의 장점을 찾기가 너무 힘들다는 것이었습니다. 문제 상황은 설정 안하고 성능이 좋으니까로만 자꾸 생각하니까 여러 시각으로 제 방법론을 보기가 힘들었습니다. 그래서 성능을 내려두고 내 방법론의 장점이 돋보일 수 있는 환경을 구체화하였습니다. 이러한 환경을 구축하니 제 방법론이 어떤 문제를 해결하고자 하는지가 확실히 보였고, 추가 실험으로 뭐가 필요한지가 쉽게 나왔습니다. 혹은 내 방법론의 장점이 돋보일 수 있는 환경을 제안하는 것도 좋은 방법이 될 것 같습니다.
4. 나는 정말 느린 사람이구나.
실험을 하고 논문을 쓰면서 ‘나는 정말 느리구나’라는 생각이 안 들었던 적이 없었던 것 같습니다. ‘나는 정말 느리구나’를 뛰어넘어서 나는 왜 못하지?부터 시작해서 저를 자책하는 말은 정말 많이 했던것 같습니다. 사람 심리라는 것이 나와 타인을 비교하고 싶지 않아도 같은 연구실 혹은 다른 연구실의 다른 사람들을 접하다보면 어쩔수 없이 비교하며 자책하는 순간은 찾아오는 것 같습니다.
그럼에도 결국에는 그만두지만 않으면 끝은 옵니다. 이번에 논문 투고를 하며 알게 된 점은 결국 저는 논문 작성을 마무리했다는 것이고, 포기하지 않았다는 것입니다. 앞으로 힘든 날은 많이 오게 될 것이라 생각이 듭니다. 앞으로 힘들다고 생각할 때마다 주변을 잊지 않고, 제가 논문을 투고하며 알게 된 점을 잊지 않기를 바랍니다.
5. 더 연구하고 싶다.
논문을 투고하기 전에는 쉬고 싶다는 생각이 제 머리 속을 도배했었는데, 이제는 논문 프로세스를 확실히 알았으니 빨리 또 실험하고 싶다는 생각이 드릉드릉 합니다. 논문 작성하며 새로운 논문 팔로업을 후순위로 미뤄뒀는데 빨리 읽고 싶은 생각이 듭니다. 과제를 마무리하면 앞으로 연구를 위해서 달려보도록 하겠습니다!
논문 작성하는 도중에는 하고 싶은 말이 많았었는데, 지금 작성해보니 생각보다 잘 안나오는 것 같습니다. 그래도 하고 싶은 다 한 것 같으니 이만 마무리 하고자 합니다. 해당 논문을 작성하며 교수님과 홍주영 연구원의 도움을 많이 받았는데 정말 감사하다는 말씀드리며, 앞으로는 저도 이런 도움을 줄 수 있는 사람으로 성장하고 싶습니다. 그럼 지금까지 읽어주셔서 감사합니다.