Study/ML&DL

[오승상 딥러닝 강의] 3. DNN forward pass

p-jiho 2025. 5. 10. 22:27

Deep Neural Network(DNN) 이란?

 지난 글에서 Perceptron에 대해 간략하게 소개했다. 또한 MLP에 관해서도 간략히 소개했다. DNN도 MLP와 같이 Perceptron을 여러 개 조합하여 만든 인공신경망이다. 즉, Hidden Layer의 갯수가 많은 인공신경망(Artificial Neural Network, ANN)이다.

 MLP와의 차이는 MLP는 DNN에 비해 단순한 편이며 DNN은 MLP에 비해 Hidden Layer의 개수가 많은 편이다. 보통 Layer가 많을 수록 Node가 많을 수록 복잡한 문제를 해결할 수 있다. DNN은 MLP에 비해 Layer가 더 많은 신경망이므로 더 복잡한 데이터를 처리할 수 있다. 참고로 DNN이 MLP 보다 Node가 많은 신경망을 뜻하는 것은 아니다.

 Layer은 깊어질수록 즉, 많아질수록 더 많은 정보를 가지고 있다. Layer 수를 늘리지 않고 Node의 수를 늘려 Layer는 적지만 Node가 많은 신경망을 Shallow Neural Network(SNN)이라고 한다. 총 Node의 수가 똑같은 경우에 SNN보단 DNN이 성능이 좋다. 즉, 하나의 Layer에 Node가 많을수록 복잡한 문제를 해결할 수 있지만 무작정 Node의 수만 늘리기보다는 Layer 수를 늘리는 것이 효율적이다.

 

 

DNN의 수식

 DNN은 Forward Pass Computation(순전파)와 Back Propagation(역전파)를 반복적으로 사용하여 성능을 향상시킨다. DNN은 Input이 주어지면 DNN이 가지고 있는 Weight 값에 따라 Forward Pass Computation을 수행해 그에 맞는 Output을 출력한다. 그 후 정답값과 예측값의 오차를 줄이기 위해 역으로 연산을 진행하여 각각의 Weight가 더 많은 정보를 반영할 수 있도록 업데이트를 한다. 이것이 Back Propagation이다.

 DNN의 수식은 아래와 같다.

 

 위 수식과 같이 Input이 주어지면 그에 맞는 Weight를 각각 곱한 후 Activation Function 중 하나인 Sigmoid Function에 삽입한다. 그 결과를 다음 Layer의 Input으로 사용하고 Weight를 곱하고 Sigmoid Function에 삽입하여 결과를 내는 과정을 반복한다. 그 결과가 Input에 대한 output 즉, 예측값이 된다.

 

Sigmoid와 같은 Nonlinearity를 적용시키는 이유는?

 만약 위 수식에서 Sigmoid Function과 Bias 둘 다 없앤다고 가정해보자. 그렇다면 L개의 Weight Matrix을 곱한게 되며 이는 하나의 큰 Weight Matrix으로 표현이 가능하다. 즉, Layer를 여러 개 사용해도 실질적으로 Layer 1개만 쓴 것과 똑같은 현상이 일어난다. 즉, Hidden Layer를 깊게 가져갈 이유가 없어진다. 또한 Nonelinearity 함수를 사용하는 경우 선형이 아닌 보다 복잡한 함수를 표현할 수 있게 된다.

 

그렇다면 왜 Sigmoid Function 일까?

 Sigmoid Function은 Continuous하고 Differentiable 한 Function이다. 즉, 연속적이며 미분가능한 함수이다. 이는 Back Propagation을 할 때 미분을 하게 되는데 이 과정에서 미분이 가능하면 계산을 간단하게 할 수 있어 역전파 학습에 용이하다.

 

Activation Function의 종류

Sigmoid Function 이외에도 많은 Activation Function이 있고, 각각의 장단점이 있다. 이에 대해 알아보도록 하자.

 

