강의 복습 내용

CNN, RNN, Transformer 에 대해서 학습했다.

심화과제를 통해서 ViT (Vision Transformer), AAE (Adversarial Auto-Encoder) 를 학습했다.

 

과제 수행 과정 / 결과물 정리

https://it-bejita.tistory.com/7?category=1044787 

 

[부스트캠프] 3주차 day11 DL basic

Deep Learning Data Model Loss Function Optimizer (Algorithm) Loss Function Regression Task  MSE(Mean Squared Error) 평균제곱오차 선형문제에서는 타겟이 하나이기 때문에 평균제곱오차를 활용한 y 값과 p..

it-bejita.tistory.com

피어세션 정리

Keep (잘한점)

  • 강의 일정 맞춰서 피어세션때 질문하고 해결
  • 논문 리뷰해본 것
  • 알고리즘 포기하지 않고 몇 문제 풀어본 것

Problem(실수)

  • 시각화 강의 진도 늦음
  • 심화과제 다 못함..

Try (계획)

  • 질문 할당제 적용해보기
  • 월요일(공휴일) 할당량 정해보기

논문 계획

  • 월요일 자정까지 논문 읽고 질문 2개
  • 화요일에 질문 해결하는 시간 (30분 내)

학습 회고

3주차에는 개인적인 사정으로 수요일에 참여를 하지 못한 점이 아쉬움으로 남는다.

그래서 부족한 시간만큼 진도를 따라가려고 하다보니 블로그에 정리할 시간이 부족했던 것 같다.

이러한 점을 개선하기 위해서 공휴일에도 약간이나마 논문 리딩과 알고리즘 풀이를 진행할 예정이다.

금요일날에는 이러저러한 이벤트들이 발생하면서 시간이 부족한 것 같다.

따라서 목요일까지 학습계획을 모두 완료하는 것을 목표로 하고 금요일날에는 학습을 정리하는 수순으로 진행하는 것을 목표로 진행해보자.

Deep Learning 

  • Data
  • Model
  • Loss Function
  • Optimizer (Algorithm)

Loss Function

  • Regression Task 
    • MSE(Mean Squared Error) 평균제곱오차
      • 선형문제에서는 타겟이 하나이기 때문에 평균제곱오차를 활용한 y 값과 predict y 값의 차로 loss를 계산

  • Classification Task 
    •  CE(Cross Enthrophy)
      • Classificaiton task에서는 라벨이 붙은 타겟이 3개 이상일 경우에 CE를 사용한다.
      • 라벨이 2개일 경우에는 Binary Cross Enthrothy를 loss 로 사용 가능
  • Probabilistic Task
    • MLE(Maximum Likelihood Estimation), 최대 우도법

 

Optimization

용어정리

  • Generalization(일반화)
    • 학습된 모델이 다른 새로운 데이터에서도 잘 작동한도록 하는 것이 일반화이다.
    • 학습이 많이 할 수록 training error는 줄어드는 반면 test error는 줄어들다가 다시 특정 시점 이후로는 늘어난다.
      • Why? 학습하고 있는 데이터에 대해서 Over-fitting이 발생
    • traing error 와 test error의 차이를 generalization gap이라고 한다.

 

출처 https://data-science-hi.tistory.com/96

  • Under-fitting vs Over-fitting
    • Over-fitting = 모델이 학습 데이터에 대해서 학습을 통해 training error는 최대한으로 줄였으나 test error가 늘어난 상태 
    • Under-fitting = 모델에 대해서 학습이 부족거나 데이터가 부족해서 학습이 잘 안된 상태
  • Cross-validation
  • Bias-variance trade-off

https://nvsyashwanth.github.io/machinelearningmaster/bias-variance/

  • Bootstrapping
  • Bagging and boosting

http://incredible.ai/machine-learning/2015/10/25/Bias-Variance-Tradeoff-Ensemble/

 

 

 


 

피어세션 중 학습내용에 대한 질문들

 

  1. 배치 정규화가 무엇이고 해야하는 이유는?
    • 학습 과정에서 각 배치 단위 별로 데이터가 다양한 분포를 가지더라도 각 배치별로 평균과 분산을 이용해 정규화하는 것이다.
      • 평균 0, 표준 편차 1로 데이터의 분포 조정
    • batch normalizatio을 왜 해야 하는가?
      • 일단 배치 단위로 나눠서 학습이 필요한 이유 :
        • 학습 데이터를 전부 넣어서 gradient를 구한다면 대용량의 데이터를 한번에 처리하지 못한다. 그래서 배치 단위로 나눠서 학습을 진행하는 것이 일반적이다.
      • 이제 여기서 배치 단위로 학습을 하게 되면 internal covariant shift 문제가 발생한다.
        • internal covariant shift : 학습 과정에서 계층 별로 입력의 데이터 분포가 달라지는 현상이다. → 즉 배치 간의 데이터가 상이하다.
      • 또한 small learning rate에서 좀 더 자유로워지고, reguularization effect까지 있어 오버피팅 문제를 완화시킬 수 있다.
    • 결론 : 대용량의 데이터를 학습하기 위해서 배치 단위로 나눠서 학습하는 것이 일반적인데, 그냥 배치 단위로 학습을 진행하게 되면 배치 간의 데이터가 상이해지는 문제점이 발생하여 배치별로 정규화 작업을 진행하는 batch normalization기법을 활용해 이를 해결한다.
  2. Regression Task와 Classification Task의 loss function이 다른 이유는 무엇인가요? 

