Deep learning Algorithms
- Feed forward neural network(FNN) - 주로 supervised learning에 사용
- Convolutional neural network(CNN) - image 처리에 주로 이용
- Recurrent neural network(RNN) - text 처리에 주로 이용
- Autoencoder(AE)
- CNN base
- CNN 모델의 발전 - Pre-trained model/ Transfer learning
- Object detection - YOLO/ SSD/ R-CNN family
- RNN base
- Seq2seq
- LSTM, GRU
- LM
- Transformer (Attention)
- BERT & BERT variants
- GPT models
- NN 구조 (Review)
- 활성화함수 유무
- 입력층에는 활성함수 없음
- 은닉층에는 활성화함수 있음
- 출력층에는 활성화함수가
- 분류 - 있음
- 회귀 - 없음 (항등함수로 Input 이 Output으로)
- weight(가중치)
- 신경망의 각 연결선에 할당된 값
- 노드의 출력이 다음 layer의 노드에 얼마나 많은 영향을 미칠지 결정
- 활성화함수 유무
실습) 가중치 값의 해석
import torch
import torch.nn as nn
import torch.optim as optim
# 단일 뉴런 모델 정의
class SimpleNeuron(nn.Module):
def __init__(self):
super(SimpleNeuron, self).__init__()
self.linear = nn.Linear(2, 1) # 입력 2개, 출력 1개
def forward(self, x):
return self.linear(x)
# 모델, 손실 함수, 옵티마이저 설정
model = SimpleNeuron()
criterion = nn.MSELoss() # Mean Squared Error(MSE) 손실 함수
optimizer = optim.SGD(model.parameters(), lr=0.01) # Stochastic Gradient Descent 옵티마이저
# 학습 데이터 (X: 입력, y: 목표 출력)
X = torch.tensor([[1.0, 2.0], [2.0, 1.0], [1.5, 1.5], [0.5, 0.5]], dtype=torch.float32)
y = torch.tensor([[1.0], [1.0], [1.5], [0.5]], dtype=torch.float32)
# 학습 설정
num_epochs = 1000
for epoch in range(num_epochs):
# 순전파
outputs = model(X)
loss = criterion(outputs, y)
# 역전파 및 가중치 업데이트
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 100 에포크마다 손실 출력
if (epoch + 1) % 100 == 0:
print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
# 학습된 가중치와 바이어스 출력
for name, param in model.named_parameters():
if param.requires_grad:
print(f'{name}: {param.data}')
# 학습된 모델로 예측
test_input = torch.tensor([[1.0, 1.0]], dtype=torch.float32)
predicted_output = model(test_input)
print(f'Predicted output for input [1.0, 1.0]: {predicted_output.item():.4f}')

# Epoch 가 진행됨에 따라 loss 값이 점점 줄어드는 것을 확인
# 학습된 모델의 가중치 값은 0.3070, 0.3030 으로 x1과 x2가 각각의 가중치로 조정된다는 것을 의미
# 학습된 모델의 bias 값은 0.2441
# 예측값은 0.8541
- bias node(편향 노드)
- 선형 회귀 모델에서의 절편(intercept)
- 모델 학습에 중요한 parameter
- 각 node의 출력에 추가되는 값
- 입력 데이터에 독립적으로 node의 활성화 조절
- 신경망이 다양한 문제에 더 잘 일반화할 수 있도록 도움
- basic layers
- Input layer
- 모양 정해져 있음-1개
- node의 수는 features의 수 (+ bias 수)
- 독립변수의 값(features 정보)을 입력받아 다음층으로 전달
- Hidden layer
- 설계의 영역
- 여러개일 경우 = 다층 신경망(Deep neural network)
- 입력 받은 데이터에서 종속변수의 값을 추론하는데 필요한 중요 특성 추출
- Output layer
- 모양 정해져 있음-1개
- 종속변수의 예측치 출력
- Input layer
인터뷰시 받을 수 있는 질문
- 신경망모델 vs. 선형회귀 모형 차이 - Hidden layer의 유무
- 이진 분류 모델의 출력 노드의 수
- 1개 - sigmoid
- 2개 - softmax
- Feed forward 구조: 입력층에서 출력층으로 data가 순차적으로 전달되는 현상
- 신경망의 기본 작동 방식
- 데이터 세팅 (with target data)
- train/test data 분리
- 신경망(딥러닝 모델)을 이용해 데이터에 존재하는 독립변수와 종속변수의 관계 파악 = 학습 = loss 함수를 최소화하는 파라미터의 값을 탐색
- 모델 성능 평가
- 훈련된 모델을 사용하여 새로운 데이터에 대해 종속변수의 값을 예측
- 인공 신경망 학습 프로세스는? 순전파(활성화함수) -> 오차계산(손실함수) -> 오류 역전파 -> 가중치 업데이트
- 초기화(Initialization): 학습 과정을 시작하기 위한 준비단계. 무작위 값으로 가중치를 초기화
- 순전파(Forward Propagation)
- 입력 데이터가 신경망의 입력층으로 주어짐.
- 각 층의 뉴런을 통과하면서 활성화 함수에 의해 처리 (활성화함수: 신경망에 비선형성을 도입하여 복잡한 문제 해결을 수행)
- 신경망의 출력층까지 과정 수행
- 오차 계산(Error calculation)
- 신경망의 출력과 실제 타깃 값 사이의 차이를 계산 = loss 함수
- 신경망의 예측이 얼마나 정확한지를 수치적으로 표현
- 오류 역전파(Error Backpropagation)
- 계산된 오차는 출력층에서부터 입력층 방향으로 역전파되어 각 가중치가 오차에 얼마나 기여하는지를 계산
- 각 가중치가 오차에 미치는 영향 계산 (경사 하강법)
- 가중치 업데이트(Weight Update)
- 경사하강법을 사용하여 각 가중치를 업데이트
- 오차를 최소화하는 방향으로 가중치를 조정하여 신경망의 성능개선
- 과적합(Over fitting) 및 정규화(Regularization)
- 학습과정 중 과적합 발생 가능
- 이를 방지하기위해 정규화 기법을 사용(L1, L2 규제, drop out 등), 모델의 복잡도를 제어하함
- 반복학습(Iterative Learning)
- 위의 과정(1~7)을 반복하여 최적화 진행
- 반복을 통해 입력 데이터에 내재된 복잡한 패턴과 구조를 학습 (다양한 문제에 대한 예측 수행)
'TIL(2024y) > Deep learning' 카테고리의 다른 글
24.07.08 Auto encoder (0) | 2024.07.08 |
---|---|
24.07.03 CNN (0) | 2024.07.06 |
24.06.12 Review(Decision Tree/ Random Tree) (1) | 2024.06.12 |
24.05.30 SLP/ MLP (0) | 2024.05.30 |
24.05.29 Ensemble model/ Neural network (0) | 2024.05.29 |