본문 바로가기

Deep Learning

[신경망] Neural Network와 Back propagation

Neural Network의 배경

Neural Network(NN) 는 기존의 머신러닝 모델 기법에서의 한계를 보완하기 위해 고안되었다.

인간의 뉴런 작동 방식을 차용하여, 머신러닝 기법에 적용한 것이다. 

NN은 여러 레이어(층)를 쌓고 각 레이어에서 파라미터의 가중치를 학습시키는 방법을 통해 학습 데이터를 설명한다. 이 과정에서 어떤 피처가 중요한 피처인지 학습하는 representative learning 을 하게된다.

Neural Network Architecture

Input layer에서 피처가 3개, Hidden layer가 1층, Output layer가 1개의 유닛으로 구성된 NN의 아키텍처는 위 그림과 같다. 보시다시피, NN에서 가운데 Hidden layer만 없으면 linear regression 구조와 같다. NN의 차별점은 hidden layer를 쌓는 것인데, 이를 통해 모델에 대한 복잡도를 높여 비선형적인 데이터를 학습시킬 수 있다.

 

위 모델이 NN의 기본구조이며, 이 아키텍처를 어떻게 구성하는지에 따라,

 

DNN(Deep Neural Network): hidden layer를 여러 층으로 

CNN(Convolution Neural Network): 컨볼루션 층 추가 (이미지 특성 추출에 유리)

RNN(Recurrent Neural Network): output 값이 다시 input 값으로 (시계열 특성 추출에 유리)

...

로 나눠지게 된다.

 

각 레이어에서는 activation function(활성화 함수)가 신경망 내의 각 노드에 적용되어, 그 노드가 다음 레이어로 얼마나 많은 신호를 보낼지 결정하는 역할을 한다. NN의 hypothesis 는 노드의 값이 행렬로 계산되어 빠른 계산이 되도록 하는데, 아래에 자세한 수식을 나타내보겠다.

θ 와 input의 선형결합으로 이루어진 Z에 활성화 함수 g(x)를 합성시키면 a가 된다.

 

위의 행렬식을 계산하여 hθ(x) 을 구하는 과정을 Forward propagation이라고 한다. 이후, 실제 y값과 hθ(x) 를 비교하여 오차값만큼 θ를 업데이트 해준다. (Backward propagation)

 

Back propagation

그럼, Neural Network의 핵심 알고리즘인 Back propagation (Backward propagation 라고도 함) 에 대해 자세히 알아보자

가중치는 Back propagation이라는 역전파 알고리즘을 통해 업데이트 된다. 위에서 오차만큼 θ를 업데이트 해준다고 하였는데, 오차(비용)을 계산하는 비용함수(cost function)은 아래와 같다. 

비용함수의 minimum을 찾는 것이 최종 목표이며, 이를 위해 Gradient descent 방법을 사용하여 모든  θ에 대해 비용함수 J(θ)를 편미분 해준다. (Gradient descent 를 모르겠다면 이 설명을 참고해주길 바란다.)

 

그런데, 단순한 regression 모델과는 다르게 Neural Network는 여러 층으로 쌓여있어 편미분 하기가 쉽지 않다. 이를 위해서 chain rule을 활용하게 되는데, 사슬처럼 마지막 Output layer부터 Input layer 방향으로 '역으로 거슬러 올라오면서' 편미분 해준다. 그래서 이 과정을 'Back' propagation 이라고 부른다. 

 

쉬운 예로 모든 층의 노드가 1개이고, hidden layer도 1개인 NN이 있다고 해보자.

그럼 아래와 같이 수식으로 표현할 수 있다.

위의 편미분 과정을 통해 비용함수의 미분값이 오차 * 앞 층의 가중치 * 활성화함수 미분값 * 입력값 으로 정리되는 것을 볼 수 있다. 여기서 입력값 a(l)을 제외한 나머지를 δ 로 치환하면 아래와 같이 정리할 수 있다. 

결국, back propagation을 통해 δ 를 구하고, 거기에 해당 층의 입력값 a(l)을 곱해서 gradient를 구해준 다음, 가중치를 업데이트 하는 것이다.

 

Vanishing gradient problem

vanishing gradient 문제는 직역하면 '기울기가 소실되는 문제' 이다.왜 기울기가 사라질까?

바로 전에 계산했듯이, 역전파 과정에서 구해지는 δ는 아래와 같은 수식으로 구해진다.

 

δ(l) = δ(l+1) * θ(l) * σ'(Z(l)

 

그리고, 층이 깊어질 수록 δ는 계속 곱해진다.

δ 안에 보면 σ'(Z(l)) 가 숨어있는 것을 볼 수 있다. 시그모이드 미분 값은 σ(Z(l))(1-σ(Z(l)) 이다. 

그런데 시그모이드는 0~1 사이의 값을 갖기 때문에 곱해질 수록 0에 수렴된다. 이것이 gradient가 vanishing 되는 이유이다. 층이 깊어질 수록 δ가 곱해지고 δ안의 시그모이드 미분 값이 계속 곱해지면서 gradient가 0이 되버린다;;

그럼, 이 문제를 해결하려면 어떻게 해야할까?

활성화 함수를 시그모이드 말고 다른 걸 써주면 된다! 대표적인 예로 ReLU 함수가 있는데, ReLU에서는입력값이 양수일 경우, 입력값에 상관 없이 항상 동일한 미분 값은 1이기 때문에(위 그림 참조), 역전파 과정에서 기울기가 소실되는 문제를 해결할 수 있다!

 

각 데이터마다 gradient를 모두 더하고 m개로 나누어 평균을 구해준다. 이후, gradient 평균으로 업데이트 해준다!

 

Neural Network 신경망 구조는 처음에는 어렵게 들릴 수 있으나 계속 행렬식을 써보고 미분해보면 익숙해진다.

직접 손으로 공부해보길 추천하며 마무리한다.

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

Sequence-to-Sequence(Seq2Seq)  (0) 2024.11.19
Attention 메커니즘  (0) 2024.05.15
Transformer  (0) 2024.04.28
LSTM 쉽게 이해하기  (0) 2023.09.14
RNN 쉽게 이해하기  (2) 2023.09.14