Regression Task는 target이 y인 1차원의 값이기 때문에 MSE(Mean Squared Error, 평균제곱오차) 를 사용한다.n=2 일 경우에는 Binary Cross Entropy Loss 를 사용할 수 있다. 하지만 label이 3개 이상인 경우에는 CE를 사용한다.

Classification Task에서는 CE(Cross Entropy) 를 사용하는데 이 이유는 target or label이 n(n≥1)개이기 때문이다. 즉, n 차원의 벡터를 대상으로 loss function을 계산하기 때문에 주로 사용된다.

 

 

강의 복습 내용

pytorch 의 기본 문법/ 함수 사용

과제를 통해서 custom modeling, custom Dataset & dataloadeer, Transfer learning & Hper parameter tuning을 학습했다.

지난 주차에 re 라이브러리를 통한 점화식이 데이터 추출에 유용했다.

pytorch troubleshooting 과목을 정리를 잘 해두어서 향후에 있을 프로젝트에서 에럳르을 잘 해결할 수 있도록 준비해야겠다.

과제 수행 과정 / 결과물 정리

https://it-bejita.tistory.com/4

 

[부스트캠프] pytorch 정리 1

pytorch 정리 1 대표적으로 사용되는 라이브러리는 Pytorch와 Tensorflow다. Tensorflow 구글에서 제공하는 라이브러리이다. Define and run 그래프를 먼저 그리고 난 후에 gradient 계산을 해준다. 이러한 특성.

it-bejita.tistory.com

https://it-bejita.tistory.com/5

 

[부스트캠프] pytorch.nn

pytorch.nn.Module input, output, Forward, Backward 정의 parameter(tensor) 정의 대략적인 구조 Module  layer function parameter pytorch.nn.Parameter Tensor 객체의 상속 개체 nn.Module 내에 attribute가..

it-bejita.tistory.com

피어세션 정리

Keep 

  • 지각 없이 소통하며 친해진 점

Problem

  •  피어세션 시간 분배 잘하기

Try

  • 모각공 아무 때나 질문하기
  • 알고리즘 모더레이터가 주체
  • 금요일에 심화과제 풀이
  • 심화과제 발표 랜덤 뽑기
  • 월요일에 논문정리

학습 회고

2주차에 처음으로 만난 부덕이와의 잊지 못할 첫 만남이었다.

강의 들으며 알고 있다고 착각에 나에게 제대로 된 학습을 하라는 의미로 체크하는 좋은 기회였다.

2주차 수업을 들으며 피어세션을 하며 알고리즘 5문제, recSys 논문(Deep Neural Networks for YouTube Recommendations(2016)) 리뷰 1개를 마치며 힘들었지만 보람있는 한 주였다.

수업 진도를 따라가며 추가학습을 하는 동안 학습 정리에 소홀했던 점을 반성하며

주말 간 논문에대한 내용을 정리해서 블로그에 남겨두어야겠다.

다음 주차에는 조금 더 부지런하고 성실하게 학습을 정리하는 한 주가 되도록 노력하자.

pytorch.nn.Module

input, output, Forward, Backward 정의

parameter(tensor) 정의

 

 

대략적인 구조

  • Module 
    • layer
      • function
    • parameter

 

pytorch.nn.Parameter

Tensor 객체의 상속 개체

nn.Module 내에 attribute가 될 때는 required_grad = True로 하습 대상의 되는 Tensor

 

Backward

forward의 결과값 (model의  output = 예측치)과 실제값간의 차이(loss)에 대해 미분을 수행 후 Parameter 업데이트

 

for epoch in range(epochs):
……
# Clear gradient buffers because we don't want any gradient from previous epoch
optimizer.zero_grad()

# get output from the model, given the inputs
outputs = model(inputs)

# get loss for the predicted output
loss = criterion(outputs, labels)

# get gradients w.r.t to parameters
loss.backward()

# update parameters
optimizer.step()
  •  optimizer.zero_grad() - gradient 초기화 -> 다음 epoch 영향 안 미치기 위해
  •  model(input) -> 모델 돌림
  •  loss = criterion(outpus, labels) -> 로스 계산
  •  loss.bacward() -> gradients parameter 계산
  •  optimizer.step() -> 파라미터 업데이트
 

 

