머신러닝 & 딥러닝 기초 정리

머신러닝 & 딥러닝 기초 정리

머신러닝(Machine Learning)은 데이터를 이용해 컴퓨터가 명시적으로 작성된 규칙만으로는 해결하기 어려운 문제의 패턴을 학습하도록 만드는 기술이다. 학습된 모델은 새로운 데이터를 입력받아 분류, 예측, 생성 등의 작업을 수행할 수 있다.

딥러닝(Deep Learning)은 머신러닝의 한 분야로, 여러 층의 신경망(Neural Network)을 이용해 데이터에서 복잡한 특징과 패턴을 학습한다. 이미지, 음성, 자연어와 같이 사람이 규칙을 직접 정의하기 어려운 영역에서 특히 강력한 성능을 보여주면서 현재 인공지능 기술의 핵심적인 방법론으로 자리 잡았다.

머신러닝과 딥러닝을 공부하다 보면 회귀, 분류, 손실 함수, 역전파, Gradient, Optimizer, CNN, RNN, Transformer 등 수많은 용어가 등장한다. 각각의 개념을 따로 외우기 시작하면 전체 구조를 이해하기 어렵다.

기본적인 흐름은 생각보다 단순하다.

모델은 데이터를 입력받아 예측하고, Loss는 예측이 얼마나 틀렸는지 평가한다. Gradient는 Loss를 줄이기 위해 파라미터를 어느 방향으로 변경해야 하는지 나타내고, Optimizer는 이 정보를 이용해 실제 파라미터를 업데이트한다.

이 기본 구조를 이해하면 머신러닝과 딥러닝에서 등장하는 대부분의 개념을 하나의 학습 과정 안에서 연결해서 볼 수 있다.


머신러닝이란

머신러닝은 데이터를 통해 모델이 문제의 규칙이나 패턴을 학습하는 방법이다.

일반적인 프로그래밍은 다음과 같은 구조를 가진다.

입력 + 사람이 작성한 규칙 -> 출력

예를 들어 어떤 숫자가 홀수인지 판별하는 프로그램을 만든다면 개발자가 직접 다음과 같은 규칙을 작성할 수 있다.

숫자 % 2 == 0 -> 짝수
숫자 % 2 != 0 -> 홀수

머신러닝에서는 문제에 따라 사람이 모든 규칙을 직접 작성하지 않는다.

입력 데이터 + 정답 데이터 -> 학습 -> 모델

학습이 끝난 모델에 새로운 데이터를 입력한다.

새로운 입력 -> 모델 -> 예측

따라서 머신러닝은 사람이 모든 규칙을 코드로 표현하는 대신, 데이터에 존재하는 관계를 모델이 학습하도록 만드는 접근이라고 볼 수 있다.


머신러닝에서 학습한다는 의미

머신러닝에서 모델이 학습한다는 것은 결국 파라미터(Parameter)를 적절한 값으로 조정하는 것이다.

가장 단순한 선형 모델을 생각해보자.

y = wx + b

여기서 wb가 모델의 파라미터다.

처음에는 wb에 적절한 값을 알 수 없다. 따라서 모델의 예측도 정확하지 않을 수 있다.

학습 과정에서 데이터를 반복적으로 사용하면서 wb를 수정한다.

초기 파라미터-> 예측-> 오차 계산-> 파라미터 수정-> 다시 예측-> 다시 오차 계산-> 반복

충분히 학습한 뒤에는 입력 x가 주어졌을 때 원하는 출력 y에 가까운 값을 예측할 수 있게 된다.

딥러닝도 본질적인 학습 원리는 같다. 차이는 단순한 수식 대신 여러 층으로 구성된 신경망을 사용하며, 수많은 파라미터를 이용해 훨씬 복잡한 관계를 표현한다는 점이다.


데이터의 기본 구조

머신러닝에서 가장 먼저 필요한 것은 데이터다.

예를 들어 집값을 예측한다고 하면 다음과 같은 데이터가 있을 수 있다.

면적   방 개수   위치   가격
84     3         A      5억
102    4         B      7억
59     2         A      3억