1. Sigmoid

 Sigmoid 함수를 수식으로 나타내면 아래와 같다. 

 위 수식을 그래프로 그리면 아래와 같다.

 위 그래프와 같이 Sigmoid 함수는 0~1 사이의 값을 갖는다. 즉, Sigmoid는 Class가 2개일 경우에는 확률로 해석이 가능해 이진 분류에 강하다. 또한 위에서 언급했듯 부드러운 기울기를 가져 미분에 용이하다. 구현이 간단하다는 장점도 있다.

 하지만 큰 단점 중 하나는 Vanishing Gradient 이다. Vanishing Gradient란 Backpropagation 과정에서 출력층과 멀어질수록 Gradient 값이 매우 작아지는 현상을 말한다. 이 현상은 학습이 제대로 이루어지지 않게 한다. Sigmoid 함수는 미분값이 최대 0.25이며 x값에 따라 거의 0에 수렴하는 경우가 많다. 즉, Vanishing Gradient 현상이 일어나기 쉽다.

 또한 Sigmoid 함수의 출력 값은 0이 중심이 아니며 항상 양수이므로 편향적인 업데이트가 발생할 수 있다. 그리고 Sigmoid는 3개 이상의 다중 클래스 분류 작업에선 확률로 해석할 수 없어 적절하지 않을 수 있다.

 즉, Sigmoid는 데이터가 이진, 범주형인 경우에 적합하다.

 

2. Relu

 Relu는 Sigmoid 함수의 단점을 해결한 Activation Function으로, 입력 값이 양수일 경우 그대로 반환하고 음수일 경우에는 0을 반환한다.

 장점은 계산이 쉽다. 양수, 음수인지만 비교하면 되므로 연산이 빠르다. 또한 Sigmoid나 Tanh의 경우는 Vanishing Gradient 문제를 겪지만 Relu는 양수 입력 값에서는 미분값이 일정하게 1을 가지므로 이 문제를 완화할 수 있다. 또한 입력 값이 음수일 경우에는 출력이 0이므로 계산 비용을 줄이고, 과적합을 줄이는데 도움이 된다. 즉, 일반화 성능을 높일 수 있다.

 Relu의 단점은 dying Relu이다. 입력 값이 음수인 경우 항상 0을 출력하기에 많은 뉴런이 비활성화 되어 업데이트가 되지 않을 수 있다. 또한 양수 입력에 대해서는 출력 값이 매우 커져 학습의 안정성을 해칠 수 있다. 그리고 음수 입력값에 대해서는 항상 0이므로 데이터의 분포가 비대칭일 경우 학습이 불균형해질 수 있다.

 Relu의 경우는 출력값이 무한 범위이므로 회귀 문제에 적합하다. DNN이나 회귀 문제에서는 Relu가 적합할 수 있다. 은닉층에 Relu를 사용하고 출력층에 이진분류일 땐 Sigmoid, 다중분류일 땐 Softmax를 사용하기도 한다.

 

3. SoftMax

 SoftMax의 수식은 아래와 같다.

 

 SoftMax의 그래프는 Sigmoid와 비슷하다. Classification에서 중요한 activation function이며 output layer에서만 사용된다. 다중 Classification 문제에서 Sigmoid를 사용할 경우 Output 값에 대한 해석이 어렵다. Sigmoid의 출력값을 확률로 나타내기 위해선 전체 Sigmoid 값의 합으로 나눠주어야한다. 하지만 계산이 복잡하다는 단점이 있다. Softmax 함수을 사용하면 출력값을 확률로 표현하여 가장 높은 확률을 가진 Class를 해석할 수 있다. 또한 Sigmoid 값들의 전체 합으로 나눠준 것과 유사한 값을 추출할 수 있다. Softmax는 확률의 개념이 사용되지 않았으므로 확률이라고 보기는 사실 어렵다. 하지만 확률의 느낌을 띄우고 있으므로 분석이 수월해진다는 장점이 있다. 

 Softmax의 단점은 클래스의 불균형이 있을 경우 상대적으로 많은 데이터를 가진 클래스에 더 많은 가중치를 두게 되어 예측 성능이 저하된다는 단점이 있다. 또한 Sigmoid와 동일하게 Vanishing Gradient 문제를 가지고 있다.

 Softmax는 다중 분류의 출력층에 적합하다.

 

