ICML 2024 | 블로그 게시물 | arXiv 논문 | OpenReview 논문 | GitHub
대부분의 머신러닝 모델은 MNIST에서 약 99%의 테스트 정확도를 얻습니다. 저희 데이터셋인 MNIST-1D는 크기가 100배 작고(기본 샘플 크기: 4000+1000; 차원성: 40) 비선형성을 가진 모델과 그렇지 않은 모델, 공간적 귀납 편향(spatial inductive biases)을 가진 모델과 그렇지 않은 모델 간의 구분을 더 잘 수행합니다.
2023년 12월 5일: MNIST-1D는 Simon Prince의 『Understanding Deep Learning』 교과서에서 핵심 교육 데이터셋이 되었습니다.
인용(Citation):
@inproceedings{greydanus2024scaling,
title={Scaling down deep learning with {MNIST}-{1D}},
author={Greydanus, Sam and Kobak, Dmitry},
...
-
시작하기 (Getting started)
-
예시 사용 사례 (Example use cases)
-
CNN 공간 사전 지식 정량화 (Colab)
-
자기 지도 학습 (Self-supervised learning) (Colab)
-
복권 티켓 찾기 (Finding lottery tickets) (Colab)
-
깊은 이중 하강(deep double descent) 관찰 (Colab)
-
학습률 메타 학습 (Metalearning a learning rate) (Colab)
-
활성화 함수 메타 학습 (Metalearning an activation function) (Colab)
-
풀링 방법 벤치마킹 (Benchmarking pooling methods) (Colab)
-
MNIST-1D 및 MNIST의 t-SNE 시각화 (Colab)
-
커뮤니티 기여 (Community contributions)
-
손으로 구현한 역전파(backprop)를 가진 Numpy 전용 MLP
-
Simon Prince의 『Understanding Deep Learning』 교과서에서 MNIST1D가 핵심 교육 예제로 사용됨 - mdcfrancis에 의해 구현된, 일치하는 랜덤 시드 등을 포함하는 매칭 GoLang 구현체
-
이 데이터셋은 HuggingFace에도 있습니다 (thanks to @cakiki)
-
...실험 Colab 링크를 보내주시면 여기에 소개하겠습니다.
pip install mnist1d
이 명령을 사용하면 기본 데이터셋을 로컬에서 구축할 수 있습니다:
from mnist1d.data import make_dataset, get_dataset_args
defaults = get_dataset_args()
data = make_dataset(defaults)
...
만약 이것을 가지고 실험해보고 싶다면, notebooks/mnist1d-pip.ipynb를 참고하세요.
대안으로, GitHub 레포지토리에서 항상 pip install 할 수 있습니다:
python -m pip install git+https://github.com/greydanus/mnist1d.git@master
| Dataset | 로지스틱 회귀 (Logistic regression) | MLP | CNN | GRU* | 인간 전문가 (Human expert) |
|---|
| MNIST | 94% | 99+% | 99+% | 99+% | 99+% |
| ... | | | | | |
| *GRU 학습은 CNN의 실행 시간보다 최소 10배 더 오래 걸립니다. | | | | | |
"셔플(shuffle)"이라는 용어는 Zhang et al. (2017)에서와 같이 데이터셋의 공간 차원을 섞는 것을 의미합니다.
Geoffrey Hinton에 따르면, 원래의 MNIST 데이터셋은 머신러닝의 초파리(Drosophila)입니다. 하지만 우리는 이 데이터셋이 몇 가지 단점이 있다고 주장합니다:
모델 간의 판별력 (Discrimination between models). 주요 ML 모델들 사이의 차이는 몇 퍼센트 포인트에 불과합니다.차원성 (Dimensionality). 예제들은 784차원의 벡터이며, 따라서 ML 모델을 학습시키는 것은 상당한 컴퓨팅 자원과 메모리를 필요로 합니다(신경 구조 검색이나 메타러닝 등을 생각해 보세요).해킹하기 어려움 (Hard to hack). MNIST는 절차적으로 생성된 데이터가 아니므로 노이즈 분포, 숫자들의 스케일/회전/변환/전단 등 또는 해상도를 변경하기 어렵습니다.
우리는 이러한 문제들을 해결하기 위해 MNIST-1D를 개발했습니다. 이 데이터셋은 다음과 같은 특징을 가집니다:
모델 간의 판별력 (Discriminative between models). 주요 ML 모델들 사이에서 테스트 정확도에 넓은 편차가 존재합니다.낮은 차원성 (Low dimensional). 각 MNIST-1D 예제는 40차원의 벡터입니다. 이는 더 빠른 학습과 적은 메모리를 의미합니다.쉽게 조작 가능함 (Easy to hack). max_translation, corr_noise_scale, shear_scale, final_seq_length 등을 조정할 수 있는 API가 있습니다. 코드는 깔끔하고 모듈화되어 있습니다.여전히 현실 세계적 관련성을 가짐 (Still has some real-world relevance). 비록 낮은 차원이고 합성 데이터이지만, 이 작업은 arguably Sklearn의 two_moons, two_circles 또는 gaussian_blobs와 같은 데이터셋보다 더 흥미롭다고 할 수 있습니다.
t-SNE를 사용하여 MNIST 및 MNIST-1D 데이터셋을 시각화했습니다. MNIST 플롯에서 잘 정의된 클러스터들은 대부분의 예제가 픽셀 공간에서 kNN 분류기를 통해 분리 가능하다는 것을 나타냅니다. 반면, MNIST-1D 플롯은 잘 정의된 클러스터가 부족하다는 것을 보여주며, 이는 성공적인 분류를 달성하기 위해서는 데이터의 비선형적 표현을 학습하는 것이 훨씬 더 중요하다는 것을 시사합니다.
다음은 프리즈된(frozen) 데이터셋을 다운로드하는 최소한의 예시입니다. 이는 이 저장소를 pip으로 설치하고 처음부터 생성하는 것보다 나쁘다고 할 수 있습니다.
하지만 사용처가 있기는 합니다. 또한, 절차적으로 생성된 데이터셋이 논문과 블로그 게시물에서 사용된 데이터와 정확히 일치하는지 확인하는 데에도 사용될 수 있습니다:
from urllib.request import urlopen
import pickle
url = 'https://github.com/greydanus/mnist1d/raw/master/mnist1d_data.pkl'
...
이것은 합성적으로 생성된 데이터셋으로, 기본적으로 4000개의 학습 예제와 1000개의 테스트 예제로 구성되어 있습니다(원하는 대로 변경할 수 있습니다). 각 예제는 0부터 9 사이의 손글씨 숫자를 닮은 템플릿 패턴을 포함합니다. 이 패턴들은 원래 MNIST 데이터셋의 숫자들과 유사합니다.
원본 MNIST 숫자들
1D 템플릿 패턴들
선으로 표현된 1D 템플릿들
합성 데이터셋을 구축하기 위해, 우리는 이 템플릿들을 일련의 무작위 변환(random transformations)에 통과시킵니다. 여기에는 무작위 패딩 추가, 이동(translation), 상관관계 노이즈(correlated noise), 독립 동일 분포 노이즈(iid noise), 그리고 스케일링이 포함됩니다. 우리는 이러한 변환들을 사용하는데, 이는 1D 신호와 2D 이미지 모두에 관련성이 있기 때문입니다. 따라서 우리의 데이터셋은 1D이지만, 발견한 결과 중 일부는 2D (이미지) 데이터에도 적용될 것이라고 기대할 수 있습니다. 예를 들어, 시퀀스 내에서 신호가 다른 위치에 발생하도록 하여 이동 불변 모델(translation-invariant model)(예: CNN)을 사용하는 이점을 연구할 수 있습니다. 이는 큰 패딩과 이동 계수(translation coefficients)를 사용하여 수행할 수 있습니다. 여기에 이러한 변환들이 어떻게 적용되는지 애니메이션이 있습니다.
원래의 MNIST 데이터셋이 픽셀의 2D 배열(각 이미지가 28x28=784 차원을 가짐)로 구성된 것과 달리, 이 데이터셋은 길이 40의 1D 시계열로 구성됩니다. 이는 각 예제가 약 20배 더 작다는 것을 의미하며, 데이터셋을 훨씬 빠르고 쉽게 반복할 수 있게 합니다. 이 간단한(toy) 데이터셋의 또 다른 장점은 여러 종류의 딥러닝 모델들을 잘 분리해 준다는 것입니다. 실제로 많은 모델들이 MNIST에서 동일한 98~99% 테스트 정확도를 얻습니다.
고정된 수의 학습 예제를 가지고, 우리는 CNN이 비교 가능한 MLP보다 훨씬 더 나은 테스트 일반화 능력을 달성한다는 것을 보여줍니다. 이는 우리가 ML 모델에 내장하는 귀납적 편향(inductive biases)의 가치를 강조합니다.
우리는 Frankle & Carbin (2018)에서 설명한 희소한 '복권 티켓(lottery ticket)' 마스크를 얻습니다. 그런 다음 이 마스크들이 무엇을 특별하게 만드는지 정확히 알아내기 위해 몇 가지 제거 연구(ablation studies)와 분석을 수행합니다(스포일러: 이들은 국부적 연결성 등 공간적 사전 지식(spatial priors)을 포함하고 있습니다). 원래 논문과 모순되는 한 결과는 복권 티켓 마스크가 다른 초기 가중치 하에서도 유익할 수 있다는 것입니다. 우리는 이러한 효과가 존재하지만 Frankle & Carbin이 수행한 실험에서는 극히 미미하게 사라지는 것 같다고 의심합니다.
우리는 Belkin et al. (2018)에서 설명하고 Nakkiran et al. (2019)에 의해 더 최근 대규모로 연구된 '딥 더블 디센트(deep double descent)' 현상을 재현합니다.
또한, '언롤드 최적화(unrolled optimization)'라고도 알려진 기울기 기반 메타 학습을 소개하는 간단한 노트북입니다. Maclaurin et al (2015)의 정신에 따라 우리는 이 기술을 사용하여 MLP에 대한 최적의 학습률을 얻습니다.
이 프로젝트는 학습률(learning rate) 예제와 동일한 원리를 사용하지만, 기울기 기반 메타학습(gradient-based metalearning)을 통해 다루어지지 않았던 새로운 문제에 접근합니다. 바로 신경망에 완벽한 비선형성(nonlinearity)을 어떻게 얻을 수 있는지 하는 문제입니다. 우리는 ELU 활성화 함수(activation function)에서 시작하여 MLP로 오프셋(offset)을 매개변수화(parameterize)합니다. MNIST-1D로 훈련된 MLP 분류기(classifier)의 마지막 200단계에 걸쳐 가장 낮은 훈련 손실(training loss)을 유도하는 오프셋을 찾기 위해 언롤드 최적화(unrolled optimization)를 사용합니다. 흥미롭게도, 그 결과는 Ramachandran et al. (2017)이 설명한 Swish 활성화 함수와 다소 유사하며; 주요 차이점은 -4에서 -1 사이의 양수 영역(positive regime)이라는 것입니다.
우리는 훈련 샘플 수와 풀링 방법(pooling methods)의 유용성 간의 관계를 조사합니다. 우리는 일반적으로 데이터가 적은 환경(low-data regime)에서는 풀링이 매우 유용하지만, 훈련 데이터 양이 증가함에 따라 이러한 이점이 감소한다는 것을 발견했습니다.