Broccoli's House
#2-(4) 신경망 : 출력층 설계 본문
※ 이 글의 내용은 O'REILLY의 <밑바닥부터 시작하는 딥러닝> 책을 기반으로 한다.
출력층 설계
- 항등 함수
소프트맥스 함수
- 소프트맥스 함수(Softmax Function) : 소프트맥스 함수란 단순하게 말하면, 활성화되기 전의 출력값들을 전체와의 비율로 나타내주는 활성화 함수이다. 즉, 출력값들의 지수 함수 값이 분모가 되고, 각각 출력의 지수함수 값이 분자가 된다. 이렇게 되면 활성화된 출력 값은 1이하의 소숫점이 되며, 전체 출력 값의 합은 1이 된다. 출력 총합이 1이 되므로 소프트맥스 함수의 출력을 '확률'로 해석할 수 있고, 따라서 문제를 통계적(확률적)으로 대응할 수 있게 된다.
- 소프트맥스 함수의 적용 이후에는 주로 원-핫-인코딩(one-hot-encoding)을 해준다. 원-핫-인코딩이란 범주형 변수 즉, 몇가지로 분류할 수 있는 데이터에서 가장 큰 값을 1로 만들고 나머지는 0으로 만드는 것을 말한다. 이렇게 하면 나중에 컴퓨터가 어떤 것을 선택해야할지 확실하게 정리되는 것도 있고, 숫자로 지정된 데이터들의 대소 관계로 인해 컴퓨터가 괜한 오해를 하는 것을 방지한다.
소프트맥스 함수 구현
|
>> [ 0.018 0.245 0.737]
>> 1.0
- 오버플로(Overflow) : 소프트맥스 함수 구현은 어렵지 않지만, 컴퓨터의 계산에는 문제가 있다. 소프트맥스 함수는 exp, 지수 함수를 사용하는데, 지수 함수의 입력 값이 커지면 출력은 기하급수적으로 커져 컴퓨터가 계산을 하지 못한다는 것이다. 즉 컴퓨터가 표현할 수 있는 수의 범위가 한정되어 있어 너무 큰 값은 표현할 수 없다는 문제가 발생하는데, 이것을 오버플로(Overflow)라고 한다.
- 이것을 해결하기 위하여 입력 신호에서 가장 큰 값을 각각의 입력 신호에 빼주어 가장 큰 입력 신호는 0으로 만들고, 나머지는 음수로 만들어버린다. 소프트맥스 함수의 출력 자체가 전체에 대한 비율이기 때문에 출력 값에 영향을 미치지 않고, 오버플로 현상도 방지할 수 있는 것이다.
a = np.array([1010, 1005, 1000]) |
>> [ nan nan nan]
>> [ 0.993 0.007 0. ]
'공부 > 딥러닝' 카테고리의 다른 글
#3-(1) 학습 : 신경망 학습 (0) | 2018.02.07 |
---|---|
#2-(5) 신경망 : MNIST 손글씨 숫자 인식 (1) | 2018.01.30 |
#2-(3) 신경망 : 3층 신경망 구현 (1) | 2018.01.25 |
#2-(2) 신경망 : 활성화 함수 (0) | 2018.01.24 |
#2-(1) 신경망 : 소개 (0) | 2018.01.24 |