개인적으로 읽고 쓰는 공부용 리뷰입니다.

틀린 점이 있을 수도 있으니 감안하고 읽어주세요. 피드백은 댓글로 부탁드립니다.

paper overview

논문이라기보다는 technical report에 가깝지만 내용이 재밌어서 가져왔다. 주 내용은 제목 그대로 "작은 모델들 앙상블 하는 것이 큰 모델 보다 효과적이다" 라는 것이다. 증명을 위해 cifar와 imagenet으로 실험을 진행했으며, 각 데이터셋에 wide resnet, efficientnet을 사용한다. 사실 내용은 크게 볼 것 없지만 google reseach길래..

Abstract

  • 모델 앙상블이 하나의 모델보다 속도도 빠르고 더 정확하다. 심지어 이 차이는 모델의 사이즈가 점점 커질수록 크다.
  • cifar10이랑 imagenet에서 검증한다.
  • 하나의 거대 모델을 튜닝하는 것보다는 모델 앙상블 하는 것이 trade-off에서 더 유연하다. 

1. Introduction

  • 일반적으로 모델의 파라미터 수를 증가시켜면 동일한 파라미터나 연산 수의 앙상블보다는 좋을 것이라고 예상함 ( 오버피팅 제외) 왜냐하면, 모델 앙상블은 하나의 거대 모델보다 less connectivity하기 때문이다.
  • 단일 모델보다 적은 연산 량으로 더 높은 정확도를 보이는 앙상블을 찾는 것을 보여준다.
  • 이를 위해 우리는 cifar에는 wide-resnet을, imagenet에는 efficientnet을 활용한다.
  • NAS를 통해 다양한 조합을 시도해봤지만 같은 구조의 모델 앙상블 보다 더 나은 방법을 찾기 못했다.
  • 다양한 구조를 활용하는 것은 더 나은 방법 ( NAS 보다)을 사용하거나 차라리 단일 모델을 튜닝하는 것이 낫다. 

2. Approaches and Experiments

  • 앙상블 할 때 같은 구조를 독립적으로 학습한다. 
  • 각 모델의 출력은 기하 평균으로 계산. (element-wise 곱의 제곱근으로 계산)

2.1. Image Classification on CIFAR-10

  • wide resnet family 선정, 8개씩 각각 학습
  • n=16 ( WRN 논문 기준 N=2), k = {1,2,4,8}, image size 32x32. 
  • 오버피팅 방지 위해 작은 모델 사용.

  •  파란선은 wrn 16-1을 사용하여 1~8개씩 앙상블 한 결과를 보여줌. 노란선 ~ 빨간선도 마찬가지.
  • 초록색 3 즉 wrn16-4 3개가 wrn 16-8 1개보다 높은 성능을 보이며 더 적은 연산량을 가짐. 하지만 파란거 3보다 주황색1이 조금더 높은 성능을 보임. 즉 Abstract에서 말한 "this gap in im- provement widens as models become large." 것이 이 부분.

WRN 구조 기본적으로 4개의 conv layer를 갖고 N이 커질수록 6개씩 커짐 즉 6N+4 의 개수를 가지며 k는 conv block의 width를 의미.

2.2. Image Classification on ImageNet

  • efficientnet b0~b7 사용. 3개씩 각각 학습.
  • 오버피팅 효과를 더 잘보기위해 autoaugment, randaugment등 사용하지 않음.

3. Result

  • 모델 크기가 작을 땐 앙상블의 효과가 적어 보일 수 있지만 모델이 커질수록 앙상블의 효과를 확실히 볼 수 있다.
  • 어쨌든 앙상블이 가능한 상황이라면, 하나의 모델을 짜내는 것보다 앙상블이 효과 적이다.
  • 단순히 같은 모델들의 학습 및 앙상블 보다 다양한 구조를 사용하면 더 좋을 것 같아서 NAS 써봤지만 효과 못 봤다.

Save

torch.save(model.state_dict(), PATH)

보통 torch.save를 사용해서 pytorch model을 저장하는데 이때 보통 .pt, .pth의 확장자를 쓴다. 그러나 .pth의 경우 python path와 충돌 위험이 있기때문에 .pt 확장자를 사용하는 것을 추천한다. 

Save for resume

torch.save({
            'epoch': epoch,
            'model_state_dict': model.state_dict(),
            'optimizer_state_dict': optimizer.state_dict(),
            'loss': loss,
            ...
            }, PATH)

일반적으로 모델을 저장할 때 학습 재개(resuming)를 위해 모델 파라미터 뿐만 아니라 optimizer, loss, epoch, scheduler등 다양한 정보를 함께 저장한다. 그래서 이러한 checkpoint는 모델만 저장할 때에 비해서 용량이 훨씬 커진다. 이럴때는 .tar 확장자를 사용한다. 나는 주로 .pth.tar를 사용한다.

To save multiple components, organize them in a dictionary and use torch.save() to serialize the dictionary. A common PyTorch convention is to save these checkpoints using the .tar file extension.

reference

예전에 vscode-ssh로 서버에 연결하려고 할 때, XHR failed가 뜨면서 문제가 됐던적이있다.

검색해보니 DNS문제 등등 다양한 문제가 원인이 될 수 있었는데,

내 경우는 서버가 인터넷에 연결이 안되어있어서 필요한 vscode-server를 다운받지 못해 발생하는 문제였다.

그래서 정말 다양한 방법을 시도해봤는데 결국 포기했다가 아래 링크를 찾았다. 

https://stackoverflow.com/questions/56671520/how-can-i-install-vscode-server-in-linux-offline

ssh 연결할때 뜨는 커밋 아이디가 있는데

위 이슈에 있는 링크에서 해당 커밋아이디의 파일을 다운받고

~/.vscode-server/bin/(commid id) 폴더에 해당 파일은 unzip하니 해결됐다

디테일한 명령어는 위 링크대로 따라했고 연결에 성공했다.

'Deep Learning > 기타' 카테고리의 다른 글

[Dataset] NIH Google  (0) 2024.05.24
coco label items  (0) 2021.08.11
Darknet validationset 학습 포함 여부  (0) 2021.07.29

+ Recent posts