안녕하세요. 오랜만에 글을 쓰네요.
거의 반년 동안 글을 작성하지 못한 것 같아요. 그 기간 동안 저는 블로그 활동을 멈추고 공부에만 전념했습니다. 스스로 AI에 관하여 잘 안다고 자부했지만, 다른 사람에게 설명하는 것은 또 다른 문제였던 것 같아요. 평소에 제가 알고 있었다고 생각했던 개념들이 사실은 잘 몰랐던, 메타 인지의 부족이라고 할까요. 시간은 한정되어있는데 공부도 하랴, 블로그 글도 쓰랴. 점점 글의 퀄리티가 떨어지는 것이 느껴지기 시작했습니다. 저에게는 공부에 전념할 시간이 필요했던 것 같아요.
그런데 공부를 하면 할수록, 더 넓은 세상이 저를 기다리고 있었습니다. 무슨 뜻이냐면, 공부를 하면 할수록 공부해야 할 것들이 늘어나는 마법이라고나 할까요. 막막했지만 아직 스스로 발전할 수 있는 기회가 남았다는 점이 저를 두근거리게 했습니다.
■ 왜 비전공자가 코딩 테스트를 준비하는가?
아마 AI를 공부하시는 분들이라면 잘 아시겠지만 '코딩을 잘하는 것'과 'AI를 잘하는 것'은 전혀 별개의 이야기입니다. 그렇지만, AI를 더 깊게 공부하려면 기반 언어에 대해 '상당히' 친숙해야 한다는 것을 깨닫게 되었습니다.
AI를 하는데 왜 기초 코딩 실력이 중요할까.. 실제 저의 사례를 예시로 설명드리겠습니다. 처음 제가 느꼈던 벽은 '현업 데이터의 전처리' 였습니다. 화창한 어느 날(?), 그 동안 현업을 하며 생각해두었던 AI 프로젝트에 대한 아이디어를 실현하기로 결심합니다. 제 생각에 난이도는 쉽고, 기대 효과는 커서 빠른 시간에 마무리하고 성과가 나는 것을 기대했습니다.
그러나 현업의 벽은 높았습니다. 모델 아키텍처 구현은 커녕, 실제 현업의 비정제된 데이터를 정제된 양식으로 바꾸는 과정에서부터 오랜 시간이 걸렸습니다. 적절한 코드를 몰라서 노가다로 수선하듯이 코드를 작성하다보니, 메모리 Loss가 심해져서 나중에는 모델 학습이 잘 이루어지지도 않더군요. (보안때문에 구글 코랩을 사용할 수 없어서 Local CPU로 하다보니 더 그랬던 것 같습니다.) 이 과정에서 '효울적인 코드'의 필요성을 절실하게 느꼈습니다.
그 다음으로 느꼈던 벽은 '모델 구현' 과정에서 느꼈습니다. 주관적인 의견으로는 AI를 잘하기 위해서는 논문에 제시된 아이디어나 기존 구현된 알고리즘들을 활용할 수 있는 능력이 중요하다고 생각하는데요. 이 과정에서 keras나 torch에 대한 이해뿐만 아니라 파이썬 자체의 이해도도 정말 중요하다는 것을 체감했습니다. 왜 AI 모델에서는 __call__이 아니라 call 메서드를 사용하는지, 새로 구현된 강력한 Optimizer 구현을 위해 소스 코드를 어떻게 활용해야 하는지. 제대로 AI를 하고 싶은 사람들에게는 코딩이 필수적인 존재였습니다.
자, 이제 언어에 대한 공부가 중요하다고 깨달았으니, 기반 언어인 파이썬을 공부해야 하는데.. 그렇다고 막연하게 목표 없이 파이썬을 공부하자니, 제 성격 상 금방 그만둘 것 같았습니다. (마치 수학 공부를 하려고 문제집을 폈는데 1장 집합만 보고 책을 덮는 것 처럼..)
그래서 목표를 '코딩 테스트에 합격할 수 있는 수준'으로 정했습니다. 커트 라인이 아니라 당당하게 붙는 수준을 목표로요. 이렇게 정한 것도 이유가 있는데요. 실제 Transformer과 같은 언어 처리 모델의 데이터 전처리 과정에서 sys.stdin과 같은 메서드를 활용하는 경우가 있습니다. 이는 연산의 효율성이 input() 대비 sys.stdin이 훨씬 좋기 때문인데요. 이러한 효율성을 고려한 아이디어들이 코딩 테스트에서 많이 활용되고 있다고 합니다.
■ 그래서 어떻게 준비하는가
코딩 테스트에 대한 준비는 가장 유명한 '백준' 사이트에서 단계별 문제를 모두 풀어보기로 했습니다. 문제를 풀고, 막힌 부분이 있다면 인터넷에 공유된 다른 분들의 코드를 보며 아이디어를 얻으며 저의 기초 실력을 높이려고 합니다.
블로그 게시판에 'Python_백준' 이라는 카테고리에 제가 틀렸거나, 맞췄더라도 더 좋은 아이디어가 있는 문제들을 업로드 할 생각입니다. 저처럼 코딩 테스트를 준비하는 분들에게 도움이 되었으면 좋겠네요.
댓글