4. Tanh

 그래프와 같이 tanh는 Sigmoid와 비슷한 형태를 가졌다. 하지만 Sigmoid는 0, 1 사이의 범위를 가지고 있고, tanh는 -1과 1 사이의 범위를 가지고 있다. 이는 Sigmoid의 단점 중 하나였던 기울기가 편향되는 문제를 해결할 수 있다. 또한 Sigmoid보다 tanh가 범위가 넓고 기울기가 크기 때문에 Vanishing Gradient 증상이 완화되는 효과가 있다. 이렇기 때문에 은닉층에서는 Sigmoid를 사용하는 것보다 tanh를 사용하는 것이 더 효과적이다.

 하지만 tanh도 구간이 한정적이며 입력값이 극단적인 경우 Vanishing Gradient 문제는 여전히 존재한다.

 tanh는 확률로 해석할 수 없고 Sigmoid의 단점을 완화할 수 있기 때문에 은닉층에서 사용하는 것이 적합할 수 있다. 하지만 은닉층에는 Relu의 성능이 더 좋아 자주 쓰이는 것 같다.

 

5. Leaky Relu

 

 

 Leaky Relu는 Relu가 갖는 Dying Relu를 해결하기 위해 나온 함수로 음수인 경우 0이 아닌 특정 값을 곱한 것이다. 그 외는 Relu의 특성을 유사하게 가지고 있다. 연산이 간단한다.

 하지만 Relu 보다 계산량이 많고, 음수에 대한 기울기가 고정되어있어 성능이 제한적이다. 여러 글을 읽은 결과 Relu가 좋은 성능을 내는 경우가 많고 Dying Relu 문제를 해결했다고 Relu와 다른 비슷한 Activation Function이 더 좋은 성능을 내기도 하는 것 같다.

 

6. Parameter Relu

Leaky Relu와 달리 고정된 값을 곱하는 것이 아닌 하이퍼파라미터를 곱하는 함수이다. 대규모 이미지 데이터에서는 Relu 보다 좋은 성능을 내기도 하지면 소규모 데이터셋에서는 Overfitting 위험이 있다.

 

7. ELU(Exponential Linear Unit)

 Relu보다 성능이 좋다고 들은 적이 있는 Activation Function이다. 모든 지점에서 미분이 가능하며 편향 변화를 줄였다. 하지만 Dying ELU 문제라고 하는 Dying Relu와 비슷한 문제가 있다고 한다.

 

이 외에도 SRelu, GRELU, softsign, softplus, Maxout 등 다양한 Activation Function이 있다고 한다. 오늘은 기존의 Activation Function만 알아보았고, 추후 다시 다룰 예정이다.

 

Network Parameter Setting

 모든 Layer의 Weight는 Theta로 표현하며 Parameter라고 한다. 오차가 적은 성능이 좋은 신경망을 찾기 위해서는 Weight 즉, Parameter를 학습하고 업데이트 해야한다. 이는 BackPropagation 과정을 통해 학습한다. 이 과정에는 실제값과 예측값 사이의 오차의 정도를 나타내는 함수인 Cost Function이 사용된다. 이 Cost Fucntion의 결과값을 줄이는 방향으로 Parameter를 학습해야한다. Cost Function에 대한 내용을 다음 4강에서 배울 예정이다.

 

 

 

[출처]

https://www.youtube.com/watch?v=bRp0HzlgMNU&list=PLvbUC2Zh5oJvByu9KL82bswYT2IKf0K1M&index=3

https://leeejihyun.tistory.com/32
https://gooopy.tistory.com/54
https://www.quora.com/Can-you-state-the-advantages-and-disadvantages-of-ELU-vs-Leaky-ReLU
https://syj9700.tistory.com/38
https://velog.io/@ym980118/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC-%EC%8B%9C%EA%B7%B8%EB%AA%A8%EC%9D%B4%EB%93%9C-%EC%86%8C%ED%94%84%ED%8A%B8%EB%A7%A5%EC%8A%A4-ReLU
https://gooopy.tistory.com/52
https://for-data-science.tistory.com/68