최근 AI 애플리케이션의 복잡도가 급격히 높아지면서, 하나의 거대한 에이전트가 모든 일을 처리하는 구조는 한계를 드러내고 있다. 기능이 늘어날수록 오류 추적이 어려워지고, 특정 작업에 대한 정확도도 떨어지기 때문이다.이 문제를 해결하기 위한 접근이 바로 멀티 에이전트 시스템이다. 역할을 나누고, 각 에이전트가 특정 기능에 집중하도록 하면 전체 시스템의 안정성과 유지보수성이 크게 향상된다.https://developers.googleblog.com/developers-guide-to-multi-agent-patterns-in-adk/ 는 이러한 구조를 설계할 때 자주 쓰이는 패턴들을 정리해 소개하고 있다. 여기서는 코드 설명을 제외하고, 핵심 개념만 정리한다. Developer’s guide to mult..
1) langchain_classicv1 이전의 langchain.retrievers, indexes 및 hub가 langchain_classic 으로 이동했다.# Retrievers from langchain.retrievers import ... ➡️ from langchain_classic.retrievers import ..# Indexing from langchain.indexes import ... ➡️ from langchain_classic.indexes import ... # Hub from langchain import hub ➡️ from langchain_classic import hub 2) create_agentv1.0 이전에서는 에이전트를 만들 때 langgraph.p..
이 글은 Closed-book QA(질의응답) 태스크를 중심으로 대규모 언어 모델(LLM)이 어떤 흐름으로 발전해왔는지,그리고 왜 최근 들어 효율적인 학습 기법(PEFT, LoRA) 이 중요해졌는지를 정리한 글입니다. 1. 생성형 언어 모델의 시작과 거대화언어 모델의 흐름은 2017년 Transformer의 등장 이후 완전히 달라졌습니다.엄밀히 말하면 2018년에 등장한 BERT는 생성 모델이 아니라 인코더 기반 모델이지만,사전학습(Pre-training) 이 얼마나 강력한지 처음으로 명확하게 보여줬다는 점에서 매우 중요한 출발점이라고 볼 수 있습니다. 생성형 언어 모델이 본격적으로 주목받기 시작한 시점은 2019년,구글의 T5(Text-to-Text Transfer Transformer) 가 등장하면서..
Chain-of-Thought 논문을 보면서, LLM이 프롬프트에 들어 있는 예시만 보고도 생각 과정까지 따라하는 걸 보고 신기했던 적이 있습니다. 처음에는 뭔가를 파인튜닝 과정에서 배우는 거려나? 라고 생각했는데, 그게 아니라 모델의 파라미터를 바꾸지 않고도 학습한 것처럼 행동하는 현상이었습니다. 이걸 In-Context Learning(ICL)이라고 합니다.말 그대로 “프롬프트(문맥, context)만 보고 즉석에서 학습하는 것처럼 보이는 현상”입니다.Transformer 계열에서 처음 언급되었지만, 본격적으로 개념이 정립된 것은 GPT-3 논문(Brown et al., 2020) 이후이며, 2023년 Stanford Li & Liang 논문에서 메커니즘과 한계를 체계적으로 정리했습니다.1. 개요 I..
DeepSpeed란?대규모 모델 학습을 위한 분산 학습 프레임워크. (마이크로소프트에서 만들었습니다)목표: 메모리 절감, 학습 속도 향상, 스케일-아웃 편의성대표기능에는 ZeRO, Mixed Precision/BF16/FP16 지원, Offload, 파이프라인 병렬화, 시퀀스 병렬화 등이 있습니다.여기서 ZeRO와 Mixed Precision에 대해 알아보겠습니다. Mixed Precision은 부동소수점 개념이 필수이기 떄문에 복습을 하고 넘어가겠습니다!FP32 / FP16 / BF16 딥러닝에서 가중치, 활성값, gradient 등은 보통 부동소수점 형식으로 저장됩니다.FP3232bit높은 정밀도, 안정적느리고 메모리 많이 사용FP1616bit빠르고 메모리 절약정밀도 손실(Underflow 위험)BF..
과제를 하다가 emb_input = self.dropout(self.embedding(input)) 이런 코드 한줄을 보게되었다.원래 그냥 지나쳤던 코드인데, 다시보니 임베딩 벡터에 dropout을 적용하는 이유를 정확하게 짚고 넘어가고 싶었다. self.embedding(input)self.embedding = nn.Embedding(vocab_size, embedding_size)shape: (배치 크기, 시퀀스 길이, 임베딩 크기) = (문장 개수, 한 문장의 토큰 개수, 임베딩 차원) self.dropout(self.embedding(input))임베딩 벡터의 일부를 랜덤하게 0으로 만든다.→ 입력 단어 표현의 일부를 확률적으로 제거→ 모델이 특정 토큰 벡터에 과적합되지않도록 함 💡모델이 특정 ..
변분추론의 핵심 아이디어사후확률 \( P(\theta|D) \)를 직접 계산할 수 없으므로, 계산 가능한 분포 \( q(\theta) \)를 도입해 이를 근사한다.목표진짜 사후확률과 근사 사후확률의 차이를 KL 발산 \( KL(q(\theta) \parallel P(\theta|D)) \)으로 정의하고, 이를 최소화한다.하지만 ( P(\theta|D) )는 직접 계산이 불가능하므로, KL 최소화 문제를 동등한 형태인 ELBO 최대화 문제로 변환한다:\(log P(D) = ELBO(q) + KL(q(\theta) \parallel P(\theta|D))\)\(KL \ge 0\) 이므로 \(\log P(D) \ge ELBO(q)\).따라서 ELBO는 증거 하한(Evidence Lower Bound) 이다.E..
super().__init__()의 역할nn.Module을 상속받은 클래스의 init에서 super().__init__()을 상속받지 않으면 어떻게 될까?class Custom(nn.Module): def __init__(self): super(Custom, self).__init__() # 이 부분! 한 줄씩 어떤 역할을 하는지 살펴보겠습니다. class Custom(nn.Module): Custom 클래스가 nn.Module의 속성과 메소드를 물려받음super(Custom, self).__init__(): 부모 클래스인 nn.Module를 생성하고 초기화 즉, nn.Module을 상속만 하고 super().__init__()을 호출하지않으면그 클래스는 nn.Module의 속성과 메..
Neural Machine Translation by Jointly Learning to Align and Translate 논문에서 제시한attention-based seq2seq 모델 (바다나우 어텐션) 을 기준으로 설명하였습니다.https://arxiv.org/abs/1409.0473 먼저 든 의문은 "디코더의 맨 처음 어텐션값을 구할 때 사용되는 쿼리 Q 값은 무엇일까?" 입니다.일단 바다나우 어텐션 기준, 각 타임 스텝에서 어텐션값 계산을 위한 쿼리 Q는 이전 히든 스테이트 \(s_{t-1}\)입니다.(루옹 어텐션은 쿼리 Q가 이전이 아니라 현재 시점의 디코더 히든 스테이트 \(s_t\)입니다.) 따라서 의문에 대한 답은 초기 히든 스테이트 \(s_0\)일 것입니다.이는 논문 13페이지에 나와있..
이번 리뷰는 2018년에 발표된Improving Language Understanding by Generative Pre-Training입니다. 이 논문 제목에서 알 수 있다시피 gpt는 Generative Pre-Training의 약자인데요.Genterative, 생성 능력을 갖춘 모델을 Pre-Training, 대규모 비지도 학습으로 먼저 훈련한다는 아이디어를 담고있습니다. 1. 등장 배경첫번째로, 기존의 지도 학습 방식에는 labeled data를 충분히 확보하기가 쉽지않다는 문제가 있습니다. 예를 들어기계번역 태스크에서는 영어와 한국어 문장을 일일이 짝지어야하고, 질문응답 데이터라면 질문마다 정답이 필요하겠죠. 이렇게 라벨링 과정에 비용이 많이 들기 때문에, 모든 도메인에서 충분한 데이터를 갖추..
LSTM(Long Short Term Memory)는 1997년에 처음 제안된 RNN의 한 형태로, 바닐라 RNN의 장기 의존성 문제를 해결하기 위해 설계되었습니다. 모든 RNN은 신경망 모듈이 반복적으로 연결된 체인 형태를 가지는데, 바닐라 RNN은아래 그림처럼 단일 tanh층으로만 구성됩니다. LSTM도 기본적으로는 위처럼 체인 형태의 구조를 가지고 있습니다.하지만 큰 차이점이 하나 있는데, 반복되는 모듈의 구조가 다르다는 점입니다.바닐라 RNN에서는 이 모듈이 하나의 tanh 층으로만 이루어져 있는데요,LSTM에서는 4개의 층으로 구성되어있고, 이 네 층이 서로 상호작용하면서 동작합니다. LSTM의 핵심은 셀 상태 \(C_t\) 인데, 이는 다이어그램 상단을 가로지르는 선으로 표시됩니다.셀 상태는..
Semantic SegmentationFCN은 Semantic Segmentation을 위한 아키텍처 중 하나이다.이때 Semantic Segmentation이란, 아래 사진과 같이 픽셀마다 classification을 수행하는 작업이다.하지만 인스턴스끼리의 구분은 하지 못한다. 즉, 같은 클래스에 속하는 여러 개체가 있더라도 모두 동일한 라벨로만 표시된다. Fully Convolution Networks(FCN)기존의 CNN은 입력 이미지를 받아 특징을 추출한 뒤 마지막에 fully connected layer을 통해 단일 라벨을 출력하는 방식이었다. 반면 FCN은 FC layer를 모두 제거하고, 전 과정을 합성곱 연산만으로 구성하여입력과 동일한 크기의 출력을 생성할 수 있다. 따라서 이미지의 각 ..