본문 바로가기

전체 글27

RAG, LangChain로 어떻게 외부 데이터 검색하고 생성을 결합할까? RAG는 검색 (Retrieval)과 생성 (Generation)을 결합한 자연어 처리 기법이다.기존의 GPT 같은 생성형 AI는 훈련 데이터 내에서만 정보를 알고 있기 때문에, 최신 정보나 특정 도메인 지식이 부족할 수 있다. 즉, 훈련 데이터에 포함되지 않는 정보에 대해서 답변 불가능하다는 것이다.이러한 문제를 해결하기 위해, 외부 데이터베이스에서 관련 정보를 검색한 후, 그 정보를 바탕으로 답변을 생성한다. Retrieval (검색 단계)사용자의 질문(쿼리)과 관련된 문서를 외부 데이터베이스에서 검색 후, 각 텍스트를 임베딩 벡터로 변환(Sentence Transformers, OpenAI Embeddings 등 사용) -> 벡터 DB에 저장사용자 질문을 임베딩 벡터로 변환해, Vector Sear.. 2025. 3. 4.
[LLM] Fine-tuning이 왜 중요하며 어떻게 변화될까? HuggingFace는 transformer 모델 공유의 시초로 LLM의 모델을 공유하는 저장소이다.HuggingFace에서 제공하는 모델 튜닝 라이브러리로 TRL (Transformer Reinforcement Learning)이 있다.이는 Transformer 언어 모델을 학습하기 위한 라이브러리로, LLM 파인튜닝을 위해 Trainer 클래스 또는 SFTTrainer 클래스를 많이 이용하는 추세이다. 물론, Custom Trainer를 사용할 수도 있다.보통 모델 학습 과정을 직접 제어할 때 (학습률 조정, 손실 함수 변경 등) 유용하며, 반대로 빠르고 간단하게 LLM을 Fine-tuning하기를 원하거나 Reinforcement Learning Fine-tuning (PPO)를 하고자 할 때는 T.. 2025. 3. 3.
로컬과 원격의 차이는 무엇일까? 로컬에서 '모델을 로드하고 실행한다'라는 것은 내 PC 또는 서버에서 직접 모델을 돌릴 때를 말한다.로컬의 반대인 원격 (remote)에서 '모델을 로드하고 실행한다'라는 것은 클라우드 서버에서 모델을 가져와 실행하는 경우를 말한다. 그래서 로컬의 경우에는 CPU/GPU, RAM, 디스크 등 내가 갖고 있는 PC나 서버의 하드웨어를 사용하는 것이고,원격은 Hugging Face, OpenAI API, Google Colab 등 외부 서버에서 모델을 실행하는 것이다.따라서 모델 자체는 로컬에 없고 클라우드에 있으며 실행 요청만 보내면 모델을 알아서 로드시키고 실행시켜준다.우리가 원하는 파라미터나 출력값을 바로 가져올 수 있다. 만약에 외부에서 모델을 다운 받아 내 PC에 저장 시켜서 로드시키고 실행하는 것.. 2025. 2. 27.
컴퓨터 저장 단위란 무엇이며, 메모리 사용량은 어떻게 계산하는가? 어떤 작업이든 메모리 사용량을 고려하지 않을 수는 없다.1byte = 8bit 이고, bit (비트)는 일반적으로 문자나 숫자 데이터를 저장하는 기본 단위로 사용된다.'A' 문자의 아스키코드로 변환한 10진수 (65)를 예시로 들면, 이를 2진수로 표현하면 01000001 (8비트 즉, 1바이트)이다.만약 한글 '가' (UTF-8)의 경우에는 3바이트 (24비트), 이모지 '😊'의 경우에는 4바이트 (32비트)가 사용된다. 8비트로 표현 가능한 정수는 255이다. (11111111를 10진수로 변환하면, 255이다.) 숫자도 크기에 따라 필요한 바이트 수가 다르다. (INT8, INT16, FP32 등)예를 들면 INT32 (32비트 정수)의 경우 32비트 즉, 4바이트가 필요  참고로, 컴퓨터 저장 .. 2025. 2. 27.
[LLM] Transformer에서 positional encoding이 중요한 이유? Positional Encoding은 각 토큰이 어느 위치에 있는지 상대적인 위치를 나타내기 위한 것이다.(sin, cos을 이용하여 각 토큰마다 고유한 값을 가짐) 임베딩 벡터 내 요소의 인덱스가 짝수이면 sin함수를 적용하고 반대로, 인덱스가 홀수이면 cos함수를 적용한다.그 이유는 다음과 같다.sin,cos 함수는 주기성을 띄어서, 반복적인 패턴을 만들어 내며 서로 다른 주기성 특성을 (pi/2 만큼의 위상 차이) 갖고 있다.따라서, 둘을 함께 사용하면 더 세밀하게 위치 정보를 나타낼 수 있다.주기를 돌다보면 서로 비슷한 값을 지닐 수 있기 때문에 서로 다른 주기성 특성을 가지는 함수를 함께 사용하는 것이다.즉, 위치 차이를 명확히 나타낼 수 있게 된다.  상대적으로 낮은 위치를 가지는 인덱스는 비.. 2025. 2. 25.