Transformer
🔑 Transformer, RNN, seq2seqTransformerRNN(Recurrent Neural Network)RNN의 장점가변적인 길이의 Input Sequence를 처리할 수 있음.입력이 많아져도 모델의 크기는 증가하지 않음.(이론적으로) t 시점에서 수행된 계산은 여러 단계 이전의 정보를 사용할 수 있음.모든 단계에서 동일한 가중치가 적용됨.RNN의 단점Recurrent computation이 느림.Sequence output inference는 병렬화(parallelization)가 어려움.바닐라(=기본) RNN은 훈련 중 기울기 소실(vanishing gradient) 문제를 겪음.바닐라 RNN은 종종 시퀀스 내 장거리 의존성(long-rangedependence)를 모델링 하는데실패..
2025.01.10
no image
선형 대수
🔑 선형대수, 회귀 분석, 선형 회귀, NN Classifier, Linear Classifier, Softmax Classifier, Loss Function, Optimization회귀분석 및 선형회귀분석, 회귀분석 모델 평가지표 (MAE, MSE, RMSE 등)Nearest Neighbor ClassifierkNN, k-Means 알고리즘Regression 회귀Regression analysis 회귀 분석관찰된 연속형 변수들에 대해 두 변수 사이의 모형을 구한 뒤 적합도를 측정하는 분석 방법독립변수(설명변수) : 결과의 원인 (x)종속변수(응답변수) : 독립변수에 따라 값이 달라짐 (y)Linear Regression 선형 회귀종속 변수와 하나 이상의 독립 변수 간의 관계를 모델링하는 통계적 방법..
2025.01.06
Machine Learning Life Cycle
🔑 머신 러닝머신 러닝 Machine Learning인공지능 > 머신러닝 > 딥러닝위의 크기대로 상위 개념이라고 볼 수 있음Tom Mitchell의 머신러닝 정의머신러닝이란 다음과 같은 알고리즘을 연구하는 학문어떠한 작업 T에 대하여경험 E와 함께성능 P를 향상시킨다제대로 정의된 학습 과제는 에 의해 주어진다전통적 프로그래밍데이터, 프로그램 입력 → 출력값 출력머신 러닝데이터, 출력값 입력 → 프로그램 출력머신 러닝 : 학습의 종류지도 학습 (귀납적 학습) Supervised LearningClassification Algorithm학습 데이터 x + 원하는 출력(레이블) y를 페어로 제공 받아 학습을 진행 → 주어진 x에 대해 y를 예측하는 함수 f(x)를 학습y가 실수값 → 회귀(Regressio..
2025.01.06



Transformer

RNN(Recurrent Neural Network)

  • RNN의 장점
    • 가변적인 길이의 Input Sequence를 처리할 수 있음.
    • 입력이 많아져도 모델의 크기는 증가하지 않음.
    • (이론적으로) t 시점에서 수행된 계산은 여러 단계 이전의 정보를 사용할 수 있음.
    • 모든 단계에서 동일한 가중치가 적용됨.
  • RNN의 단점
    • Recurrent computation이 느림.
    • Sequence output inference는 병렬화(parallelization)가 어려움.
    • 바닐라(=기본) RNN은 훈련 중 기울기 소실(vanishing gradient) 문제를 겪음.
    • 바닐라 RNN은 종종 시퀀스 내 장거리 의존성(long-rangedependence)를 모델링 하는데
      실패함.
      • 가장 최근에 들어온 정보 위주로 기억하기 때문에 기존의 정보가 사라지는 문제가 발생
        • 전체 sequence가 길이에 관계 없이 single embedding으로 encoding됨.
        • 따라서, long sequences에서는 informationloss가 불가피함.
        • 이전에 입력된 정보는 더 많이 잊혀지는 경향이 있음.
    • 실제로는 여러 단계 이전의 정보에 접근하기 어려움.



LSTM (Long Short Term Memory)




Seq2seq (Sequence-to-Sequence)

Implementation: Encoder

EncoderLSTM (nn. Module) :
class
def __init__(self, input_size, embedding_size, hidden_size, num_layers, p) :
    super(EncoderLSTM, self).__init__()
    self.input_size = input_size # one-hot input의 길이
    self.embedding_size = embedding_size # input token (word embedding)차원
    self.hidden_size = hidden_size # hidden representation 차원
    self.num_layers = num_layers # LSTM 내 레이어 개수
    self.**dropout** = **nn.Dropout(p)**
    self.embedding = nn.Embedding(self.input_size, self.embedding_size) #벡터화
    self.LSTM = nn.LSTM(self.embedding_size, hidden_size, num_layers, dropout=p)

def forward(self, x):
    # shape: [sequence Length, batch size, embedding dims J
    embedding = self.dropout(self.embedding(x))# x를 embedding 벡터화

    # outputs shape: [sequence length, batch size, hidden_size]
    # hs, cs shape: [num_layers, batch_size, hidden_size]
    outputs, (hidden_state, cell_state) = self.LSTM(embedding)
    # outputs => y1, y2 / hidden_state가 LSTM이기 때문에 cell_state도 같이

    return hidden_state, cell_state
    # seq2seq 모델은 encoder에서 hidden_state만 필요해서 outputs는 리턴하지 않음
  • Dropout

    Dropout은 과적합(overfitting)을 방지하기 위해 사용되는 정규화 기법

    • 학습 과정에서 특정 뉴런에 의존하지 않도록 일부 뉴런을 무작위로 비활성화(즉, 0으로 설정)함으로써 모델의 일반화 능력을 향상시킴

    • Encoder와 Decoder 모두 Dropout을 적용하여 임베딩 벡터에 노이즈를 추가함으로써 과적합을 방지하고, 모델이 더 일반화된 패턴을 학습하도록 함

    • 더 나아가, Encoder와 Decoder 모두에 Dropout을 적용함으로써 임베딩 벡터에 동일한 정규화 기법을 일관되게 적용할 수 있음 → 모델 전체의 성능을 높이는 데 도움

      → 시퀀스를 임베딩 공간으로 전환하는 self.embedding()


Implementation: Decoder

class DecoderLSTM(nn.Module):
    def __init__(self, input_size, embedding_size, hidden_size, num_layers, p, output_size):
         super(DecoderLSTM, self).__init__()
             self.input_size = input_size # one-hot input 의 길이
             self.embedding_size = embedding_size # input token (word embedding) 차원
             self.hidden_size = hidden_size # hidden representation 차원
             self.num_layers = num_layers # LSTM 내 레이어 개수
             self.output_size = output_size # one-hot output 길이 (output language vocab size)
             self.dropout = nn.Dropout(p)
             self.embedding = nn.Embedding(self.input_size, self.embedding_size)
             self.LSTM = nn.LSTM( self.embedding_size, hidden_size, num_layers, dropout = p)
             self.fc = nn.Linear( self.hidden_size, self.output_size)

    def forward(self, x, hidden_state, cell_state):
        x = x.unsqueeze(0) # shape of x: [1, batch_size]
        embedding = self.dropout(self.embedding(x)) # shape: [1, batch size, embedding dims]

 # outputs shape: [1, batch size, hidden_size]
 # hs, cs shape: [num_layers, batch_size, hidden_size] ← hs, cs from Encoder
      outputs, (hidden_state, cell_state) = self.LSTM(embedding, (hidden_state, cell_state))
      predictions = self.fc(outputs) # shape: [1, batch_size, output_size]
      predictions = predictions.squeeze(0) # shape: [batch_size, output_size]

      return predictions, hidden_state, cell_state

Implementation: Seq2seq Interface

 class Seq2Seq(nn.Module):
     def __init__(self, Encoder_LSTM, Decoder_LSTM):
         super(Seq2Seq, self).__init__()
         self.Encoder_LSTM = Encoder_LSTM
         self.Decoder_LSTM = Decoder_LSTM

     def forward(self, source, target):
         batch_size = source.shape[1] # source shape: [input language seq len, num_sentences]
         # num_sentences = 한 배치(batch) 안에 있는 문장의 개수, 즉 배치 크기(batch size)를 나타냄
         target_len = target.shape[0] # target shape: [output language seq len, num_sentences]
         target_vocab_size = len(english.vocab)

         outputs = torch.zeros(target_len, batch_size, target_vocab_size)
         hs, cs = self.Encoder_LSTM(source)
         #hs = hidden state, cs = cell state

         x = target[0] # Trigger token <SOS>; shape: [batch_size]
         # SOS token = Start Of Sentence

 for i in range(1, target_len):
         output, hs, cs = self.Decoder_LSTM(x, hs, cs)
         outputs[i] = output
         x = output.argmax(1)
 return outputs # shape: [output language seq len, batch_size, target_vocab_size]




Attention

  • Attention 함수: Attention (Q, K, V) = Attention 값
    query(context)와 key-valuepairs(references)가 입력되면, attention 값은 value들의 가중치 평균이며, 여기서 각 weight는 relevance query와 corresponding key 간의 관련성에 비례함.
  • Q와 K는 비교 가능해야 함. (일반적으로 동일한 dimensionality를 가짐)
  • V와 Attention value는 당연하게도 동일한 dimensionality를 가져야 함. (V와 Q&K는 달라도 OK)
  • 많은 응용 사례에서 이 4가지 요소는 모두 동일한 dimensionality를 가짐.

Attention Is All You Need 논문 참고



'Study - AI > Machine Learning' 카테고리의 다른 글

선형 대수  (0) 2025.01.06
Machine Learning Life Cycle  (0) 2025.01.06



  • 회귀분석 및 선형회귀분석, 회귀분석 모델 평가지표 (MAE, MSE, RMSE 등)
  • Nearest Neighbor Classifier
  • kNN, k-Means 알고리즘



Regression 회귀

Regression analysis 회귀 분석

관찰된 연속형 변수들에 대해 두 변수 사이의 모형을 구한 뒤 적합도를 측정하는 분석 방법

  • 독립변수(설명변수) : 결과의 원인 (x)
  • 종속변수(응답변수) : 독립변수에 따라 값이 달라짐 (y)



Linear Regression 선형 회귀

종속 변수와 하나 이상의 독립 변수 간의 관계를 모델링하는 통계적 방법

→ 독립 변수의 값을 기반으로 종속 변수의 값을 예측하기 위함

  • y = mx + b
    • y : 종속변수 (목표)
    • x : 독립변수 (예측 변수)
    • m : 직선의 기울기 (회귀 계수)
    • b : y 절편 (상수항)

Linear Regression의 가정

  • 선형성: 종속 변수와 독립 변수 간의 관계가 선형적이어야 한다

  • 독립성: 관측값들은 서로 독립적이어야 한다

    • 잔차들이 무작위로 분포되어 있어야 함 → 시간의 흐름에 따라 잔차가 특정 패턴을 보이면 위배

      잔차 Residual

  • 등분산성: 오류의 분산이 일정해야 한다

    • 잔차들이 일정한 분포를 보여야 함 → 특정 구간에서 잔차의 분산이 커지거나 작아지면 위배
  • 정규성: 오류가 정규 분포를 따른다

    • 잔차들이 정규 분포를 따를 경우 점들이 대각선에 가깝게 위치함

최소 제곱법 OLS, Ordinary Least Squares

  • 관측 값과 예측 값의 차이(잔차)의 제곱합을 최소화하는 매개변수 m과 b를 추정하는 방법

다중 선형 회귀

  • 여러 독립 변수를 포함하도록 선형 회귀를 확장하여 종속 변수와의 관계를 모델링
    • 종속 변수와 독립 변수 사이의 관계가 선형이라는 가정을 따른다
  • 최소 제곱법(OLS)를 사용하여 회귀 계수를 추정할 수 있음
  • 독립 변수 간의 다중 공선성(multicollinearity) 문제를 가질 수 있음

(ex) 집 크기(x), 침실 수(x), 집값(y) 간의 관계 → y는 하나, x가 여럿


모델 평가 지표

  • 평균 절대 오차 MAE, Mean Absolute Error
    • 예측 값이 실제 값과 얼마나 차이나는지 절대값으로 계산해 평균화한 지표
  • 평균 제곱 오차 MSE, Mean Squared Error
    • 실제 값과 예측 값 간의 차이의 제곱을 평균 낸 값. 오차를 제곱하므로 큰 오차에 더 큰 패널티를 부여 → 모델의 큰 오차를 줄이는 데에 유용
    • 단위가 제곱된 형태라 실제 값과 다를 수 있음
  • 제곱근 평균 제곱 오차 RMSE, Root Mean Square Error
    • MSE에 제곱근을 취한 값으로, 오차를 원래 단위로 변환. MSE와 같은 장점을 가지면서도 단위 문제를 해결
    • 해석이 용이하고, 큰 오차에 민감하게 반응하는 동시에 실제 값과 같은 단위를 유지
  • 결정 계수 $R^{2}$
    • 모델이 종속 변수의 변동성을 얼마나 설명하는지를 나타내는 지표
    • 0에서 1 사이의 값을 가지며, 1에 가까울수록 모델이 데이터를 잘 설명하는 것
    • 모델의 설명력을 평가하는 데에 유용





Nearest Neighbor Classifier

  • 쿼리(테스트) 데이터 포인트에 대해 가장 가까운 (k개의) 학습 데이터 포인트를 (k)개 찾고, 레이블을 사용하여 예측
import numpy as np

class NearestNeighbor :
    def __init__ (self) :
        pass

    def train (self, images, labels) :
        # simpLy remembers ail the training data
        self.images = images
        self.labels = labels

    def predict (self, test image) :
        # assume that each image is vectozized to ID
        min_dist = sys.maxint # maximum integer in python
        for i in range(self.images.shape[0]) :
            dist = np.sum(np.abs(self.images[i, :] - test_image))
            if dist < min_dist :
                min_dist = dist
                min_index = i
return self.labels[min_index]
  • N개의 훈련 샘플이 있다고 할 때, 훈련 시 O(1), 예측 시 O(N)

Issues

  • 픽셀 거리에는 k-nn이 사용되지 않음
  • 거리 → Semantic한 정보를 제공하지 않음

k - Nearest Neighbor Classifier

  • 가장 가까운 k개 지점에서 과반수 득표를 받아야
  • k가 높으면 노이즈를 잡는 데에 유리하다




Linear Classifier

이미지는 기본적으로 3차원 행렬

인풋 이미지랑 똑같은 크기의 각 픽셀에 매핑되는 매개변수 w의 가중치(혹은 파라미터)

편향 bias : 인풋 데이터에게 영향을 받지 않으면서 아웃풋 데이터에 영향을 주는 파라미터

→ 데이터셋이 어떤 데이터에 편향되어 있는지에 대한 지표

f(x, W) = Wx + b → 행렬 곱을 이용하여 f(x, W) = W’x’

‘ 생략 → f(x, W) = Wx

매개변수적 모델의 장점 :

  • 학습이 완료되면 가중치 W만을 필요로 함 방대한 학습 데이터 셋을 저장할 필요가 없다
    → 공간 효율성이 높음
  • 테스트 시 단일 행렬-벡터 곱(Wx)으로 예제를 평가할 수 있다
    → 모든 훈련 데이터와 비교하는 것보다 훨씬 빠르다




Softmax Classifier

소프트맥스 함수의 수치적 불안정성(numerical instability)을 해결하기 위한 가장 적절한 방법은 무엇일까?

소프트맥스 함수는 입력 값의 지수화를 통해 각 클래스에 속할 확률을 계산한다. 그러나, 지수화를 할 때 큰 수를 다루게 되면 수치적 불안정성이 발생할 수 있다.

이를 방지하기 위해 흔히 사용되는 방법은 입력 값의 최대값을 계산하여 모든 입력 값에서 이를 빼는 것!

이렇게 하면 가장 큰 값이 0이 되어 지수화할 때 수치적으로 안정적인 값을 유지할 수 있다. 이 방법은 소프트맥스 함수의 수치적 안정성을 높이고 오버플로우를 방지하는 데 효과적이다.




Loss Function

이진 분류의 경우, 기준값(ground truth)은 y ={+1,-1}

  • 모델은 하나의 점수 ŷ ∈ ℝ 를 예측
  • ŷ이 0보다 크면 포지티브 클래스로, 그렇지 않으면 네거티브 클래스로 분류

마진 기반 손실

  • 손실은 yŷ에 따라 결정
  • 부호가 같으면(즉, 분류가 정확하면) 손실이 작아지거나 0
  • 부호가 다르면(잘못된 분류) 손실이 커짐

0/1 손실

  • 모델이 예제를 잘못 분류하면 일정한 손실 발생
  • 올바르게 분류하면 손실이 없음
  • yŷ = 0 일 때 (Step Function) 미분 불가능한 영역이 존재 → 실제로 사용하기 어려움

로그 손실

  • 예측이 정확할수록 패널티가 작아진다 (0은 아님)
  • 연속 함수 → 어느 지점에서나 미분 가능
  • 확률 값으로 아웃풋을 냄 → 사용하기 좋음

지수 손실

  • 로그 손실과 비슷하지만 잘못된 경우 더 큰 패널티를 주고 올바른 경우 적은 패널티를 준다
  • 어느 지점에서나 미분 가능

Hinge 힌지 손실

  • 오류에 대한 패널티가 선형적으로 증가
  • 오차 범위 내에서 정답인 경우에도 약간의 패널티
  • 미분 값이 항상 상수? → 계산이 효율적

장단점

  • 지수 손실은 아웃라이어에 매우 큰 손실을 할당하므로 아웃라이어의 영향을 강하게 받음

    틀린 것에 대해 많은 영향을 받으므로 → 노이즈가 많은 데이터에 적합하지 않음

  • 힌지 손실과 로그 손실은 널리 사용

  • 힌지 손실(SVM)이 계산적으로 더 효율적

  • 로그 손실(로지스틱 회귀)은 출력을 p(y|x)로 볼 수 있기 때문에 해석이 더 쉽다

SVM, Support Vector Machine

로지스틱 회귀




손실 함수 : 확률적 설정

이진 분류 문제에 대하여, 기준값은 y ={0,1}입니다.

  • 이 모델은 한 클래스의 확률인 하나의 점수 ŷ를 예측함
  • 다른 클래스의 확률은 1-ŷ
  • 점수 차이에 시그모이드 함수를 적용하는 것이 그 예시!
    • 자연스럽게 K >2 클래스까지 확장됨
  • 기준값은 1열 벡터로 표현됨 -> y=[0,0,0,0,1,0,0].
  • 모델은 K - 1 점수를 예측하고 마지막 점수를 ‘1-합계’로 남긴다
  • 소프트맥스가 그 예시 -> 예측값이 0에서 1 사이이고 합계가 1
    • 이 설정에서 손실 함수는 기본적으로 두 개의 (GT와 예측)확률 분포를 비교

Cross Entropy

  • $y_{ik}$ → i번째 데이터의 k번째 클래스에 대한 정답 값
  • $\hat y_{ik}$ → i번째 데이터의 k번째 클래스에 해당하는 예측 값
  • {log(예측 값) * 정답 값}를 다 더하고 N(데이터 수)으로 나누고 마이너스



'Study - AI > Machine Learning' 카테고리의 다른 글

Transformer  (0) 2025.01.10
Machine Learning Life Cycle  (0) 2025.01.06



머신 러닝 Machine Learning

인공지능 > 머신러닝 > 딥러닝

위의 크기대로 상위 개념이라고 볼 수 있음




Tom Mitchell의 머신러닝 정의

머신러닝이란 다음과 같은 알고리즘을 연구하는 학문

  • 어떠한 작업 T에 대하여
  • 경험 E와 함께
  • 성능 P를 향상시킨다

제대로 정의된 학습 과제는 <P, T, E>에 의해 주어진다


전통적 프로그래밍

데이터, 프로그램 입력 → 출력값 출력

머신 러닝

데이터, 출력값 입력 → 프로그램 출력




머신 러닝 : 학습의 종류

지도 학습 (귀납적 학습) Supervised Learning

Classification Algorithm

  • 학습 데이터 x + 원하는 출력(레이블) y를 페어로 제공 받아 학습을 진행

    주어진 x에 대해 y를 예측하는 함수 f(x)를 학습

  • y가 실수값 → 회귀(Regression)

  • y가 범주형 → 분류(Classification)

    → 주로 회귀 문제에 사용


준지도 학습 Semi-supervised Learning

  • 가장 현실적

비지도 학습 Unsupervised Learning

Clustering Algorithm

  • 레이블(라벨) 없이 학습 데이터 x만 이용하여 학습 진행

    → 주어진 x 뒤에 숨겨진 구조를 출력

  • 주로 클러스터링 같은 군집화 문제에 사용

  • 딥러닝에서는 AutoEncoder


자기 지도 학습 Self-supervised Learning


강화 학습 Reinforcement Learning

  • 일련의 행동에 따른 보상
  • 어떤 환경에서 정의된 에이전트(시스템)가 현재의 상태를 인식하여 선택 가능한 행동들 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 방법
  • 보상이 있는 상태와 액션의 시퀀스가 주어졌을 때, (지연)보상이 있는 일련의 상태와 작업이 주어지면 policy를 출력 → Policy란 주어진 상태에서 수행해야 할 작업을 알려주는 ‘상태→작업’ 형식의 매핑




머신 러닝 라이프 사이클 Machine Learning Life Cycle

머신 러닝 모델을 개발, 배포, 유지 및 보수하는 일련의 단계들을 정의하는 프로세스


1. 계획하기 (Planning)

  • ML 애플리케이션의 범위, 성공 지표 및 실현 가능성을 평가하는 작업 포함
  • 비즈니스와 머신러닝을 사용하여 현재 프로세스를 개선하는 방법의 이해
  • 비용-편익 분석과 여러 단계로 솔루션을 출시할 방법의 이해
  • 비즈니스,머신 러닝 모델(정확도, F1점수, AUC), 경제성(핵심성과 지표)에 대한 명확하고 측정
    가능한 성공 지표 정의
  • 타당성 보고서 작성

2. 데이터 준비 (Data Preparation)

  1. 데이터 수집라벨링
  2. 데이터 정리 (Cleaning)
  3. 데이터 처리
  4. 데이터 관리

3. 모델 엔지니어링 (Model Engineering)

계획 단계의 모든 정보를 사용하여 머신러닝 모델을 구축하고 훈련
(e.g. 모델 메트릭 추적, 확장성 및 견고성 보장, 스토리지 및 컴퓨팅 리소스 최적화 등)

  1. 광범위한 조사를 통해 효과적인 모델 아키텍처 구축
  2. 모델 메트릭 정의
  3. 학습 및 검증 데이터 셋으로 모델 학습, 검증
  4. 실험, 메타데이터,기능,코드 변경 및 머신 러닝 파이프라인을 추적 (1~4번 → 기타 코드 정리)
  5. 모델 압축 및 앙상블 수행
  6. 도메인 지식 전문가를 통하여 결과 해석

4. 모델 평가 (Model Evaluation)

  • 테스트 데이터 셋으로 모델 테스트, 전문가를 참여시켜 예측 오류 파악
  • AI 솔루션 구축을 위한 산업적, 윤리적, 법적 프레임워크를 준수하는지 확인
  • 무작위 및 실제 데이터에 대한 견고성(robustness) 테스트
  • 결과를 계획된 성공 지표와 비교하여 모델 배포 여부 결정

5. 모델 배포 (Model Deployment)

  • 현재 시스템에 머신러닝 모델을 배포
  • 일반적으로 클라우드 및 로컬 서버, 웹 브라우저, 소프트웨어 패키지 등에 배포할 수 있으며, API, 웹, 앱, 플러그인 또는 대시보드를 사용하여 접근

6. 모니터링 및 유지, 관리 (Monitoring and Maintenance)

  • 배포한 후에는 지속적으로 시스템을 모니터링하고 개선
  • 모델 지표, 하드웨어 및 소프트웨어 성능, 고객 만족도를 모니터링
  • 데이터 처리 및 모델 학습 기술을 개선하고, 새로운 소프트웨어와 하드웨어를 업데이트하기 위해 전체 머신 러닝 수명 주기를 개선해야 하는 경우도 있음



'Study - AI > Machine Learning' 카테고리의 다른 글

Transformer  (0) 2025.01.10
선형 대수  (0) 2025.01.06