[0부터 만드는 Deep Learning] 신경망의 출력층에 대해 알기 쉽게 해설해 보았다
3281 단어 파이썬DeepLearning사랑심층 학습기계 학습
소개
이 기사는 처음부터 만드는 딥 러닝 4장 신경망을 자신 나름대로 이해하고 알기 쉽게 출력한 것입니다.
문계의 스스로도 이해할 수 있었으므로, 기분을 편하게 읽어 주시면 다행입니다.
또, 본서를 학습할 때에 참고해 주시면 더욱 기쁩니다.
신경망의 출력층에 대하여
이전 기사에서 신경망의 중간층의 구현까지 해설했으므로, 다음은 출력층을 해설하고 싶습니다.
신경망의 출력층도 간단히 말해 완성하면 활성화 함수가 다른 것만으로, 거의 퍼셉트론의 구조와 변함은 없습니다.
그러나 출력 계층의 활성화 함수는 기계 학습의 어떤 종류의 문제를 해결하는지에 따라 달라집니다.
기계 학습의 분류 문제를 풀고 싶을 때는 출력층에 softmax 함수를 사용하고, 기계 학습의 회귀 문제를 풀고 싶을 때는 출력층에 항등 함수를 사용합니다.
그러면 각각을 해설해 갑니다.
분류 문제를 해결하는 경우
분류 문제를 해결하려면 출력 레이어에 softmax 함수를 사용합니다. 또한 뉴런의 수는 분류하고 싶은 종류의 수와 일치합니다.
softmax 함수는 입력된 값을 확률적 의미 있는 값으로 변환하는 함수입니다. 이것은 단어라고 별로 이해하기 쉽지 않기 때문에, 수식과 그림을 내 보겠습니다.
위와 같이 신경망이 분류가 있을 확률을 각 분류의 종류별로 내줍니다.
구체적인 처리로서는, 네이비아수** 입력값 ➗ 네이비아수** 입력값의 합계를 하고 있습니다만, 처리의 의미는 생각하지 않고, 이런 처리하는 정도로 두십시오.
파이썬으로 구현해 보겠습니다.
b = np.array([0.3,2.9,4.0])
def softmax_function_pro(x):
x_max = np.max(x)
exp_x = np.exp(x - x_max)
exp_sum = exp_x.sum()
y = exp_x / exp_sum
return y
softmax_function_pro(b)
위의 코드는 오버플로 문제에 해당합니다.
오버플로 문제는 컴퓨터가 매우 큰 값을 다루기가 어려우므로 매우 큰 값이 생기면 문제를 일으키는 문제입니다. softmax 함수는 지수 계산을 사용하므로 엄청나게 큰 수가 가능합니다.
위의 코드라면, 모든 입력치로부터 그러한 입력치의 최대치를 뺀 값을 작게 하는 것으로 지수 계산에서도 굉장히 큰 수가 생겨 버리는 것을 막고 있습니다.
회귀 문제를 풀면
회귀 문제를 해결할 때는 항등 함수라고 하는 함수를 사용합니다.
하지만 이 함수는 입력된 값을 그대로 출력할 뿐이므로 해설할 필요도 없을 것입니다.
일단 코드는 써 둡니다.
def koutou_function(x):
return x
Reference
이 문제에 관하여([0부터 만드는 Deep Learning] 신경망의 출력층에 대해 알기 쉽게 해설해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SyutoHidano/items/690f402593d4e2a5afef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이전 기사에서 신경망의 중간층의 구현까지 해설했으므로, 다음은 출력층을 해설하고 싶습니다.
신경망의 출력층도 간단히 말해 완성하면 활성화 함수가 다른 것만으로, 거의 퍼셉트론의 구조와 변함은 없습니다.
그러나 출력 계층의 활성화 함수는 기계 학습의 어떤 종류의 문제를 해결하는지에 따라 달라집니다.
기계 학습의 분류 문제를 풀고 싶을 때는 출력층에 softmax 함수를 사용하고, 기계 학습의 회귀 문제를 풀고 싶을 때는 출력층에 항등 함수를 사용합니다.
그러면 각각을 해설해 갑니다.
분류 문제를 해결하는 경우
분류 문제를 해결하려면 출력 레이어에 softmax 함수를 사용합니다. 또한 뉴런의 수는 분류하고 싶은 종류의 수와 일치합니다.
softmax 함수는 입력된 값을 확률적 의미 있는 값으로 변환하는 함수입니다. 이것은 단어라고 별로 이해하기 쉽지 않기 때문에, 수식과 그림을 내 보겠습니다.
위와 같이 신경망이 분류가 있을 확률을 각 분류의 종류별로 내줍니다.
구체적인 처리로서는, 네이비아수** 입력값 ➗ 네이비아수** 입력값의 합계를 하고 있습니다만, 처리의 의미는 생각하지 않고, 이런 처리하는 정도로 두십시오.
파이썬으로 구현해 보겠습니다.
b = np.array([0.3,2.9,4.0])
def softmax_function_pro(x):
x_max = np.max(x)
exp_x = np.exp(x - x_max)
exp_sum = exp_x.sum()
y = exp_x / exp_sum
return y
softmax_function_pro(b)
위의 코드는 오버플로 문제에 해당합니다.
오버플로 문제는 컴퓨터가 매우 큰 값을 다루기가 어려우므로 매우 큰 값이 생기면 문제를 일으키는 문제입니다. softmax 함수는 지수 계산을 사용하므로 엄청나게 큰 수가 가능합니다.
위의 코드라면, 모든 입력치로부터 그러한 입력치의 최대치를 뺀 값을 작게 하는 것으로 지수 계산에서도 굉장히 큰 수가 생겨 버리는 것을 막고 있습니다.
회귀 문제를 풀면
회귀 문제를 해결할 때는 항등 함수라고 하는 함수를 사용합니다.
하지만 이 함수는 입력된 값을 그대로 출력할 뿐이므로 해설할 필요도 없을 것입니다.
일단 코드는 써 둡니다.
def koutou_function(x):
return x
Reference
이 문제에 관하여([0부터 만드는 Deep Learning] 신경망의 출력층에 대해 알기 쉽게 해설해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SyutoHidano/items/690f402593d4e2a5afef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
b = np.array([0.3,2.9,4.0])
def softmax_function_pro(x):
x_max = np.max(x)
exp_x = np.exp(x - x_max)
exp_sum = exp_x.sum()
y = exp_x / exp_sum
return y
softmax_function_pro(b)
회귀 문제를 해결할 때는 항등 함수라고 하는 함수를 사용합니다.
하지만 이 함수는 입력된 값을 그대로 출력할 뿐이므로 해설할 필요도 없을 것입니다.
일단 코드는 써 둡니다.
def koutou_function(x):
return x
Reference
이 문제에 관하여([0부터 만드는 Deep Learning] 신경망의 출력층에 대해 알기 쉽게 해설해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SyutoHidano/items/690f402593d4e2a5afef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)