pytorch 정리 1

 

대표적으로 사용되는 라이브러리는 PytorchTensorflow다.

 

Tensorflow

  • 구글에서 제공하는 라이브러리이다.
  • Define and run
    • 그래프를 먼저 그리고 난 후에 gradient 계산을 해준다.
    • 이러한 특성으로 인해서 새로운 방식으로 개발할 때에는 불편하게 작용하기도 한다. -> 최근 ai 학회 논문에서 pytorch를 활용한 논문들이 더 많아졌다.
    • Tensorflow 2.x 이후부터는 Pytorch와 같이 Defin by run을 제공하면서 위의 불편함의 개선되었다.
  • Production, 클라우드 연결, multi GPU의 장점이 있다.

 

 

Pytorch

  • 페이스북에서 제공하는 라이브러리이다.
  • Define by run (Dynamic Computation Graph)
    • 실행을 하면서 그때 그때 gradient 를 계산해 준다.
    • 그래프를 먼저 그리지 않고 Dynamic Computation Graph 로 진행하기 때문에 개발하는 과정에서 수정이 용이하다. 이러한 특징으로 최근 ai 학회 논문에서 pytorch를 사용한 논문들이 많이 증가했다.
  • Numpy + Auto Gradient + Function

 

 

Pytorch로 학습하는 이유

  • Defin by Run의 장점 = 즉시 확인 가능 -> pythonic code
  • GPU support, good API and community
  • 사용하기 편한 장점이 크다.
  • Tensorflow는 production 과 scalability의 장점

pytorch , tendorflow 논문 인용 그래프 출처(https://www.exxactcorp.com/blog/Deep-Learning/pytorch-vs-tensorflow-in-2020-what-you-should-know-about-these-frameworks)

pytorch가 CV(Computer Vision) 관련 저널에서 압도적인 상승률을 보이고 있다.

ex)eccv(European Conference on Computer Vision) 


 

Pytorch = Numpy + Auto Gradient + Function

 

  • Numpy  
    • Numpy 라이브러리의 함수 기능들이 많이 사용된다. 다만 torch.view, numpy.reshpae의 차이 등 약간의 차이가 있다. 
    • pytorch에서는 Numpy 형태의 데이터를 Tensor로 사용한다.
  • Function
    • Auto Gradinet를 지원하는 함수와 모델을 지원한다.
  • Auto Gradient 
    • Pytorch 에서 지원하는 자동미분 기능

code

import torch

a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)

Q = 3*a**3 - b**2

external_grad = torch.tensor([1., 1.])
Q.backward(gradient=external_grad)

# 수집된 변화도가 올바른지 확인합니다.
print(9*a**2 == a.grad)
print(-2*b == b.grad)

output

tensor([True, True])
tensor([True, True])

위와 같이 backward function으로 미분을 간단하게 계산하는 것을 확인할 수 있다.

 

 

출처 https://tutorials.pytorch.kr/beginner/pytorch_with_examples.html

 

예제로 배우는 파이토치(PyTorch)

Author: Justin Johnson 번역: 박정환 이 튜토리얼에서는 PyTorch 의 핵심적인 개념을 예제를 통해 소개합니다. 본질적으로, PyTorch에는 두가지 주요한 특징이 있습니다: NumPy와 유사하지만 GPU 상에서 실행

tutorials.pytorch.kr

 

파이썬 정규식 사용

- 문법 자체는 매우 방대하다. -> 기초적인 사용법만 확인

 

Ex) 기초 html 호출 문법 (전화번호, 이메일주소, IP주소 등)

https://zetawiki.com/wiki/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D_%EC%98%88%EC%8B%9C

 

연습 참고 사이트 

http://www.regexr.com/

 

  • String 에서 숫자 추출 정규식
import re

tmp = "aslkdfjoiweur 12334"

#숫자만 검색하고 싶을 경우

num = re.sub(r'[^\d]', '', input_string)

 

  • Camelcase to underscore or snake case
import re

underscore_str = "___to__camel___case__"

#좌우 값 제거
underscore_str = underscore_str.strip("_").lower()

#중복값 1개로
underscore_str = '_'.join(underscore_str.split("__"))

#(?!^)= 시작하는 단어가 있는데 포함하지 않고/ _([a-zA-Z])=  두 char 를 받는다.group(0) 은 전체 _c group(1) = c
camelcase_str = re.sub(r'(?!^)_([a-zA-Z])', lambda m: m.group(1).upper(), underscore_str)

 

 

회고

re.sub 함수를 활용하면서 새롭게 알게되는 활용법이 어려웠지만 재밌었다.

+ Recent posts