무엇을 만들게 되나요?

딥러닝을 위한 플랫폼

요즘의 AI를 대표하는 방법론은 딥러닝(deep learning)입니다. 딥러닝으로 뛰어난 AI를 학습하기 위해서는 (1) 엄청난 양의 데이터와 (2) 각 데이터에 부여된 정확한 정답이 필수입니다. 이 두 가지 필수 조건은 현재 딥러닝 기술의 한계이기도 하죠. 어쨌든 다음 세대의 딥러닝 기술이 나오기 전까지는, 뛰어난 AI를 만들기 위해 이 두 가지 조건을 피할 수 없습니다.

하지만 이 두 가지 조건을 만족시키는 것은 정말 어려운 문제입니다. 딥러닝을 연구하는 학계에서는 ImageNet이나 MSCOCO와 같은 대규모의 데이터-정답 쌍이 있으므로 그것을 활용하기만 하면 되지요. 하지만 현실 세계에서 문제를 찾고 그것을 AI로 해결하고자 하는 산업계에서는 (1) 엄청난 양의 데이터를 어떻게 모을지, (2) 어떻게 정확한 정답을 효율적으로 부여할지, 그리고 (3) 대량의 데이터로 어떻게 AI를 빠르게 학습할지에 대한 3가지 문제를 잘 해결해야 합니다. 여러분들이 Lunit에서 이런 문제를 멋지게 해결한다면, 4차산업혁명 시대의 산업계에서 정말 중요한 position을 차지하게 될 것이라고 확신합니다.

Lunit 연구팀의 research engineer가 되면 앞서 소개한 문제를 해결하여 강력한 의학 AI를 학습하기 위한 두 가지 플랫폼을 연구·개발하게 됩니다. 하나는 Closing the Loop이라고 불릴 사람-데이터-AI를 멋지게 연결 짓는 플랫폼이고, 또 하나는 AI의 학습을 가속하기 위한 분산 학습 플랫폼입니다.

1. Closing the Human-Data-AI Loop

학생이 문제를 풀고 정답과 맞추며 훈련하듯이, AI도 데이터(문제)를 주면 부여된 정답과 맞출 수 있도록 학습합니다. 즉, AI를 학습하기 위해서는 많은 양의 데이터와 정확한 정답이 필요하죠. 그 정답은 누가 부여할까요? 네, 사람이 직접 달아줄 수밖에 없습니다. AI를 학습하려면 사람이 관여할 수밖에 없습니다. 하지만, 어느 회사도 사람-데이터-AI를 멋지게 연결해주는 좋은 플랫폼은 없는 것 같습니다. 최근 CVPR이라는 시각 AI 학회에 가봤더니 Google이 유사한 플랫폼을 만들고 있는 것 같더군요!

Lunit의 연구팀에서 만들고자 하는 플랫폼을 아래와 같이 그려보았습니다. 이 플랫폼은 사람과 데이터 그리고 AI를 잘 연결하여 루프를 만들고, 일상에서 이 루프가 잘 돌고 있다면 아래의 오른쪽 그림과 같이 AI의 성능이 계속 좋아질 것입니다. AI의 구조를 바꾸거나 학습 방법을 개선하는 노력 없이 이 루프가 돌고 있는 것 만으로 AI가 점점 더 똑똑해질 수 있다는 것이 멋지지 않나요? 그러면 이 플랫폼이 어떻게 동작하는지 아래의 설명에서 자세히 들여다보죠!

(1) 초록색: 데이터에 정답을 부여해 학습

의사는 정답이 없는 데이터베이스에서 임의의 데이터를 선택해 정답을 부여할 수 있습니다. 이 정답은 데이터와 함께 정답이 있는 데이터베이스에 추가됩니다. 그러면 우리는 정답이 추가된 데이터베이스를 이용해 AI를 학습할 수 있고, 더 좋은 성능을 얻게 됩니다.

(2) 파란색: AI가 어려워하는 데이터에 정답을 부여해 학습

의사가 정답을 부여할 데이터를 무작위로 고르기보다는, AI가 예측하기 어려워하는 데이터를 의사에게 물어보는 건 어떨까요? 사람도 어려운 문제로 훈련해야 똑똑해질 수 있듯이, AI도 어려운 문제로 가르쳐줘야 더 똑똑해질 수 있습니다. 그렇다면 어떻게 AI가 어려워하는 데이터를 고를 수 있을까요?