여기서 모델에 입력으로 제공되는 정보를 Feature(특징)라고 한다.

면적
방 개수
위치

모델이 예측해야 하는 값을 Target(타깃)이라고 한다.

가격

일반적으로 다음과 같이 표현한다.

X = 입력 데이터
y = 정답

모델은 X를 입력받아 예측값 ŷ를 만든다.

X -> Model -> ŷ

그리고 ŷ와 실제 정답 y를 비교해 모델의 성능을 평가한다.


지도학습

지도학습(Supervised Learning)은 입력 데이터와 정답을 함께 제공하면서 모델을 학습시키는 방법이다.

입력 X + 정답 y-> 모델 학습-> 새로운 X-> 예측 ŷ

대표적인 문제는 회귀와 분류다.

회귀

회귀(Regression)는 연속적인 값을 예측하는 문제다.

예를 들어 다음과 같은 문제다.

집의 정보 -> 집값
게임 캐릭터의 능력치 -> 예상 피해량
과거 판매량 -> 다음 달 판매량

출력값이 숫자로 표현된다.

분류

분류(Classification)는 입력 데이터를 특정 클래스에 할당하는 문제다.

이미지 -> 고양이 / 강아지
이메일 -> 스팸 / 정상
플레이어 행동 -> 정상 / 비정상

두 개의 클래스를 구분하면 이진 분류(Binary Classification), 여러 클래스를 구분하면 다중 분류(Multiclass Classification)라고 한다.


비지도학습

비지도학습(Unsupervised Learning)은 정답이 없는 데이터를 이용해 데이터 내부의 구조나 패턴을 찾는 방법이다.

데이터 -> 모델 -> 데이터의 구조 발견

대표적인 방법으로 클러스터링(Clustering)이 있다.

예를 들어 플레이어의 행동 데이터를 제공하고 별도의 정답을 주지 않았을 때,

플레이어 A, B, C -> 비슷한 행동 패턴
플레이어 D, E -> 다른 행동 패턴

처럼 데이터 자체의 유사성을 기준으로 그룹을 찾을 수 있다.

대표적인 비지도학습 기법에는 K-Means 같은 클러스터링 알고리즘과 PCA 같은 차원 축소 방법이 있다.


강화학습

강화학습(Reinforcement Learning)은 에이전트(Agent)가 환경(Environment)과 상호작용하면서 보상(Reward)을 최대화하는 행동 방법을 학습하는 방식이다.

게임을 예로 들면 다음과 같은 구조다.

에이전트는 특정 상황에서 어떤 행동을 선택해야 장기적으로 더 많은 보상을 얻을 수 있는지 학습한다.

게임 AI, 로봇 제어, 최적화 문제 등에서 활용할 수 있다.

지도학습과 가장 큰 차이는 일반적으로 “입력에 대한 정답”을 직접 제공하지 않는다는 점이다. 대신 행동의 결과로 얻는 보상을 이용해 학습한다.


모델

모델(Model)은 입력 데이터를 받아 원하는 출력을 계산하는 함수라고 생각할 수 있다.

가장 단순하게 표현하면 다음과 같다.

ŷ = f(X; θ)

여기서 θ가 모델의 파라미터다.

모델의 목적은 데이터에 존재하는 관계를 파라미터를 통해 표현하는 것이다.

모델의 종류에 따라 그 구조가 달라진다.

선형 회귀
로지스틱 회귀
Decision Tree
Random Forest
SVM
Neural Network
CNN
RNN
Transformer

각 모델은 서로 다른 구조와 특성을 가지고 있지만, 학습 가능한 모델이라면 결국 데이터를 이용해 모델의 파라미터 또는 내부 구조를 적절하게 설정한다는 공통점을 가진다.


Forward

모델에 입력 데이터를 넣고 예측값을 계산하는 과정을 Forward Propagation, 또는 순전파라고 한다.

X -> Model -> ŷ

신경망에서는 입력이 여러 층을 통과하면서 계산된다.

Input
-> Layer
-> Activation
-> Layer
-> Activation
-> Output

각 Layer는 파라미터를 가지고 있으며 입력값을 변환한다.

