Deep Neural Network (DNN)
DNN은 MLP에서 다소 확장된 개념으로 다수의 hidden layer를 가지고 있는 인공신경망이다. 즉, DNN에서 “Deep”은 hidden layer가 많다는 의미이다. Layer수가 많아지면서 데이터의 feature(특징)를 더 잘 추출할 수 있다. 아래 그림에서 각 원은 노드(Node)라고 부르는데, Input Node는 Input data의 변수의 수가 되며 Hidden Layer와 Node는 사용자가 지정해야 할 Hyperparameter, 그리고 Output Node의 수는 풀고자 하는 문제에 따라 달라진다. 예를 들어 숫자를 구분하는 문제라면 0~9까지 총 10개로 구분 가능하므로 Output Node의 수는 10이 된다.
MPL 소개 : https://ai-onespoon.tistory.com/entry/Deep-Neural-Network-DNN
소프트맥스(Softmax)
일반적으로 출력층에서 activation function은 softmax 함수를 사용한다. MLP로 구성된 신경망에서 추출한 output이 아래와 같을 때, z2의 결과만 보면 0.73으로 상당히 높은 수치를 가진다. 따라서 y가 z2라고 판단할 수 있지만 모든 결과 값을 확인 한다면 z1이 0.95로 더 좋은 값임을 알 수 있다. 따라서 output을 판단할 때 확률 개념이 판단하기 더 좋으며, softmax 함수는 다음과 같이 정의 한다. $\cfrac{e^{zi}}{\sum{e^{zj}}}$ (참고로 softmax 함수는 확률처럼 보이게 해 주는 것이지, 수학적으로 확률은 아니다.) 이러한 특성으로 인하여 소프트맥스 함수의 출력 총 합은 1이 된다.
Overflow
Overflow는 컴퓨터가 표현하지 못하는 수가 나타나는 경우를 말한다. 컴퓨터는 수를 8비트나 16비트 등으로 크기를 정해 놓고 다루기 때문에 이 범위를 넘어 설 때 overflow가 발생한다. 소프트맥스 함수는 지수 함수를 사용하기 때문에 $e^{x}$에서 $x$값이 커지면 무한대를 향해 간다. 그리고 이렇게 커진 값끼리 나눗셈을 하면 수치가 불안정해진다.
a = np.array([1010, 1000, 990])
print(np.exp(a) / np.sum(np.exp(a)))
# 결과 값
[nan nan nan]
Overflow를 막기 위해서 일반적으로 입력 신호 중 최대값을 이용한다. 소프트맥스 수식에 분자와 분모에 각각 임의의 상수, 여기는 입력 신호 중 최대값을 빼주어 조치한다.
c = np.max(a)
print(np.exp(a-c) / np.sum(np.exp(a-c)))
# 결과 값
[9.99954600e-01 4.53978686e-05 2.06106005e-09]
참고 :
[1] 도서 : 파이썬 딥러닝 파이토치, 정보문화사, 이경택 외
[2] 도서 : Deep Learning from Scratch, 한빛미디어, 사이토 고키
[2] 유튜브 : 오승상 딥러닝
'AI > Deep Learning' 카테고리의 다른 글
PSNR과 SSIM 설명 (1) | 2024.02.06 |
---|---|
AutoEncoder(AE) (0) | 2023.08.25 |
퍼셉트론(perceptron)과 Multilayer Perceptron(MLP) (0) | 2023.05.16 |
댓글