BoostCamp

2021.08.19 - [Week 3] Day 3. 긴 밤 지새우고

배기니어 2021. 8. 20. 05:42

이번 주는 그래도 조금 재미있어지려고 하는 것 같다.

과제는 많지만 과제하면서 모델과 데이터에 대해 익히고

pytorch 사용법도 조금씩 알게 되면서 적응하려고 하는 단계인 것 같다.

과제하는데 오래 걸려서 밤새기는 했지만 재미있었다.


공부한 내용

1. 모델 불러오기

 1.1. 모델 저장

  • model.save()

   - 학습 결과 저장

   - Parameter 저장

   - 모델 저장시 ordered_dict 사용

   - 모델 저장시 .pt 확장자 사용 권장

  • load_state_dict

   - 같은 architecture의 모델에서 parameter만 불러올 때 사용

  • torch.save(model)

   - 모델의 architecture도 함께 저장

   - 보통 architecture는 코드로 공유

 1.2. Checkpoints

  - 학습의 중간 결과 저장

  - epoch, loss, metric 값을 함께 저장하여 학습 단계에 따라 성능 확인

 1.3. Pretrained Model

  • Tranfer learning

   - 다른 dataset으로 만든 기존의 모델 사용

   - ImageNet, GPT 등 대용량 dataset으로 만든 모델을 작은 dataset에 적용하면 좋은 성능

   - 현재 가장 일반적인 학습방법으로, hyper parameter 등 일부만 변경하여 사용

   - NLP는 Huggin Face가 사실상 표준

  • Freezing

   - Pretrained model 사용시 모델의 일부 layer freeze

   - frozen weight는 parameter 고정

   - stepping frozen : 단계별로 frozen weight를 점진적으로 바꿔가며 학습

   - 경우에 따라 사용할 dataset에 맞게 마지막 layer 추가

 

2. Monitoring tools for PyTorch

 : 학습 과정 모니터링, 학습 결과 tracking 위한 tool 

 2.1. Tensorboard

  - tensorflow 기반의 시각화 도구로, computational graph, metric, 학습 결과 등 시각화

  - PyTorch에서도 사용 가능

  - scalar, graph, histogram, image, text, mesh 등 다양한 유형의 시각화 지원

  - Tensorboard 사용법

 2.2. WANDB (Weight and Biases)

  - ML/DL 실험이나 사용을 원활히 하기 위한 도구로, MLOPS 도구 중 하나

  - code, model, data 부분 나눠서 code versioning 가능

  - WANDB 사용 방법

  - 새로운 도구들에 도전해보는 것은 스스로 성장할 기회

 

3. 필수과제 2

 3.1. Dataset

  • 기본 구성 요소 : __init__, __len__, __getitem__

  • 추가 요소 : transform

 3.2. iris dataset 제작

  • pandas

 3.3. DataLoader

  • 기본 구성 요소 : dataset, batch_size, shuffle, sampler(batch_sampler), num_workers, collate_fn, pin_memory, drop_last, time_out, worker_init_fn

  • collate_fn 작성

   - list comprehension : length 구하기

   - torch.nn.functional.pad : zero padding

 3.4. torchvision

  • transform methods

   - Resize(size)

   - RandomCrop(size)

   - RandomRotation(degree)

   - RandomVerticalFlip(probability)

   - Compose(transforms_list)

 3.4. Mnist Dataset

  - torchvision의 dataset

  - CIFAR-10 dataset loading

 3.5. AG_NEWS

  - torchtext의 dataset

  - methods : tokenizer, Counter, vocab, encode, decode, to_bow

  - document-term matrix 개념:

https://stackoverflow.com/questions/43154039/how-to-calculate-term-document-matrix

  - CountVectorizer 설명:

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

 3.6. Titanic Dataset and DataLoader

  - features : Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked

  - classes : PassengerId, Survived

  - 참고 자료 :