마지막에 나온 결과가 모델의 예측값이다.

예를 들어 이미지 분류 모델이라면,

이미지-> Neural Network-> 고양이 0.8-> 강아지 0.2

같은 결과를 얻을 수 있다.


Loss Function

모델이 예측했다고 해서 학습이 끝나는 것은 아니다.

예측값이 실제 정답과 얼마나 다른지 측정해야 한다.

이 역할을 하는 것이 Loss Function(손실 함수)이다.

예측값 ŷ + 정답 y-> Loss

Loss는 모델의 현재 예측이 학습 목표에서 얼마나 벗어나 있는지를 수치로 나타낸다.

예를 들어 회귀 문제에서는 Mean Squared Error(MSE)를 사용할 수 있다.

MSE = 평균((ŷ - y)²)

예측값과 정답의 차이가 작으면 Loss도 작아진다.

분류 문제에서는 Cross Entropy와 같은 손실 함수를 많이 사용한다.

중요한 것은 문제에 따라 적절한 Loss Function을 선택해야 한다는 점이다.

Loss는 단순한 평가 점수가 아니다. 이후의 Gradient 계산과 파라미터 업데이트에 직접 사용된다.


Gradient

Loss를 계산했으면 모델의 파라미터를 어떻게 수정해야 하는지 알아야 한다.

여기서 Gradient(기울기)가 사용된다.

특정 파라미터 w에 대한 gradient는 다음과 같이 표현할 수 있다.

∂Loss / ∂w

이는 w를 조금 변화시켰을 때 Loss가 어떻게 변화하는지를 나타낸다.

간단하게 생각하면,

Gradient = Loss를 줄이기 위해 파라미터를 어느 방향으로 움직여야 하는지 알려주는 정보

라고 볼 수 있다.

Gradient가 양수인지 음수인지, 그리고 그 크기가 어느 정도인지에 따라 파라미터를 업데이트하는 방향과 정도가 결정된다.


Backpropagation

신경망에는 수많은 파라미터가 존재한다.

출력에서 계산된 Loss가 각각의 파라미터에 어떤 영향을 받는지 계산해야 한다.

이때 사용하는 것이 Backpropagation(역전파)이다.

Loss -> Backpropagation -> 각 파라미터의 Gradient 계산

역전파는 이름 그대로 출력에서 발생한 오차 정보를 신경망의 뒤쪽에서 앞쪽으로 전달하면서 각 파라미터에 대한 미분값을 계산한다.

이 과정에서 연쇄 법칙(Chain Rule)이 핵심적으로 사용된다.

중요한 구분이 있다.

Backpropagation = Gradient를 계산하는 과정

Optimizer = Gradient를 이용해 Parameter를 업데이트하는 과정

둘은 같은 개념이 아니다.


Optimizer

Gradient를 계산한 다음에는 실제로 파라미터를 변경해야 한다.

이 역할을 하는 것이 Optimizer다.

가장 기본적인 형태는 Gradient Descent다.

parameter = parameter - learning_rate * gradient

여기서 learning_rate는 학습률이다.

학습률이 너무 크면 최적의 지점을 지나치면서 학습이 불안정해질 수 있다.

반대로 너무 작으면 파라미터가 조금씩만 변경되기 때문에 학습에 지나치게 오랜 시간이 걸릴 수 있다.

대표적인 Optimizer는 다음과 같다.

SGD
Momentum
Adam
AdamW
RMSProp

실제 딥러닝에서는 Adam 계열 Optimizer가 널리 사용되지만, 문제와 모델에 따라 적절한 Optimizer를 선택해야 한다.


전체 학습 과정

지금까지의 개념을 하나로 연결하면 머신러닝의 학습 과정은 다음과 같다.

데이터 -> Forward -> 예측값 -> Loss 계산 -> Backpropagation -> Gradient 계산 -> Optimizer -> Parameter Update -> 반복

코드로 표현하면 대략 다음과 같은 구조다.

optimizer.zero_grad()

prediction = model(x)
loss = criterion(prediction, y)

loss.backward()
optimizer.step()

각 코드가 담당하는 역할은 다음과 같다.

