BoostCamp

2021.08.18 - [Week 3] Day 2.

배기니어 2021. 8. 19. 00:50

비교적 시간 여유가 있는 주가 될 줄 알았지만 전혀 아니다.

오히려 시간이 더 부족하다.

과제 양이 많은 것도 있지만 내용도 나에겐 쉽지 않다.

딥러닝 공부를 더 빨리 시작하지 못한 것이 정말 아쉽고 후회된다.

 


공부한 내용

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

 

Any different between model(input) and model.forward(input)

class MyModel(nn.Module): def __init__(self, cuda, word_dim, tag_dim, mem_dim, criterion): super(MyModel, self).__init__() def forward(input): .. # do something return output model = MyModel() Is there any different if I called model.forward(input) rather

discuss.pytorch.org

 • 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 개인 면담