본문 바로가기

TIL(2024y)/Deep learning

24.07.01 Deep learning (구조 및 역할)

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) 
    • 활성화함수 유무
      1. 입력층에는 활성함수 없음
      2. 은닉층에는 활성화함수 있음
      3. 출력층에는 활성화함수가
        • 분류 - 있음
        • 회귀 - 없음 (항등함수로 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개
      • 종속변수의 예측치 출력

인터뷰시 받을 수 있는 질문 

  • 신경망모델 vs. 선형회귀 모형 차이 - Hidden layer의 유무 
  • 이진 분류 모델의 출력 노드의 수 
    • 1개 - sigmoid 
    • 2개 - softmax 
  • Feed forward 구조: 입력층에서 출력층으로 data가 순차적으로 전달되는 현상 
  • 신경망의 기본 작동 방식
    • 데이터 세팅 (with target data)
    • train/test data 분리
    • 신경망(딥러닝 모델)을 이용해 데이터에 존재하는 독립변수와 종속변수의 관계 파악 = 학습 = loss 함수를 최소화하는 파라미터의 값을 탐색
    • 모델 성능 평가
    • 훈련된 모델을 사용하여 새로운 데이터에 대해 종속변수의 값을 예측
  • 인공 신경망 학습 프로세스는? 순전파(활성화함수) -> 오차계산(손실함수) -> 오류 역전파 -> 가중치 업데이트 
    1. 초기화(Initialization): 학습 과정을 시작하기 위한 준비단계. 무작위 값으로 가중치를 초기화
    2. 순전파(Forward Propagation)
      • 입력 데이터가 신경망의 입력층으로 주어짐. 
      • 각 층의 뉴런을 통과하면서 활성화 함수에 의해 처리 (활성화함수: 신경망에 비선형성을 도입하여 복잡한 문제 해결을 수행)
      • 신경망의 출력층까지 과정 수행 
    3. 오차 계산(Error calculation)
      • 신경망의 출력과 실제 타깃 값 사이의 차이를 계산 = loss 함수 
      • 신경망의 예측이 얼마나 정확한지를 수치적으로 표현
    4. 오류 역전파(Error Backpropagation)
      • 계산된 오차는 출력층에서부터 입력층 방향으로 역전파되어 각 가중치가 오차에 얼마나 기여하는지를 계산 
      • 각 가중치가 오차에 미치는 영향 계산 (경사 하강법)
    5. 가중치 업데이트(Weight Update)
      • 경사하강법을 사용하여 각 가중치를 업데이트 
      • 오차를 최소화하는 방향으로 가중치를 조정하여 신경망의 성능개선
    6. 과적합(Over fitting) 및 정규화(Regularization)
      • 학습과정 중 과적합 발생 가능 
      • 이를 방지하기위해 정규화 기법을 사용(L1, L2 규제, drop out 등), 모델의 복잡도를 제어하함
    7. 반복학습(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