데이터 스터디/DL

03. 신경망 추론 - 활성화 함수, 출력층 함수

케이와이엠 2022. 7. 16. 01:54

신경망 추론

활성화 함수(activation function)

추론은 마지막 출력층 값이 뭔지 알아내는 과정이다.

따라서 입력신호랑 가중치 곱하고 편향 더한 이 총합을 출력신호로 변환하는 함수가 필요하다.

그리고 우리는 이를  활성화 함수라고 부른다.

활성화함수 처리과정을 보시면, 가중치가 있는 입력 신호와 편향의 총합을 계산한 걸 a라고 뒀을때 이걸 활성화함수 h()에 넣어서 y값을 출력하는 일련의 과정을 거치고 있다.

 

활성화 함수의 종류

활성화함수의 종류로는 단층에서는 step function, 계단함수를 쓰고 다층에서는 시그모이드나 렐루같은 비선형 함수를 사용한다.

  •  계단함수 :   0이 계속해서 나오다가 특정 임계값을 넘기면 1로 바뀌는 모습. 위 예시에서는 임계값을 0으로 설정해서 x가 0을 넘으면 1이다고 표현.
  • 시그모이드 함수 :  완만한 곡선형태로  값은 실수형을 가지고 있다.

 

* 시그모이드 함수의 기울기 소실 문제

근데 이제 시그모이드 함수를 사용할 때 문제가 하나 발생하게 되는데,

바로 기울기 소실 문제이다.

인공신경망 처리 과정을 잠시 살펴보면, 먼저 입력에 대해서 순전파(forward propagation) 연산 이 진행된다.

이 순전파 연산을 통해서 나온 예측값과 실제값 사이의 오차를 loss function을 통해서 계산해주고, 이렇게 구한 loss를 미분해서 우리가 알고 싶어하는 기울기(gradient)를 구한다. 그 다음에 입력층에서 출력층으로 갔던 방향에서 back으로 출력층에서 입력층 방향으로 우리의 2 매개변수인 가중치랑 편향을 업데이트하는 back propagation을 진행한다.

 

이 과정을 계속 반복하게 되는데 이 3번에서 시그모이드 함수가 갖는 문제가 발생한다.

그 이유는, 아까 시그모이드 함수 값을 보면, 0 또는 1에 가까워지면 그래프의 기울기가 완만해지는 모습을 확인했다. 그래서 이 부분에서는 미분값이 0에 가까운 아주 작은 값으로 나오게 되고, 역전파 과정에서 0에 가까운 작은 기울기가 계속 곱해져서 신경망 앞부분에서는 가중치가 거의 갱신되지 않는 현상이 발생하게 된다. 다시 말해 학습이 끊기게 되는것이죠.

그래서 이 문제 때문에 시그모이드 함수를 활성화 함수로 사용하는 것은 지양되는 편이다.

그치만 이진분류를 위해서는 주로 쓰이긴 한다.

 

또 다른 함수들도 간단히 보자면 하이퍼볼릭 탄젠트함수도 있다.

여기서도 기울기 소실 문제는 발생하지만, 시그모이드 함수와 달리 미분시 최대값이 1 (시그모이드 함수의 최대값:0.25), 전반적으로 더 큰 값을 가짐으로써 기울기 소실 증상이 덜 한 편이다.

 

렐루함수는 입력값이 음수면 0, 양수이면 그대로를 출력하는 함수이다.

sigmoid 함수와 달리 양수부분에서 특정값이 수렴하지 않으므로 기울기 소실 문제가 일어나지 않아서, 활성화 함수로 굉장히 많이 쓰이는 함수이다. 입력값이 음수면 기울기도 0이 되는데, 이렇게 기울기가 0이 된 뉴런을 다시 회생하는 것은 매우 어렵기 때문에 이를죽은 렐루(dying ReLU)’라고 부르기도 합니다.  

 

 

다음으로 리키렐루는 죽은 렐루를 보완하기 위한 ReLU의 변형 함수로, 입력값이 음수인 경우, 0이 아닌 0.0001과 같은 매우 작은 수로 반환하는 함수입니다.

 

출력층 함수

다음으로 이렇게 은닉층에서 노드 별로 출력값을 구한거에서 더 나아가서 최종 출력층에서 최종값을 출력값으로 변환하는 함수가 필요한데 이를 출력층 함수라고 합니다.  

1) 항등함수 같은 경우에는 별다른 변형해주는 과정없이 입력값을 그대로 출력값으로 내뱉고 있다.

그래서 입력값과 출력값이 항상 같아서 주로 회귀문제에서 사용된다.

2) 소프트맥스 함수는 다중 클래스 분류 문제에서 사용되는 함수로, 입력값에 해당하는 확률을 구해주고 있다.

그래서 여기보시면 0.71이 젤 높은 값이니까 이 2번째 카테고리로 최종 예측을 하고 있는거지요. 하지만 일반적인 소프트맥스 함수는 지수함수 때문에 값이 너무 커져서 오버플로우 문제가 발생할 수 있어서 log변환을 해서 사용한다고 한다.  

 

정리하자면,

은닉층에서 사용되는 활성화 함수계단 함수, 하이퍼볼릭탄젠트 함수, 렐루 함수, 리키 렐루 함수가 있고 '

출력층에서 사용되는 활성화 함수시그모이드 함수, 소프트맥스 함수, 항등 함수가 있다.

마지막 출력함수의 경우, 어떤 문제냐에 따라서 출력층에서 사용되는 활성화 함수가 달라지게 되는데 회귀 일 땐, 입력 신호를 그대로 출력해주는 항등함수를, 이진 분류에선 시그모이드 함수, 다중 분류에선 소프트맥스 함수를 사용한다.

'데이터 스터디 > DL' 카테고리의 다른 글

06. 옵티마이저 (optimizer)  (0) 2022.07.16
05. 경사 하강법  (0) 2022.07.16
04. 신경망 학습 - loss function  (0) 2022.07.16
02. 인공신경망  (0) 2022.07.16
01. 퍼셉트론  (0) 2022.07.16