머신 러닝 이론 7

파인 튜닝(Fine-tuning)

👁️‍🗨️ 이미지 인식 성능 극대화: 파인 튜닝 심층 분석 및 전략 🔬최근 이미지 인식 분야는 딥러닝 기술의 발전과 함께 눈부신 성장을 거듭하고 있습니다. 특히, 대규모 데이터셋으로 사전 학습된 컨볼루션 신경망(CNN) 모델은 다양한 시각적 인식 task에서 뛰어난 성능을 보여주며 핵심적인 역할을 수행하고 있습니다. 그러나 특정 도메인이나 세분화된 클래스 분류와 같은 전문적인 영역에서는 사전 학습된 모델만으로는 한계에 직면할 수 있습니다.본 글에서는 이미지 인식 분야에서 성능 향상을 위한 핵심 전략인 파인 튜닝(Fine-tuning)에 대해 심층적으로 분석하고, 실제 적용 시 고려해야 할 전문적인 내용들을 다루고자 합니다.🧠 파인 튜닝의 핵심 원리: 지식 전이와 적응파인 튜닝은 전이 학습(Tran..

Cross Entropy 손실함수

크로스 엔트로피 손실(Cross-Entropy Loss)은 머신러닝, 특히 딥러닝에서 분류 모델의 성능을 평가하고 학습시키는 데 널리 사용되는 손실 함수이다. 모델이 예측한 확률 분포 실제 레이블의 확률 분포와 얼마나 다른지를 측정하여, 모델이 더 정확한 예측을 하도록 유도하는 역할을 한다. 클래스 3개 이상의 다중 클래스 분류에서 사용되는 크로스 엔트로피 손실함수는 다음과 같다.  L(y, p) = - Σ y* log(p)여기서 y는 라벨값, p는 모델이 예측한 확률을 의미한다. 정답에 해당하는 클래스에 대해 모델이 확률을 0에 가깝게 도출했다면(낮은 확률) 손실함수 값은 발산에 가까운 값이 되고, 다음 에포크에서는 크로스 엔트로피 손실함수의 값을 낮추는 방향으로 가중치가 업데이트 된다. 결국 확률 p..

컨볼루션 레이어

컨볼루션 레이어(Convolutional Layer)는 딥러닝, 특히 이미지 처리 분야에서 핵심적인 역할을 하는 레이어이다. 이미지의 특징을 추출하고 학습하는 데 특화되어 있으며, 컨볼루션 신경망(CNN)의 핵심 구성 요소라고 할 수 있다.그럼 어떻게 이미지의 특징을 추출할 수 있는 걸까? 굉장히 추상적이므로 조금 더 알아볼 필요가 있다. 우선 컨볼루션 연산 방식에 대해 알아보자컨볼루션 연산을 하기 위해서는 입력 텐서와 커널이 필요하다. 그리고 출력으로 나오는 이미지는 특성맵(Feature Map) 라고 한다.위 그림은 5x5 이미지를 3x3 커널로 컨볼루션 연산을 하는 과정이다. 출력 9 는 다음과 같은 컨볼루션 연산을 통해 도출된다.2*1+3*0+4*1+1*1+0*0+1*1+0*0+1*1+1*0 = ..

Mnist 데이터 셋 불러오기

torchvision 패키지에 존재하는 Mnist 데이터 셋을 불러와 확인해보자  우선 전체 과정은 다음과 같다이미지 전처리 정의데이터를 전처리하여 훈련용과 테스트용으로 나누기데이터로더 정의데이터로더에 따라 데이터 불러오기불러온 데이터 그려서 확인하기 0) 사용할 패키지from torch.utils.data import DataLoaderimport torchvision.transforms as transformsimport torchvision.datasets as datasetsimport matplotlib.pyplot as plt  DataLoader는 배치 사이즈가 몇 인지(한 번에 가져올 이미지 수), 셔플을 할 것인지, 어떤 데이터 셋을 대상으로 하는지정의하여 어떻게 데이터를 불러올 것인가에..

backward() 와 requires_grad = True

이전 포스팅에서 out.backward() 로 텐서의 기울기를 저장하는 과정을 보았다. 하지만 기울기를 저장할 때 어떤 텐서의 기울기를 저장할지 지정할 수 있을까? import torch# 초기 가중치 설정w = torch.tensor(1.0, requires_grad=True)# 입력값 x, 정답 yx = torch.tensor(3.0)y = torch.tensor(6.0) # y = 2 * x# 예측값 (y_pred)y_pred = w * x # 모델이 예측한 값# 손실(loss) 계산loss = (y_pred - y) ** 2 # MSE (Mean Squared Error)# 역전파 실행 (미분 계산)loss.backward()# w의 기울기 출력print(w.grad)이 전과 같은 코드로 w..

loss.backward()

loss.backward()를 실행하면 역전파(Backpropagation) 가 일어나고,각 Tensor의 grad 속성에 미분값(기울기, gradient) 이 저장된다.  알기 어려우니 예시를 들어보자 다음과 같은 데이터가 있다고 가정해보자.xy12243648510이러한 데이터를 보고 x와 y의 관계를 우리는 y = 2*x 라고 유추할 수 있다. 하지만 컴퓨터는 두 데이터의 관계가  y = x**2 인지 y = x인지 알지 못한다. 따라서 우리는 컴퓨터에게 두 데이터가 선형 관계가 있다는 정보를 주고 가중치를 찾아야한다 즉, y = w(가중치) * x 관계를 주고 w를 찾게 할 것이라는 이야기다import torch# 초기 가중치 설정w = torch.tensor(1.0, requires_grad=Tr..

torch.empty() 와 torch.rand() 의 차이

1️⃣ torch.empty(4,2) 는 초기화되지 않은 텐서 (쓰레기 값)x = torch.empty(4,2) print(x) 💡 특징torch.empty()는 텐서의 메모리 공간만 할당하고, 값을 따로 초기화하지 않아.따라서 텐서의 값들은 **메모리에 남아 있던 이전 데이터(쓰레기 값)**로 채워질 수 있어.즉, 값이 랜덤하게 보이지만 사실은 PyTorch가 직접 생성한 무작위 값이 아니라, 기존 메모리에 남아 있던 값일 가능성이 높아.🛑 그래서 주의할 점torch.empty()는 정말 "초기화되지 않은" 상태이기 때문에, 그 값을 바로 사용하면 안 돼.보통 torch.empty()는 이후에 값을 따로 설정할 예정일 때만 사용하는 거야.2️⃣ torch.rand(4,2) 는 무작위 값으로 초기화된..