본문 바로가기
AIML 분야/다른 연구 분야

Cosine Annealing 사용해보는 기록

by 포숑은 맛있어 2020. 12. 4.
반응형

서치해도 잘 없길래 걍 써봄.

 

 

사용 계기

1. 내 모델이랑 SlowFast를 비교해야한다. pre-training 없이 작은 데이터셋에서 비교하는중.

2. 근데 내 환경에서 slowfast 성능이 너무 구리다. ResNet이랑 비슷하거나 더 안나오기도 한다. ㄱ-?

3. learning scheduler가 달랐지!

 

혹시나해서 내 모델과 slowfast 모두 pleatau를 사용하도록 실험도 해봤지만, 그냥 둘다 underfitting 될 뿐이었다.

튜닝을 하라면 하겠지만 일단 slowfast 성능 영끌이 필요한 관계로, 바로 half cosine을 찾기 시작했다.

 

 

조사

SlowFast 논문

- half cosine scheduler를 사용했다고 언급. SGDR 논문을 인용하면서.

- 이 스케줄러의 base_lr = 1.6로 했다고 하며, restart 안 밝힘.

- linear warm up도 사용하였다고 밝힘. 초반 8k epochs 동안. '초반' 8k요?

SlowFast 코드

- 뭘 가져다 쓰는 게 아니라 그냥 수식을 써놨다. 코사인 어쩌구 계산해서 그거. 직접 계산한다.

 

torch scheduler

CosineAnnealingWarmRestarts()가 SGDR을 구현했다며 인용하였음

- 하이퍼 파라미터들 셋팅해야하는데, 자기들 맘대로 변수명을 써놨으면서 변수명이랑 표기한 수식이랑 다름

- 아니 그러면 각각이 무슨 역할 하는지 알 수가 없잖아요

- 이걸 사용하는 예시 코드도 찾기 힘들다. 하이퍼 파라미터 셋팅 참고하려고 했는데 ㄱ-

케라스에서도 같은 이름의 스케줄러가 있다는걸 얼핏 봄

 

실험

Model

- SlowFast

- 근데 공식코드 아니고 깃허브 딴데서 긁어옴. Non-Local Block 쓰지 않도록.

 

 

 

1. Base lr 0.1, restart=3으로 두고 실험.

=> 에폭마다 성능이 지 마음이다.

20% 30% 40% 다시 20% 이따구로 200에폭 내내 반복한다.

 

 

[2020/12/04] 연구팀 다른 분 : lr 너무 큰거 아니에요?

slowfast 논문은.. 더 크게.. 했는뎁...

암튼 일단 낮춰봄.

 

2. Base lr 0.01, restart=3으로 두고 실험.

현재 66에폭, 잘 돌아가고 있다.

성능이 오르락 내리락 큰 폭으로 하는건 같은데, 꾸준히 고점의 성능이 증가하는 모양새이다.

 

음, 적당한건 좋은데 너무 잘나오지는 말렴. 내 모델이 더 좋아야하니까.

 

 

[20201207] 추가

restart=3으로 하는 게 아니었다!

- restart는 에폭 횟수였음. 3개의 에폭마다 lr을 다시 끌어올리는 주기가 반복되는 것.

- 나는 200에폭을 돌렸으니 restart=5, 10 뭐 이런걸로 설정했어야한다.

- 아무튼 validation accuracy가 3에폭 주기로 오르락내리락 하는데, 이 스케줄러 조금 괜찮을 것 같다.
best accuracy만 보면 성능이 올랐다. 아마 restart만 잘 조정한다면 최종accuracy 기준으로도 괜찮겠지.

 

 

3. Base lr 0.01, restart=5으로 두고 실험.

이제 돌리러 가야지.

반응형

댓글