본문 바로가기
Artificial Intelligence/Deep Learning

[딥러닝] Activation Function 활성함수 한번에 이해하기(Sigmoid, Softmax, Relu)

by EunjiBest 2022. 2. 18.

[딥러닝] Activation Function 활성화함수

 

 

딥러닝의 장점은 선형함수를 깊게 쌓을 수 잇는 것이 장점이다.

 

하지만 선형함수를 깊게 쌓아봤자 선형함수가 되어 

복잡한 모델링을 하기가 어렵다.

이 문제를 해결하기 위해서

 

모델 레이어를 쌓을 때

선형 함수 사이사이에 선형함수가 아닌 것을

번갈아 넣어줌으로써

복잡한 문제를 풀 수 있다.

이 비선형 함수를 활성 함수(activation funtion)라고 하고,

 

relu, sigmoid, softmax 등이 있다.

 

위 설명대로 activation을 넣어서 모델링을 해보면

model = Sequential([
	tf.keras.layers.Flatten(input_shape = (28,28)),
    tf.kearas.layers.Dense(512)
    tf.kearas.layers.ReLU(),
    tf.kearas.layers.Dense(256)
    tf.kearas.layers.ReLU(),
    tf.kearas.layers.Dense(64)
    tf.kearas.layers.ReLU(),
    tf.kearas.layers.Dense(32)
    tf.kearas.layers.ReLU(),
    tf.kearas.layers.Dense(10)
    tf.kearas.layers.Softmax(),
  ])

이렇게 길게 쌓아야한다.

하지만 레이어가 너무 길어지고 보기에도 힘들기 때문에 

 

model = Sequential([
	tf.keras.layers.Flatten(input_shape = (28,28)),
    tf.kearas.layers.Dense(512, activation = 'relu'),
    tf.kearas.layers.Dense(512, activation = 'relu'),
    tf.kearas.layers.Dense(512, activation = 'relu'),
    tf.kearas.layers.Dense(512, activation = 'relu'),
    tf.kearas.layers.Dense(512, activation = 'relu'),
    tf.kearas.layers.Dense(10, activation = 'softmax'),

  ])

이렇게 2줄을 1줄로 합쳐서 적어줄 수 있다.

 

보통

중간층에서는 activation funtion을 relu를 쓰고

마지막 층에는 softmax를 쓰면 좋은 성능을 낼 수 있다고한다.

 

 

 

마지막 출력층의 activation funtion에 따라서

모델 컴파일 할 때 loss의 값이 다르다.

 

1. 이진분류

 

이진분류에서는

sigmoid 함수를 사용한다.

 

이때 

loss값은 binary_crossentropy를 사용.

 

2. 다중분류

 

다중분류에서는 softmax 함수를 사용하고

 

loss값은

onehot_encording이 되어있다면

categorical_crossentropy

 

onehot_encording이 되어있지 않다면

sparse_categorical_crossentropy

 

모델링을 하고 모델 컴파일을 할 때에 

매우매우 중요한 부분이다.

 

 

 

Sigmoid함수

 

y = 1,  y = 0

x =  무한대부터 무한대

 

x에 어떤 값이 들어가든, y는 무조건 0~1사이이다.

 

예를들어

뉴런이 하나가 sigmoid를 거치면 0~1 사이가 나온다.

뉴런의 확률이 0.3이 나왔다라고 치면

y의 중간값 0.5보다 작으니 classA이다.

 

뉴런의 확률이 0.7이 나왔다라고 치면

0.5보다 크니 classB이다

 

이런식으로 결정을 하는 것.

 

 

 

 

Softmax

softmax에 input 뉴런을 넣으면

그 값들이 모두 0,1 사이로 정규화가 된다.

따라서 

모든 뉴런의 확률값의 합은 1.0이 나와야하고

 

가장 높은 확률을 가진 뉴런이 class가 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글