optimizer.zero_grad() -> 이전 Gradient 초기화

model(x) -> Forward

criterion(prediction, y) -> Loss 계산

loss.backward() -> Backpropagation -> Gradient 계산

optimizer.step() -> Parameter Update

이 과정을 여러 번 반복하면서 모델의 파라미터가 점점 학습 데이터에 적합한 값으로 조정된다.


Batch, Epoch, Iteration

머신러닝에서는 데이터를 한 번에 전부 모델에 넣지 않고 작은 단위로 나누어 처리하는 경우가 많다.

이때 사용하는 개념이 Batch다.

예를 들어 데이터가 10,000개 있고 Batch Size가 100이라면 한 번의 학습 과정에서 100개씩 데이터를 사용한다.

10,000개 데이터 -> Batch 100개 -> Batch 100개 -> ...

전체 데이터를 한 번 학습하는 것을 1 Epoch라고 한다.

예를 들어 10,000개의 데이터를 Batch Size 100으로 학습한다면 한 Epoch에는 100번의 Batch 처리가 필요하다.

1 Epoch = 100 Iterations

여기서 일반적으로 Iteration은 한 Batch를 처리하고 파라미터를 업데이트하는 한 번의 학습 단위를 의미한다.


Train, Validation, Test

머신러닝에서는 데이터를 하나의 세트로만 사용하는 경우가 많지 않다.

일반적으로 다음과 같이 나눈다.

Training Data
Validation Data
Test Data

Training Data

모델의 파라미터를 학습하는 데 사용하는 데이터다.

Training Data -> Forward -> Loss -> Gradien -> Parameter Update

Validation Data

학습 중 모델의 성능을 평가하고 하이퍼파라미터를 조정하는 데 사용한다.

학습률, 모델 구조, Batch Size 등의 설정을 결정할 때 활용할 수 있다.

Test Data

학습과 설정이 끝난 뒤 최종적인 일반화 성능을 평가하기 위한 데이터다.

중요한 것은 Test Data를 학습 과정에 직접 사용하지 않는 것이다.


Overfitting

머신러닝에서 중요한 문제 중 하나가 Overfitting(과적합)이다.

모델이 Training Data의 패턴을 지나치게 학습해서 학습 데이터에서는 매우 높은 성능을 보이지만 새로운 데이터에서는 성능이 떨어지는 현상이다.

Training Data -> 성능 좋음
New Data -> 성능 나쁨

반대로 모델이 충분히 학습하지 못해 Training Data에서도 제대로 성능을 내지 못하는 경우를 Underfitting(과소적합)이라고 한다.

머신러닝에서 중요한 것은 단순히 Training Loss를 낮추는 것이 아니다.

새로운 데이터에서도 잘 동작하도록 만드는 것이 중요하다.

이것을 Generalization(일반화)이라고 한다.


Hyperparameter

모델의 파라미터와 하이퍼파라미터는 구분해야 한다.

Parameter는 학습 과정에서 모델이 데이터로부터 직접 학습하는 값이다.

Weight
Bias

반면 Hyperparameter는 학습을 시작하기 전에 사람이 설정하는 값이다.

Learning Rate
Batch Size
Epoch
Network Depth
Hidden Dimension
Regularization Strength

예를 들어 Learning Rate는 모델이 데이터에서 직접 학습하는 파라미터가 아니라 사람이 설정하는 학습 관련 설정값이다.


Neural Network

신경망(Neural Network)은 여러 개의 뉴런 또는 노드를 연결해 입력 데이터를 변환하는 모델이다.

가장 기본적인 구조는 다음과 같이 볼 수 있다.

Input Layer
-> Hidden Layer
-> Hidden Layer
-> Output Layer

각 연결에는 Weight가 존재하고 뉴런에는 Bias가 사용될 수 있다.

단순한 뉴런은 다음과 같은 계산으로 생각할 수 있다.

z = wx + b
y = activation(z)

여러 뉴런과 층을 조합하면 복잡한 함수를 표현할 수 있다.

신경망이 여러 개의 층으로 깊게 구성되면 이를 Deep Neural Network라고 부른다.


