AI/Machine Leaning

[Machine Leaning] Keras Dence & 활성화(activation) 함수 종류

Sungwoo Koo 2022. 5. 16. 11:01

머신러닝 Linear regression, Logistic regression 공부 중 Keras의 Dence와 그것에 들어가는 인자값과

어떤 상황에 어떤 Dense Activation Function을 사용해야 하는지 공부한 내용을 정리한다.

 

머신러닝에서는 어떻게 학습을 하고 이를 반영할 지에 대한 설계를 위해 레이어 층을 쌓는다.

그 중 하나의 기본 레이어가 Dense layer이다.

 

연속적으로 상관관계가 있는 데이터가 아니라면 보통 머신러닝에서 가장 기본적인 층인 Dense 레이어로 학습시킨다.

(서로 연속적으로 상관관계가 있는 데이터는 대표적으로 영상이 있다)

 


 

tf.keras.layers.Dense spec (출처)

 

tf.keras.layers.Dense(
    units,
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

 

units Positive integer, dimensionality of the output space.
activation Activation function to use. If you don't specify anything, no activation is applied (ie. "linear" activation: a(x) = x).
use_bias Boolean, whether the layer uses a bias vector.
kernel_initializer Initializer for the kernel weights matrix.
bias_initializer Initializer for the bias vector.
kernel_regularizer Regularizer function applied to the kernel weights matrix.
bias_regularizer Regularizer function applied to the bias vector.
activity_regularizer Regularizer function applied to the output of the layer (its "activation").
kernel_constraint Constraint function applied to the kernel weights matrix.
bias_constraint Constraint function applied to the bias vector.

 

 


model = Sequential()
model.add(Dense(64, input_dim=28, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(10, activation='sigmoid'))
# model.add(Dense(10, activation='softmax'))

위와 같이 덴스 레이어는 model.add를 사용해 레이어 층을 추가해 모델을 설계할 수 있다.

model.add(Dense(64, input_dim=28, activation='relu'))
# 64 : 출력 뉴런의 수, input_dim=28 : 입력 뉴런의 수, activation : 활성화 함수

 

relu
은닉 층으로 학습
sigmoid
이진 분류 문제
softmax
클래스 분류 문제

 


 

ReLU

 

hidden layer를 활성화 시키는데 사용하는데, 대부분의 경우 ReLU의 성능이 가장 좋기 때문에 ReLU를 사용한다.

0보다 작은 값이 나온 경우 0을 반환하고, 0보다 큰 값일 경우 그 값을 그대로 반환한다.

즉, 기울기가 0이 되는것을 막아준다.

보통 hidden layer에는 ReLU를 적용하고, 마지막 output layer에서 sigmoid 또는 softmax를 적용하면 정확도가 높다.

 


sigmoid

 

sigmoid 함수는 binary classification(이진 분류)에 적절한 함수다.

일정 값을 기준으로 0인지 1인지 구분하는 방식으로 분류한다.

 

- 역전파 (Backpropagation)

 모든 레이어가 sigmoid 일 경우 레이어가 많이 쌓여있을 경우 학습이 제대로 이루어지지 않는다.

이는 역전파 방식이 원인인데, 레이어가 많을 경우 각각의 단계의 값을 미분해서 최초 레이어까지 결과 값을 전달할 때 내부의 hidden layer들이 모두 sigmoid 함수로 이루어져있으면 각 단계에서 계산한 값은 모두 0과 1사이의 값이 된다.

- 기울기 소실 (Vanishing Gradient)

 여러 레이어를 갖고 있을 때, 최초 입력 값은 각각의 레이어에서 나온 값들을 곱해준 만큼 결과에 영향을 주므로, 최종 미분 값은 결국 0에 가까운 값이 된다. 즉, 최초 입력값이 최종 결과 값에 영향을 끼치지 않는 방향으로 수렴하게 된다.

 

이러한 문제점을 해결하기 위해 결과가 1보다 작아지지 않게 하도록 ReLU 함수를 적용해 모델을 설계한다.

 

- 사용하는 경우

 binary classification의 경우 출력층 노드가 1개이므로 이 노드에서 0~1사이의 값을 가져야 마지막에 cast를 통해(ex. 0.5이상이면 1, 미만이면 0) 1혹은 0값을 output으로 받을 수 있다. 따라서 이때는 시그모이드를 사용한다.

 


softmax

softmax 함수는 'n'개의 다른 이벤트에 대해 이벤트의 확률 분포를 계산한다.

일반적으로,이 함수는 가능한 모든 대상 클래스에 대해 각 대상 클래스의 확률을 계산한다.
softmax를 사용하는 주된 이점은 출력 확률 범위다. 범위는 0에서 1이며, 모든 확률의 합은 1과 같다.

큰 출력 값은 그 class에 해당할 가능성이 높다는것을 뜻하며 실제 확률을 나타낸다.

 

 

- 사용하는 경우

 multi-classification에서 사용