Machine Learning

딥러닝 기초 지식

blog507 2024. 6. 11. 09:34
반응형

딥러닝 기초부터 심화, 논문 리뷰까지 차근 차근 작성하여 글을 작성할 계획입니다.

먼저, 딥러닝이라는 기술에 대해 기초 지식부터 적어보고자 합니다. 

세부적인 내용들은 찾아보시는 걸 권장하고 틀린 부분이 있으면 언제든 댓글로 말씀해주시면 수정하겠습니다.


1. 딥러닝

1-1. 구성요소

출처 : https://ctkim.tistory.com/entry/%EB%AC%B8%EA%B3%BC%EC%83%9D%EB%8F%84-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%EB%94%A5%EB%9F%AC%EB%8B%9D-2-%EC%8B%A0%EA%B2%BD%EB%A7%9D%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

  • Layer : 모델을 구성하는 각층
  • Node : 각 layer를 구성하는 요소
  • Weight : 다음 layer에 있는 Node에 미치는 영향을 주는 요소
    • 최종적으로 Loss를 최소로 만드는 weight를 찾는 것이 목표

 

1-2. 학습 순서

출처 : https://velog.io/@97tkddnjs/%EC%98%A4%EC%B0%A8%EC%97%AD%EC%A0%84%ED%8C%8C%EB%B2%95Back-propagation

  1. Forward-Propagation : 예측 값을 구하는 과정
  2. Loss 계산 : 실제 값과 오차를 구함
  3. Back-Propagation : Loss를 줄일 수 있는 weight 업데이트

 

2. 경사 하강법

출처 : 위키피디아

    • 개념
      • 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 최소값에 이를 때까지 반복시키는 알고리즘
      • loss 값이 최저점으로 찾아가는 방법 
      • 어떤 포인트에서 가파른 경사(즉, 미분값)의 반대 부분으로 업데이트를 함 (그래프 U자 생각하면 편함)
      • 얼마나 업데이트 방향을 정할지 결정하는게 learning rate & LR scheduler
      • 잘 안되면 local minima에 빠질 수 있음 / 잘 되면 global minimum
  • 장점
    • 간단하고 직관적인 알고리즘
    • 국부 최적점(local minimum)에 수렴하지만 전역 최적점(global minimum)에는 못 미치더라도 전반적으로 좋은 결과를 도출
    • 내장된 파라미터가 적기 때문에 계산량이 작아 속도가 비교적 빠름
    • 수치 미분을 안해도됨
  • 단점
    • Learning rate를 적절하게 해야 함 (optimizer)
    • Local minima
  • 해결책
    • momentum 알고리즘을 적용함

 

3. Back-Propagation

  • 개념
    • 역방향으로 오차를 전파시키면서 각 층의 가중치를 업데이트하고 최적의 학습 결과를 찾아가는 방법
    • 이 방법은 체인룰을 활용하여 각 레이어를 거슬러 올라가면서 기울기를 효율적으로 계산할 수 있으며, 중간 계산 결과를 재사용하여 많은 계산량을 절약할 수 있음
    • 순전파 미분은 직관적이지만 신경망이 깊어지고, 파라미터가 많아질수록 계산량이 기하급수적으로 증가함.
    • chain rule을 이용하여 출력층부터 입력층까지 기울기를 차례로 계산하는 방식

 

4. Hyperparameter

4-1. Activation Function

  • 개념
    • 노드에 입력된 값들을 비선형 함수에 통과시킨 후 다음 레이어로 전달
    • 비선형이여야 하는 이유
      • 선형 함수 : Wx+b = f(x)
      • f(x) = Wx → f(f(f(x))) → W x W x W x x → W의 세제곱값을 k라고 정의하면, y(x) = kx와 같이 표현이 됨 → 선형 함수로는 은닉층을 여러번 추가하더라도 1번 추가한것과 큰 차이가 없음(아무런의미가 없다는 뜻 x) → 1회 추가나 여러번 추가나 차이가 없음 
    • Activation Function의 구간에서 기울기(gradient)가 0에 가까워지는 현상을 Saturated
      • Sigmoid, tanh 등
      • Vanishing Gradient 문제를 야기 - weight 업데이트 제대로 X
        • Sigmoid의 경우 기울기의 최댓값이 0.25이므로, 레이어가 깊어질 수록 역전파 되는 값이 0에 가까워짐 (내적하여 전파되므로), tanh의 경우 기울기 최댓값이 1 이지만 모든 경우에 최댓값이 역전파 되지 않으므로 결국 0에 수렴하게 됨.
        • weight 업데이트가 0이 된다는 의미
        • 해결하는 방법 - BatchNorm, Skip Connection 등이 있음
  • ReLU
    • 장점
      • Sigmoid, tanh보다 6배 이상 빠름 (exp 계산이 없기 때문)
    • 단점
      • 음수 영역에서 Saturated 문제
      • Dead ReLU가 일어날 수 있음
    • Dead ReLU
      • activation이 제대로 이루어지지 않음
      • 원인
        • 초기화가 잘 못 되었을 때
        • Learning rate가 지나치게 높을 때
      • 해결책
        • ELU 또는 Leaky ReLU
  • Swish (SiLU)
    • ReLU와 다르게 Smooth한 activation map을 보여줌

 

 

