활성화 함수

Vorhandenheit ·2023년 3월 12일
0

MachineLearning

목록 보기
7/7

활성화 함수

딥러닝을 공부하다보면, 가중치와 편향을 구하는게 정말 중요합니다. 가중치, 편향의 연산 결과를 함수에 넣어 선형을 비선형 결과로 변형을 해줘야합니다.

1.비선형

딥러닝에 들어오면서 제일 먼저 마주하게 되는게 이 '비선형' 입니다. 비선형을 도입한 이유는 'XOR' 문제를 해결하기 위해서입니다.

  • xor 문제

이를 해결하기 위해 도입된 게 '다층 퍼셉트론' 입니다.

선을 두개 긋는 다는 말은 두 개의 퍼셉트론을 한번에 계산할 수 있어야합니다. 이를 은닉층을 만들어서 가능하게 했습니다. 이 은닉층에 사용하는 함수가 활성화 함수 입니다. 이 활성화 함수에서는 반드시 '비선형 함수'만을 사용합니다. 왜냐하면 예를 들어, 활성화 함수를 h ( x ) = c x 라고 하면 3층으로 구성된 네트워크라 할 때, y ( x ) = h ( h ( h ( x ) ) ) = c ∗ c ∗ c ∗ x = c 3 ∗ x 이므로 이는 곧 y = a x 에서 a = c 3 인 선형 함수이며 1층으로 구성된 마찬가지이기 때문입니다.

2. 활성화 함수

입력으로 들어오는 값이 어떤 임계치(threshold)를 넘어가게되면 활성화가 되고, 넘어가지않으면 비활성화 되는 걸 말합니다. 이를 사용함으로 선형 분류를 비선형 분류로 만들 수 있습니다.

(1) 종류

A. Binary step function

퍼셉트론에서 최초로 사용한 활성화 함수가 바로 이 계단 함수 입니다.
다중 클래스 분류 문제에 사용할 수 없고, 기울기가 0이라 역전파 과정에서 문제가 됩니다.

B. Linear activation function

C. Non-linear activation

신경망에서는 층을 쌓는다면 이 비선형 함수를 사용해야합니다.

  • Sigmoid

0 -1 사이의 값으로 나타내기 때문에 이진 분류에서 출력 활성화 함수로 많이 사용이 됩니다.
단점이 있다면, 입력이 크거나 너무 작을 경우, 미분값이 작아져서 학습이 잘되지않습니다 이를 기울기소실 이라고합니다. (Vanishing Gradient)
그리고 결과값이 모두 양수 이기 때문에 학습의 방향이 제한됩니다.(not zero-centered)

Not Zero-Centered

함수의 중심값이 0이 아니라는 뜻입니다. 시그모이드는 함수값이 항상 0-1이기 때문에 양수입니다. 양수이게 되면 backpropagation 역전파 과정에서 문제가 생깁니다. backpropagation 과정에서 양수로 모두 변환했기 때문에 계산과정에서 지그재그 형태를 띄게되고 속도가 느려집니다.

  • Tanh (Hyperbolic Tangent function)

시그모이드의 단점을 보완, 함수값의 중심을 0으로 맞추고 결과값이 -1 - 1로 출력됩니다 또 시그모이드 미분함수에 비교하면 최댓값이 4배가 큽니다. 단점은 여전히 기울기 소실문제를 가지고 있습니다.

  • ReLu (Rectified Linear Unit)

relu 함수는 0 이하의 함수는 모두 0으로 리턴되고 0 이상의 값을 그대로 출력합니다.
양수인 경우에는 gradient가 1로 일정하므로, vanishing gradient를 피할수도 있고 미분도 편리해 연산이 훨씬 빠릅니다. 단 음수인 경우에 gradient가 무조건 0이 됩니다

import tensorflow as tf
from tensorflow.keras import activations

x = tf.constant([-9, -6, -3, 0, 3, 6, 9])
activations.relu(x).numpy()
#결과 [0, 0, 0, 3, 6, 9]
  • Leaky ReLu(Leakty Rectified Linear Unit)

Relu의 경우 0 이하의 함수는 모두 0으로 리턴되었습니다.(dying relu라고 합니다) 이를 해결하기 위해 음수를 일부 반영하도록 ReLu를 변형시킨 함수입니다.

  • Softmax
    소프트맥스 함수는 input 값을 모두 정규화하여 출력, 출력값들의 총합은 항상 1이 되는 특성을 가진 함수입니다. 다중 분류 문제에서 사용됩니다. 예를 들어, 사진이 주어지고 '개'와 '고양이'라는 두 클래스 중 하나를 예측하는 모델이 주어졌을 때, 해당 사진이 주어졌을 때 개일 확률 값으로 바꾸어주는 것을 '소프트맥스'라고 합니다.

분류될 클래스가 k개라고 할 떄, k차원의 벡터입력 받아 각각 클래스에 속할 확률을 추정하는 것입니다.

출처

https://classic-griver.tistory.com/163
https://nittaku.tistory.com/267
https://potato-potahto.tistory.com/entry/Deep-Learning%EB%94%A5%EB%9F%AC%EB%8B%9D-3%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98Activation-Function
https://www.philgineer.com/2021/10/31.html

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글