신경망 모델 (Model)
신경망 모델의 학습 원리
- 인간의 뇌 구조를 모방하여 만든 모델
- 정보가 입력되었을 때, 정보를 얼마나 어떻게 전달할지 결정
- 여러 개의 뉴런들이 상호 연결되어 동작
- 입력 값, 활성화 함수, 출력 값으로 구성
- 가중치와 편향에 따라 활성화 여부 결정
가중치와 편향
- 가중치 : 신호 전달의 정보를 나타냄
- 편향 : '뉴런이 얼마나 쉽게 활성화 되느냐'를 결정
- 활성화 함수 : 입력 신호의 총합을 출력 신호로 변환하는 함수. 임계 값을 경계로 출력하는 특징
딥러닝 모델의 구조
다층 Perceptron
- 입력층 : 데이터를 입력 받는 계층
- 은닉층 : 학습을 진행하는 계층. 은닉층은 N개 이상으로 구성되며 정보를 담아냄
- 출력층: 입력된 데이터에 따라 결과를 출력하는 계층. Task에 따라 다르게 구성 가능
역전파 (Backpropagation)
연쇄법칙
- 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있음
덧셈 노드의 역전파
- 덧셈 노드의 역전파는 입력 값을 그대로 흘려보냄
곱셈 노드의 역전파
- 곱셈 노드의 역전파는 입력 신호들을 서로 바꾼 값을 곱해서 하류로 보냄
손실 계산
- 출력층에서 얻어진 예측 값과 실제 값 (Label) 사이의 차이를 손실 함수를 사용해 계산
- 모델은 학습 과정에서 손실 값을 최소화하는 방향으로 가중치와 편향을 업데이트 함
- 손실 함수는 문제의 유형 (회귀, 분류)에 따라 다를 수 있음
손실함수
1) 회귀 문제
- 평균 제곱 오차 (MSE), 평균 절대 오차 (MAE) 등을 사용
2) 분류 문제
- 교차 엔트로피 (Cross-Entropy)를 사용함
PyTorch에서의 함수
- nn.MSELoss() : MSE 함수
- nn.BCELoss() : 이진분류 문제에서의 Cross Entropy
- nn.CrossEntropyLoss() : 다중분류 문제에서의 Cross Entropy
활성화 함수 (Activation Functions)
Sigmoid 함수
- 딥러닝 초기 연구에서 쓰였던 활성화 함수
- 1 / (1+exp(-1))
- 자연 상수를 분모로 하는 함수
- 0과 1 사이의 값을 가짐
- 미분한 값의 최대치가 0.25
- 그러므로, 층이 깊어질수록 Gradient vanishing (기울기 소실) 문제가 발생했음
tanh 함수
- 2 * sigmoid(2x) - 1
- Sigmoid 함수를 rescale한 함수
- 1과 -1 사이의 값을 가짐
- Regression 문제에서 많이 사용됨
ReLU 함수
- if (x < 0) 0 / if (x >= 0) x
- 극단적으로 값이 0보다 작으면 0, 0보다 크면 x값 그대로 출력
- 미분한 값의 최대치가 1 또는 0
- 최근 딥러닝에서 가장 많이 사용
# 활성화 함수 확인
%%capture
!pip install JAEN -qU
import torch
import torch.nn as nn
from JAEN.models import Perceptron
from JAEN.utils import plot_activation_function
# Sigmoid 확인
def sigmoid(x):
return 1 / (1 + torch.exp(-x))
plot_activation_function(sigmoid)
plot_activation_function(torch.sigmoid)
# ReLU 확인
def relu(x):
return torch.max(torch.tensor(0.0), x)
plot_activation_function(relu)
plot_activation_function(torch.relu)
출력층
- 신경망의 각 층은 이전 층의 출력을 입력으로 받고, 이 과정이 반복되면서 출력층에서 최종 예측 값 생성
- 신경망의 출력층에서 사용하는 활성화 함수는 문제 유형에 따라 다를 수 있음
문제 유형별 출력층의 활성화 함수 유형
1) 회귀 : 활성화 함수 없이, 가중합을 그대로 출력
2) 이진 분류 : Sigmoid 함수
3) 다중 클래스 분류 : Softmax 함수 (PyTorch에서는 손실 함수에 포함)
'AI > Deep Learning' 카테고리의 다른 글
| [딥러닝] CNN (Convolutional Neural Network) (0) | 2024.12.11 |
|---|---|
| [딥러닝] 과대적합 (Overfitting) (0) | 2024.12.10 |
| [딥러닝] 경사 하강법 (Gradient Descent) (0) | 2024.12.10 |
| [딥러닝] Neural Network Model의 설계 (0) | 2024.12.08 |
| [딥러닝] Dataset & DataLoader (0) | 2024.12.08 |