본문 바로가기

Deep Learning + Hierarchical Knowledge

Ingraining Hierarchical Knowledge to Deep Learning 대장정의 시작

9월에 석사과정을 시작하고 벌써 두달이나 지나갔네요. 

두달동안 석사과정 연구주제를 어떤것으로 할지 이리저리 방황에 방황의 연속을 거듭하다가 드디어 방향을 잡게되었습니다. 

16년도 2학기 말에 딥러닝이라는 학문을 접하고 학부연구를 1년 반하면서 나름 공부를 열심히하고 주제도 서칭을 했다고 생각했는데,

막상 욕심이 앞서서 자연어처리, 시각인지, 생성모델, 음성신호처리도 하고싶고 이론에 가까운 연구부터 응용에 가까운 연구도 하고싶고, 

연구된 것들로 창업도 하고싶고, 내길을 굵직하게 정해서 가는게 아니라 잡다하게 이것 저것 다 해보려고 하는게 석사과정까지 이어지니까 

독이 되는 것 같다는 생각이 드네요.

1학기 조기졸업예정자다보니 아직 석사과정 입학한지 2달밖에 안되었지만, 졸업 논문 초록 제출까지 1년조금 안 남았기 때문에, 열심히 선행연구들

리서치하고 발전시켜서 좋은 논문을 낼 수 있도록 노력해야겠습니다. 



제가 잡은 연구방향은 데이터의 부족 현상문제로 인한 딥러닝의 학습효율저하 문제 해결입니다. 12년도에 ILSVRC 대회를 통해 convolution기법이

차용된 딥러닝기반의 모델이 우승과 함께 GPU가 생산되면서 딥러닝기반의 AI연구가 엄청 활성화 된 건 글을 읽으시는 모든 분이 아실것 같은데요, 

ILSVRC 대회에서 제공하는 ImageNet 데이터셋이라던가, 토론토대학의 CIFAR 10, 100, MS에서 제공하는 COCO데이터셋 등등 AI연구의 발전과 함께

연구를 위해 필요한 잘 가공되어진 데이터 셋 또한 많이 알려지게 되었습니다. 연구에 필요한 가공된 데이터셋들이 점점 많아지고, 환경적인 제약도 해소되면서

연구가 굉장히 급격하게 진전되는 것은 당연한 일인데, 문제가 하나 있습니다.


연구가 상용화로 이어지기가 어렵다는 것입니다. 


연구가 상용화로 이어지기 위해서는 연구된 딥러닝 모델의 연산량 감소를 위한 효율성 개선이라던가, request되는 처리들을 수행한다음 response하는것이 

실시간으로 이루어질 수 있도록 빵빵한 하드웨어 환경이 필요하다던가 하는 부분이 해결되어야 하는데, 

그 무엇보다도 가장 중요한 것은 Generalization ability가 좋아야합니다.



그런데 학습에 이용되는 데이터들은 실세계에서 발생하는 모든 데이터를 근사하고, 커버하지 못합니다. 따라서 모델이 학습데이터에 대해서 

과적합 될 가능성이 크고, 설령 서비스 할 클래스를 한정 짓는다 하더라도, 각 클래스에 해당하는 데이터들이 실세계에서 균등하게 생성되지 않기 때문에, 

학습 데이터의 클래스별 샘플 수의 불균형문제가 큽니다. 




[그림 1] Imagenet 데이터셋 내의 클래스별 샘플 수 (제컴에서는 화질이 좋은데, 올리면 깨지네요 ㅠ)


그림 1의 그래프를 보면 dog 클래스의 수는  10000000개 정도 있는 반면 pencil box의 경우 데이터가 10개정도 있는 것을 확인 할 수 있습니다.

이러한 불균형 문제는 딥러닝모델의 경우 데이터에 내재된 표현을 학습하기 때문에 dog 클래스와 같은 instance의 수가 높은 클래스들에 대하여 

편향적으로 학습이 이루어지게 됩니다. 


지금 예시를 범용적 분류모델에 사용되는 정제된 데이터셋으로 들었는데, 도메인을 조금 세분화 시키면 데이터의 부족 이라던가, 불균형(imbalance)문제는 

더 심각해집니다. 


의료 도메인의 경우, 암환자의 데이터와 정상인의 데이터 비율을 따져보면 당연히 정상인의 데이터가 훨씬 비율이 높습니다. 

주변을 돌아보면 알겠지만 암에 걸린 분을 찾는것이 병원에 가면 쉽겠지만, 일상 생활에서는 쉽지 않거든요.

그러면, 암환자 데이터 전체의 비율이랑 맞도록 정상인의 데이터를 1:1 비율로 맞춰서 모델을 학습시키면 되지 않느냐? 고 생각하시는 분들이 계실 수 있을 텐데

위에서 말씀드렸듯 학습데이터는 모든 가능성을 커버 및 실세계의 정보를 최대한 근사할 수 있도록 구성이 되어야 Generalization ability를 향상시킬 수 있습니다.


따라서 1:1로 구성해서 딥러닝 모델을 학습시키는 것은 좋지 못한 방법이죠. 물론, 1:1의 비율로 맞춰서 여러개의 학습 데이터셋을 만든 다음 앙상블을 하는 

배깅(bagging)이나 부스팅(boosting) 등의 기법을 응용하여 모델을 만들수 있지만, 이러한 방법들도 결국 성능상의 한계지점은 존재합니다. 


금융 도메인의 경우, 신용이 정상치에 있는 사람들의 비율이 불량자의 비율보다 훨씬 높기 때문에, 채무상환 불이행자를 판별하는 것과 같은 task를 딥러닝을

