23.08.25 금
주말?
피부, 옷
일정잡기
보고서 작성
운동, 춤
review aaai vision transformer
1. 아침에 물 한잔 O
2. 연구: repbert dataloader, optimizer, model, train 구현 진행 O
10분 휴식 및 스트레칭 (눈 긁지 않기, 인공눈물 점안, 멀리보기, 스마트폰 사용 금지) O
4. 건강: 토마토, 요거트, 견과류, 영양제 O
5. 운동: 가슴 & 복근 운동 20분 (option)
6. 약속: 중앙대 공연 관람 O
7. 수면: 온찜질 15분 후 무조건 바로 자기 O
8. 피부: 바세린 계란팩 O
9. 웃긴 영상 보기! O
1st. 왜 Relevance를 batch x batch 크기로 키울까?
GPU로 forward, backward를 하며 모델의 score를 계산하려고 할때 혹은 gradient를 계산하려고 할때 batch size만큼 forward, backward를 할 수 있다.
하지만, batch size가 큰 경우, GPU의 메모리가 작아서 OOM 문제가 발생할 수 있다. large batch size를 사용하지 않는 경우, Noisy gradient problem이 발생하는데, 이는 전체 데이터셋으로 구한 gradient와 mini-batch로 구한 gradient의 variance가 큰 것을 의미한다.
(이런 문제는 warm up이나 optimizer를 바꿔서 해결하기도 한다.)
따라서, noisy를 제거하고 조금 더 generalization을 하기 위해서 large batch size를 이용하는데 gpu memory문제로 사용할 수 없다면, accumulated gradients를 사용해서 mini-batch를 large batch처럼 사용할 수 있다.
n-steps을 forward, backward를 하는데 parameter update는 하지 않는다. 그리고 mini-gradients를 모은다. accumulation step만큼 gradient를 모으면 그때 optimize를 해서 같은 효과를 낸다.
mini batch size 25 * accumulation step = large batch size의 효과를 낼 수 있는 것이다.
linear scheduler로 warm up에서는 조금 키우고 그 이후에는 낮게 할 수 있다. 이를 위해서는 전체 batch steps를 구할 수 있어야한다.
weight decay를 bias랑 layerNorm에만 거는 이유는 뭐지? 이유는 알았고 코딩하는 부분만 이해해서 작성하면 될듯
그 다음에는 드디어 train 과정이다..