Activation Function

신경망에서는 각 층의 출력에 Activation Function(활성화 함수)을 적용하는 경우가 많다.

대표적인 활성화 함수는 다음과 같다.

Sigmoid
Tanh
ReLU
GELU
Softmax

활성화 함수의 중요한 역할 중 하나는 신경망에 비선형성을 추가하는 것이다.

만약 모든 층이 단순한 선형 계산만 수행한다면 여러 층을 쌓더라도 결국 하나의 선형 변환으로 표현할 수 있다.

비선형 활성화 함수를 사용하기 때문에 신경망이 복잡한 패턴을 표현할 수 있다.


CNN

CNN(Convolutional Neural Network)은 이미지와 같은 공간적 구조를 가진 데이터를 처리하는 데 강점을 가진 신경망 구조다.

이미지에는 픽셀 사이의 공간적인 관계가 존재한다.

CNN은 Convolution 연산을 이용해 이미지의 지역적인 특징을 추출한다.

일반적인 구조를 단순화하면 다음과 같다.

Image-> Convolution-> Activation-> Pooling-> Convolution-> Activation-> ...-> Classification

초기 층에서는 선이나 모서리 같은 비교적 단순한 패턴을 감지하고, 이후 층에서는 이러한 패턴을 조합해 더 복잡한 특징을 표현할 수 있다.

CNN은 이미지 분류, 객체 탐지, 세그멘테이션 등 컴퓨터 비전 분야에서 오랫동안 핵심적인 구조로 사용되어 왔다.


RNN

RNN(Recurrent Neural Network)은 순서가 있는 데이터를 처리하기 위한 신경망 구조다.

텍스트나 시계열 데이터처럼 이전 정보가 이후 계산에 영향을 주는 문제를 다룰 수 있다.

기본적인 구조는 다음과 같다.

각 시점의 계산 결과를 다음 시점으로 전달하면서 시퀀스의 정보를 처리한다.

RNN의 대표적인 변형으로 LSTM과 GRU가 있다.

다만 긴 시퀀스에서 정보를 효과적으로 처리하는 데 한계가 있었고, 이후 Transformer가 등장하면서 자연어 처리 분야의 중심 구조가 크게 변화했다.


Transformer

Transformer는 Attention 메커니즘을 중심으로 구성된 신경망 구조다.

특히 자연어 처리에서 큰 발전을 만들었으며, 현재는 텍스트뿐만 아니라 이미지, 음성, 영상 등 다양한 분야에서 활용된다.

Transformer의 핵심 개념 중 하나가 Self-Attention이다.

Self-Attention은 입력의 각 요소가 다른 요소들과 어떤 관계를 가지고 있는지 계산한다.

문장을 예로 들면 특정 단어를 처리할 때 문장 내 다른 단어들을 함께 참고할 수 있다.

입력 토큰-> Embedding-> Self-Attention-> Feed Forward-> 반복-> 출력

GPT와 같은 대규모 언어 모델도 Transformer 계열 구조를 기반으로 한다.


Embedding

텍스트와 같은 데이터를 신경망에 그대로 넣을 수는 없다.

컴퓨터가 계산할 수 있는 숫자 형태로 변환해야 한다.

이때 Embedding을 사용할 수 있다.

예를 들어 단어를 고차원 벡터로 표현한다.

"게임"
-> [0.21, -0.43, 0.87, ...]

Embedding은 단순한 숫자 변환을 넘어 데이터의 의미나 관계를 벡터 공간에서 표현하는 데 사용된다.

LLM에서는 토큰을 벡터로 변환한 뒤 Transformer에 입력한다.


Loss와 Evaluation Metric의 차이

Loss와 평가 지표(Metric)는 비슷해 보이지만 목적이 다르다.

Loss는 모델을 학습시키기 위해 최적화하는 값이다.

Metric은 모델이 실제 문제에서 얼마나 잘 동작하는지 평가하기 위한 값이다.

예를 들어 분류 문제에서는 다음과 같은 Metric을 사용할 수 있다.

Accuracy
Precision
Recall
F1 Score