기반으로 해결하는 것이 쉽지 않습니다. 이 task는 17년도에 한국정보화진흥원에서 주최하고 과기부에서 후원한 BIGCONTEST의 champions league에서 주어진 

과제였는데, 데이터의 불균형이 심해서 단순 이진분류임에도 불구하고 딥러닝 모델로는 f1 score가 0.30, Decision Tree의 f1 score가 0.37, 

Random forest의 f1 score가 0.41까지 밖에 안나오더군요. 


이런 경우, 데이터를 샘플수가 적은 클래스를 Minor class라고 칭하는데, Minor class의 샘플수를 증대시키는 Oversampling을 수행하거나, 

샘플수가 다른 클래스를 압도하는 Major class의 샘플수를 Minor class 비율로 자르거나 감소시키는 Undersampling을 수행하여 데이터의 balance함을

맞춰줌으로써 해결할 수 있습니다. 


Undersampling에는 보통 크게 두가지가 알려져 있는데, 데이터를 일정 개수를 기준으로 클러스터링 한다음 중심값 만을 취하도록하는 Clustering Centroid기법과

Minor class 비율만큼 나누어서 여러개의 셋을 만들고 각 셋에 대한 모델을 만들고 앙상블을 하는 기법이 있습니다. 

Undersampling은 데이터에 내재된 정보의 손실이 크기 때문에 대체적으로 Oversampling을 많이씁니다.(라고 알고 있는데 case by case)


Oversampling에는 먼저 데이터를 벡터공간상에 흩뿌린 후, 같은 클래스의 데이터들끼리 이음으로써 생긴 수선 안의 값을 취하는 SMOTE[1], 

데이터를 단순히 copy하는 기법이 있는데 최근에 Deep Learning이 Oversampling에 활용되면서 Auto Encoder[2]를 활용하여 

오버샘플링을 수행한 연구[3]가 있었고, 작년에 연구실 선배와 함께 GAN(Generative Adversarial Network)를 활용하여 오버샘플링을 수행하는 연구를 하여 

두편의 논문[4,5]을 공저를 하였었습니다. GAN을 통해 Oversampling된 데이터셋으로 다시 채무상환 불이행자 판별을 수행한 결과 f1 score가 0.66까지 

향상 되었던 기억이 나네요. 


지금까지 설명드린 방법론들은 전부 데이터의 수준에서 문제를 해결하기 위한 기법들입니다. 이러한 기법들은 성능의 한계점이 명확하게 존재합니다. 

따라서 모델로써 해결하는 방법을 생각해보았습니다. 의사들은 오진이 발생하게 되더라도, 처음보는 증상에 대해서 아예 엉뚱한 결과를 내밀지는 않습니다. 

같은 틀안에 존재하는 여러가지 세부 증상들에 대해서 미묘한 차이로 인한 오진등이 있더라도, 완전 말도 안되는 누가봐도 어이가 없는 

그런 진단결과를 내어놓는 경우는 거의 없던 것 같습니다.(제 경우에는요 ㅎㅎ) 어이없는 진단을 하는 경우가 바로 우리가 뉴스에서 보게되는 케이스들이 아닐까요?

이러한 진단이 가능한 이유는 바로 그들이 전문가 지식을 기반으로 계층적인 판단을 내리기 때문이 아닌가 생각을 하게 되었습니다. 따라서 데이터의 구조와, 

레이블들이 형성하고, 내재하고 있는 계층적인 지식을 딥러닝 모델에 exploit하게되면 딥러닝 모델이 좀더 좋은 분류성능을 발휘 할 수 있게 되지 않을까

하는 생각이 들어 관련된 선행연구를 찾아보았습니다. 



이런.. 역시나 .. 



"내가 생각하는 건 누군가가 이미 생각을 해본 것이다" 라는 정설이 있듯, 굉장히 비슷한 연구가 이미 진행이 되었더라구요. 

따라서 그 연구를 이번달에 깊게 들여다 볼 계획입니다. 자세하게 들여다보고 분석하면서 간단하게 정리하여 단계별로 꾸준히 업로드 하도록 하겠습니다.


논문명은 "Ingraining Expert Label Knowledge in Deep Neural Networks" 라는 석사학위 논문입니다.

저자는 Bastiaan Sjouke Veeling 이라는 연구자로 Amsterdam 대학교의 Machine Learning Group에서 연구를 한 것 같습니다. 


좋은 논문을 제공해준 Bastiaan에게 감사의 인사를 드리며 (정작 저자분은 인사드린 것을 모르시겠지만)

연구 블로깅의 시작을 알리는 글을 이만 마치도록 하겠습니다. 


감사합니다.





- Reference - 

[1] Chawla, Nitesh V., et al. "SMOTE: synthetic minority over-sampling technique." Journal of artificial intelligence research16 (2002): 321-357.


[2] Baldi, Pierre. "Autoencoders, unsupervised learning, and deep architectures." Proceedings of ICML workshop on unsupervised and transfer learning. 2012.


[3] 이재동, 이지형. "불균형 데이터의 효과적인 학습을 위한 딥러닝 기법" 한국지능시스템학회 학술발표 논문집, Vol.25 No.1


[4] 서상현, 전용진, et al. "불균형 빅데이터의 효율적인 분류를 위한 생성적 적대 신경망 기반 오버샘플링 기법" 한국정보과학회 학술발표논문집, Vol.2017 No.12, [2017]


[5] Sanghyun Seo, Yongjin Jeon, Juntae Kim, “Meta Learning for Imbalanced Big Data Analysis by using Generative Adversarial Networks”, ICBDC ’18 Proceedings of the 2018 International Conference on Big Data and Computing, pp. 5-9, Shenzhen, China — April 28 – 30, 2018.