ㅅㅇ

딥러닝 _03_2_DNN (Deep Neural Network) 신경망 구조 _ 최적화 본문

AI_STUDY/딥러닝

딥러닝 _03_2_DNN (Deep Neural Network) 신경망 구조 _ 최적화

SO__OS 2022. 7. 13. 23:58

플레이데이터 빅데이터캠프 공부 내용 _ 7/12

딥러닝 _03_DNN (Deep Neural Network) 신경망 구조 (2) _ 최적화

1. Optimizer (최적화 방법)

  : Training 시 모델 네트워크의  parameter를 데이터에 맞춰 '''최적화''' 하는 알고리즘

   - Deep Learning은

     경사하강법(Gradient Descent)와 오차 역전파(back propagation) 알고리즘을 기반으로 파라미터들을 최적화한다.

 

- 최적화 란?

    - 모델 네트워크가 출력한 결과와 실제값(Ground Truth)의 차이를 정의하는 함수를

       Loss function(손실함수, 비용함수) 라고 한다.
    

   - Training 시 Loss function이 출력하는 값을 줄이기 위해

      파라미터(weight, bias)를 update 과정을 최적화 라 한다.

 

 

2. Gradient Decent (경사하강법)

: 최적화를 위해 파라미터들에 대한 Loss function의 Gradient값을 구해

  Gradient의 반대 방향으로 일정크기 만큼 파라미터들을 업데이트 하는 것을 경사하강법이라고 한다.


    = > 가중치 변화에 따른 loss 변화 즉, 미분값에 학습률을 곱해 현재 가중치에서 빼는 것.

3. 오차 역전파(Back Propagation) 

- 합성함수의 미분을 적용함. 모델 학습할 때 내부적으로 돌아감.

- 최적화에서 경사하강법과 함께 쓰이게 된 이유는?

    => 딥러닝의 복잡한 연산(많은 weight)을 한 번에 처리할 수 없다.

         오차 역전파의 연쇄법칙을 이용한 단계적 연산 방법 으로 이를 해결

딥러닝 학습시 파라미터를 최적화 할 때 추론한 역방향으로 loss를 전달하여 단계적으로 파라미터들을 업데이트한다.
    - Loss에서부터(뒤에서부터) 한계단씩 미분해 gradient 값을 구하고 

     이를 Chain rule(연쇄법칙)에 의해 곱해가면서 파라미터를 최적화한다.
   

 - 최적화의 경우: 출력에서 입력방향으로 계산하여 역전파(Back propagation)라고 한다.
 - 추론의 경우 : 입력에서 출력 방향으로 계산하며 이것은 순전파(Forward propagation)이라고 한다.

 

4. 계산 그래프 (Computational Graph)

- 딥러닝 네트워크 구조를 구현하는 방식


복잡한 계산 과정을 자료구조의 하나인 그래프로 표현한 것


- 그래프는 노드(Node)와 엣지(Edge)로 구성됨.
    - 노드: 연산을 정의
    - 엣지: 데이터가 흘러가는 방향

 

 

4.1 계산 그래프의 예

 

  • 슈퍼에서 1개에 100원인 사과를 2개 샀을 때 지불할 금액은 어떻게 될까? 단 부가세는 10% 부과된다.

 

 

4.2 계산 그래프 절차 및 특장점

 

(1) 계산 그래프를 사용한 문제 풀이 절차

    - 계산 그래프를 구성
    - 계산 방향을 결정
            - 계산 시작에서 계산 결과 방향으로 순서대로 계산:

               : 순전파(Forward propagation)   == > 추론
            - 계산 결과에서 계산 시작 역방향으로 계산

               : 역전파(Back propagation)        == > 최적화 (학습시 parameter update)
             

   
(2) 특징/장점

    - 국소적 계산을 통해 결과를 얻는다.
        = >  각 노드의 계산은 자신과 관계된 정보(입력 값들)만 가지고 계산한 뒤 그 결과를 다음으로 출력한다.

 

    - 복잡한 계산을 단계적으로 나눠 처리하므로 문제를 단순하게 만들어 계산할 수 있다.
        => 딥러닝에서 역전파를 이용해 각 가중치 업데이트를 위한 미분(기울기) 계산을 효율적으로 할 수 있게 한다.

           (미분도 국소적으로 계산할 수 있으니 경사하강법이 구현하기 쉬워진 것)


    - 중간 계산결과를 보관할 수 있다.

 

5. 연쇄 법칙과 계산 그래프 적용 예시로 개념 설명

(1) 합성함수의 미분

 

   합성함수 : 한 함수의 공역이 다른 함수의 정의역과 일치하는 경우, 두 함수를 이어 하나의 함수로 만드는 연산

함수 z 를 x 에 대해 미분하기 위해 (x+y)를 t 로 치환함.

  

(2) 연쇄법칙 (Chain Rule)

 

    - 합성함수의 미분은 합성함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다.

 

    - 편미분 적용 : 다변수 함수 미분에서 특정 변수를 제외한 나머지 변수를 상수로 간주하여 미분하는 것.

 

 

 합성함수의 미분을 위해  연쇄법칙과 계산그래프(계산을 나눠 처리)를 적용하고자 한다.

 

