본문 바로가기

전체 글66

Transfomer - Cross Multi-Head Attention 다른 Multi-Head Attention와 달리 여러개의 입력을 받는 Multi-Head Attention은 뭘까?이 Multi-Head Attention는 다음 단어를 생성하는데 주력 역할을 하는 곳으로, 이전에 생성된 단어와 인코더에서 출력된 번역 전의 단어들의 전체 문맥관계에 대한 정보를 통해서 "현재 생성할 단어는 어떤 문맥에서 나와야하는지 종합적으로 계산" 하는 곳이다.  해당 부분을 통해서 최종 다음 생성 단어가 결정된다 . 해당 과정을 시각화해서 보자. 2025. 2. 25.
Transfomer - Feed Forward Feed Forward란? FC1 - 활성화 함수 - FC2로 이루어진 네트워크로 Multi Head Attention을 통해서 나온  Q, K의 관계에 대해 더 풍부하게 표현하기 위해서이다.  FC1에서 차원을 확장하고, 활성화 함수를 거쳐 비선형성을 부여하고, 다시 차원을 축소시켜 원본 차원으로 돌린다.  풍부한 표현이란?Multi Head Attention을 통해서 나온  Q, K의 관계라고 하면 "A와 B는 연관이 있다"  정도로 끝난다. 하지만 Feed Forward를 거치면 "A와 B는 주어 - 동사 관계가 있다"와 같이 좀더 깊은 의미를 얻게 된다. 2025. 2. 25.
Transfomer - Masked Multi Head Attention Multi Head Attention는 다양한 시점에서 토큰간의 관계를 살펴보는 것이라고 알아봤다, 그러면 Masked라는 게 뭘까?이 Masked라는 건 말 그대로 가리는 것이다. 그럼 뭘 가릴까? 토큰간의 관계를 살펴볼 때 모든 토큰끼리의 관계를 인코더에서는 살펴봤다. 하지만 디코더에서는 단어를 생성하는 것이기 때문에 모든 토큰을 살펴보면 안된다. 즉, 문제를 푸는데 정답을 보고 풀면 의미가 없는 것과 같다.  따라서, 이런 문제를 방지하고자, 아직 생성되지 않은 단어는 가리고 연관성을 학습하는 것이다.  ❗이 때, 이런 의문이 생길 수 있다. 아니 디코더에서는 어차피 생성해야되는 거라 이미 단어가 나올 일이 없지 않나? 이 이유는 훈련과 테스트로 나눠서 생각할 수 있다.  훈련 시: 정답 문장이 있.. 2025. 2. 25.
Transfomer - Multi Head Attention Multi Head Attention이란? Self -  Attention이 여러개 있는 것을 말한다. 그러면 Self -  Attention이 뭐고, Attention이 무엇인지 알아보자.  Attention이란?문장에 2개가 있을 때 A 문장의 특정 단어가 B 문장에서 특정 단어와 관련된 정도를 말한다. 아래와 같이 특정 단어끼리의 관련된 정도를 수치화 한것이다.  그렇다면, Self - Attention이란?한 시퀀스 내에서 각 토큰끼리 계산되는 문맥정보  Self - Attenion은 어떻게 구하나?Attention을 구하기 위해서는  Q(qeury), K(key), V(value)를 우선적으로 구하고 해당 값을 수식을 통해 Attention을 계산해야한다.각 의미하는 것은 아래 사진의 설명과 같.. 2025. 2. 25.
Transfomer - Input Embedding & Positional Encoding Input Embedding이란? 사람이 다루는 자연어를 기계가 다룰 수 있는 언어인 연속된 숫자 벡터로 변환하는 것이다.  자세하게 말하자면, 문장을 토큰 단위로 나누어서 각 토큰에 대한 ID를 부여하고, 미리 학습된 임베딩 행렬의 행을 인덱스로 하여 토큰 ID에 대한 벡터를 부여하는 것을 말한다.    Positional Encoding이란? RNN/LSTM을 사용하지 않기 떄문에 순서에 대한 정보를 얻을 수 없다. 따라서, 임베딩 벡터를 기반으로 순서 정보를 부여하는 것을 말한다.  아래의 Sin/Cos 함수를 이용해서 위치 정보를 할당하는 데 삼각함수를 이용한 이유는 최고 최저점이 일정하고 주기적이면서 계속 이어나가기 때문에 안정적이고 많은 토큰에도 위치정보를 할당할 수 있어서 이다. 2025. 2. 25.
Transfomer의 전체적인 아이디어 해석 1) 인코더(Encoder)A: (입력 + 위치 정보) 임베딩입력 문장을 토큰 단위로 쪼갠 뒤 각 토큰을 임베딩(Token Embedding)하고,순서 정보(Positional Encoding)를 더해 위치가 반영된 벡터로 만듭니다.B: Multi-Head Attention이 임베딩된 토큰들 사이에서 어떤 단어가 어떤 단어와 얼마나 관련이 있는지를 Q, K, V를 통해 계산(Attention)하고,그 결과를 가중합해 중요한 맥락 정보를 얻습니다.쉽게 말해서, 입력된 토큰들 간의 문맥정보를 파악하는 것C: Feed-Forward NetworkAttention으로 섞인 정보를 비선형 변환(2층 MLP 등)하여, 토큰별 표현을 좀 더 풍부하게 가공합니다.잔차 연결 + LayerNorm과 함께 여러 블록(레이어.. 2025. 2. 25.
메인 논문: Learning Not to Learn 핵심 테스크위의 사진과 같이 편향이 있는 데이터 셋을 통해 모델이 학습할 때, 편향된 정보를 포함하지 않고 모델을 학습시키는 것이 주요 테스크이다. 메인 아이디어 메인 아이디어는 총 3개의 네트워크가 있는데, 특징 추출 네트워크 f의 결과를 통해서 편향을 예측하는 h 네트워크가 편향을 많이 추출하지 못하도록, 즉 특징을 추출할 때 편향을 포함해서 특징을 추출하지 못하도록 하는 것이 주요 목표이다.  그러기 위해서는, h네트워크와 GRL을 사용해서 역전파 시 전달되는 Gradient의 방향을 반전시켜서 로스가 줄어드는 방향이 아닌 로스가 커지는 방향으로 모델을 학습시켜 편향이 있는 정보가 포함되지 못하도록 한다.  미니 맥스 게임 (1)번 항: 네트워크를 통해 예측한 분류 결과값과 실제 레이블의 차이 (2.. 2025. 2. 20.
Lab-10-4: 내가 만든 사진으로 데이터셋 구성해보기 커스텀 데이터 셋 가져오고 학습 데이터 테스트 데이터 분리하기# 라이브러리 가져오기 ----------------------------------------------------------import torchvisionfrom torchvision import transformsfrom torch.utils.data import DataLoaderfrom matplotlib.pyplot import imshow%matplotlib inline# 이미지 크기 줄이기trans = transforms.Compose([ transforms.Resize((64, 128))])# 데이터 가져오기 -------------------------------------------------------------.. 2025. 2. 19.
Lab-10-3: visom 사용법(colab) 1. visdom 설치!pip install visdom!nohup python -m visdom.server -port 8097 & 2. 토큰 설정!ngrok authtoken 2sydJNUsIZpv0SDHmnt7PK6E3J0_2eq5RSVQNtYhJ9GZdDkvS # 토큰 설정 3. ngrok 설치 및 포트 열기!pip install pyngrokfrom pyngrok import ngrok# Visdom 서버 실행 포트port = 8097 # 포트 포워딩 (Colab에서 외부 접근 가능하도록 설정)public_url = ngrok.connect(port, "http")print(f"Visdom is running at: {public_url}") 4. visdom 사용# [라이브러리 가져오기]im.. 2025. 2. 13.
Lab-10-2: mnis-cnn 실제 CNN 구조를 만들어보자! import torchimport torch.nn as nn# [입력 만들기]inputs = torch.Tensor(1, 1, 28, 28) # 배치 크기 1 / 채널 1 / 높이 28 / 너비 28# [Convolution Layer(1) 만들기]conv1 = nn.Conv2d(1, 32, 3, padding = 1) # 입력 채널 1 / 출력채널 32 / 커널 크기 3x3 / 패딩 1 / stride는 기본값인 1로# [pooling 레이어 만들기]pool = nn.MaxPool2d(2) # 커널 크기 2x2# [Convolution Layer(2) 만들기]conv2 = nn.Conv2d(32, 64, 3, padding = 1) # 입력 채널 32 / 출력채널 64 .. 2025. 2. 13.
Lab-10-1: Convolution Convolution의 크기   [위의 식이 맞는지 확인하는 코드] import torchimport torch.nn as nn# [CNN 만들기]conv = nn.Conv2d(1, 1, 11, stride=4, padding=0) # 입력 채널1 / 출력 채널 1 / stride 4 / padding 0conv # Conv2d(1, 1, kernel_size=(11, 11), stride=(4, 4))# [입력 만들기]inputs = torch.Tensor(1, 1, 227, 227) # 배치 크기 1 / 채널 1 / 높이 227 / 너비 227inputs.shape # torch.Size([1, 1, 227, 227])# [CNN에 입력 넣기]out = conv(inputs)out.shape # to.. 2025. 2. 13.
선행 논문2: Domain-Adversarial Training of Neural Networks 해당 논문에서 다루는 내용은 출처 도메인(학습 시킨 데이터)에서 학습한 모델이 목표 도메인(학습 데이터와는 다른 데이터들)에서 잘 작동하는 않는 문제를 해결하기 위해 작성되었다.  해당 논문에서 제시된 방안은 "출처 도메인과 목표 도메인을 잘 구분할 수 없게 만들어 다양한 도메인에서 모델의 성능을 유지하자"이다.   그럼 어떻게 도메인을 구분할 수 없게 만들까? Domain Classfier를 추가하자! 1. 모델의 원래 목적인 "분류" ➡️ 출처 데이터에서 학습2. Domain Classifier ➡️ 출처 도메인과 목표 도메인을 구분3. Feature Classifier와 Domain Classifier의 경쟁 ➡️  Domain Classifier가 도메인을 잘 구별하지 못하도록 학습시키자! (Gr.. 2025. 2. 4.
선행 논문1: Mitigating Unwanted Biases with Adversarial Learning 용어 정리Y(출력 변수) : 모델이 예측하려는 실제 목표 Z(보호 변수) : 공정성을 해칠 수 있는 일종의 속성을 말한다. 예를 들어 성별, 인종, 나이 등이 있을 수 있다.   양성률 (True Positive Rate, TPR)  : 실제 긍정 사례 중에서 모델이 긍정으로 예측한 비율이다. 예를 들어, 10명의 대출 상환 가능 고객이 있고, 그 중에서 8명을 대출 승인(긍정)으로 예측했다면 양성률은 0.8이다.  거짓 양성률 (False Positive Rate, FPR)  : 실제 부정 사례 중에서 모델이 잘못 긍정으로 예측한 비율이다. 예를 들어, 10명의 대출 상환 불가능 고객이 있고, 그 중에서 1명을 대출 승인(긍정)으로 예측했다면 양성률은 0.1이다.  공정성의 정의Demographic p.. 2025. 2. 4.
Lab-09-01~04: ReLU, Weight 초기화, 드롭아웃, 배치 정규화 import torchimport torchvision.datasets as dsetsimport torchvision.transforms as transformsimport random# 사용할 device(CPU 또는 GPU) 설정device = 'cuda' if torch.cuda.is_available() else 'cpu'# 재현성을 위해 시드 설정torch.manual_seed(777)if device == 'cuda': torch.cuda.manual_seed_all(777)# 하이퍼파라미터 설정learning_rate = 0.001 # 학습률training_epochs = 15 # 전체 에폭 수batch_size = 100 # 배치.. 2025. 2. 4.
Lab 08-2: Multi Layer Perceptron import torchdevice = 'cuda' if torch.cuda.is_available() else 'cpu'# for reproducibilitytorch.manual_seed(777)if device == 'cuda': torch.cuda.manual_seed_all(777) X = torch.FloatTensor([[0, 0], [0, 1], [1, 0], [1, 1]]).to(device)Y = torch.FloatTensor([[0], [1], [1], [0]]).to(device)# 레이어 생성linear1 = torch.nn.Linear(2, 10, bias=True)linear2 = torch.nn.Linear(10, 10, bias=True)linear3 = torc.. 2025. 2. 4.
Lab 08-1: Perceptron AND나 OR의 문제는 잘 해결 했던 Perceptron이었지만, XOR 문제는 해결하지 못한다.  아래의 코드는 XOR 문제에서의 Perceptron의 한계를 보여주고 있다. import torchdevice = 'cuda' if torch.cuda.is_available() else 'cpu'# for reproducibilitytorch.manual_seed(777)if device == 'cuda': torch.cuda.manual_seed_all(777) X = torch.FloatTensor([[0, 0], [0, 1], [1, 0], [1, 1]]).to(device)Y = torch.FloatTensor([[0], [1], [1], [0]]).to(device)linear = t.. 2025. 1. 26.
Lab 07-2: MNIST Introduction MNIST란? 아래의 사진과 같이 0~9까지의 숫자의 손글씨 데이터 셋이다. 데이터는 28x28의 이미지고, 채널은 1개로 회색 이미지이다.     torchvision이란?다양한 데이터 셋, 아키텍쳐, 트랜스폼을 제공하는 패키지이다. 우리는 이 패키지를 통해서 MNIST 데이터를 가져오고 손글씨의 숫자를 예측하는 모델을 만들어보려고한다.    Epoch, Batch size, Iteration에 대해 한번에 이해할 수 있는 문장" 훈련 데이터 1000개를 배치 사이즈 500으로 해서 2번의 Iteration을 거쳐 1epoch로 학습 " 즉, Epoch란 훈련 데이터 전체를 한번 돌았을 때를 의미하고, 배치 사이즈는 훈련 데이터 셋을 특정 개수로 그룹화하는 사이즈를 의미하고, Iteration는 배치 .. 2025. 1. 26.
5.2 성능 향상을 위한 요령 1. 데이터 전처리데이터 전처리란, 학습 데이터의 불필요한 데이터나, 이상치를 제거(완화)하는 것이다.  특징 값이 모두 양수 또는 음수만 가지게되면, 기울기가 한 방향으로만 나오기 때문에, 가중치가 뭉치로 갱신되는 문제가 발생되게 된다. 따라서, 특징 값의 평균이 0이 되도록 변환을 해야한다. 또한, 특징의 규모가 다르면. 즉, 어떤 데이터는 0.1이고 다른 데이터는 101이면 데이터 차이가 너무 크기 때문에 분산을 1로 만들어줘서 특징의 규모가 다를 때 생기는 문제를 해결해준다.    크기의 개념을 가지지 않는 명칭값. 예를 들어 성별이나 체질과 같은 값은 원 핫 코드로 변환해서 사용한다.    2. 가중치 초기화신경망의 초기 단계에서는 가중치를 설정해주는 것이 필요한데, 이때 가중치를 어떻게 설정하.. 2025. 1. 25.
Lab 07-1: Tips(Overfitting, Preprocessing Data) OverfittingOverfitting을 막기위해서 여러 방법이 있지만, 학습할 데이터를 한번에 학습에 사용하지 않고, 80퍼센트만 학습에 사용하고 나머지 20퍼센트의 데이터를 학습에 사용해서 학습에 사용된 데이터에 과적합되었는지 확인하는 방법이 있다.  이 방법을 코드로 생성하면 아래와 같다. import numpy as npimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optim# For reproducibility: 동일한 결과를 재현할 수 있도록 랜덤 시드를 고정torch.manual_seed(1)# 훈련 데이터와 테스트 데이터 생성x_train = torch.FloatTensor([[1,.. 2025. 1. 21.
배치 경사하강법, 확률 경사하강법, 미니 배치 경사하강법 기존 경사하강법은 Global minima를 찾지 못하고 Local minima를 찾아 유지되는 경향이 있었다. 즉, 아래와 같이 실제 최소값에 도달하지 못하고 기울기가 0이지만 최소값이 아닌 부분에 유지되는 문제가 발생하곤 했다.이러한 문제를 해결하기 위해서 여러 경사하강법의 아이디어가 도출되었다.   배치 경사하강법: 모든 데이터를 사용해서 신경망의 가중치를 한 번 업데이트 하는 것 모든 데이터를 고려해서 가중치를 수정했기 때문에, 안정적으로 가중치를 업데이트 할 수 있다는 장점이 있지만 데이터가 많으면 연산량이 많아지는 문제가 있다.    확률적 경사하강법: 각각 하나의 데이터를 사용해서 신경망의 가중치를 지속적으로 업데이트 하는 것  확률적 경사하강법은 연산량이 적다는 장점이 있지만, 데이터 하나.. 2025. 1. 21.
Lab_06: Softmax Softmax란?다중 클래스를 분류할 때 사용하는 활성화 함수로, 각 클래스에 대한 확률을 도출해준다.  위와 같은 수식을 사용하며,  지수 함수를 사용해서 확률을 도출한다.  지수함수가 사용되는 이유는 미분이 가능하도록 하게 함이며, 입력값 중 큰 값은 더 크게 작은 값은 더 작게 만들어 입력벡터가 더 잘 구분되게 하기 위함이다.  위의 사진과 같이 각 클래스에 따른 확률을 도출하며, 모든 확률을 더하면 1이 나오게된다. 또한, 오차는 크로스 엔트로피 손실함수를 사용해서 모델을 학습시킨다. 이를 코드로 작성하면 아래와 같다.  import numpy as npimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.opti.. 2025. 1. 20.
Lab_06(준비): Cross Entropy 손실함수 Cross Entropy = 놀람(정보의 양) + 기댓값(E) + Entropy  1. 놀람(정보의 양)놀람이란, 어떠한 사건이 일어났을 때 그 사건이 주는 정보의 양을 말한다. 여기서 정보의 양은 특정 사건이 발생했을때 우리가 느끼는 놀람의 정도를 수치화한 것이다.   놀람은 그 사건이 일어날 확률이 높을 수록 낮은 값을 보이고, 일어날 확률이 낮을 수록 높은 값을 보인다.  따라서, 이 놀람을 수치화하면 확률의 역수에 log를 취한 값이다.  위의 전개과정으로 -log(p(x))라는 값이 나오게된다. 이 값이 바로 특정 사건이 일어났을 때 그 사건이 주는 놀람의 정도를 의미한다.    2. 기댓값기댓값(예상값)은 특정 값 * 특정 값이 일어날 확률을 의미한다.  예를 들어, "한 축구 선수의 오늘 발.. 2025. 1. 20.
3.5 미니 배치 학습 미니 배치란?: 모델을 학습시킬 때 모든 데이터를 한번에 사용하는게 아니라, 작게 배치(그룹화)나누어, 모델을 학습시키는 것이다.  위 사진처럼 데이터를 100개로 잡고 미니 배치 학습을 시킨다고 가정하면 아래의 단계를 거치게된다.   1️⃣ 데이터를 먼저 100개씩 그룹화한다. 2️⃣ 그룹화된 특정 데이터들의 손실을 계산한다. 3️⃣ 손실을 통해 모델의 파라미터를 수정한다. 4️⃣ 다음 그룹화된 데이터들로 손실을 계산하고, 파라미터를 재수정한다.  이 방법을 모든 데이터를 사용할 때까지 반복하는게 미니배치이다. 2025. 1. 20.
3.4 오류 역전파 알고리즘(Back propagation) 오류 역전파 알고리즘이란?: Foward Pass를 통해서 나온 오차를 기반으로 각 노드의 가중치를 업데이트하는 알고리즘이다.   역전파 알고리즘을 할 때 미분이 중요하다.  위의 사진을 보면 새로운 가중치를 업데이트할 때 학습률에 가중치에 대해 손실함수의 편미분 값을 곱한다. 따라서 미분이 중요하다. 여기서 미분을 하는 이유는 손실함수의 최저값으로 향하기 위해서인데, 위 2차함수가 손실함수라고 가정을 했을 때 최저값은 기울기가 0일 때이다. 따라서 미분을 통해서 기울기를 구해 어느 방향으로 얼마나 가야하는지를 판단하기 위해서 미분이 중요하다.  따라서, 역전파 알고리즘이라는 것은, 순전파를 통한 손실값을 통해서 가중치를 수정하는 것이다. 또한 가중치를 수정하는 공식에서 미분을 통해 어떤 방향으로 얼마나.. 2025. 1. 20.
Lab_05: Logistic Regression Logistic Regression란?: 기존 선형 회귀는 Y의 값이 연속적일 떄 사용 가능한 모델이다. 다만, Y값이 연속적이지 않고 기존 범주중 하나로 예측해야하는 경우 문제가 생기기 때문에 이를 해결하기 위한 방법이 Logistic Regression이다.  예를 들어, 해당 이메일이 스팸인지 아닌지에 대한 것에 대한 예측을 할 때 사용하는 것이다.    따라서, 이렇게 특정 범주(0 ~ 1)으로 분류하는 것을 Logistic Regression이라고 하는데, 이때 출력값을 확률로 변환하기 위해서 시그모이드 함수를 적용해서 값을 예측하게 된다.    이렇게 하면 x의 범위는 무한대이지만, y의 범위는 0 ~ 1로 제한되게 된다. 이렇게  특정 x에 대해서 0 ~ 1로 범위가 지정되어 확률이 나오게된.. 2025. 1. 16.