딥러닝
- 인공지능 : 인공지능은 인간의 지능을 모방하여 문제를 해결하는 기술을 의미함. AI는 규칙 기반 시스템으로부터 자율 학습 시스템까지 다양한 접근 방식을 포함함
- 머신러닝 : 머신러닝은 데이터를 이용해 모델을 학습하고, 이를 통해 예측이나 결정을 내리는 기술임. 머신러닝은 AI의 하위 분야로, 지도 학습, 비지도 학습, 강화 학습 등의 방법을 포함함
- 딥러닝 : 딥러닝은 머신러닝의 하위 분야로, 다층 신경망을 사용하여 데이터를 학습함 딥러닝은 특히 대규모 데이터와 복잡한 문제를 다루는 데 강력한 성능을 발휘함
딥러닝 개념
- 딥러닝은 인공신경망을 기반으로 한 기계 학습의 한 분야임
- 다층 신경망을 사용하여 데이터로부터 특징을 자동으로 학습하고, 이를 통해 복잡한 문제를 해결함
- 입력 데이터에서 중요한 패턴을 추출하고, 이를 바탕으로 예측, 분류, 생성 등의 다양한 작업을 수행할 수 있음
딥러닝의 특징
- 비선형 추론 : 딥러닝은 비선형 추론을 통해 복잡한 데이터의 패턴을 학습할 수 있음
- 다층 구조 : 여러 층의 신경망을 사용하여 데이터의 고차원 특징을 학습함
- 자동 특징 추출 : 데이터로부터 중요한 특징을 자동으로 추출하여 별도의 특징 공학 과정이 필요 없음
단일 퍼셉트론의 개념
- 퍼셉트론은 인공 신경망의 가장 기본적인 단위로, 하나의 뉴런을 모델링한 것입니다.
- 퍼셉트론은 입력 값을 받아 가중치를 곱하고, 이를 모두 더한 후 활성화 함수를 통해 출력값을 결정함.
- 가중치란? 입력값에 곱하는 값을 말함 / 바이어스란? 최종적으로 더할 때 add하는 값
- 활성화 함수란? 비선형 구조를 학습할 수 있게 해줌
다층 퍼셉트론의 구조
- 입력층 : 다르게 들어오는 입력값(숫자 or 행렬)을 처리해주는 층을 말함
- 은닉층 : 입력층 하나 담당
- 출력층 : 은닉층으로부터 받아서 원하는 형태로 바꿔주는 층을 말함
다층퍼셉트론은 비선형 구조를 학습할 수 있음
손실함수의 역할
- 손실함수는 모델의 예측 값과 실제 값 사이의 차이를 측정하는 함수
- 손실함수는 모델의 성능을 평가하고, 최적화 알고리즘을 통해 모델을 학습시키는 데 사용됨
- 오차를 균등하게 맞춰주는 역할
각자 도달하는 global Optimum이 다름을 주의해야 함
역전파 알고리즘의 개념
- 역전파는 신경망의 가중치를 학습시키기 위해 사용되는 알고리즘임
- 출력에서 입력 방향으로 손실함수의 기울기를 계산하고, 이를 바탕으로 가중치를 업데이트함
역전파의 수학적 원리
- 연쇄 법칙을 사용해 손실함수의 기울기를 계산함
- 각 층의 기울기는 이전 층의 기울기와 현재 층의 기울기를 곱하여 계산함
- 이를 통해 신경망의 모든 가중치가 업데이트됨
인공 신경망 (ANN)
- 하나의 층은 여러 개의 퍼셉트론으로 구성되어 있으며 여러 층으로 이루어진 것이 인공신경망이라고 함
- 이때 층이 나뉘어진 이유로는 출력층을 세분화하기 위함이다.
동작방식
1. 순전파
- 입력 데이터를 통해 각 층의 뉴런이 활성화되고, 최종 출력 값을 계산함
- 각 뉴런은 입력 값에 가중치를 곱하고, 바이어스를 더한 후 활성화 함수를 통해 출력 값을 결정함
- 손실 계산
- 예측 값과 실제 값의 차이를 손실 함수로 계산함
- 이때 오차함수는 보통 절대값을 사용한다 함
- 오차를 균등하게 맞춰주는 것이 특징
- 역전파
- 손실함수의 기울기를 출력층에서 입력층 방향으로 개선하고, 이를 바탕으로 가중치를 업데이트 함
이해
- 지역 최적값을 전역 최적값이라고 오해할 수도 있는데 이때는 hyper parameter을 넓게 조절하는 방법을 사용할 수 있겠음 (설정 값이 중요함)
- 첫 번째 퍼셉트론의 결과가 두 번째 퍼셉트론의 입력으로 들어가는 것임
- 파라미터란 딥러닝에서 업데이터하기 위한 가중치를 말함
- 더이상 최적값이 나아지지 않다면 "수렴했다"라는 표현을 사용함
출력레이어의 유형과 활용 (최종 예측 레이어)
- 회귀 문제
- 출력 레이어의 뉴런 수는 예측하려는 연속적인 값의 차원과 동일함
- 활성화 함수로는 주로 선형 함수를 사용함
- 이진 분류 문제
- 출력 레이어의 뉴런 수는 1임
- 활성화 함수로는 시그모이드 함수를 사용하여 출력 값을 0과 1 사이의 확률로 변환함
- 다중 클래스 분류 문제
- 출력 레이어의 뉴런 수는 예측하려는 클래스 수와 동일함
- 활성화 함수로는 소프트맥스 함수를 사용하여 각 클래스에 대한 확률을 출력함
실습
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
# 데이터셋 전처리
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# MNIST 데이터셋 로드
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)