(3) 연쇄 법칙과 계산 그래프

- 합성함수를 구성하는 각 함수의 미분의 곱

   합성함수 미분으로 미분을 쪼개서 x 변화에 따른 z의 변화량 을 계산할 수 있다.

 

6.  딥러닝 네트워크에서 최적화 예

- 하나의 data가 feature 4개 x1 ~ x4 가 input 으로 들어간다.

 

 - z11 가중합 값,   a11 활성화한 값.

 - z11 - x1 - w11       w11 은 ? => 첫번째 노드 유닛의 x1 feature 에 대한 첫번째 weight

          - x2 - w12      w12 은 ? => 첫번째 노드 유닛의 x2 feature 에 대한 두번째 weight 

 

- 분홍- I     초록 - H (unit 3개)    파란-O 

 

- a2(모델의 예측결과) 가 out 으로 나오면 정답과 loss 구해서 weigth 를 updata

 

6.1 순전파(forward propagation) - 추론

 

# z11 : 첫번째 unit 에 대한 가중치 계산 처리

# a11 : 첫 번째 z11 unit 에서의 활성화 함수 처리한 값 

 

# 회귀문제라 결과에 활성함수 쓰지 않고 그대로 a2 = z2.    예측함수 : mse

 

loss 최소화 를 위해 경사하강법, 역전파를 이용한다. 파라미터 변화에 따른 loss 의 변화를 계산할 때 

모든 파라미터에 대해 다 연산해야 한다. 지금은 설명을 위해  w11 에 대해서만 최적화만 보자. 

 

6.2 역전파 (back propagation) - 학습 시 파라미터(weigth) 업데이트

  • 𝑊11을 업데이트 하기 위한 미분값은?  (w11 변화에 따른 L의 변화를 보고자 한다.)

 

- 순전파 계산에서 역으로 거슬러가며, 각 함수들을 단계적으로 미분하고 결과를 곱해가면 된다. 

** 어려운 연산은 아니지만, 앞에 계산이 끝나야 다음 계산을 하는 순차적으로 진행이며, 또 계산 양이 많다.

    그래서 딥러닝은 시간이 오래걸린다.
      => gpu 쓰는 이유. cpu에 비해 프로세서 성능은 떨어지지만 딥러닝의 많은 계산을 위해서 코어가 많은 gpu를 쓴다.

           추론 보다 학습을 위해서 더더욱 gpu에서 이뤄져야 한다.

 

7. batch size 조정을 통해 경사하강법 연산의 메모리, 학습 속도 문제 해결

 

> batch size : 파라미터 업데이트 단위 

> 스텝(Step) :  한번 파라미터를 업데이트하는 단위.  한번 최적화. 한번 학습. 
    - 1step : 한번 학습한 것은 한번 파라미터를 업데이트 한 것이다

1) Batch Gradient Decent (배치 경사하강법)


    - 학습할 때 한번에 데이터 다 집어넣는 것 (1step 처리 = 1epoch 처리)
    - Loss를 계산할 때 전체 학습데이터를 사용해 그 평균 loss(오차) 값을 기반으로 파라미터를 최적화한다.


    - 장점 : 한 번에 넣는 게 나눠서 학습한 것 보다 학습이 안정적으로 잘 된다.
    - 단점 : 많은 계산량이 필요해서 속도가 느리다. 학습 데이터가 클 경우 메모리가 부족할 수 있다.

2) Stochastic Gradient Decent (확률적 경사하강법) - 지금은 안 씀


    - 확률적 경사하강법. 데이터 6만 개 중 랜덤한 단 data 하나만을 뽑아 학습시킨다. 

      한개의 추론 결과와 한개의 오차가 나오는데, 이걸로 파라미터 updata 한다.

 

    - 장점 : 하나의 데이터씩 처리하니, 학습 속도가 빠르고 메모리 문제 없음.
    - 단점 : 이상치에 취약하기에 학습이 잘 안된다.
       

         ==>  그래서 미니배치 확률적 경사하강법이 나왔다.

3) Mini Batch Stochastic Gradient Decent (미니배치 확률적 경사하강법)


    - 확률적 경사하강법을 n 개씩 한다. 

        : Loss를 계산할 때

          전체 데이터를 다 사용하지 않고

          지정한 데이터 양(batch size) 만큼 마다 계산해 파라미터를 업데이트 한다.

 

    - 장점 : 확률적 경사하강법보다 안정적이고, 배치경사하강법에 비해 속도가 빠르고 메모리 문제가 적다. 

              - 계산이 빠른 장점이 있지만 최적값을 찾아 가는 방향이 불안정하여 부정확할 수 있다.

                그러나 반복 횟수를 늘리면 Batch 방식과 유사한 결과로 수렴한다.


    - batch_size 를 최대한 크게 잡는다. 시간이 충분하면 메모리에 맞춰서 batch size를 정하면 된다.