본문 바로가기
AI

[머신러닝] Neural Networks and Deep Learning (2)

by 헤이즐넛 좋아하는 개발자 2024. 7. 18.

시작하기 전에

III, IV를 정리하고 코스 1을 마무리하겠다.


III. Shallow Neural Networks

Neural Network Overview

Neural Network가 무엇이냐 저번 글에서 살펴봤던 개념과 연결해서 보자.

  • 가중치와 편향의 선형 결합으로 \( z \)를 구하고, 활성화 함수를 적용해서 \( a \)를 구하는 과정을 layer마다 반복한다.
  • 마지막에 \( \hat{y} \)과 실제값 \( y \)와의 차이에서 Loss를 구하고, 이 Loss를 최소화하는 방향으로 가중치와 편향을 수정한다.
  • 이러한 전체 과정을 Loss가 목표값에 도달할 때까지 반복한다.

 

Representation

이를 Neural Networks 구조로 표현하면 아래와 같다. (한 layer의 node 개수는 임의로 설정했다)

 

  • 맨 앞 layer가 'Input layer'
  • 맨 뒤 layer가 'Output layer'
  • 그 사이에 있는 모든 layer는 'Hidden layer'
  • Input layer를 제외한 전체 layer의 개수를 세서 '2 layer NN(Neural Network)'

 

Weight와 Bias의 차원을 구하는 방법도 알아두자. 나중에 코드를 작성할 때 차원을 맞춰서 적어줘야 한다.

\( b^{\left[ 1 \right]} \)의 차원

  • \( a^{\left[ 1 \right]} \) layer의 노드 개수가 4개이므로 (4, 1)

\( W^{\left[ 1 \right]} \)의 차원

  • \( x \) 벡터와 이후 \( b \)와의 행렬 연산이 가능하려면 (4, 3)
  • 조금 더 쉽게 판단하고 싶다면, (\( a^{\left[ 1 \right]} \) layer의 노드 개수, \( x \) layer의 노드 개수) = (4, 3)

Activation Function

활성화 함수에는 여러 종류가 있는데 4가지를 살펴보겠다.

 

Sigmoid

이전 글에서도 나와서 익숙할 것이다. 식은 아래와 같다.

$$ a = \frac{1}{1 + e^{-z}} $$

Sigmoid 함수는 binary classification의 output layer에서만 사용한다.

 

tanh

식은 아래와 같다.

$$ a = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} $$

Hidden layer에서 활성화 함수로는 sigmoid 대신 tanh를 많이 사용한다. tanh를 거쳤을 때 데이터가 -1 ~ 1 사이의 값이 나와서 데이터 값의 평균이 0에 가까워지는 장점이 있기 때문이다. 이는 다음 layer에서 연산할 때 쉽게 연산할 수 있게 도움을 준다.

 

ReLU

식은 아래와 같다.

$$ a = max(0, z) $$

ReLU는 Rectified Linear Unit으로, binary classfication을 제외한 케이스에서 sigmoid 대신 주로 사용된다. sigmoid와 tanh 함수의 단점은 z가 매우 큰 값일 때 기울기가 0에 가까워 gradient descent를 늦출 수 있다는 점이다. 결과적으로 모델의 학습 속도가 더 빨라지게 한다.

 

Leaky ReLU

식은 아래와 같다.

$$ a = max(0.01z, z) $$

Leaky ReLU와 ReLU는 선택해서 사용하면 된다.

 

왜 non-linear 활성화 함수가 필요한가?

활성화 함수 \( g(x) = x \)라고 해보자. 그럼 다음과 같은 일이 발생한다.

layer를 2개 거쳤음에도 1개 거친 것과 똑같은 결과가 발생한다. 이게 non-linear 활성화 함수가 필요한 이유다.

 

Derivatives

Sigmoid, tanh, ReLU, Leaky ReLU 각각의 미분식은 위와 같다.


Initialization

앞에서 parameter들이 학습이 되는 과정을 살펴봤다. 그렇다면 학습되기 전 맨 처음 값은 어떻게 설정할까?

 

0으로 initialize한다면?

 

위의 neural networks를 다시 가져오자. 여기서 \( W_{1} \) 행렬과 \( b_{1} \)의 모든 요소값이 0이라면, (\( a^{\left[ 1 \right]} \) layer의 모든 노드는 동일해진다. 그리고 각 node가 다음 layer에 주는 영향이 모두 동일해진다. 이러한 전체 과정이 모든 hidden layer에서 반복되는 문제가 발생한다.

 

Random Initialization

따라서 \( W \)를 random한 값으로 initialize, \( b \)를 0으로 initialize한다. 이렇게 하면 하나의 layer의 각 node가 다음 layer에 주는 영향이 모두 달라지게 된다.


IV. Deep L-layer Neural Network

Deep Neural Networks

Neural Network에서 layer 개수가 많아진 것을 뜻한다. 위에서 봤던 개념들이 모두 동일하게 적용되며, 요약하면 아래와 같다.

주목할 부분은 hidden layer에서는 ReLU 활성화 함수, output layer에서는 Sigmoid 활성화 함수가 사용되었다는 점과 Cache라는 새로운 개념이 등장했다는 점이다. Forward & Backward 과정을 보면, Forward propagation에서 계산했던 \( W^{\left[ l \right]} \), \( b^{\left[ l \right]} \), \( z^{\left[ l \right]} \)가 Backward propagation에서 다시 필요하다. 따라서 Forward 계산 때 이 값들을 Cache에 들고 있다가 Backward 계산 때 바로 넣어줌으로써 연산의 효율성을 만드는 것이다.


Hyperparameter

지금까지 살펴본 parameters로는 \( W^{\left[ l \right]} \), \( b^{\left[ l \right]} \)이 있었다. 함수의 특정한 성질을 나타내는 변수로 매개변수라고도 부른다.

Hyperparameter란, 최적의 훈련 모델을 구현하기 위해 모델에 설정하는 변수로 학습률(learning rate), 훈련 반복 횟수(epoch number), hidden layer 개수 등이 있다.


마치며

다음 글에서는 코스 1의 과제를 리뷰해보겠다.

 

 

 

 

 

 

 

 

'AI' 카테고리의 다른 글

[머신러닝] Neural Networks and Deep Learning (1)  (0) 2024.07.11