4-2. Regularization Parameter

출처 : http://laid.delanover.com/difference-between-l1-and-l2-regularization-implementation-and-visualization-in-tensorflow/

  • 개념
    • W(weight)가 너무 큰 값들을 가지지 않도록 하는 것
    • W가 너무 큰 값을 가지게 되면 과하게 구불구불한 형태의 함수가 만들어지는데, Regularization은 이런 모델의 복잡도를 낮추기 위한 방법
    • L1, L2 모두 과적합을 막기 위해 사용하는 Weight에 대한 패널티 텀임. Weight가 클수록 Loss가 커져서 Weight가 커지는걸 방지함
  • L1 Regularization
    • Cost에 가중치 절대 값 더해줌
    • 모든 Weight에 lambda를 곱한 전체 웨이트의 합을 빼줌
    • 같은 값을 빼주기 때문에 값이 작은 애들은 0이 되고, 중요한 특징들만 남게 됨
    • 미분하면 상수
    • Sparse한 벡터로 보여지게 됨
    • 특성 선택이 중요한 경우 사용
  • L2 Regularization
    • Cost에 가중치 제곱 값 더해줌
    • Weight 업데이트 시에 비율 (0.995, 0.9 등)을 곱하여 업데이트 하므로 전체적인 가중치를 작게 유지
    • 미분하면 w가 남음 ( w^2 -(미분)→ w )
    • 일반적인 회귀 문제나 분류 문제에 사용

 

4-3. Learning Rate

  • 개념
    • 인공 신경망 모델이 학습을 진행할 때 각각의 가중치(weight)를 얼마나 업데이트할지 결정하는 하이퍼파라미터
  • 너무 크게 할 경우 Overshooting(지그재그로 이상하게 가중치 업데이트 하는 현상)
  • 너무 작게 할 경우 속도도 느리며, local minima
  • 보통 torch, keras, tensorflow에서는 optimizer에 parameter 값을 입력

 

4-4. Optimizer

출처 : https://velog.io/@chang0517/Optimizer-%EC%A2%85%EB%A5%98-%EB%B0%8F-%EC%A0%95%EB%A6%AC

  • 배경
    • 가중치를 업데이트하는 방법은 경사하강법에서 생기는 여러가지 단점을 극복하기 위해 다양한 알고리즘
  • 개념
    • weight를 업데이트하는 최적화 알고리즘
  • 기존 GD의 단점
    • 모든 데이터를 다 계산하고 발생한 모든 에러를 합(Sum)하여 가중치(Weight)를 업데이트
      • ex) 1000개의 dataset과 200개의 weight가 생긴다면, 모든 weight를 한 번 업데이트 하는데 1000*200번의 gradient 계산이 필요함
  • SGD (Stochastic Gradient Descent)
    • 전체가 아니라 배치(Batch)단위로 가중치 업데이트하는 알고리즘
    • 1000개의 데이터 셋을 200개 1배치로 묶으면, 1 epoch당 총 5번의 업데이트
    • 이후 대부분의 optimizer는 배치 단위로 계산
  • Momentum
    • 개념
      • 이전 step의 방향(관성 = Momentum), 그리고 현재 위치에서의 기울기를 고려해 변수를 업데이트
  • ADAM
    • RMSProp(Root Mean Square Propagation) + Momentum
    • RMSProp
      • 이전 step의 크기를 반영함. 기울기를 단순히 같은 비율로 누적하지 않고 지수이동평균(Exponential Moving Average, EMA)을 활용하여 기울기를 업데이트
      • 즉 , 가장 최근 time step에서의 기울기는 많이 반영하고 먼 과거의 time step에서의 기울기는 조금만 반영
    • Argument
      • learning rate
      • Momentum의 지수이동평균 베타1, RMSProp의 지수이동평균 베타2 (변경 필요 x)
      • epsilon: 숫자 안정성을 위한 작은 값으로, 일반적으로 1e-8 (변경 필요 x)
    • 문제점
      • SGD에 비해서 조금 일반화 성능이 떨어짐
  • ADAMW
    • weight decay는 gradient descent에서 weight 업데이트를 할 때, 이전 weight의 크기를 일정 비율 감소시켜줌으로써 오버피팅을 방지
    • 핵심 : Adam with decoupled L2 regularization
    • Adam에서는 Weight Decay가 SGD에서 만큼 효과적이지 않음, 그 이유는 Weight Decay 계산이 학습을 진행할수록 누적되면서(Gradient와 같이 계산되기 때문에), 영향이 줄어들게 됨.
    • AdamW에서는 L2 Regularization 부분을 Gradient와 떼어내어 계산을 함으로써, Weight Decay 값이 누적되지 않도록 함.

 

