Deeplunch팀의 Kaggle Data Science Bowl 도전기(1) - 케글 도전 팁

저희 Deeplunch 팀은 카이스트에서 일주일에 한번씩 딥러닝 논문 리딩을 하던 딥러닝 초보들입니다.

점심을 함께 먹으면서 논문 품앗이 하는 평화로운 모임이죠.


 
Data Science Bowl 2017, 100만 달러의 입신양명의 길

어느날 케글에서 큰 대회가 열린다고 세상이 떠들썩(?) 해졌습니다. 저희는 처음엔 각자 바쁜 삶에 치여 소 닭보듯 흘려 넘겼죠.

Data Science Bowl (줄여서 DSB)은 환자의 폐암 여부를 찾는 대회입니다. 하지만 트레이닝 데이터에는 종양의 위치에 라벨링이 되어있지 않았습니다. 단지 폐암 환자인지 아닌지만 표지 되어 있습니다.

가만보니 저희 스터디원 중 한 형님이 의사셔서 종양에 라벨링을 하면 유리할 것 같아서 3월초에 늦게나마 스터디원 중 3명이 팀을 만들어 도전하게 되었습니다.

결론을 말씀드리면, 저희는 개인보드 0.52197로 전체 41위 (상위 2%) 에 해당되지만 그 점수를 공개 보드에 올리지는 못 했습니다.

대회를 참가해보니 경험이 없어서 실수도 하게 되고, 저희가 겪은 실수를 다른 한국팀들도 비슷하게 겪는 것 같습니다.

케글에서의 한국팀의 선전을 바라며 저희가 경험한 몇가지 팁을 올려봅니다.



TIP 1. 추가 데이터를 더 찾아내라!

케글 대회에서도 학습에 사용되는 데이터는 제한적입니다. 딥러닝은 많은 데이터를 사용해야 성능이 좋아지기 때문에 추가 데이터 확보는 성능에 큰 영향을 미칩니다.

이번 DSB 2017 대회는 1차, 2차로 나눠져 평가가 진행되었습니다. 1차에서는 약 1600여명의 데이터가 주어졌습니다.

그 중 폐암환자는 1/4 정도였고, 트레이닝 데이터에서 나온 종양 패치는 약 400개 정도였습니다.

종양 데이터가 많이 부족했기 때문에 케글의 커뮤니티에서 사람들이 많이 사용하는 LUNA (폐에서 종양을 찾는 대회) 데이터를 추가로 사용했습니다.

저희는 여기서  크기가 크고 악성이 확실한 데이터를 선별하여 학습에 사용하였지만 그 수가 100개도 채 되지 않았습니다.

대회가 끝난 후, 상위팀의 후기를 보니 LIDC 데이터를 대부분 사용한 것을 알 수 있었습니다.

LIDC 데이터에는 1000명의 환자 데이터가 추가로 있었고, 방사선과 전문의 4명의 소견이 포함되어 악성인 종양을 필터링 할수 있었다고 합니다.

LUNA 데이터보다 더 많은 종양 패치를 구할 수 있었던 것이죠.

DSB 2017 대회에서는 주어진 데이터 이외의 데이터를 사용하면 게시판에 공개하도록 규정이 있고 거기에서 추가 데이터가 있는지 확인 할 수 있습니다.

아무래도 여러가지 소스가 올라오다보니 확인이 번거롭고 데이터 전처리도 필요해서 시간이 부족하면 일일이 체크하기가 어렵습니다.

하지만, 경험상 모델 최적화보다 데이터 추가로 인한 모델의 성능 향상이 시간대비 효과가 좋았습니다.  번거롭더라도 추가로 사용할 수 있는 데이터가 있는지 다시 한번 찾아볼 필요가 있습니다.



TIP 2. 네트워크 모델링과 하이퍼 파라미터 셋팅은 생각보다 중요하지 않다.

케글 상위팀의 리뷰를 보면 다들 네트워크에 크게 신경쓰지 않은 것을 볼 수 있습니다.

데이터가 많은 Imagenet 대회에서는 더 깊은 네트워크가 좋은 성능을 보여주는 경향성이 있지만, 데이터가 적은 케글은 큰 네트워크가 좋은 성능을 보장하지 않습니다.

데이터 양에 따른 NN의 Perfomance

지난 NIPS2016 에서 우리의 스승이신 Andrew Ng 께서도 NN과 다른 머신러닝을 비교하면서 이런 그래프를 보여주신 적 있습니다.

데이터 양이 적을 경우를 보면 Small NN이나 Large NN이나 성능이 별반 다르지않고 뭐가 더 좋을지 예상할 수 없습니다.

케글의 데이터양은 아마도 그 예상할 수 없는 부분에 위치한 것으로 보입니다.

일반적인 의료분야에서는 데이터가 적기 때문에 많은 의료 논문에서도 작은 네트워크를 사용한 것을 볼 수 있습니다.

