딥러닝은 신경망을 기반으로 한 머신러닝 기술로, 데이터를 학습하여 패턴을 인식하고 예측하는 강력한 알고리즘이다. 신경망 모델은 여러 개의 레이어(layer)로 구성되며, 각 레이어는 입력을 받아 가공하고 다음 레이어로 전달하는 방식으로 동작한다.
✅ 로지스틱 회귀 (Logistic Regression):
로지스틱 회귀는 어떤 사건이 발생할 가능성을 예측하는 방법으로, 이진 분류(Binary Classification) 문제에서 사용된다.
예시: 공부 시간을 입력으로 하여 합격 여부(0 또는 1)를 예측
시그모이드 함수(Sigmoid Function): 입력값을 0과 1 사이의 확률로 변환하는 함수로, 주로 이진 분류 문제에서 사용된다.
손실 함수: binary_crossentropy를 사용하여 이진 분류 모델을 학습할 때 오차를 최소화한다.
✅ 활성화 함수(Activation Function): 활성화 함수는 신경망의 각 레이어에서 출력값을 어떻게 계산할지 정하는 함수이다. 단순한 선형 변환이 아니라, 특정 조건을 만족하면 출력을 다음 노드로 보내고 만족하지 못하면 비활성화하는 역할을 한다.
즉 비선형성을 도입하여 복잡한 패턴 학습이 가능하도록 한다. 대표적인 활성화 함수로는 ReLU, Sigmoid, Softmax 등이 있다.
✅ 손실 함수(Loss Function): 모델의 예측값과 실제 값 사이의 차이를 계산하는 함수로, 모델의 학습 과정에서 최적화하는 대상이다.
손실 함수는 최적의 가중치를 학습하기 위한 필수적인 요소이다.
회귀 문제에서는 평균제곱오차(MSE), 분류 문제에서는 교차 엔트로피(Cross Entropy)가 주로 사용된다.
✅ 가중치(Weight)와 바이어스(Bias): 신경망 모델의 학습 과정에서 최적화하는 값으로, 입력 데이터가 출력에 미치는 영향을 조정한다.
✅ 경사 하강법(Gradient Descent): 손실 함수를 최소화하기 위해 가중치와 바이어스를 조정하는 알고리즘이다. 일반적인 경사 하강법과 속도를 개선한 확률적 경사 하강법(SGD), 모멘텀 적용 SGD 등이 있다.
SGD (Stochastic Gradient Descent): 전체 데이터를 한 번에 처리하는 대신 랜덤한 일부 데이터를 사용하여 빠르게 학습 진행
Momentum: 이전 기울기를 참고하여 학습 속도를 조절하여 지그재그 패턴을 줄임
Adam: 학습 속도를 자동으로 조절하며 최적의 학습 속도를 찾는 데 효과적
Sequential 모델을 사용하여 층을 정의Dense(완전연결층), Conv2D(CNN), LSTM(RNN) 등을 추가fit() 함수 사용predict() 함수 활용from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 모델 생성
model = Sequential()
model.add(Dense(64, input_shape=(10,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 모델 학습
model.fit(X_train, y_train, batch_size=32, epochs=100)
| 활성화 함수 | 설명 |
|---|---|
| ReLU | 0 이하의 값은 0, 그 외에는 그대로 출력 (딥러닝에서 가장 많이 사용) |
| Sigmoid | 0과 1 사이의 값으로 변환, 확률 예측에 사용 |
| Softmax | 다중 분류 문제에서 각 클래스의 확률을 출력 |
| Tanh | -1과 1 사이의 값으로 변환 |
from tensorflow.keras.layers import Activation
# 예제: 활성화 함수 적용
layer = Dense(32, activation='relu')
🔹 활성화 함수 선택 기준
sigmoidsoftmaxReLU| 문제 유형 | 손실 함수 |
|---|---|
| 선형회귀 | MSE (Mean Squared Error,평균제곱오차) |
| 이진 분류 | Binary Crossentropy |
| 로지스틱 회귀 및 분류문제 | Cross entropy |
| 다중 분류 | Categorical Crossentropy |
손실 함수를 올바르게 선택하면 모델이 데이터를 더욱 효과적으로 학습할 수 있다.
# 모델 컴파일 시 손실 함수 설정
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
일반적인 신경망은 이미지의 공간적 구조를 보존하지 못하는 문제가 있다. 이를 해결하기 위해이 이미지 데이터에 처리에 최적화된 신경망 구조인 CNN이 도입되었으며, 특징 추출과 분류를 동시에 수행하는 강력한 모델이다.
CNN의 주요 구성요소
✅ 합성곱(Convolution) 연산을 사용하여 이미지의 특징을 추출한다.
✅ 패딩(Padding) 연산을 사용하여 합성곱 연산으로 이미지 크가가 줄어드는 것을 방지
✅ 풀링(Pooling) 연산을 통해 특징을 축소하여 추출하며(feature map 크기를 줄이고) 연산량을 줄인다. (MaxPolling, AveragePooling)
✅ Fully Connected Layer 추출된 특징을 바탕으로 최종적으로 분류,예측 수행한다.
✅ Dropout: overfitting(과적합) 을 방지하기 위해 일부 뉴런을 랜덤을 제거
| 개념 | 설명 |
|---|---|
| 합성곱(Convolution) | 이미지의 특징을 추출하는 연산 |
| 패딩(Padding) | 크기 감소 방지를 위해 테두리에 0 추가 |
| 풀링(Pooling) | 특징 맵 크기를 줄여 연산량 감소 |
| ReLU 활성화 함수 | 비선형성을 추가하여 학습 성능 향상 |
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten
model = Sequential()
model.add(Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))
기존 신경망은 문장과 같은 시퀀셜 데이터(자연어, 시게열 데이터) 학습이 어려운 문제가 있다. RNN은 이전 상태를 기억하여 순차적인 데이터를 학습하는 구조로, 대표적인 모델로 LSTM과 GRU가 있다.
✅ 문장, 음성, 주가 예측 등 시간 의존성이 높은 데이터에 활용
✅ 단점: 기울기 소실(Vanishing Gradient) 문제 발생 가능
✅ LSTM(Long Short-Term Memory)은 장기 기억이 가능하도록 개선된 모델
from tensorflow.keras.layers import LSTM
model.add(LSTM(128, return_sequences=True, input_shape=(100, 1)))
GAN은 새로운 데이터를 생성하는 모델로, 생성자(Generator)와 판별자(Discriminator)가 서로 경쟁하며 학습한다.
✅ DCGAN: CNN을 활용하여 기존 GAN보다 안정적인 학습 가능
✅ WGAN: Wasserstein 거리를 이용하여 안정적인 학습 가능
from tensorflow.keras.layers import LeakyReLU
discriminator.add(LeakyReLU(alpha=0.2))
오토인코더는 데이터 압축 및 복원을 수행하는 신경망이다.
✅ 오토인코더의 특징:
인코더 (Encoder): 입력 데이터를 저차원 표현으로 변환
디코더 (Decoder): 저차원 표현을 다시 원래 크기로 복원
활용: 노이즈 제거, 특징 추출, 이상 탐지 등