학습 목표
- 딥러닝 기본 개념
- 딥러닝 기술 원리
- 딥러닝 주요 알고리즘 1
- 딥러닝 주요 알고리즘 2
학습 내용
- DNN, CNN, RNN 모델을 구성하고, 모델 성능을 평가할 수 있다.
사람 두뇌에 있는 뉴런을 모델링한 것
→ 간단한 함수를 학습할 수 있음
뉴런

퍼셉트론(Perceptron) 모델




신경망 학습의 목적함수로 출력값(예측값)과 정답(실제값)의 차이를 계산
회귀 (Regression)


분류 (Classification)
→ 이진분류(Binary cross-entropy)

→ 다중 분류(Categorical cross-entropy)




DNN 모델 Layout

Dropout
과적합(Overfitting) 방지용, Train 학습 시에만 활용
라이브러리 임포트
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
model = Sequential()
model.add(Dense 4, input_shape=(3,),activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(4,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrice=['acc'])
history=model.fit(X_train,y_train,validation_data =(X_test, y_test), epochs=40,batch_size=10)





import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
import matplotlib.pyplot as plt
# 1️⃣ 데이터 불러오기 (MNIST 데이터셋)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 2️⃣ 데이터 전처리
x_train = x_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
x_test = x_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0
# 3️⃣ CNN 모델 정의
model = keras.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)), # 3x3 필터 32개
layers.MaxPooling2D((2,2)), # 2x2 풀링
layers.Conv2D(64, (3,3), activation='relu'), # 3x3 필터 64개
layers.MaxPooling2D((2,2)), # 2x2 풀링
layers.Flatten(), # 1D로 변환
layers.Dense(128, activation='relu'), # 완전 연결층
layers.Dense(10, activation='softmax') # 출력층 (0~9 숫자 분류)
])
# 4️⃣ 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 5️⃣ 모델 학습
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1)
# 6️⃣ 테스트 데이터 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"테스트 정확도: {test_acc:.4f}")
# 7️⃣ 예측 샘플 출력
predictions = model.predict(x_test[:5])
# 8️⃣ 결과 시각화
plt.figure(figsize=(10, 3))
for i in range(5):
plt.subplot(1, 5, i+1)
plt.imshow(x_test[i].reshape(28,28), cmap='gray')
plt.title(f"예측: {np.argmax(predictions[i])}")
plt.axis('off')
plt.show()



RNN 문제점(vanishing gradient problem)
RNN은 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀 경우 역전파 시 그래디언트가 점차 줄어 학습능력이 크게 저하되는 것으로 알려져 있음

RNN의 히든 state에 cell-state를 추가한 구조

오랫동안 정보를 전달할 수 있음
→ 문장과 같은 단어가 문장 안에서의 순서가 중요한 경우나 주가와 같은 시계열 데이터 효과

model.add(LSTM(4,input_shape=(7,2),return_sequences=True))->#,7,4
model.add(LSTM(3,return_sequences=True))=>#,7,3
model.add(Flatten())
model.add(dense(1,activation='sigmoid'))