저희는 48x48x48 크기의 패치를 입력으로 받는 3D voxresnet을 사용했습니다. 31층의 레이어를 쌓았지만 모델을 더 쌓거나 파라미터 셋팅으로는 재미를 못 봤습니다.

데이터의 크기가 작은 대회에서는 좋은 모델을 만들기보다는 데이터에 대한 도메인 지식으로 셋팅을 해야하는 최적화 대회라는 느낌을 받았습니다.

저희는 모델은 고정시키고 데이터 학습비율을 조정하면서 셋팅을 했습니다.

폐암의 종양은 전체 CT에서 작은 부분만을 차지하고 정상인 부분은 나머지 큰 부분이기 때문에 Class imbalance한 문제입니다.

종양 패치는 over sampling되고 정상 패치는 under sampling되기 때문에 똑같이 1:1 비율로 학습하면 종양의 FP(false positive)가 많아졌습니다.

따라서, FP를 줄이기위해 종양패치와 정상패치의 비율을 조정하면서 학습을 한 것이지요.

결론적으로, 데이터가 작은 문제에서는 작은 네트워크부터 시작하고, 해당 문제에 대한 셋팅 포인트를 파악해서 하나하나 해결해 나가는게 중요하다고 말씀드리고 싶습니다.



TIP 3. Leader board(LB)에 현혹되지 마라

가장 중요한 팁은 바로 여기에 있는 것 같습니다.

DSB 2017의 랭킹 시스템은 이렇습니다.

test 데이터의 환자에 대한 폐암의 확률을 CSV 파일로 제출하면 Leader Board (리더보드)에서 정답과의 차이를 점수로 알려줍니다.

각 팀의 예측 결과 제출은 하루에 3번으로 제한되어 있습니다.

최종 결과평가때, 리더보드의 점수는 test 데이터 1%에 대한 점수가 공개가 되었고, 그 중 참가자가 최종 예측결과 2개를 선택해서 최종 평가를 받습니다.

최종 랭킹은 나머지 test 데이터 99% 데이터에 대해서 평가해서 정해졌습니다.

참가자들은 Cross Validation(CV)와 같은 방법으로 모델을 평가하고 그 중 가장 괜찮은 것을 리더 보드에 올립니다.

대회를 하면서 가장 당황스러운 순간은 자체적으로 좋게 평가된 모델이 리더 보드에서 점수가 좋지 않을 때입니다.

여기서 우리에겐 CV에 대한 믿음이 필요합니다.

2등을 한 팀은 "In CV, we trust" 라는 표어를 붙이고 믿음을 실천했다고 합니다.

결국 리더보드라는 잘못된 신앙을 믿고 의지한 신도들은 나락으로 떨어지게 되었습니다.

리더보드에 있는 데이터들은 Outlier가 많이 포함된 데이터이기 때문에 결국 최종 순위를 매기는 99%의 test데이터 와의 분포에 차이가 있을 수 있습니다.

경험이 있는 팀들은 리더보드에 연연하지 않는 초연함을 보여주었고, 저희같은 초짜들은 리더보드의 꾀임에 넘어가서 결국 개인 리더보드에 있는 최고 성적을 최종 공개 리더보드에 올리지 못했습니다.

트레이닝 데이터에서 CV로 가장 제너럴한 모델을 만드는 것을 목표로 하고, 리더보드에 현혹되서 거기에 피팅된 모델을 만드는 것을 피하십시요.

리더보드의 중간 순위에 연연하게 되면, 정작 중요한 최종 순위에서 나락으로 떨어지게 될 수 있습니다.

DSB2017의 랭킹시스템이 복잡하여 다 설명하진 못했지만 결국 요점은 이렇습니다.

리더보드에서 평가하는 데이터는 아웃라이어가 많아서 CV와 일치하지 않는 결과를 내놓지 않을 수도 있습니다. 리더보드의 점수로 최종 test 데이터를 예측하게 되면 Training데이터와 최종 test 데이터의 분포가 다를지도 모른다는 잘못된 생각을 갖게 합니다. 하지만 아닙니다.

최종 Test 데이터가 Training 데이터와 같은 분포로 되어 있다는 것을 믿으세요!!

의심이 많았던 저희는 주최측이 Test데이터의 분포를 바꿔놓는 농간을 부렸을 거라는 잘못된 상상으로 일을 그르쳤습니다. 하지만 주최측은 양아치가 아니었습니다.

P.S. 요새 우리 국민이 농간에 당해, 의심이 많아져 케글 순위권에 진입을 못하는게 아닌가 싶습니다.



케글 대회를 하면서 경험했던 일들을 주저리주저리 적어보았습니다.

한국팀들도 케글에 많이들 도전하셔서 입신양명 하시길 바랍니다.

혹시 카이스트 딥러닝 논문 품앗이 스터디에 관심이 있으신 분은 연락(esuerid@kaist.ac.kr) 주시기 바랍니다.


댓글