Broccoli's House

#2-(4) 신경망 : 출력층 설계 본문

공부/딥러닝

#2-(4) 신경망 : 출력층 설계

김콜리 2018. 1. 26. 12:56

※ 이 글의 내용은 O'REILLY의 <밑바닥부터 시작하는 딥러닝> 책을 기반으로 한다.




출력층 설계




  • 항등 함수
 - 신경망은 회귀와 분류 모두에 이용될 수 있으나, 다만 문제의 유형에 따라 출력층에 사용되는 활성화 함수에서 차이를 보인다. 일반적으로 회귀에는 항등 함수, 분류에는 소프트맥스(Softmax) 함수를 사용한다. 특히나 다중 분류에서 소프트맥스 함수를 사용한다. 

 - 항등 함수(Identity Function) : 항등 함수는 입력을 그대로 출력하는 함수이다. 입력과 출력이 항상 같기 때문에, 출력층에 항등 함수를 사용하면 입력 신호가 그대로 출력 신호가 된다. 회귀 문제의 특성상 데이터 간의 연속적인 관계가 있어야하기 때문에, 값을 0과 1에 가깝게 분류하는 시그모이드, 계단 함수 등의 활성화 함수가 필요가 없는 것이다.




  • 소프트맥스 함수

 - 소프트맥스 함수(Softmax Function) : 소프트맥스 함수란 단순하게 말하면, 활성화되기 전의 출력값들을 전체와의 비율로 나타내주는 활성화 함수이다. 즉, 출력값들의 지수 함수 값이 분모가 되고, 각각 출력의 지수함수 값이 분자가 된다. 이렇게 되면 활성화된 출력 값은 1이하의 소숫점이 되며, 전체 출력 값의 합은 1이 된다. 출력 총합이 1이 되므로 소프트맥스 함수의 출력을 '확률'로 해석할 수 있고, 따라서 문제를 통계적(확률적)으로 대응할 수 있게 된다.



 - 소프트맥스 함수의 적용 이후에는 주로 원-핫-인코딩(one-hot-encoding)을 해준다. 원-핫-인코딩이란 범주형 변수 즉, 몇가지로 분류할 수 있는 데이터에서 가장 큰 값을 1로 만들고 나머지는 0으로 만드는 것을 말한다. 이렇게 하면 나중에 컴퓨터가 어떤 것을 선택해야할지 확실하게 정리되는 것도 있고, 숫자로 지정된 데이터들의 대소 관계로 인해 컴퓨터가 괜한 오해를 하는 것을 방지한다.




  • 소프트맥스 함수 구현

a = np.array([0.3, 2.9, 4.0])

def softmax(a) :
exp_a = np.exp(a) # 각각의 지수 함수 값
sum_exp_a = np.sum(exp_a) # 각 지수 함수 값의 총합
y = exp_a / sum_exp_a # 총합에 대한 개별 값의 비율
return y

print(softmax(a))
print(np.sum(softmax(a))) # 소프트맥스 함수 값의 총합은 1이다 

>> [ 0.018  0.245  0.737]

>> 1.0



 - 오버플로(Overflow) : 소프트맥스 함수 구현은 어렵지 않지만, 컴퓨터의 계산에는 문제가 있다. 소프트맥스 함수는 exp, 지수 함수를 사용하는데, 지수 함수의 입력 값이 커지면 출력은 기하급수적으로 커져 컴퓨터가 계산을 하지 못한다는 것이다. 즉 컴퓨터가 표현할 수 있는 수의 범위가 한정되어 있어 너무 큰 값은 표현할 수 없다는 문제가 발생하는데, 이것을 오버플로(Overflow)라고 한다. 

 - 이것을 해결하기 위하여 입력 신호에서 가장 큰 값을 각각의 입력 신호에 빼주어 가장 큰 입력 신호는 0으로 만들고, 나머지는 음수로 만들어버린다. 소프트맥스 함수의 출력 자체가 전체에 대한 비율이기 때문에 출력 값에 영향을 미치지 않고, 오버플로 현상도 방지할 수 있는 것이다.


a = np.array([1010, 1005, 1000])

def softmax(a) :
c = np.max(a)
exp_a = np.exp(a-c) # 각각의 지수 함수 값
sum_exp_a = np.sum(exp_a) # 각 지수 함수 값의 총합
y = exp_a / sum_exp_a # 총합에 대한 개별 값의 비율
return y

print(np.exp(a)/np.sum(np.exp(a))) # 오버플로를 방지하지 않은 값
print(softmax(a)) # 오버플로를 방지한 값

>> [ nan  nan  nan]

>> [ 0.993  0.007  0.   ]


Comments