4-5. Weight Initialization

  • Optimization에서 어떤 초기값에서 출발하느냐에 따라 local minimum, global minimum에 빠지느냐가 결정
  • 정해진 규칙 X
  • torch는 기본적인 모듈 클래스(Linear, ConvNd 등) 를 초기화 할 때, 자동으로 파라미터를 적절히 초기화
  • 특수한 경우
    • Pre-trained 모델은 가중치 초기화 X
    • ReLU를 사용할 때 He 초기화 사용이 일반적
    • Sigmoid, Tanh 사용할 때는 Xavier 초기화 사용이 일반적
    •  

4-6. Batch Normalization

  • Normalization
    • 데이터를 평균 0, 표준편차 1이 되게 변환

  • Whitening
    • 데이터의 평균을 0, 그리고 공분산을 단위행렬로 갖는 정규분포 형태로 변환

 

 

  • Batch Normalization 
    • Whitening과 normalization의 단점인 “이전 레이어로부터 학습이 가능한 parameters의 영향을 무시”를 없애줌
    • 과정
      • 일정 크기에 해당하는 mini batch 안에서 평균과 분산을 계산
      • 입력 데이터에 대하여 각 차원(feature)별로 normalization을 수행
      • normalization 된 값들에 대해 Scale factor(gamma)와 Shift factor(beta)를 더하여 학습이 가능한 파라미터를 추가함 (평균은 더하고, 분산은 곱해주는것)
    • Inference에서의 BN
      • 추론 과정에서는 테스트 데이터 하나에 대해 답을 내야 하므로 평균과 분산을 계산 X
      • 추론할 때는 training set에서 이동 평균으로 구한 평균과 분산 값으로 대체하여 정규화를 수행
    • 단점
      • 미니 배치 크기에 의존 (1일 경우, 분산 크기가 0이 되어 train X)
      • RNN 모델 적용이 어려움 (각 time step마다 다른 데이터가 연속적으로 나오는 문제)
  • Layer Normalization
    • 과정
      • data sample 단위로 평균(mean)과 표준편차(std)를 계산해서 정규화를 실행
      • sequence에 따른 고정길이 정규화로 batch normalization에 비해 RNN 모델에 더 효과적
      • Transformer에 주로 이용되는 normalization
      • 하지만 CNN에서는 안좋게 나옴
        • activation map의 가장자리와 중앙 부분의 통계량이 다르기 때문
  • Instance Normalization
    • 과정
      • mini-batch의 이미지 한장씩만 계산 하여 각각의 개별 이미지 분포를 사용
      • 클래스 레이블이 입력 이미지의 명암에 의존하지 않아야하는 이미지 분류에 인스턴스 정규화 사용, 즉 스타일 변환하고자 하는 이미지가 컨텐츠 이미지의 Contrast에 의존하지 않을 때
      • BatchNorm 에서는 이미지의 모든 값(명암, 색상, 모양)에 영향을 받지만, Style Transfer에는 명암, 색상 등의 정보는 중요하지 않으므로 Norm에 영향을 받지 않도록 각 채널에 대해 개별로 Norm을 한다.

출처 : https://medium.com/@zljdanceholic/groupnorm-then-batchnorm-instancenorm-layernorm-e2b2a1d350a0

 

반응형

'Machine Learning' 카테고리의 다른 글

PDFTranslate FastAPI 구현  (1) 2025.02.04
Stable Diffusion FastAPI 구현  (0) 2025.02.03
Grounding-DINO FastAPI 구현  (1) 2024.12.06
GLIP : Grounded Language-Image Pre-training  (1) 2024.07.26
CNN 기반 모델들  (0) 2024.06.25