KJH
ML용어 비전공자 입장에서 이해해보기 (2022 ~ ing) 본문
MLOps에 관심이 많기에 전반적인 흐름을 공부하고자 한다.
ML enginner 수준으로 프레임워크를 이해하고자 하는 목표는 없고
주로 쓰는 용어와 워크플로우, 시스템구조, 파이프라인에 초점을 맞추고 있다.
첫번째 tensorflow, pytorch
둘 다 딥러닝 프레임워크이고, 인공지능 모델을 만들고 훈련시키기 위해 사용한다.
Tensorflow | Pytorch | |
개발사 | ||
그래프 및 (성향) | 정적(짜여진 대로 실행하고 끝나야 결과 확인가능) | 동적(실행 중임에도 자유롭고 유동적인 수정이 가능) |
학습 곡선 | 정적 그래프 사용이 복잡해 어렵다 | python친화적이라 쉽다 |
환경 | 프로덕션에도 용이 | 테스트에 용이 |
결론
전문가 : Tensorflow 어려운 만큼 지원하는 기능이 많다고 함.
연구자, 일반인 : Pytorch 누구나 쉽게 사용할 수 있음
※ 허깅페이스에 있는 모델 90% 이상이 pytorch 전용이라고 함
두번째 기본 용어들
데이터셋 : 머신러닝 모델을 훈련시키고 평가하기 위해 사용하는 데이터의 집합
특성(feature)과 결과값(target, label)으로 구성되어 있으며 이미지 데이터는 각 픽셀 값, 텍스트는 데이터의 단어 빈도, 사용자 데이터의 나이, 성별, 위치 등이 들어가게 됨
Train / Valid / Test 세 가지 루트로 분류하는데
Train : 모델을 학습시키기 위해 사용 (60~80%)
Valid : 학습 과정 중에 하이퍼 파라미터 튜닝 및 모델 성능 평가를 위해 사용 (10~20%)
Test : 학습 완료 후에 모델의 최종 성능을 평가하기 위해 사용. train / valid에 사용하지 않은 데이터로 구성해야 함 (10~20%)
프롬프트 : 자연어 처리(NLP)에서 모델에게 특정 작업을 지시하거나 질문을 던지기 위해 사용하는 입력 텍스트
가중치 : 모델이 학습하는 동안 조정되는 파라미터로, 입력 데이터가 출력에 미치는 영향을 결정함
학습 : 모델이 데이터로부터 패턴을 학습하도록 하는 과정으로, 손실 함수를 최소화하는 방향으로 가중치를 조정함
손실 함수 : 모델의 예측값과 실제값 사이의 차이를 수치화한 것으로, 모델이 얼마나 잘 학습하고 있는지를 평가하는 기준
정규화 : 입력 데이터를 일정 범위로 변환하여 학습 과정을 안정화하고 성능을 향상시키는 기법
교차 검증 : 데이터를 여러 개로 나누어 각각의 데이터를 검증 세트로 사용하고 나머지를 훈련 세트로 사용하여 모델의 성능을 평가하는 방법
정리하다 보니 얼핏보면 비슷하게 보이는 개념이 있는데
추론 : 학습된 모델을 사용하여 새로운 데이터에 대한 예측을 수행하는 과정
예로는 모델이 이미지 데이터를 입력받아 처리하는 전체 과정
예측 : 학습된 모델이 새로운 입력 데이터를 기반으로 결과를 예측하는 것
추론이 끝난 결과 값을 뜻함
세번째 파인튜닝
사전 훈련된 모델에서 데이터셋 및 시스템 명령을 추가해서 새로 훈련시키고 새로운 모델을 생성하는 과정
네번째 하이퍼파라미터
머신러닝 모델의 학습 과정 전에 설정하는 값으로, 모델의 학습 방법과 성능에 큰 영향을 미침
값의 종류로는
학습률, 배치 크기, 에폭 수, 활성화 함수, 옵티마이저, 드롭아웃 비율, L2 정규화, L1 정규화, 층의 수, 층의 크기 ,데이터 셔플링 여부, 데이터 증강, 초기 가중치 설정, 학습률 감쇠 등이 있음
학습률(Learning Rate) : 모델이 데이터로부터 배우는 속도를 조절하는 값.
이 값이 크다면 책을 빨리 읽는 것과 같은데 놓치는 포인트도 생기니 좋은 모델이 나오기 어렵고, 값이 낮다면 오래걸린다.
배치크기(Batch Size) : 한 번에 모델이 학습하는 데이터 샘플의 개수. 학습할 때마다 가중치가 업데이트 됨.
이 값이 크다면 놓치는게 생길 수 있고 가중치 업데이트 되는 횟수도 줄어 성능이 안좋아 질 수 있음. 낮다면 성능은 좋겠지만 오래 걸림.
에폭 수(Number of Epochs) : 반복 학습을 하는 횟수
이 값이 크다면 데이터에서 많은 패턴을 학습할 수 있어서 성능이 좋아질 수 있지만 오래걸리고 과적합(Overfitting)이 생길 수 있음 책을 여러 번 읽는 것과 같음. 낮다면 학습할 수 있는 패턴이 상대적으로 줄어드니 성능이 낮아지고, 과소적합(Underfitting)이 생길 수 있음
책 한번만 읽기
가중치의 업데이트 : 인공지능 모델은 배치크기와 에폭마다 가중치를 업데이트 함. 배치가 돌때마다 출력과 정답 데이터 간의 차이를 계산해서 손실(loss)를 구하고 0에 가까울 수록 좋은 모델임.
활성화 함수(Activation Function) : 입력 신호의 총합을 출력 신호로 변환하는 함수
종류는 많은데 ReLU 함수가 주로 사용됨. 입력이 0보다 작으면 0, 0보다 크면 그대로 출력하는 형태
옵티마이저(Optimizer) : 손실 함수를 최소화하여 모델의 성능을 향상시키기 위해 학습 과정에서 파라미터를 조정함.
종류는 많은데 아래 발전 과정을 보면 최상단에 위치한 Adam을 주로 사용함.
드롭아웃 비율(Dropout Rate) : 과적합(overfitting)을 방지하기 위해 사용되는 정규화 기법 중 하나
이 값이 0.2일때 전체 뉴런의 20%를 학습 단계에서 무작위로 비활성화 하여 입력도 받지않고 가중치 업데이트에도 참여하지 않게되어 네트워크의 복잡도를 줄인다.
L1 정규화, L2 정규화(L1, L2 Regularization) : 과적합을 방지하기 위해 모델의 가중치의 값을 제어하는 정규화 기법
L1 가중치의 절대값 합을 페널티로 추가
L2 가중치의 제곱 합을 페널티로 추가
층의 수(Number of Layers), 층의 크기(Size of Layers) : 입력층, 숨김층|은닉층, 출력층으로 구분하고, 각 층은 뉴런(Neuron) 또는 노드(Node)로 구성되며, 이들이 서로 연결되어 데이터를 처리하고 학습함. 층이 크면 에폭수와 장단점이 유사 함. ※ MLP 구조의 일부
입력층 : 신경망에 입력 데이터를 제공하는 층
숨김층 : 입력 데이터를 처리하고, 비선형 변환을 통해 학습하는 층
출력층 : 신경망의 최종 출력을 제공하는 층
데이터 셔플링 여부(Data Shuffling) : 모델 학습 과정에서 데이터셋을 무작위로 섞는지 여부를 의미.
데이터의 순서가 학습에 미치는 영향을 줄이고, 모델의 일반화 성능을 향상시키기 위해 사용
데이터 증강(Data Augmentation) : 모델의 일반화 성능을 향상시키기 위해 훈련 데이터셋을 확장하는 기술
원본 데이터에 다양한 변환을 적용하여 새로운 데이터 샘플을 생성함으로써 데이터셋을 인위적으로 늘립니다. 이는 과적합을 방지하고 모델의 성능을 향상시키는 데 중요한 역할을 합니다.
이미지 사이즈, 단어의 순서 변경, 노이즈 추가를 하는 식으로 심화학습을 합니다.
초기 가중치 설정(Weight Initialization) : 각 층의 가중치를 초기화하는 방법.
모델 학습의 시작점으로, 적절한 초기화를 통해 학습이 더 빠르고 안정적이게 함
학습률 감쇠(Learning Rate Decay) : 학습률을 점진적으로 줄이는 기법
학습 초기에는 큰 학습률을 사용하여 빠르게 학습하고, 시간이 지남에 따라 학습률을 줄여 세밀하게 최적화하는 방법
한글 용어 | 영어 용어 | PyTorch 클래스/옵션 |
학습률 | Learning Rate | `torch.optim.Optimizer`의 `lr` 매개변수 |
배치 크기 | Batch Size | `torch.utils.data.DataLoader`의 `batch_size` |
에폭 수 | Number of Epochs | 학습 루프에서 직접 설정 |
활성화 함수 | Activation Function | `torch.nn` 모듈의 함수들 (예: `torch.nn.ReLU`, `torch.nn.Sigmoid`) |
옵티마이저 | Optimizer | `torch.optim` 모듈의 클래스들 (예: `torch.optim.SGD`, `torch.optim.Adam`) |
드롭아웃 비율 | Dropout Rate | `torch.nn.Dropout`의 `p` 매개변수 |
L2 정규화 | L2 Regularization | 옵티마이저의 `weight_decay` 매개변수 |
L1 정규화 | L1 Regularization | 손실 함수에 직접 추가 (`torch.nn.functional.l1_loss` 또는 직접 구현) |
층의 수 | Number of Layers | 신경망 클래스 정의 시 직접 설정 |
층의 크기 | Size of Layers | 신경망 클래스 정의 시 직접 설정 |
데이터 셔플링 여부 | Data Shuffling | `torch.utils.data.DataLoader`의 `shuffle` 매개변수 |
데이터 증강 | Data Augmentation | `torchvision.transforms` 모듈의 함수들 (예: `transforms.RandomHorizontalFlip`) |
초기 가중치 설정 | Weight Initialization | `torch.nn.init` 모듈의 함수들 (예: `torch.nn.init.xavier_uniform_`) |
학습률 감쇠 | Learning Rate Decay | `torch.optim.lr_scheduler` 모듈의 클래스들 (예: `torch.optim.lr_scheduler.StepLR`) |
다섯번째 MLP(Multi-Layer Perceptron) 다층 퍼셉트론의 약자
여러 개의 층으로 구성되어 있으며, 각 층은 여러 개의 뉴런으로 구성됩니다. 주로 비선형적 데이터를 처리하거나 복잡한 패턴을 인식하는 데 사용됩니다.
여섯번째 CNN(Convolutional Neural Network, 합성곱 신경망)
이미지 인식 및 처리에 사용되는 딥러닝 모델
모델이 숫자 5를 인식하는 과정
- 입력: 28x28 픽셀 크기의 숫자 5 이미지.
- 합성곱 층: 필터가 이미지 위를 이동하면서 숫자 5의 경계선을 감지합니다.
- ReLU: 감지된 경계선 정보에 비선형성을 추가하여 복잡한 패턴을 인식합니다.
- 풀링 층: 특징 맵의 크기를 줄여 중요한 특징을 강조합니다.
- 완전 연결 층: 추출된 특징을 기반으로 숫자가 5일 확률을 계산합니다.
- 출력: 숫자 5일 확률이 가장 높으면 예측 결과로 5를 선택합니다.
일곱번째 모델 아키텍쳐 선택하는 법
Linear만 사용해서 모델 객체를 만들면 MLP 다층 퍼셉트론 모델
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(17, 64)
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, 2)
Cov1d, MaxPool을 사용하면 CNN 합성곱 신경망 모델
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv1d(1, 32, kernel_size=2, stride=1)
self.pool = nn.MaxPool1d(kernel_size=2, stride=2)
self.fc1 = nn.Linear(32 * 8, 30)
self.fc2 = nn.Linear(30, 1)
self.sigmoid = nn.Sigmoid()
RNN을 사용하면 RNN 순환 신경망 모델
class RNN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, n_layers):
super(RNN, self).__init__()
self.hidden_dim = hidden_dim
self.n_layers = n_layers
self.rnn = nn.RNN(input_dim, hidden_dim, n_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
LSTM을 사용하면 LSTM 장단기 메모리 신경망 모델
class LSTM(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, n_layers):
super(LSTM, self).__init__()
self.hidden_dim = hidden_dim
self.n_layers = n_layers
self.lstm = nn.LSTM(input_dim, hidden_dim, n_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
'MLOps' 카테고리의 다른 글
k3s gpu containerd기반 kubeflow 구축 (0) | 2024.07.21 |
---|---|
pytorch 폐암환자 예측하기 (0) | 2024.07.17 |
pytorch MNIST 예제 설명 (0) | 2024.07.17 |
MLOps (0) | 2024.07.14 |