비교적 시간 여유가 있는 주가 될 줄 알았지만 전혀 아니다.
오히려 시간이 더 부족하다.
과제 양이 많은 것도 있지만 내용도 나에겐 쉽지 않다.
딥러닝 공부를 더 빨리 시작하지 못한 것이 정말 아쉽고 후회된다.
공부한 내용
1. AutoGrad & Optimizer
1.1. torch.nn.Module
• Layer의 base model
• Input, Output, Forward 정의
• Backward : AutoGrad 통해 자동으로 계산
• Parameter : 학습 대상
1.2. nn.Parameter
• Tensor 객체 상속
• Weight값 저장
• required_grad = True : AutoGrad의 대상
1.3. Backward
• Parameter들의 미분 수행
• Loss(y_hat, y)를 W와 b에 대해 미분
• backward() 함수 호출하면 AutoGrad로 자동으로 연산
• optimizer.zero_grad() : 학습할 때, grad 업데이트하면서 이전의 grad 값이 현재 학습에 영향을 주지 않도록 하기 위해 초기화
• 학습의 4단계 :
1) forward
2) loss 지정
3) backward
4) step(weight 업데이트)
2. Datasets & DataLoaders
2.1. Model에 Data를 feeding하는 과정
• Trasformer
- 전처리 과정 수행
- 입력 데이터를 tensor로 바꿔주는 역할
- Dataset 전처리 부분과 Dataset을 tensor로 바꿔주는 부분으로 구분
• Dataset
• DataLoader
2.2. Dataset
• 하나의 데이터에 대해 데이터 입력 방식을 정의
• Input data type에 따라 입력 방식이 달라진다.
• __init__ :
- 초기 데이터 생성 방법
- Data directory 지정, 데이터 불러오기 등의 작업
• __len__ : 데이터 전체 길이 반환
• __getitem__ :
- 하나의 데이터 불러올 때 반환하는 방법 정의
- dict 타입 반환, index 사용해서 반환 등의 방법 정의
• Dataset에 대한 표준화된 처리 방법 제공
2.3. DataLoader
• 여러 데이터를 한 번에 묶어서 모델에 feeding
• Data의 batch 생성
• 학습 직전에 데이터를 tensor로 변환
• 하나의 epic에서 dataloader 1회 동작
• options :
- sampler : 셔플하지 않고 인덱스로 데이터 뽑는 방법
- collate_fn : [가변인자, padding, sequence data] 처리 시 사용, 데이터 shape 변환
3. 필수과제 1
• repr 사용법 : ?
• model.forward(input)하지 않고 model(input)을 하는 이유:
https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690
• torch.gather 사용법 : ?
• register_full_backward_hook vs. register_backward_hook : register_backward_hook이 register_full_backward_hook으로 대체
4. 피어세션
• 과제 리뷰
- sub module 사용법 -> model.get_submodule()
- torch.Tensor.expand : 값 복제
• 강의 내용
- DataLoader option에서 shuffle과 sampler 차이
- extra_repr : 클래스 출력 시, 호출되는 문구
• github repository 참여
• 멘토링 질문 정리
5. 특강 - Riot CTO 유석문님 :
• Unit test의 필요성과 장점
• TDD
- Unit Tests
- Integration Tests
- Test cases
• ML Unit Test
- 명확히 드러나는 부분에서 unit test 진행
- 대량 데이터 한 번에 테스트하지 말고 나눠서 진행
6. 멘토링
• PyTorch 과제에서 중요하거나 알아두면 좋은 함수
- tensor 생성
- numpy <-> tensor 변환
- shape 바꾸는 방법 : view, einops library 등
- model training 방법
- squeeze
- model에서 parameter 얻는 방법
- hook
- backward에 사용되는 옵션
• DataLoader
- dataset 가지고 오는 부분 작성 방법에 따라 속도 차이가 많이 난다.
- video data 사용하는 경우 dataloader를 잘 구현해야 한다.
- torchvision의 transform
- plotting
- multi-GPU 학습
• CV 분야는 연구된 분야가 많아서 엔지니어링 쪽이 중요하고 NLP는 리서치쪽에 치중이 되있는지 ?
- CV 분야는 연구된 분야가 많지만 아직 연구할 수 있는 부분이 많다.
- NLP 분야는 연구된 분야가 많지 않다.
- 엔지니어링, 리서치 구분이 명확하지 않다.
• 도메인 선택
- 적성에 맞는 분야 정하는 것이 가장 중요
• 추천 논문
- Mixer : https://arxiv.org/abs/2105.01601
- EfficientNet : https://arxiv.org/pdf/1905.11946.pdf
- ResNet : https://arxiv.org/pdf/1512.03385.pdf
• pytorch tutorial 따라 공부해보기
- 가장 질 좋고 official한 코드
- https://pytorch.org/tutorials/beginner/data_loading_tutorial.html
• Transformer
- Query 등장 배경 : 다른 Key들과의 관계 -> Query 추가 -> 성능 향상
- 나누어 떨어지는 head 수 선정 기준 : Query와 Value의 공약수 ?
- head로 나누는 이유 :
1) 관계를 볼 때 다양한 scale에서 파악
2) feature를 나누어 특징 추출 (CNN에서 convolution과 비슷한 느낌)
- 모든 Key와 비교할 경우 자기 자신과 가장 높은 관련이 있지 않을까? : Query 추가하면서 자신의 Key와 관련성 감소
• 지금 배우는 내용 그냥 지나치지 말고 확실히 알 수 있도록 복습
• 이전에 배웠던 내용도 다시 보기
- 1주차 1번 선택과제
- 2주차 1,3번 필수과제
- 3주차 1,2번 필수과제
- 위 과제들은 달달 외울 수 있을 정도로 연습
• 일요일 오후 8시 1:1 개인 면담
'BoostCamp' 카테고리의 다른 글
2021.08.20 - [Week 3] Day 4. - (0) | 2021.08.21 |
---|---|
2021.08.19 - [Week 3] Day 3. 긴 밤 지새우고 (0) | 2021.08.20 |
2021.08.17 - [Week 3] Day 1. 거북이 (0) | 2021.08.18 |
2021.08.13 - [Week 2] Day 5. 나는 멍청이다. 나는 멍청이다. 나는 멍청이다. (0) | 2021.08.13 |
2021.08.12 - [Week 2] Day 4. 좌절기간 (0) | 2021.08.13 |