1. 신경망
2. 활성화 함수 _Activation Function
입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수라 한다.
2_1. 계단 함수(Step function)
위의 식과 같은 활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 계단 함수라 한다.
2_2. 시그모이드 함수 (sigmoid function)
신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달한다.
h(x) = 1 / (1 + exp(-x))
앞 선 퍼셉트론과 앞으로 볼 신경망의 주된 차이는 이 활성화 함수뿐이고 신경망에서는 활성화 함수로 비선형 함수를 사용해야 한다.
2_3. ReLU 함수
입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수
h(x) = x (x >0)
h(x) = 0 (x <= 0)
4. 출력층 설계
신경망은 분류와 회귀 모두에 이용할 수 있습니다.
일반적으로 회귀에는 항등 함수를, 분류에는 소프트맥스 함수를 사용
4_1. 항등함수
항등 함수는 입력을 그대로 출력합니다. 입력과 출력이 항상 같다는 뜻의 항등이다.
4_2. 소프트맥스 함수
소프트맥스의 코드를 적어놓겠습니다.
def softmax(a): exp_a = np.exp(a) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y |
소프트맥스 함수를 컴퓨터로 구현할 때 주의할 점은, 오버플로 문제인데 지수 함수를 사용하기 때문에, 값의 증가가 큰 폭으로 증가란다. 예를 들면 ,e^10 은 20,000이 넘고, e^100 은 0이 40가를 넘는 큰 값이며, e^1000은 무한대를 뜻하는 inf로 돌아옵니다. 이런 큰 값끼리 나눗셈을 하면 결과 수치가 '불안정'해진다.
따라서 소프트맥스의 식을 위와 같이 수정할 수 있는데, 오버플로를 막기 위한 값으로 C'에 입력 신호 중 최댓값을 이용하는 것이 일반적이다.
>>> a = np.array([1010, 1000, 990]) >>> np.exp(a) / np.sum(np.exp(a)) array([nan, nan, nan]) # nan 은 not a number >>> >>> c = np.max(a) >>> a - c array([0, -10, -20]) >>> np.exp(a -c) / np.sum(np.exp(a - c)) array([9.99954600e-01, 4.53978686e-05, 2.06106005e-09])
|
5. 소프트맥스 함수의 특징
소프트맥스 함수의 출력은 0에서 1.0 사이의 실수이며, 소프트맥스 함수 출력의 총합은 1이다. 출력 총합이 1이 된다는 점은 소프트맥스 함수의 아주 중요한 성질인데 이 성질 덕분에 소프트맥스 함수의 출력을 '확률'로 해석할 수 있다. 이것이 매우 편리!
소프트맥스 함수를 적용해도 각 원소의 대소 관계가 변하지 않는다. 지수함수는 단조 증가 함수이기 때문.
* 기계학습의 문제 풀이는 학습과 추론의 두 단계를 거쳐 이뤄진다. 학습 단계에서 모델을 학습하고(직업 훈련을 받고), 추론 단계에서 앞서 학습한 모델로 미지의 데이터에 대해서 추론(분류)을 수행한다.(현장에 나가 진짜 일을 하는 것). 방금 설명한 대로, 추론 단계에서는 출력층의 소프트맥스 함수를 생략하는 것이 일반적인 편이지만 한편, 신경망을 학습시킬 때는 출력층에서 소프트맥스 함수를 사용한다.
'Programming > Deep learning' 카테고리의 다른 글
Deep Learning Study (2) _퍼셉트론 (0) | 2019.04.05 |
---|---|
Deep Learning Study (1) _파이썬 (0) | 2019.04.05 |