devskim blog
Search
🎯

딥러닝 개념 정리

Tags
MachineLearning
Created
Jan 13, 2023 12:24 AM
Last Updated
Jul 30, 2023 09:49 AM
 
  • 딥러닝
    • notion image
    • 다층이 아니라 심층을 의미함
    • 모델은 학습된 파라미터의 집합이라고 할 수 있음
  • MLP (Multi Layer Perceptron)
    • sklearn의 neural_network
    • 층이 3개만 있음(input, hidden, output)
  • 오차역전파
    • 목적 : 수치미분을 수행하지 않고, 학습에 필요한 편미분값을 획득
    • 원리
      • 체인룰(연쇄법칙) : 합성 함수의 미분은 합성 함수를 구성하는 개별 함수 미분의 곱으로 처리
      • 역전파 : 파라미터 업데이트를 위해 출력층의 오차값을 은닉층으로 전파
  • DNN
    • 딥러닝 모델링 이슈
      • Vanishing Gradient → Activation 함수
        • sigmoid의 미분값이 0~0.25의 범위라서, 은닉층 증가에 따라서 미분값이 0이 되는 현상
        • relu, tanh(hyperbolic tangent), leaky relu
      • global minimum이 아닌 local minimum에 빠지는 문제 → Optimization
        • SGD(Stochastic Gradient Decent) : 배치 사이즈를 조정하여 데이터를 변경하는 방식
        • Momentum : 움직이는 쪽으로 가중치를 주는 방식
        • AdaGrad(Adaptive Gradient) : 학습률을 변경하는 방식
        • RMSProp : Adaptive 방식으로 제곱합을 지수평균(이동평균)으로 변경
        • Adam : Momentum + RMSProp를 융합한 방식
      • Over Fitting 이슈
        • 학습 데이터의 부족 → 추가 학습 데이터 수집
        • 모델의 Capacity가 너무 높다
          • 레이어 수를 조절하여 파라미터의 개수를 줄인다
          • L1(절댓값), L2(제곱) 규제를 설정한다
            • L2규제는 최소한의 파라미터를 찾는 것이고, L1규제는 필요한 파라미터를 뽑는 것이다
          • DropOut를 설정한다 (기본값 및 권장값은 0.5)
          • BatchNormalization를 설정한다 (레이어의 개수가 적으면 효과적이지 않을 수 있음)
    • 모델링 팁
      • 배치사이즈는 2의 제곱으로 설정하는 것이 좋다
      • 레이어 3개까지는 sigmoid를 사용해도 되는데, 5개 이상부터는 sigmoid를 안 쓰는 것이 좋다
      • 다중분류의 출력층은 softmax, 손실함수는 CEE(Cross Entropy Error)를 사용하기를 권장
        • CEE 계산시에 이진분류는 y값이 0 또는 1이지만, 다중분류에서는 y값은 1만 계산한다
      • 이진분류의 출력층은 1개로, 활성화함수는 sigmoid를 사용한다
      • 수치예측의 출력층은 activation을 사용하지 않고, wx + b의 형태로 반환하여야 한다.
      • EarlyStopping의 patience는 150~200으로 설정하는 편이
  • CNN
    • 합성곱 연산이란 파라미터 행렬을 의미한다
    • Feature Extraction Layer(특징추출)와 Classification Layer(분류) 레이어로 구분된다.
    • 가중치 수를 줄이고 연산량을 감소시켜 성능을 향상하고자 한다.
    • Hyper Parameter
      • Filter의 개수와 크기
        • Feature Map를 생성하게 해준다.
        • FIleter의 크기는 주로 홀수를 설정한다.
      • Stride : 이동 간격, 기본값은 1
      • Padding
        • 기본값은 줄어드는 것으로 same padding을 설정해야 크기가 줄지 않는다.
          • 단 stride를 2로 설정하면 크기가 줄어든다.
        • 레이어가 10개만 되어도, 이미지가 소멸하지 않기 위해서 padding이 필요하다.
      • Pooling : 주로 MaxPooling를 사용하나, 요새는 사용하지 않는 추세
        • Pooling은 대부분 반으로 축소시키는데, 홀수인 경우에는 1줄을 날리고 반으로 축소시킨다.
        • 1줄이 소실되는 것을 막으려면 미리 padding으로 이미지를 채우면 된다.
  • 데이터세트
    • imdb
      • x데이터만 있다 → y레이블을 어떻게 구성해야 하나?
      • x의 개수가 제각각이다 → 길이를 동일하게 바꾸자
    • mnist
      • x데이터만 있다 → y레이블을 어떻게 구성해야 하나?
      • input의 shape와 model의 shape가 다르다
      • 1차원의 데이터가 아니라 2차원데이터로 되었다 → 지역적 특징이 사라진다
      • 파라미터 개수가 줄었는데 성능이 좋게 나왔다
    • cats vs dogs
      • 이미지 사이즈가 다르다 (input shape를 정의하기 힘들다)
      • x데이터만 있다 → y레이블을 어떻게 구성해야 하나?
 
 
 
PREVDNN 코드 정리
NEXTClassification 코드 정리