머신러닝 스터디/딥러닝

인공신경망 (Artificial Neural Network, ANN)_(3)

hozy연 2023. 1. 22. 04:25

용어 정리

  • DNN (Deep Neural Network) : 깊은 인공 신경망
  • FC (Fully-Connected Layer): 노드끼리 싹다 연결된 층
  • Perceptron: unit step function(계단 함수)을 활성화 함수로 사용하는 인공 신경을 의미
  • MLP (Multilayer Perceptron): 모든 layer가 FC layer인 신경망으로 임의의 활성화 함수를 사용하는 인공 신경망을 의미한다.

 

딥러닝의 목표!!   loss(=cost)를 최소화하는 weight와 bias 찾기 

* loss란? 내가 풀고 싶은 문제에 맞게 잘 정의하는 것 (ex. 머신의 예측값 - 실제 값)

 

>> linear regression에서 loss를 어떻게 계산할 수 있을까?

Loss 값 예시

하지만, 양수값과 음수값이 동시에 존재한다면, 0으로 수렴할 수 있는 위험이 존재함. 

따라서, 제곱을 취하는 방법을 적용함. (MSE: Mean Squared Error)

(* 이외에도 MAE, RMSE, RMSLE 존재 --> 관련 참고 링크: https://steadiness-193.tistory.com/277)

MSE와 SE의 최솟값은 변하지 않음

 

>> 엄청 큰 네트워크에서는 오차를 어떻게 구할까? 일일이 샘플 오차를 전부 계산하는 것은 불가능

 

최적화(Optimizer): 경사하강법 (Gradient descent)!

* 경사하강법(Gradient descent)을 이용하자!

    - 함수의 기울기 값으로 기울기가 작아지는 값을 찾아가는 것

      (즉, 최솟값, 최댓값을 갖는 x는 미분 값으로 0을 갖음 = 미분 값이 작아질수록 최소값에 가까워지게 됨) 

   

    - 초깃값은 랜덤하게 설정됨

       Ex. LeCun, Xavier(sigmoid/tahn), He(ReLu) 자세한 내용은 추후에..

 

    - gradient의 방향 수삭:  x - (기울기 값(미분 값)*기울기 부호)

      (2차 함수를 생각해보면, 음수 기울기일 경우 x는 양의 방향으로 가야지 최솟값에 도달할 수 있음. & vice versa.

      따라서 원래의 x값에서 어떤 수를 더해줘야지 최솟값에 도달하게 되므로 앞에 '-'를 붙여주게 됨.)

 

    - learning rate?

      사용자가 정할 수 있는 하이퍼파라미터로 학습률을 말함. 적절한 값을 찾는 것이 중요하다!

>> 그 이유는 Local minimum에 빠질 수 있기 때문. Global minimum 찾는 것은 거의 불가능함으로 가장 Global 한 Local minimum을 찾도록 노력하는 것이 중요! (gradient 방향 수식에 따르면 기울기 값이 클수록 크게 움직이게 되고 작을수록 작게 움직이게 되는데 이를 적절하게 조정해주는 것을 말함. 다른 말로는 step size라고도 함)


* Gradient descent의 종류 

인용: https://www.slideshare.net/yongho/ss-79607172

  • SGD (Stochatic Gradient descent)

        - GD (Gradient descent)는 5개의 샘플의 기울기를 전부 고려하여 1step을 간다면, SGD는 하나의 샘플만 고려하여 1step을 감(비복원 추출로 다 뽑고 다시 주머니에 넣고 반복, local minimum에서 탈출 기회가 되기도 함)

  • mini-batch SGD

         -SGD는 하나의 샘플만을 고려하기 때문에 너무 성급하게 방향 결정. 따라서 샘플을 작은 묶음으로 만들어서 1step 기울기 고려 (배치사이즈가 작을수록 좋지만, 올리게 된다면 learning rate도 올리기! & warm up도 해 놓아야함)

  • Momentum (방향성)

        - 기울기를 누적하여 관성을 가지게 함 (아까 갔던 방향만큼 또 가자)

           (기울기가 누적되어 더해지니 앞으로 쭉쭉 가게됨)    

  • RMSprop (Root Mean Square Propagation) (스텝 사이즈)

        -  간단하게 변수들마다 다르게 가중치를 주자. 많이 등장한 아이들은 최적의 값이라는 뜻이니 보폭수를 줄이고, 드물게 나타난 변수 의 경우 보폭수를 크게하자. (gradient의 sum of squares로 나눠줌 --> 값이 빠르게 작아져 0으로 수렴하여 멈춰버리는 불상사가 발생. 이를 방지하기 위해 최근의 데이터에 가중치를 부여함으로써 0으로 수렴하지 않게 됨 )

  • Adam (Momentum + RMSprop)

참고: bit.ly/3ksyheh, bit.ly/3WrysUC


Training vs. Test (vs. Validation) 

  1. training 셋으로 훈련
  2. validation 셋으로 적절한 하이퍼파라미터 조정 (최적의 epoch, model구조를 찾아내기)
  3. test 셋으로 평가

- K-Fold Cross Validation : 데이터가 적을 경우 사용

   (+ test 셋은 따로 남겨두기!)

인용: http://ethen8181.github.io/machine-learning/model_selection/model_selection.html