label noise
2019.04.18 23:32
Deep Learning is Robust to Massive Label Noise
Introduction
이번 포스트에서는 재미있는 분석논문 결과가 있어 공유하고자 합니다. 제목을 보시면 바로 감이 오실 것 같지만… 데이터셋에 많은 양의 noisy한 label들이 존재할 경우, 어떤 현상들이 일어나는 지에 대해서 분석하고 정리한 논문입니다.
일반적으로 연구를 진행하다보면 주로 clean하게 정제된 데이터 셋을 활용해서 작업을 하게 되는데요. 실제 field의 데이터를 다루다보면 전혀 그렇지 않은 경우들이 많습니다. 또한 대량의 데이터를 한꺼번에 모아 작업을 하고 싶을때, 모든 데이터를 clean하게 만드는 것은 불가능에 가깝죠. 즉, 어떤 환경에서든지 label noise (label이 잘못된 경우)는 존재하기 마련이고, 이런 경우 어떤 현상들이 발생하는 지에 대해서 함께 살펴보죠.
먼저 논문에서 전달하고자하는 바를 세 줄로 요약하면 다음과 같습니다.
Dataset에 임의의 양의 label noise가 존재하더라도, 학습이 가능하다.
Label noise의 양보다는 충분한 크기의 training set이 더 중요하다.
다량의 label noise환경에서도 hyperparameter를 잘 선택한다면 학습이 가능하다.
결국 이를 한 줄로 요약하면 “어느 정도 noisy한 label들이 존재하더라도 일정량 이상의 clean한 데이터가 있으면 학습에 별 문제가 없다” 입니다. 이와 관련된 기존 연구들이 몇몇 존재하긴 합니다만, adversarial sample들에 focus한 경우 [1], 전체 dataset을 고정한 후 clean label의 비율만 조정한 경우 [2-4] (즉, noisy label의 수가 증가함에 따라 clean label의 수는 줄어듬.)가 있습니다. 이 논문에서는 non-adversarial한 sample들에 focus를 하고 clean label과 noisy label을 각각 독립적인 변수로 두고 분석을 수행하였다는 것이 가장 큰 차이점입니다.
본 논문에서는 이를 검증하기 위해 다양한 데이터 셋(MNIST, CIFAR-10, CIFAR-100)에서 다양한 형태의 label noise를 넣어 실험을 수행하였습니다. 실험에 있어서 공통적인 setting을 찾아보면, adam optimizer + 128 batch size 기반으로 수행하였고 learning rate를 조절해가면서 확인해보고 가장 좋은 성능을 report하였다고 합니다. Training에 사용한 clean label을 가진 sample 수를 N이라고 하였을 때, noisy label을 가진 sample수를 \alpha N으로 정의하고 \alpha를 control해가면서 성능변화를 관찰하게 됩니다.
Learning with massive label noise
첫번째 분석으로는 noise의 형태에 따른 분석인데요. Noisy label을 어떤 식으로 만드느냐에 따라서 성능분석을 하였습니다. 즉, 하나의 training sample에 새로운 label (noisy label)을 줄 때, 어떻게 assign할 것이냐를 의미합니다. 논문에서는 3가지 방식으로 noisy label을 생성하였습니다 (uniform noise, structured noise, source of noise). Uniform noise는 간단합니다. 하나의 training sample을 새로운 random label로 assign을 할 때, uniform한 확률로 합니다. 즉, label이 10개의 class를 가질 경우, 새로운 random label은 \frac{1}{10}의 확률로 하나의 label을 가지게 되겠죠. 이러한 상황에서 어떤 결과가 나오는지 아래의 실험결과를 보면서 얘기를 이어가보도록 하죠.
Screen Shot 2017-08-07 at 4.49.41 PM
위 그래프는 uniform label noise를 주었을 때, noise의 양에 따른 성능변화를 나타낸 것입니다. x축은 앞에서 언급한 \alpha 값, y축은 validation set의 정확도를 의미합니다. Architecture 및 noise의 양에 따라 성능변화를 보여주고 있는데요. Architecture의 경우 network의 capacity가 증가하면 noise에 조금 더 robust하다는 점을 보여주고 있네요. 이 점은 직관적으로 이해가 가는 부분입니다. 하지만 흥미로운 부분은 noise의 양에 따른 성능인데요. MNIST dataset에서 무려 \alpha 값이 100인 경우에도, 정확도가 90%이상을 유지하고 있는 것을 볼 수 있습니다. 즉, 101번동안 같은 영상을 보여준다고 하였을 때 한번은 clean label, 나머지 100번은 random label을 보여주더라도 어느 정도의 정확도를 유지한다는 것을 의미합니다. CIFAR-10 dataset의 경우, 조금 더 task의 난이도가 높기 때문에 \alpha 값이 10만 되어도 성능이 많이 하락하게 됩니다. 논문의 제목에 맞게 정말 massive한 label noise인데도 어느정도 robust함을 확인할 수 있습니다. 이러한 현상을 다양한 측면에서 해석을 해볼 수 있겠지만, network 학습시 clean label들의 gradient가 항상 일관성 있게 반영되고, random label의 gradient들은 noisy하기에 어느정도 감쇄될 수 있다라고 해석할 수 있을 것 같네요.
Screen Shot 2017-08-07 at 8.13.42 PM
그렇다면 label noise가 uniform한 형태가 아닌 경우에는 어떻게 될까요? 이것이 논문에서 두번째로 언급한 structured noise를 의미합니다. 위 그림에서 보시는 것과 같이 \delta 값을 정의하고, 이를 통해 random label로 assign될 때의 확률을 uniform하게 주는 것이 아니라, 각 label마다 다르게 주는 것입니다. 그림에서의 \epsilon은 clean label이 선택될 확률, 즉 1/(1+\alpha)이고, \delta는 0~1 사이의 값을 가지게 됩니다. 0일 경우, noise가 uniform한 형태가 되며 1일 경우에는 임의의 특정 false label이 correct label을 가질 확률과 동등한 확률을 가지게 됩니다. 다시 정리해보자면, \delta 값이 커질수록 특정 false label이 나올 확률이 높아지게 됩니다. 형태를 가지는 label noise가 되는 것이죠. 아래 그래프를 보시죠.
Screen Shot 2017-08-07 at 8.29.25 PM
위 그래프의 실험은 \alpha=20 일 때 MNIST dataset의 결과입니다 (uniform noise의 실험에서 x축 20에서 conv4의 결과와 대응). Structured noise를 주기 위해서는 false label들의 순서를 정해야하는데 이를 위해 3가지 옵션을 주어 실험을 하였습니다. 헷갈리는 label들의 순서, 그 반대의 순서, 그리고 random한 순서 이렇게 보여주었네요. 헷갈리는 label들은 small subset으로 training을 해보고 test set에서의 error를 기준으로 결정하였다고 하네요.
실험결과를 통해 2가지를 분석해볼 수 있습니다. 첫번째는 structuredness가 커질수록 성능이 떨어진다는 점입니다. (논문에서는 오히려 그래프의 앞부분의 결과만을 통해 deep neural net은 ‘심지어’ structured noise에도 robust하다고 긍정적(?)인 해석을 합니다.) 하지만 0.5를 넘어가면서부터는 성능이 많이 떨어지게 되죠. 그 이유를 가만히 생각해보면 noise에 특정 패턴이 생긴다는 것입니다. 특정 패턴이 생기기 시작하면 일관성있는 gradient들이 학습시에 나올 것이고 이는 학습을 방해하는 요소로 작용한다고 생각해볼 수 있습니다. 두번째로 재밌는 점은 같은 \delta 값에서 confusing order가 조금 더 좋은 성능을 가진다는 점입니다. (물론 의미있는 큰 차이인지는 모르겠네요…) 결과를 통해 약간의 해석을 해보자면, 아니지만, visual하게 유사한 특징을 가지는 영상들에 대해서 label noise를 줌으로써 오히려 학습에 ‘상대적으로’ (의미없는 random order보단) 도움을 준다고 생각할 수 있죠. 예를 들어, 1이 clean label인 영상에 7이라고 noise를 상대적으로 많이 주게되면 공통적인 visual feature를 random order보다는 좀 더 잘 학습한다는 것이죠. 이 부분에 대해서는 저도 큰 공감이 되진 않고 헷갈리는데, 실험을 통해 직접 검증을 해봐야할 부분인 것 같네요. 또한 논문에서의 random order는 아마 fixed random order (order가 이미 고정되어 있는 상태)일텐데, 실제로 sampling할 때마다 다른 random order가 된다면 또 어떤 결과가 나올지 궁금하네요. 결국은 매번 random order를 주는 것이 uniform noise의 효과가 나오기 때문에 confusing order보다 좋은 성능이 나오지 않을까하는 생각이 드네요 (\delta가 0일 때의 효과가 나지 않을까…).
세번째로 논문에서 얘기하는 noise의 source에 따른 차이를 함께 살펴보죠.
Screen Shot 2017-08-07 at 10.29.58 PM
기존에 설명했던 부분들은 모두 하나의 source에서 noise를 바꾸었습니다. 즉, 하나의 같은 영상을 다양한 label로 보여주면서 학습한 결과들인데요. 실제 시나리오에서는 그렇지 않죠. Label noise라는 것은 같은 의미를 가지는 다른 형태 영상이 다른 label을 가지는 경우가 될텐데요. 이를 알아보기 위해 source를 바꿔가며 실험을 해본 것입니다. 그래프의 결과는 6-layers ConvNet에서의 학습 결과입니다. 빨간색 curve인 CIFAR-10은 기존의 실험결과이고요. 파란색 curve는 CIFAR-100에서 영상을 가져와서 noisy label를 준 경우 입니다. 같은 noise level에서 성능이 무조건 좋은 것을 볼 수 있습니다. 결과를 직관적으로 해석을 해보면, 같은 영상을 강아지라고 했다가 고양이라고 했다가 하는 것과 학습하려는 클래스와 전혀 관계없는 다른 영상에 잘못된 label을 주는 것과는 명확한 차이가 존재하겠죠. 따라서 CIFAR-100에서 관계없는 영상에 noisy label을 주는 것은 학습에 부정적인 영향을 덜 끼치게 되는 것을 알 수 있습니다. 또한 white noise 영상에 noisy label을 준 경우에는 성능변화가 거의 없었습니다. 이는 network가 random input에 대해 학습을 했고 따라서 전체적은 성능의 변화가 없다고 해석할 수 있습니다. 기존 연구 [4]와 어느정도 일맥상통하는 얘기입니다.
The importance of larger datasets
여태까지 noise의 형태에 따른 성능의 변화를 다양한 실험을 통해 관찰해보았는데요. 다양한 형태의 label noise에도 robust함을 볼 수 있었습니다. 본 논문에서는 label noise의 양보다는 결국 충분한 양의 clean한 training dataset이 중요하다라고 언급하고 있는데요. 이에 대해서 아래의 그래프를 보면서 살펴보도록 하죠.
Screen Shot 2017-08-07 at 11.26.06 PM
위 그래프는 clean label의 절대적인 양에 따른 성능을 나타낸 것입니다. 먼저 가장 일반적인 경우가 빨간색 그래프입니다. Noise가 존재하지 않는 경우에 (\alpha가 0인 경우) 성능 변화를 볼 수 있습니다. 나머지 그래프들은 label noise의 정도에 따라 나누어 놓았습니다. 즉, \alpha가 10, 20, 50인 경우들이죠. 그래프를 자세히 살펴보면 특정 임계치를 넘는 순간 성능이 많이 오르는 것을 볼 수 있는데요. 이는 특정 label noise의 양에서 성능을 위해 기본적으로 필요로 하는 clean한 데이터 양이 있음을 알 수 있습니다. Noise의 양이 증가할 수록 clean한 데이터를 더욱 많이 필요로 합니다. 또한 모든 그래프들에서 clean label을 가진 데이터의 양이 증가하면 성능이 나아짐을 볼 수 있습니다. 이를 해석해보면 결국 clean한 데이터의 양이 많다면 어느 정도의 noise로 인한 어려움은 충분히 해소할 수 있다라고 할 수 있습니다. 이러한 결과는 다양한 분야의 데이터를 deep neural net을 적용할 경우, 중요한 메세지로 작용할 것 같네요. 데이터를 cleansing하는 것도 중요하지만, 어느 정도의 성능을 가지는 baseline 구축하기 위해 얼마나 많은 양의 데이터가 필요한지 그리고 이를 어떻게 정하는 것이 맞는지에 대한 고민도 중요하다는 생각이 드네요. 물론 단순한 데이터 양으로 모든 것을 확인하기에는 너무 복잡한 문제인 것 같지만요.
Training on noisy datasets
마지막으로 label noise가 존재할 경우, 어떤 hyperparameter들에 의해서 어떠한 영향을 미치는지를 알아보도록 하죠. 본 논문에서는 2가지의 hyperparameter가 큰 영향을 미치게 된다라고 얘기하고 있습니다. 이는 batch size와 learning rate입니다. 각각에 대해서 어떤 영향을 미치는지 아래의 그래프를 보면서 얘기하도록 하죠.
Screen Shot 2017-08-07 at 11.52.50 PM.png
먼저 batch size 입니다. 32~256까지 batch size를 바꾸어가면서 성능변화를 관찰하였습니다. 보시다시피 batch size가 증가하면 할수록 noisy label에 robust해짐을 확인할 수 있습니다. 이는 간단하게 해석할 수 있는데, batch내에서 random하게 sampling된 noisy label들은 제외되고 반면 correct samples들의 gradient들이 합쳐지면서 학습에 기여를 하게 됩니다. 따라서 batch size가 커질수록 mean gradient가 correct label에서 나온 gradient와 가까워지게 되고, 그로 인해 batch size가 커질수록 noisy한 gradient는 상쇄되어지게 됩니다. 결국 noisy label들의 영향이 줄어들게 되는 것입니다. 이론적으로 큰 batch size가 좋은 성능을 낸다는 것인데, 여담으로 본 논문에서는 이 실험을 제외한 모든 실험에서 굳이 batch size를 128로 한 이유가 궁금하긴 하네요. 그래프에서 H_\alpha는 batch size가 무한대로 커진 경우를 의미하는데요. 이 경우에는 label noise의 양에 따라 성능의 저하가 거의 존재하지 않게 됩니다. 여기서 실제로 어떻게 batch size를 무한대로 했는지가 궁금하실텐데요. 아래와 같이 수식화하여 정의하였습니다. 보조 loss function을 두고 새로운 loss function H_\alpha를 정의하여 모델링을 하였습니다.
Screen Shot 2017-08-08 at 12.22.18 AM.png
위 식에서 \alpha는 앞에서도 언급했던 noise의 정도이고요. m은 클래스의 개수입니다. 즉, batch size X에서 1/(1+\alpha)의 확률로 correct label이 들어오고, 나머지 random label들이 m개의 클래스들이 할당될 확률은 \alpha/m(1+\alpha)가 됩니다. 따라서 위와 같이 식을 풀 수 있게 되구요. \alpha가 증가함에 따라 correct label의 gradient를 방해하는 쪽으로 기여를 하게 됩니다. 논문에서는 batch size가 무한대인 경우를 위와 같은 식으로 모델링 함으로써 새로운 loss function을 정의할 수 있게 되고, 실질적으로 구현 불가능한 상황을 재현하여 결과를 리포트하였습니다. 결국 batch size가 무한대로 커진 경우, 성능의 저하가 없다는 것은 \alpha값이 증가하는 것이 true gradient의 방향을 바꾼다기 보다는 크기를 줄이는 역할을 하는 것이라고 해석할 수 있습니다.
두번째로 말씀드릴 내용은 learning rate입니다. 이는 직관적으로 매우 간단하게 생각할 수 있는 내용입니다. Noise가 많은 경우, learning rate가 크다면 당연히 noisy한 성분이 많이 반영되겠지요. 따라서 그래프에서 나타난 결과처럼, learning rate가 작을 경우에는 label noise의 양에 따라 큰 변동이 없지만 성능이 낮고, learning rate가 큰 경우에는 label noise의 양에 따라 성능저하가 많이 나타나지만 noise가 적을 경우에는 좋은 성능을 가지게 됩니다. Batch size의 크기와 정반대의 양상을 띄게 되는 것이죠.
Conclusion
이번 포스트에서 간단한 분석논문을 쭉 훑어보았습니다. 실제 데이터를 수집해서 학습을 수행할 때 한번 더 고려해 볼 부분들에 대해서 짚어주는 논문이었던 것 같습니다. 어느 정도의 큰 clean dataset이 있다면 별 다른 기법들 없이도 label noise에 충분히 robust한 network를 학습할 수 있음을 실험적으로 볼 수 있었네요. 여기서 ‘어느 정도’의 clean dataset이 필요한지에 대해서는 label noise의 양과 각 task에 따라 많이 달라지겠지만, 이를 어떻게 정의할 것인가에 대한 고찰이 필요로 할 것이라 생각이 듭니다. 간단한 실험들이라 직접 구현을 해보면서 확인해보면 조금 더 와닿지 않을까라는 생각도 듭니다. 추가적으로 앞으로는 데이터이외에 기술적으로 label noise를 다루는 기법들(데이터 양으로 승부하는 것 이외에 다양한 기법들이 존재하는 것으로 보이네요.)에 대해서도 알면 큰 도움이 되리라 생각합니다. 이번 포스팅을 통해 각자의 task에 대해서는 어떤 비슷한 문제들이 있고, 분석해보았을 때 어떤 결과가 나올지에 대해서도 고민 해볼 수 있었으면 좋겠네요.
Reference
[1] Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow, and Rob Fergus. Intriguing properties of neural networks. In International Conference on Learning Representations, (ICLR), 2014.
[2] Sainbayar Sukhbaatar, Joan Bruna, Manohar Paluri, Lubomir Bourdev, and Rob Fergus. Training convolutional networks with noisy labels. arXiv preprint arXiv:1406.2080, 2014.
[3] Grant Van Horn, Steve Branson, Ryan Farrell, Scott Haber, Jessie Barry, Panos Ipeirotis, Pietro Perona, and Serge Belongie. Building a bird recognition app and large scale dataset with citizen scientists: The fine print in fine-grained dataset collection. In Computer Vision and Pattern Recognition, (CVPR), 2015.
[4] Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, and Oriol Vinyals. Understanding deep learning requires rethinking generalization. In International Conference on Learning Representations, (ICLR), 2017.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
1504 |
LG 21 세기 brain hunt - USA
![]() | WHRIA | 2019.05.23 | 438 |
1503 | Basic tutorial to develop driver on windows | WHRIA | 2019.12.07 | 449 |
1502 | batch normalization explain | WHRIA | 2019.07.14 | 453 |
1501 |
My Dream Car
![]() | WHRIA | 2015.01.17 | 491 |
1500 | unattended upgrade | WHRIA | 2020.11.01 | 515 |
1499 | bash 문자열 | WHRIA | 2017.02.13 | 536 |
» | label noise [1] | WHRIA | 2019.04.18 | 542 |
1497 | ac-68u dd-wrt 에서 정펌으로 복구 | WHRIA | 2018.11.22 | 547 |
1496 | ubuntu tweak | WHRIA | 2019.01.29 | 560 |
1495 | fatal error: turbojpeg.h: No such file or directory | WHRIA | 2018.11.24 | 645 |
1494 | bitcoin 구입 | WHRIA | 2016.08.17 | 646 |
1493 | JAMA | WHRIA | 2017.02.11 | 670 |
1492 | 바이두 | WHRIA | 2020.06.20 | 680 |
1491 | mxnet | WHRIA | 2018.01.08 | 688 |
1490 |
Model Dermatology
![]() | WHRIA | 2017.12.22 | 694 |
https://blog.lunit.io/2017/08/08/deep-learning-is-robust-to-massive-label-noise/