본문 바로가기
책 이야기/스터디 기록

[혼공머신] 딥러닝을 시작합니다

by meticulousdev 2022. 8. 16.
반응형

들어가며

    이 글은 한빛미디어에서 진행하는 혼공학습단 8기에 참여하면서 공부한 것들에 대한 글입니다. 책은 제 돈으로 구매하였으며, 글의 주된 내용은 책을 기반으로 하여 작성되었습니다.

 

구성

1. 내용 정리

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

3. 선택 미션 - Ch.07(07-2) 확인 문제 풀고, 풀이 과정 정리하기

 

1. 내용 정리

1) Keras 모델 개발에서 model.summary() 상에서 층은 None을 포함하여 출력됩니다. 이는 샘플의 개수가 아직 정해져 있지 않기 때문입니다. 

 

* 각 옵티마이저의 이름을 클릭하면 TensorFlow 홈페이지의 함수 설명으로 이동합니다. 

2) Adagrad:

- Adaptive Gradient를 줄여서 표현한 것 입니다.

 

3) SGD:

- Stochastic Gradient Descent를 줄여서 표현한 것입니다.

Gradient decent (with momentum) optimizer.

출처: tf.keras.optimizers.SGD  |  TensorFlow Core v2.9.1 

- 기본적으로 다음의 방식으로 동작합니다. (출처: tf.keras.optimizers.SGD  |  TensorFlow Core v2.9.1 )

w = w - learning_rate * g

velocity = momentum * velocity - learning_rate * g
w = w + velocity

- Nesterov momentum의 경우 아래와 같은 방법으로 활성화시켜줄 수 있습니다. Nesterov momentum은 모멘텀 최적화를 2번 반복하여 진행합니다. (출처: tf.keras.optimizers.SGD  |  TensorFlow Core v2.9.1 )

keras.optimizers.SGD(momentum=0.9. nesterov=True)

 

velocity = momentum * velocity - learning_rate * g
w = w + momentum * velocity - learning_rate * g

 

4) RMSprop:

- Root Mean Square Propagation를 줄여서 표현한 것입니다.

- 다음의 방식으로 gradient decent를 진행합니다. (1) 기울기 제곱의 이동 평균을 유지합니다; (2) (1)의 계산 값의 제곱을으로 기울기를 나눕니다.

- RMSprop는 momentum을 사용합니다.

The gist of RMSprop is to:
- Maintain a moving (discounted) average of the square of gradients
- Divide the gradient by the root of this average
This implementation of RMSprop uses plain momentum, not Nesterov momentum.

출처: tf.keras.optimizers.RMSprop  |  TensorFlow Core v2.9.1

 

5) Adam:

- Adaptive Moment Estimation을 줄여서 표현한 것입니다.

- Adam에 대한 설명은 다음과 같습니다.

Adam optimization is a stochastic gradient descent method that is based on adaptive estimation of first-order and second-order moments.

출처: tf.keras.optimizers.Adam  |  TensorFlow Core v2.9.1

- 1차 및 2차 모멘트는 코드 상에서 beta_1과 beta_2를 의미합니다.

 

6) 인공 신경망 모델의 최적화 대상: 정확도가 아닌 손실 함수입니다.

 

7) 콜백(callback)을 사용하면 딥러닝 모델의 훈련 과정 중 특정 작업을 요청할 수 있습니다. (EarlyStopping 등의 작업을 수행하도록 요청할 수 있습니다.)

 

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

    다음은 확인 문제의 풀이입니다. (출처: 혼자 공부하는 머신러닝+딥러닝; 한빛미디어; 2020; 박해선 저)

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

1) 1,000개 - 100개의 입력 특성과 10개의 뉴런이 모두 연결될 경우 100 x 10 = 1,000이 됩니다.

2) 1,001개

3) 1,010개

4) 1,100개

 

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

1) 'binary'

2) 'sigmoid' - 이진 분류 문제에서는 activation='sigmoid'를 사용합니다.

3) 'softmax'

4) 'relu'

 

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

1) configure()

2) fit()

3) set()

4) compile() - 케라스 모델에서는 model.compile의 형태로 모델의 손실 함수와 측정 지표를 지정합니다.

 

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

1) 'sparse_categorical_crossentropy'
2) 'categorical_crossentropy' - 다중 분류 문제에서 loss 함수는 'categorical_crossentropy'으로 설정합니다.
3) 'binary_crossentropy'
4) 'mean_square_error'

 

3. 선택 미션 - Ch.07(07-2) 확인 문제 풀고, 풀이 과정 정리하기

    다음은 확인 문제의 풀이입니다. (출처: 혼자 공부하는 머신러닝+딥러닝; 한빛미디어; 2020; 박해선 저)

1. 다음 중 모델의 add() 메서드 사용법이 올바른 것은 어떤 것인가요?

1) model.add(keras.layers.Dense)

2) model.add(keras.layers.Dense(10, activation='relu')) - model.add를 사용할 때는 이와 같이 사용합니다.

3) model.add(keras.layers.Dense, 10, activation='relu')

4) model.add(keras.layers.Dense)(10, activation='relu')

 

2. 크기가 300 x 300 인 입력을 케라스 층으로 펼치려고 합니다. 다음 중 어떤 층을 사용해야 하나요?

1) Plate

2) Flatten - 배치 차원을 제외하고 나머지 입력 차원을 모두 일렬로 펼치는 역할을 합니다.

3) Normalize

4) Dense

 

3. 다음 중에서 이미지 분류를 위한 심층 신경망에 널리 사용되는 케라스의 활성화 함수는 무엇인가요?

1) linear

2) sigmoid

3) relu - 시그모이드의 한계점을 개선하고, 심층 신경망에서 뛰어난 성능을 내는 활성화 함수입니다.

4) tanh

 

4. 다음 중 적응적 학습률을 사용하지 않는 옵티마이저는 무엇인가요?

1) SGD - 기본적으로 적응적 학습률을 사용하는 옵티마이저는 Adagrad와 RMSprop이며, 모멘텀 최적화와 RMSprop를 접목한 것이 Adam입니다.

2) Adagrad

3) RMSprop

4) Adam

 

긴 글 읽어주셔서 감사합니다. 
글과 관련된 의견은 언제든지 환영입니다.
반응형

댓글