앞서 퍼셉트론만을 이용했을 때 선형적인 표현만 할 수 있다는 문제점이 존재했다. 이를 해결하는 방법으로 신경망을 이용한다.
신경망은 입력층/ 은닉층 / 출력층이 존재한다.
참고로 입력층/ 출력층은 알겠는데 은닉층은 뭔가?
은닉층은 간단히 말해서 사용자가 볼 수 없는 층이라고 볼 수 있다.
h(x)를 활성화 함수라고 하겠다. 활성화 함수가 없을 경우를 한번 생각해 보자
h(x) = ax 일차 함수가 활성화 함수라고 하면
h(h(h(x))) = a^3x => a'x 함수로 은닉층이 없는거랑 똑같다고 볼 수 있다.
그럼 은닉층을 비선형 함수로 만드는 대표적인 함수들을 소개해 주겠다.
앞에서 설명했던 활성화 함수들은 은닉층의 활성화 함수로 h로 표현한다. 이제 출력층의 활성화 함수는 σ로 표현하겠다.
출력층의 활성화 함수는 분류와 회귀 문제에 따라 다르게 사용된다.
분류 문제 : 어느 class에 속하니?(주로 softmax 함수 이용)
회귀 문제 : 연속적인 값 예측(주로 항등함수 이용)
yk = exp(ak) / (i = 1~n 까지 합 exp(ai))
softmax 함수 yk의 1~n까지의 합은 1이 나온다. 즉 확률로써 어느 class를 출력할지 선택할 수 있다.
softmax 함수 구현시 exp(ak) 즉 지수승으로 증가해서 ak 값이 커짐에 따라 기하급수적으로 커진다. ex) ak가 100이 되면 exp(100)으로 오버플로우 발생가능
이를 해결하기 위해서 softmax 함수 구현시 ak 값을 일정 상수로 빼주는 작업이 필요하다.
yk = exp(ak - C) / (i = 1~n 까지 합 exp(ai) - C)