어떤 데이터에 대해 AI가 0.5의 확률로 '비정상'이라고 판단했다고 가정해 봅시다. 이 말은 AI가 0.5의 확률로 '정상'이라고 판단한 것과 같습니다. 즉, 그 데이터는 AI가 '정상'인지 '비정상'인지 판단하기 어려워하는 '난이도가 높은 문제'입니다. 의사가 정답을 만들어내기 위한 비용이 무척 비싼데, 되도록 '난이도가 높은 데이터'를 골라서 정답을 부여하면, AI는 더 어려운 데이터로 훈련받을 수 있습니다.

(3) 빨간색: AI에 의해 정답이 잘못되었다고 판단된 데이터에 정답을 다시 부여해 학습

이미 정답이 부여된 데이터라 할지라도, 그 정답이 부정확한 경우가 많습니다. 특히 의학 영상 데이터는 병변이 모호하게 보이는 경우가 많기 때문입니다. 부정확한 정답을 정확한 정답으로 다시 달아준다면, 당연히 AI는 더욱 똑똑해질 수 있습니다. 그렇다면 어떻게 부정확한 정답을 골라낼 수 있을까요?

어떤 데이터에 대해 AI가 0.99의 확률로 '비정상'이라고 판단했다고 가정해 봅시다. 그런데 정답은 '정상'이라고 해보죠. 물론 AI가 틀렸을 가능성도 있지만, 정답이 잘못되었을 가능성도 높습니다. 정답이 부정확할 가능성이 있는 데이터를 이런 방식으로 골라내서 의사에게 재판독을 부탁할 수 있습니다.

2. Distributed Learning

앞서 소개해 드린 데로, 딥러닝으로 뛰어난 AI를 학습하기 위해서는 엄청난 양의 데이터가 필요합니다. 최근 딥러닝에 의한 AI의 발전은 ImageNet이라는 약 130만 개의 데이터가 있었기 때문에 가능했습니다. AlexNet이라는 AI 구조가 2012년 처음 나왔을 당시만 해도 AlexNet을 ImageNet으로 학습하는 데에 일주일 정도의 시간이 걸렸습니다. 하지만 이때부터 뛰어난 정확도의 딥러닝이 많은 관심을 받게 되면서 이제는 여러 개의 하이엔드 GPU에 데이터를 분산 시켜 학습하는 방식이 발전하여 요즘은 몇 시간 내에도 학습이 가능하게 되었습니다.

130만 개나 되는 데이터로 AI를 몇 시간에 학습할 수 있다는데, 더는 무엇이 문제일까요? Lunit과 같이 의학 영상을 이용해 AI를 학습할 때에는 여전히 문제가 많습니다. ImageNet과 같은 일반적인 사진에 비해 의학 영상은 훨씬 더 크기 때문이죠. 의학 영상의 대표 격인 엑스선 (X-ray) 영상은 화소 수가 수천*수천에 달합니다. 크기를 줄여 학습하면 되지 않냐고요? 영상을 차지하는 인체에 비해 병변의 크기는 무척 작기 때문에 크기를 함부로 줄이면 성능이 눈에 띄게 저하됩니다. 의학 영상의 또 다른 종류인 병리 (digital pathology) 영상은, 생검한 조직을 현미경 배율로 스캔한 사진이기 때문에 화소 수가 수십만*수십만입니다. 이처럼 의학 영상 1개는 압축을 해도 그 용량이 수십 MB에서 수 GB에 달하기 때문에 어떻게 학습을 가속할 수 있을지가 무척 중요한 문제입니다.

Lunit의 연구팀에서 만들고자 하는 분산 학습 플랫폼은 GPU가 장착된 여러 개의 서버를 엮어서 가속하고자 합니다. (1) 대용량 의학영상이 저장된 서버에서 여러 개의 GPU 서버에 의학 영상을 지속해서 전송해야 하고, (2) 그 영상을 받은 각 GPU 서버는 받은 영상을 전처리하며, (3) 그 후 자신이 가지고 있는 여러 개의 GPU에 영상을 나누어주어 병렬 학습을 해야 합니다. 여기서 중요한 건, (3)번에서 GPU가 일하는 동안, (1)-(2)번에서 다음 영상의 전송 및 전처리가 완료되어 있어야 합니다. 그래야 분산학습을 통한 시간 이득을 얻을 수 있겠죠? 의학 영상은 그 크기가 크고 전처리도 많이 필요하기 때문에, 그 시간을 GPU가 일하는 (3)번 시간 내로 끝내는 것이 무척 어렵고 도전적인 일입니다. Lunit의 연구팀은 이 문제를 이전에 없던 새로운 시스템 설계나 알고리즘으로 해결하기 위해 도전하실 분을 찾고 있습니다!