모델이 학습할 때는 Cross Entropy Loss를 사용하면서, 사람이 모델의 성능을 판단할 때는 Accuracy나 F1 Score를 확인할 수 있다.

Loss가 낮아졌다고 해서 모든 Metric이 반드시 원하는 방향으로 좋아지는 것은 아니다.


Regularization

과적합을 줄이기 위해 모델의 복잡도를 제한하거나 학습 방식에 제약을 추가하는 것을 Regularization(정규화)이라고 한다.

대표적인 방법으로 다음이 있다.

L1 Regularization
L2 Regularization
Dropout
Weight Decay
Early Stopping
Data Augmentation

예를 들어 Dropout은 학습 과정에서 일부 뉴런을 임의로 비활성화해 모델이 특정 뉴런에 지나치게 의존하지 않도록 한다.

Data Augmentation은 기존 데이터를 변형해 학습 데이터의 다양성을 높이는 방법이다.


머신러닝과 딥러닝의 관계

머신러닝과 딥러닝은 서로 별개의 기술이라기보다 포함 관계로 이해하는 것이 일반적이다.

인공지능은 가장 넓은 개념이다.

머신러닝은 데이터를 통해 모델이 학습하는 방법론을 의미하고, 딥러닝은 그중에서도 다층 신경망을 중심으로 하는 방법론이다.

딥러닝이 머신러닝과 다른 별도의 학습 원리를 사용하는 것은 아니다.

기본적으로 다음 과정은 그대로 유지된다.

Input-> Model-> Prediction-> Loss-> Gradient-> Parameter Update

달라지는 것은 모델 구조와 파라미터의 규모, 데이터의 형태, 학습 방법 등이 훨씬 복잡해진다는 점이다.


머신러닝에서 중요한 것은 데이터다

아무리 복잡한 모델을 사용하더라도 데이터가 좋지 않으면 좋은 결과를 얻기 어렵다.

머신러닝에서는 다음과 같은 데이터 문제가 중요하다.

데이터 부족
데이터 편향
잘못된 라벨
중복 데이터
이상치
결측치
데이터 불균형
데이터 누수

특히 Data Leakage(데이터 누수)는 매우 주의해야 한다.

학습 과정에서 사용해서는 안 되는 정보가 Training Data에 포함되면 검증이나 테스트에서는 높은 성능이 나오지만 실제 환경에서는 성능이 크게 떨어질 수 있다.

머신러닝의 성능은 모델의 크기만으로 결정되지 않는다.

Data
+ Model
+ Loss
+ Optimization
+ Evaluation

이 전체 파이프라인이 중요하다.


머신러닝 학습의 핵심 구조

그리고 학습이 끝난 모델은 새로운 데이터를 입력받아 예측한다.

새로운 데이터-> 학습된 모델-> Prediction

여기서 중요한 것은 학습 단계와 추론 단계의 차이다.

학습할 때는 정답과 Loss, Gradient, Optimizer가 필요하다.

Training-> Prediction-> Loss-> Gradient-> Update

반면 학습이 끝난 모델을 실제 서비스에서 사용할 때는 일반적으로 다음과 같이 동작한다.

Input-> Trained Model-> Prediction

추론 과정에서는 모델의 파라미터를 다시 학습시키지 않는다.


마무리

머신러닝에서는 데이터에서 유용한 패턴을 찾아 모델의 파라미터를 조정하고, 딥러닝에서는 신경망의 수많은 파라미터를 이러한 방식으로 학습한다.

회귀와 분류는 해결하려는 문제의 형태이고, CNN과 RNN, Transformer는 데이터를 처리하기 위한 모델 구조다. Loss Function은 예측을 평가하기 위한 학습 기준이고, Backpropagation은 Gradient를 계산하는 과정이며, Optimizer는 계산된 Gradient를 이용해 파라미터를 업데이트한다.

이 구조를 기준으로 이후에 CNN, RNN, Transformer, LLM, 생성형 AI 같은 기술을 공부하면 새로운 개념이 등장하더라도 기존 머신러닝 학습 과정에서 어느 위치에 해당하는지 파악하기 쉬워진다.