https://www.kaggle.com/c/titanic/data

https://cyc1am3n.github.io/2018/10/09/my-first-kaggle-competition_titanic.html

https://towardsdatascience.com/kaggle-titanic-machine-learning-model-top-7-fa4523b7c40

 3.7. Mnist Dataset and DataLoader

  - __repr__ 사용법

  - transform 적용

  - self.classes : set말고 다른 방법으로 가능한지 모르겠음

 3.8. AG_NEWS Dataset and DataLoader

  - self.X : 마지막에 to_bow 함수에서 계속 에러가 발생해서 _preprocess 통해 처리한 결과를 저장했더니 오류가 해결됐는데 맞는 방법인지 잘 모르겠음

  - 마찬가지로 set으로 self.classes 정의

  - _preprocess : re.findall 사용, join해서 string으로 리턴하지 말아야 한다.

 

4. 피어세션

 4.1. 과제 리뷰

  - gather : expand 사용법, 차원 맞추는 방법, index구하는 방법, gather 사용법, index 구하는 방법, squeeze
  - numpy에 squeeze 있나? : numpy reshape 사용
  - AG news dataset encoder 에러 : 대문자가 포함된 상태로 vocab 만들어진 것 같다., init에서 preprocess 적용
  - tokenizer 분류 기준 ? : split과 비슷한 것 같다.
  - backward hook에서 grad가 무엇? : back propagation 과정에서 전달되는 grad
  - hook? : forward나 backward 과정에서 추가로 할 수 있는 작업
  - register_hook 사용 : model의 parameter에 hook 등록
  - dataset_random에서 n_features = 2로 하면 왜 data_list가 tensor로 변하지 않는지? : tensor 안에 scalar? list? 잘 모르겠다.
  - collate_fn에서 리스트를 나눴다가 다시 합치는 이유 : data끼리, label끼리 묶기 위해 나눠야 한다.
  - num_workers 수는 높여도 더 느린 건 컴퓨터 성능 탓? : user, system 둘 다 늘어남 - colab 환경이라 그런 듯

  - collate_fn에서 zero padding 방법 : nn.functional.pad 사용 or cat 사용

 4.2. 논문 리뷰

  - 다음주부터 진행
  - 이번 주에 멘토님과 진행해보고 방식 정하기
  - 읽는 순서 : abstract -> conclusion -> 본문
  - 논문 읽고 참고 문헌 순서대로 읽어보는 것도 좋다.
  - paper with code : 논문구현한 코드 및 설명 -> 참고하면서 공부하면 좋을 듯

https://paperswithcode.com/method/resnet

 

Papers with Code - ResNet Explained

Residual Networks, or ResNets, learn residual functions with reference to the layer inputs, instead of learning unreferenced functions. Instead of hoping each few stacked layers directly fit a desired underlying mapping, residual nets let these layers fit

paperswithcode.com

  - 논문 다 볼 필요 없이 발췌해서 보는 방법도 있다.
  - 도메인 결정 여부
  - tensorboard와 wandb 대회에서 연동하면 좋을 것 같다. -> 시각화해서 공유
  - tqdm 사용했는지
  - colab 코드 숨기기 단축키 지정하면 편하게 사용 가능

 

5. 마스터클래스 - 최성철 교수님

 - 최성준 교수님 강의는 어려운 내용이었다.

 - Industry에서 AI 어떻게 적용할 수 있을까 고민

 - 앞으로 어떤 형태의 AI 공부를 해야할지

 - 코딩 능력도 중요하지만 기본적으로 컴퓨터 잘 다루는 엔지니어링 역량 필요

 - 모델보다는 데이터 중심으로 AI system 개발하는 방향

 - 현업에서는 문제정의와 deployment가 중요

 - Data drift -> Dynamic hyperparameter tuning

 - Data Feedback Loop

 - ML/DL 관련 도구들에 익숙해지고 사용할 수 있는 능력 필요