Sequential 모델, Keras Dense acivation(활성화 함수)

BodeulMaNN·2023년 4월 4일
0

Sequential 모델은 계층을 선형으로 쌓은 것입니다.

다음과 같이 계층 인스턴스 리스트를 생성자에 전달하여 Sequential 모델을 만들 수 있습니다.

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

.add() 메소드를 이용해 계층을 쉽게 추가할 수도 있습니다:

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

<평균제곱계열 - 회귀문제>

mse : 오차의 제곱의 합의 평균
rmse : 오차 제곱의 합의 제곱근의 편균
mae : 오차의 절댓값의 합의 평균
r-squared(설명계수) : 설명할 수 있는 변동/총 변동
mean_absolute_percentagerror : ((y_test - y_pred) / y_test)의 절댓값의 평균
mean_squared_logarithmicerror : mse 식에 로그적용
<엔트로피계열 - 클래스문제>

binarycrossentropy : 이진분류
categoricalcrossentropy : 다중분류 (one-hot encoding 클래스)
sparse_categorical_crossentropy : 다중분류 (integer type 클래스)

과적합 예방 등 모델 성능 올리는 기술
https://velog.io/@qksekf/%EB%94%A5%EB%9F%AC%EB%8B%9D-Tensorflow.keras

Linear regression, Logistic regression의 케라스의 Dence 활성화 함수

머신러닝에서는 어떻게 학습을 하고 이를 반영할 지에 대한 설계를 위해 레이어 층을 쌓는다.
그 중 하나의 기본 레이어가 Dense layer이다.
연속적으로 상관관계가 있는 데이터가 아니라면 보통 머신러닝에서 가장 기본적인 층인 Dense 레이어로 학습시킨다.

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
)

relu: 은닉 층으로 학습

hidden layer를 활성화 시키는데 사용하는데, 대부분의 경우 ReLU의 성능이 가장 좋기 때문에 ReLU를 사용한다. CNN을 학습시킬 때 많이 사용됩니다.
0보다 작은 값이 나온 경우 0을 반환하고, 0보다 큰 값일 경우 그 값을 그대로 반환한다.
즉, 기울기가 0이 되는것을 막아준다.
보통 hidden layer에는 ReLU를 적용하고, 마지막 output layer에서 sigmoid 또는 softmax를 적용하면 정확도가 높다.

sigmoid: 이진 분류 문제

sigmoid 함수는 binary classification(이진 분류), logistic regression에 적절한 함수다.
일정 값을 기준으로 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으로 받을 수 있다. 따라서 이때는 시그모이드를 사용한다.

Hard Sigmoid

특징: 시그모이드 함수를 직선 형태로 핀 형태를 갖습니다. 미분 함수가 단순하기 때문에 그라디언트 계산 속도가 빠른 장점이 있습니다.
사용처: 시그모이드를 적용해야 하지만 빠른 연산 속도가 필요할 때 사용합니다.

softmax: 클래스 분류 문제

softmax 함수는 'n'개의 다른 이벤트에 대해 이벤트의 확률 분포를 계산한다.
일반적으로,이 함수는 가능한 모든 대상 클래스에 대해 각 대상 클래스의 확률을 계산한다.
softmax를 사용하는 주된 이점은 출력 확률 범위다. 범위는 0에서 1이며, 모든 확률의 합은 1과 같다.
큰 출력 값은 그 class에 해당할 가능성이 높다는것을 뜻하며 실제 확률을 나타낸다.

  • 사용하는 경우
    multi-classification에서 사용

전체적인 내용
https://yeomko.tistory.com/39

profile
반갑습니다

0개의 댓글