공부

[혼공학습단11기] 혼공머신 6주차

Steboong 2024. 2. 11. 23:22

[기본 미션]

Ch.07(07-1) 확인 문제 풀고, 풀이 과정 정리하기

 

1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇개 인가요?

답. 3번 1,010개

인공 신경망에서 밀집층(Dense layer)의 파라미터 개수를 계산할 때, 각 입력 특성은 층에 있는 모든 뉴런에 가중치로 연결됩니다. 따라서, 입력 특성의 개수와 뉴런의 개수를 곱한 값에 뉴런마다의 편향(bias)을 더한 값이 총 파라미터 개수가 됩니다.

여기서 입력 특성의 개수가 100개이고, 밀집층의 뉴런 개수가 10개라고 했을 때, 각 뉴런에 대한 가중치의 개수는 입력 특성 수에 해당하는 100개가 됩니다. 그리고 각 뉴런은 개별적인 편향 값을 가집니다. 따라서, 10개의 뉴런 각각에 대해 100개의 가중치와 1개의 편향이 필요합니다. 그러므로 총 파라미터 개수는 다음과 같이 계산할 수 있습니다:

총 파라미터 개수 = (입력 특성의 개수 * 뉴런의 개수) + 뉴런의 개수

이제 실제 값을 대입하여 계산하면 1,010개입니다.

 

 

2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?

답. 2번 'sigmoid'

이진 분류 모델에서 케라스의 `Dense` 클래스를 사용하여 출력층을 만들 때, 활성화 함수로 주로 `'sigmoid'`를 지정합니다. 시그모이드 활성화 함수는 출력 값을 0과 1 사이로 압축하여, 결과를 확률로 해석할 수 있게 해줍니다. 이는 이진 분류 문제에서 각 클래스에 속할 확률을 나타내는 데 매우 적합합니다.

예를 들어, 신경망의 출력층을 만들 때는 다음과 같이 작성할 수 있습니다:

from tensorflow.keras.layers import Dense

# 출력층 추가
model.add(Dense(1, activation='sigmoid'))

여기서 Dense(1, ...)는 출력층의 뉴런 수가 1개임을 의미하며, 이는 이진 분류 문제에 일반적으로 사용됩니다. 'sigmoid' 활성화 함수를 사용하면, 모델의 출력은 0과 1 사이의 확률로 해석될 수 있으며, 이를 통해 해당 샘플이 양성 클래스에 속할 확률을 나타내게 됩니다.

softmaxrelu 활성화 함수는 이진 분류 문제의 출력층에서 사용하기에는 목적과 특성이 sigmoid 함수와는 다릅니다.

Softmax 활성화 함수

  • softmax 함수는 출력층의 뉴런이 여러 개인, 즉 다중 클래스 분류 문제에 적합합니다. 이 함수는 출력층의 각 뉴런의 출력값을 확률로 변환하여, 모든 클래스에 대한 확률의 합이 1이 되도록 만듭니다. 따라서, 이진 분류 문제에 softmax 함수를 사용할 수는 있지만, 출력층의 뉴런이 2개가 필요하며, 각각의 뉴런이 하나의 클래스를 대표하게 됩니다. 이는 sigmoid 함수를 사용할 때보다 비효율적일 수 있습니다.

ReLU (Rectified Linear Unit) 활성화 함수

  • relu 함수는 주로 은닉층에서 사용되는 활성화 함수입니다. 이 함수는 음수 입력에 대해서는 0을 출력하고, 양수 입력에 대해서는 입력값을 그대로 출력합니다. 이 특성 때문에 relu는 비선형성을 도입하고, 그라디언트 소실 문제를 완화하는 데 효과적입니다. 그러나 relu는 출력층에서 사용하기에는 적합하지 않습니다. 이유는 relu가 [0, ∞) 범위의 값을 출력하기 때문에, 이진 분류 문제에서 확률을 표현하기 어렵기 때문입니다.

sigmoid 함수는 이진 분류 문제에서 출력층에 적합한 활성화 함수입니다. 이는 출력을 [0, 1] 범위로 제한하여 확률로 해석할 수 있게 하며, 모델이 각 클래스에 속할 확률을 출력하도록 합니다.
softmax는 다중 클래스 분류 문제에 적합하며, relu는 주로 은닉층의 비선형성을 추가하는 데 사용됩니다. 따라서, 이진 분류 문제의 출력층에서는 sigmoid 함수의 사용이 가장 적절합니다.
binary 함수는 없습니다.

 

 

3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?

답. 4번 compile()

케라스(Keras) 모델에서 손실 함수(loss function), 옵티마이저(optimizer), 그리고 측정 지표(metrics) 등을 지정하는 메서드는 compile() 메서드입니다. compile() 메서드는 모델을 학습하기 전에 호출되며, 모델이 사용할 손실 함수, 옵티마이저, 그리고 선택적으로 하나 이상의 측정 지표를 지정하는 데 사용됩니다.

사용 예시

model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
  • optimizer: 모델의 각 반복에서 가중치를 업데이트하는 방법을 결정합니다. 예를 들어, 'adam', 'sgd' 등을 지정할 수 있습니다.
  • loss: 모델의 성능을 측정하는 데 사용되는 손실 함수를 지정합니다. 이진 분류 문제의 경우 'binary_crossentropy', 다중 클래스 분류 문제의 경우 'categorical_crossentropy' 등을 사용할 수 있습니다.
  • metrics: 훈련 및 테스트 과정을 모니터링하기 위해 사용되는 측정 지표의 리스트입니다. 예를 들어, 분류 문제에서는 정확도('accuracy')를 자주 사용합니다.

compile() 메서드를 호출한 후, 모델을 데이터에 대해 학습시키기 위해 fit() 메서드를 사용할 수 있습니다. compile()을 통해 설정한 손실 함수와 옵티마이저는 fit() 과정에서 모델의 가중치를 업데이트하는 데 사용됩니다.

 

 

4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적정한 것은 무엇인가요

답. 1번 'sparse_categorical_crossentropy'

정수 레이블을 타깃으로 하는 다중 분류 문제에서 케라스(Keras) 모델의 compile() 메서드에 지정할 적정한 손실 함수는 'sparse_categorical_crossentropy'입니다. 이 손실 함수는 각 클래스가 정수 형태로 인코딩되어 있는 경우에 적합하며, 각 샘플에 대해 정확히 하나의 클래스 레이블이 할당될 때 사용됩니다.

다중 분류에서는 종종 원-핫 인코딩을 사용하여 클래스 레이블을 표현하는데, 이 경우 'categorical_crossentropy' 손실 함수를 사용합니다. 그러나 원-핫 인코딩을 하지 않고, 대신 각 샘플의 클래스 레이블을 직접 정수로 표현하는 경우 'sparse_categorical_crossentropy'를 사용하면 더 효율적입니다. 이 방법은 메모리 사용량을 줄이고, 손실 함수 계산 과정을 간소화할 수 있습니다.

사용 예시

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

이 예시에서는 옵티마이저로 'adam'을 사용하고, 손실 함수로는 'sparse_categorical_crossentropy'를 지정했으며, 측정 지표로 정확도('accuracy')를 사용하고 있습니다. 이 설정은 정수 레이블을 사용하는 다중 분류 문제에 적합합니다.

반응형