AI 관련 자격증

AICE Associate 자격증 - 요약본 (4) 딥러닝

수진97 2025. 10. 20. 13:31

안녕하세요!

이번 포스팅은 AICE Associate 자격증 요약본 4편입니다.

드디어 마지막 요약 포스팅인데요!

딥러닝에 대해 AICE 자격증 시험에 나오는 핵심 내용만 요약해서 포스팅해 보겠습니다.

 

 

딥러닝은 머신러닝과 다르게 모델이 중요한 특징을 스스로 학습해서 추출합니다.

머신러닝은 사람이 중요한 특징을 직접 설계에서 모델에 넣어주어야 한다는 점에서 이 둘의 차이가 있습니다.

또한 머신러닝은 스케일링이 옵션이지만, 딥러닝은 스케일링이 필수라는 점이 차이점입니다.

 

 

 

1. 라이브러리 임포트 (tensorflow.keras)

1) from tensorflow.keras.models import Sequential  [전체 모델구조 정의 모듈]

2) from tensorflow.keras.layers import Input, Dense [신경망을 구성하는 층 제공]

3) form tensorflow.keras.backend import clear_session [내부 연산 엔진 & 세션 관리 함수 제공]

4) from tensorflow.keras.optimizers import Adam [학습 시 가중치 업데이트 최적화 알고리즘]

 

 

 

 

 

2. 딥러닝 VS 머신러닝 코드 구조

출처: https://velog.io/@atdawn/6week-%EB%94%A5%EB%9F%AC%EB%8B%9D-

 

 

 

3. 코드 상세

1) 스케일링

scaler = MinMaxScaler()

x_train = scaler.fit_transform(x_train)

x_val = scaler.transform(x_val)

 

-> 학습용 데이터 스케일링에 사용된 규칙을 검증용 데이터에도 그대로 사용해야 함!

 

 

 

 

2) 모델 구조 설계

nfeatures = x.shape[1]   # feature 수

 

model = Sequential ( [

           Input(shape=(nfeatures, )),       #입력층

           Dense(16, activation='relu'),     #은닉층(Hidden Layer) 

           Dropout(0.2),

           Dense(4, activation='relu'),

           Dense(1, activation='linear')    # 회귀모델의 경우, 노드 수 1 / 활성함수 linear의 경우 생략 가능

] )

 

** Output Layer 활성 함수 

회귀 : X (inear) 

이진분류 : sigmoid (분류 모델로 만들 때 (0,1) 사이 확률 값으로 바꿔줌) ->  Dense(1, activation='sigmoid')

다중분류 : softmax (각 범주에 대한 결과를 범주별 확률값으로 변환 : 각 범주별 확률값 모두 더하면 1)  

-> Dense(Class 수 = 범줏값 개수 = y개수, activation='softmax')

 

 

 

 

 

3) 컴파일

- 모델이 학습을 시작할 수 있도록 손실 함수, 최적화 방법, 평가지표 등 설정

- 성능지표의 경우 metrics= ['mae'] (대괄호 필수 / 학습에는 영향 X)

- optimizer의 경우, 오차를 줄이기 위해 모델 가중치 업데이트 역할 

(learning_rate : 가중치를 얼마나 업데이트할지 결정, 학습속도 조절하는 보폭을 의미)

 

- 회귀모델 : MSE(Mean Squared Error)

- 분류모델 : Crosss Entropy 

[이진분류 : binary_crossentropy]

[다중분류 : categorical_crossentropy , sparse_categorical_crossentropy]

 

model.compile(optimizer=Adam(learning_rate=0.001), loss='mse', metrics=['mae'])

 

 

 

 

 

4) 모델 학습

* 검증을 위해 학습용 데이터 셋에서 일부 데이터 분리(학습용 데이터셋 : train_loss / 나머지 분리된 데이터셋 : validation loss

- validation_data = (x_valid, y_valid)

- validation_split = 0.2

 

* batch_size는 한 번의 가중치 업데이트에 사용하는 데이터 샘플의 수

 

hist = model.fit(x_train, y_train, epochs=50, validation_split=0.2, batch_size=32).history

 

 

 

 

5) 모델 성능 최적화

- Early Stopping : val loss가 더 이상 줄지 않으면 멈춰주기

 

* monitor='val_loss' : 학습과정에서 모니터링할 값을 지정,  var_loss가 감소되고 있는지를 기준으로 Early Stopping 여부 판단.

* min_delta = 0.01 : 변화량 최소 기준으로, val_loss가 직전보다 0.01 이상 좋아지지 않으면, 개선이 없다고 판단.

* patience = 10 : 얼마나 참을지 설정. val_loss 가 min_delta 기준으로 개선되지 않더라도 최소 10번 epoch 동안은 기다림.

10번 연속으로 개선이 없을 때 학습 조기 종료

 

es = Early Stopping(monitor='val_loss', min_delta = 0.01, patience = 9)

 

 

* callbacks=[es] : 앞서  Early Stopping 결괏값을 es 변수에 할당한 후, 학습 시 callbacks 옵션에 es 변수를 줌. 여기서도 주의할 점은 [] 대괄호 필수!

 

history = model.fit(x_train, y_train, epochs=20, validation_split=0.2,  callbacks=[es] , verbose=0).history

 

 

 

- Dropout(0.2)

과적합을 줄이기 위한 정규화 기법

학습 중 일부 뉴런을 무작위로 비활성화 -> 모델의 일반화 성능 향상