https://colab.research.google.com/drive/1dSUZ-LyY19zg6FHQmDO9g_t5Tn3mxVd9?usp=sharing
07-1 확인 문제를 풀고, 풀이 과정을 정리해 보세요.
어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때, 필요한 모델 파라미터의 개수는 몇 개 인가요?
① 1,000 개 ② 1,001 개 ③ 1,010 개 ④ 1,100 개
⇒ 입력 특성이 100개이면서 밀집층에 있는 뉴런 개수가 10개인 경우, 밀집층의 다른 말인 “완전 연결층”을 떠올려 본다면 입력과 모든 뉴런이 모두 연결되어 있기에 그 만큼 곱을 이뤄야 하며, 뉴런 개수만큼 절편(편향)을 통해 조절이 가능하므로, 100 × 10 + 10 = 1,010 이 된다. (ChatGPT에게 질문한 내용 공유)
케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면, activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?
① ‘binary’ ② ‘sigmoid’ ③ ‘softmax’ ④ ‘relu’
⇒ 이진 분류의 경우 로지스틱 회귀는 임계치 0.5를 기준으로 0과 1을 판단하는 시그모이드 함수를 기반으로 구현되었고, 활성화 함수 역시 시그모이드 함수를 통해 이진 클래스를 분류하는 출력층을 만들 수 있다.
(ChatGPT 도움 받아 내용을 정리해보면) 신경망에서 **활성화 함수**는 입력 값을 변환하여 출력하는 역할을 합니다.
단순한 선형 변환만으로는 복잡한 패턴을 학습할 수 없기 때문에, **활성화 함수를 사용하여 비선형성을 추가**해야 합니다.
특히, **이진 분류 모델**에서는 **출력값을 0과 1 사이의 확률로 변환**해야 하므로, **시그모이드(sigmoid) 함수**를 사용합니다.
시그모이드 함수는 입력 값을 0과 1 사이의 값으로 압축하며, 일반적으로 **0.5를 기준으로 클래스가 결정**됩니다.
따라서, `Dense` 층을 사용할 때 **이진 분류 모델의 출력층**에서는 `activation="sigmoid"`를 지정해야 합니다.
케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
① configure() ② fit() ③ set() ④ compile()
⇒ 모델을 훈련할 수 있도록 설정하기 위한 메서드로 compile() 를 사용함. ①과 ③ 메서드는 존재하지 않으며, 이 외 훈련을 위한 메서드는 다음과 같음.

정수 레이블을 타깃으로 가지는 다중 분류 문제일 때, 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?
① ‘sparse_categorical_crossentropy’ ② ‘categorical_crossentropy’ ③ ‘binary_crossentropy’ ④ ‘mean_square_error’
⇒ 교차 엔트로피란 (분류한) 정답을 더 확신하도록 모델을 학습시키는 손실 함수로, 이진 분류일 때는 ③과 같은 손실 함수를, 다중 분류일 때는 ②, ①과 같은 손실 함수를 사용함. 단, 타깃값이 [[1, 0, 0, 0], [0, 0, 1, 0]]과 같은 원-핫 인코딩으로 된 형태라면 ②와 같은 손실 함수를, 타깃값이 [5, 2]와 같이 정수 레이블의 형태를 가진 형태라면 이를 처리할 수 있는 ①과 같은 손실 함수를 사용해야 함. 평균제곱오차는 회귀(예측)의 경우 사용하며, 실젯값과 예측값 간의 오차를 제곱한 값들의 평균을 계산한 값으로, 모델이 학습하는 과정에서 오차를 최소화하도록 도와주는 성격의 손실 함수와 더불어 모델이 얼마나 좋은 성능을 내는지 평가하는 기준으로의 성능 평가 지표(낮을수록 좋음)로도 활용함.
07-2 확인 문제를 풀고, 풀이 과정을 정리해 보세요.
다음 중 모델의 add() 메서드 사용법이 올바른 것은 어떤 것인가요?
① model.add(keras.layers.Dense) ② model.add(keras.layers.Dense(10, activation=’relu’)) ③ model.add(keras.layers.Dense, 10, activation=’relu’) ④ model.add(keras.layers.Dense)(10, activation=’relu’)
⇒ model의 add() 메서드 내 전달할 매개변수로 레이어 객체(ex. 밀집층)가 들어가야 함. 아래의 공식 문서에 제시된 형태와 같이 Dense Layer(밀집층) 객체를 정의해야 함. https://keras.io/api/layers/
크기가 300 × 300인 입력을 케라스 층으로 펼치려고 합니다. 다음 중 어떤 층을 사용해야 하나요?
① Plate ② Flatten ③ Normalize ④ Dense
⇒ 2차원 배열의 형태를 가진 입력을 케라스 층으로 펼치려면 Flatten 층을 사용해야 함.
다음 중에서 이미지 분류를 위한 심층 신경망에 널리 사용되는 케라스의 활성화 함수는 무엇인가요?
① linear ② sigmoid ③ relu ④ tanh
⇒ 상기 Colab 07-2 핵심 포인트 정리 내용 참고
다음 중 적응적 학습률을 사용하지 않는 옵티마이저는 무엇인가요?
① SGD ② Adagrad ③ RMSprop ④ Adam

수험서 그림을 제가 다시 그린 그림입니다.
그림을 기반으로 ChatGPT가 설명해준 내용을 PDF 파일로 정리했습니다.
홍 선배처럼 머신러닝에 대해서는 조금 접해봤는데, 혼공머신이 스터디한 딥러닝에 대해서는 이번에 처음 알게 되었다. (여기서 말하는 혼공머신과 홍 선배는 책에서 등장하는 주요 인물입니다)
물론 빅분기를 공부하면서 관련 이론에 대해 약간 접해봤던 기억이 있다. “드롭아웃”, “은닉층”, “렐루(ReLU)” 등등… 특히 렐루 라는 활성화 함수의 문제를 보완하는 Leaky ReLU가 있었는데, 이 활성화 함수를 묻는 단답형 문제가 실기 시험에 나왔었는데 잘 몰라서 아무렇게 적고 나온 기억이 있다. (2022년 5회 실기 시험까지 단답형 10문제가 있었습니다.)
딥러닝에서 다루는 케라스가 2023년 11월 28일에 케라스 3.0.0이 출시되었고, Colab 에서 업데이트된 버전이 적용됨에 따라 책 내용이 많이 변경되었다(저자님 글 참고).
약간 걱정 아닌 걱정이 되는 점은 어느 정도 익숙한 사람이라면 변경된 내용에 대해 크게 거부감이 들지 않을텐데,
그렇지 않은 사람이라면 헷갈리지 않을까란 생각이 든다.
(혼공머신 개정판이 나오지 않을까란 느낌적인 느낌이…)
아무쪼록 이렇게 딥러닝의 시작을 연 만큼 나머지 8장과 9장에 대해서도 지금처럼 한 주씩 공부하면서 책 진도를 마무리해야 겠다는 생각이 들었다.