딥러닝은 절대 어렵지 않다. 아마 지금까지 나온 기계학습 기법 중에서 가장 이해하기 쉽고 구현하기 쉬운 방법의 하나일 것이다. 그럼 딥러닝을 언제부터 공부할 수 있을까? 아마 고등학교 수준 미적분 및 선형대수 정도면 딥러닝을 구현하는데 필요한 수학지식은 충분할 것이다. 고등학교 때 벡터 편미분 안 배우려나?
그렇다면 대학교 교양 강좌로도 얼마든지 딥러닝 강의를 개설할 수 있다. 또는 고등학생이라도 파이선 프로그래밍 정도 할 수 있는 학생은 얼마든지 온라인 강좌나 오픈소스를 통해 딥러닝을 공부할 수 있다. 하지만 진짜 딥러닝을 이용하여 어떤 문제를 해결하는 딥러닝 엔지니어가 되기 위해서는 조금 나중에, 아니 많이 나중에 공부하면 좋겠다는 생각이 든다.
딥러닝을 일찍 공부하는 게 좋지 않은 이유는 마치 이런 것이다. 2차 방정식을 공부하는데 함수 그래프를 그려보며 문제를 이해하기 이전에 근의 공식 먼저 외우는 그런 느낌? 그래서 근의 공식으로 해를 찾는 문제 말고는 2차 함수를 응용한 다른 기하 문제는 아예 포기하게 되는 그런 것?
응용 도메인에 관한 충분한 지식이나 경험 없이 딥러닝을 공부하게 되면―예를 들어, 2차 함수 그래프를 많이 그려보지 않고 근의 공식만 외우면―이런 문제점이 생길 수 있다. 모든 문제를 딥러닝으로 해결하려고 하거나, 그렇지 않은 경우, 예를 들어 데이터양이 적거나, 학습 데이터 질이 나쁘거나, 리소스에 제약이 있을 때 다른 해결책을 제시하지 못할 수 있다.
딥러닝 강좌나 예제 코드들은 공식이 있다. 성능이 보장된 네트워크 구조가 있고, 그 네트워크를 학습할 수 있는 충분한 데이터가 있고, 학습을 잘하기 위한 데이터 구성 및 최적화 기법들이 있다. 물론 나보고 딥러닝을 강의하라고 해도 이런 공식에서 크게 벗어나지는 못할 것이다. 왜냐하면, 이런 공식이 딥러닝을 빠르고 쉽게 배울 방법이기 때문이다. 사실 이 공식을 벗어나는 경우는 일반적인 딥러닝으로 해결할 수 있는 범위를 벗어나므로 방법론을 가르치는 강의를 할 수가 없다.
하지만 딥러닝을 적용하는 현실 문제는 딥러닝을 고려해서 만들어지지 않았다. 그런 진짜 문제를 크게 딥러닝으로 해결해야 하는 경우와 딥러닝 외에 더 좋은 솔루션이 있는 경우로 나눠보자면 후자가 훨씬 더 많을 것이다. 그럼 딥러닝 엔지니어가 어떤 문제를 만났을 때 ‘이 문제가 딥러닝으로 풀 수 있는 것인가?’와 더불어 ‘이 문제를 딥러닝으로 풀어야만 하는가?’에 대해도 답할 수 있어야 한다.
딥러닝을 공부하고 사용할 줄 아는 사람들은 첫 번째 질문에는 대답을 잘할 것이다. 즉 누가 물어보면, ‘이거 딥러닝으로 풀 수 있어’라고 대답할 수 있다. 그런데 ‘이거 딥러닝으로 풀어야 해’라고도 주장할 수 있을까? 이것은 참 중요한 논의이다. 현실적으로 딥러닝으로 푸느냐 아니냐는 시스템을 설계하고 리소스를 투입하는 방식을 좌우하는, 대단히 큰 결정수이기 때문이다.
엔지니어 개인 처지에서 보면 이 문제는 더더욱 중요하다. 어떤 문제가 주어졌다고 하자. 본인은 ‘딥러닝으로 풀 수 있어’라고 했는데, 다른 사람이 ‘이거 무슨 무슨 방법으로도 풀 수 있어’라고 했다. 여기서 ‘이거 딥러닝으로 꼭 풀어야 해’라고 주장할 수 있는 근거를 찾을 실력이 있는가? 그것도 평균적으로 더 비싼 방법을 말이다. 매니저 입장에서 보면 누가 ‘이거 딥러닝 사용하지 않고도 이렇게 해결할 수 있어요’라고 말해주길 기다릴지도 모른다. 이건 엔지니어 간 밥그릇 싸움이므로 본인이 해결해야지 누가 찾아주지 않는다.
그럼 딥러닝은 언제 어떻게 공부해야 하는가? 단순하게 답하기는 쉽지 않지만, 딥러닝을 비판적인 관점으로 바라볼 실력이 될 때 공부하는 것이 좋다. 각 단계를 공부하며 ‘이거 꼭 이렇게 해야 해?’라고 스스로 질문할 수 있어야 한다. 그리고 그렇게 하는 이유 또는 한계점을 직관적으로 이해하고 논리적으로 설명할 수 있어야 한다. 그래야 다른 사람이 ‘이거 꼭 딥러닝으로 해야 해?’라고 물었을 때 자신 있는 답을 할 수 있다.
나는 로봇 비전 시스템을 개발하는 우리 회사에서 유일한 딥러닝 엔지니어로 일하고 있다. 한번은 사장님이 어떤 문제에 대해 ‘이거 딥러닝으로 풀 수 있지 않아?’라고 물어봤는데, ‘아니 딥러닝은 좀 별로일 것 같고, 이런 이런 더 쉬운 방법이 있을 것 같아’라고 대답했었다. 그러자 ‘쿠씨, 너는 너무 겸손해’라고 하셨다. 하긴 어차피 결정은 매니저가 할 테니 ‘딥러닝으로 풀 수 있다’라는 답변이 더 듣고 싶기도 했을 것 같다.
또 한번은 나와 같은 문제를 다른 방법으로 풀고 있는 동료가 ‘네가 딥러닝으로 개발한 게 성능이 더 좋은 것 같은데?’라고 하자, ‘그거 여기서만 잘 되는 걸지도 몰라. 다른 현장에 가면 네가 개발한 방법이 더 잘 될걸’이라고 대답해줬다. 이런 딥러닝의 한계성을 스스로 지적하는 답변들이 내가 ‘이건 꼭 딥러닝으로 풀어야 해’라고 하는 주장에서는 오히려 힘을 실어주는 배경이 되기도 한다.
요즘 회사마다 딥러닝 경험자를 구하는 공고가 넘쳐난다. 지원자들 역시 전공을 물으면 딥러닝이라고 대답하는 사람들도 많다고 한다. 그런데 가장 최악의 엔지니어는 왜 이곳에 딥러닝을 써야 하는지도 모르고 딥러닝밖에 모르는 경우가 아닐까? 딥러닝 엔지니어를 희망하는 사람들과 딥러닝 엔지니어를 뽑으려는 회사 모두 참고가 되는 글이면 좋겠다.
원문: 구성용의 페이스북