-**Kubeflow**: Kubernetes 기반으로 머신러닝(ML) 워크플로우를 배포, 관리, 확장하는 오픈소스 플랫폼입니다. ML 파이프라인 구성, 하이퍼파라미터 튜닝, 모델 서빙 등 ML 수명주기 전반을 지원합니다.
| 용어 (Term) | 설명 (Description) |
-**CI/CD (Continuous Integration/Continuous Deployment)**: 코드 변경사항을 자동으로 빌드, 테스트, 배포하는 프로세스입니다. MLOps에서는 코드뿐만 아니라 데이터와 모델의 변경사항까지 관리하여 ML 시스템의 배포를 자동화합니다.
| --- | --- |
| **캡스톤 프로젝트 (Capstone Project)** | 학문 분야에서 여러 학기 동안 배운 이론과 기술을 총동원하여 실제 결과물(작품, 서비스, 논문 등)을 기획, 설계, 개발, 구현하는 종합 프로젝트입니다. 학습한 지식의 실질적인 적용 능력을 평가하고, 포트폴리오의 핵심적인 부분을 구성합니다. ("졸업 작품"과 유사) |
-**GitHub Actions**: GitHub 리포지토리 내에서 코드 푸시, Pull Request 등의 이벤트에 따라 CI/CD 와 같은 워크플로우를 자동화하는 도구입니다.
| **포트폴리오 (Portfolio)** | 개인이 자신의 기술, 능력, 경험, 성과를 보여주기 위해 만든 작품집 또는 자료 모음입니다. 개발자에게는 자신이 참여하거나 직접 만든 프로젝트, 코드 샘플, 기술 블로그, GitHub 프로필 등이 해당되며, 구직 및 경력 관리에 매우 중요합니다. |
| **문제 정의 (Problem Definition)** | 해결하고자 하는 특정 문제나 필요성을 명확하고 구체적으로 기술하는 과정입니다. 프로젝트의 목표와 범위를 설정하는 첫 단계이며, "무엇을 왜 만드는가?"에 대한 답을 제시합니다. |
-**Prometheus**: 시스템 및 서비스의 상태를 모니터링하기 위해 시계열 데이터(time-series data)를 수집하고 저장하는 오픈소스 모니터링 시스템입니다.
| **프로젝트 기획 (Project Planning)** | 정의된 문제를 해결하기 위한 구체적인 실행 계획을 수립하는 과정입니다. 목표 설정, 범위 정의, 필요한 리소스(시간, 인력, 기술 등) 파악, 일정 계획, 위험 관리 등을 포함합니다. |
| **요구사항 정의서 (Product Requirements Document, PRD)** | 개발하고자 하는 제품(서비스)의 목적, 기능, 사용자, 기술적 요구사항 등을 상세하게 기술한 문서입니다. 프로젝트 팀원 모두가 동일한 이해를 바탕으로 제품을 개발할 수 있도록 하는 청사진 역할을 합니다. |
-**Grafana**: Prometheus 등 다양한 데이터 소스로부터 수집된 메트릭을 시각화하고 분석하기 위한 오픈소스 대시보드 및 분석 플랫폼입니다.
| **시스템 아키텍처 (System Architecture)** | 개발하려는 시스템의 전체적인 구조와 구성 요소, 그리고 그들 간의 관계 및 상호작용을 정의한 설계도입니다. 데이터 흐름, 컴포넌트 간 인터페이스, 사용 기술 등을 시각적으로 표현하여 시스템의 이해를 돕습니다. (예: Mermaid, draw.io 사용) |
| **깃헙(GitHub) 협업 (GitHub Collaboration)** | 버전 관리 시스템인 Git의 웹 기반 호스팅 서비스인 GitHub를 사용하여 여러 개발자가 함께 프로젝트를 진행하는 방식입니다. 이슈 트래킹, 브랜치 전략, 풀 리퀘스트(PR)를 통한 코드 리뷰, 프로젝트 관리 등의 기능을 활용하여 효율적인 팀 개발을 지원합니다. |
-**Evidently AI**: 데이터 드리프트, 컨셉 드리프트, 모델 성능 저하 등 머신러닝 모델의 품질을 전문적으로 모니터링하고 시각화하는 오픈소스 라이브러리입니다.
| **코드 리뷰 (Code Review)** | 다른 개발자가 작성한 소스 코드를 검토하고 피드백을 제공하는 과정입니다. 코드의 품질 향상, 버그 조기 발견, 지식 공유, 팀 전체의 코드 이해도 증진 등의 효과가 있습니다. GitHub의 풀 리퀘스트(Pull Request) 기능을 통해 주로 이루어집니다. |
| **데모 (Demonstration)** | 개발한 제품이나 서비스의 주요 기능을 실제로 시연하여 보여주는 것입니다. 프로젝트의 결과물을 시각적으로 전달하고, 이해 관계자(팀원, 평가자, 사용자 등)의 피드백을 받는 데 효과적입니다. |
-**Feature Store**: 머신러닝 모델의 학습과 추론에 사용되는 피처(feature)를 중앙에서 관리, 저장, 제공하는 데이터 시스템입니다. 학습-서빙 스큐를 방지하고 피처 재사용성을 높입니다.
| **기술 블로그 (Tech Blog)** | 개발자가 자신이 학습한 기술, 프로젝트 경험, 문제 해결 과정, 개발 팁 등을 글로 작성하여 온라인에 공유하는 것입니다. 지식 정리, 개인 브랜딩, 커뮤니티 기여, 포트폴리오 강화 등 다양한 이점이 있습니다. |
-**Feast**: Feature Store를 구축하기 위한 널리 사용되는 오픈소스 프레임워크입니다.
---
\ No newline at end of file
*이 용어집은 `geumdo_docs/ai lecture/part_11_capstone_project_guide.md` 파일 내용을 기반으로 작성되었습니다.*
-**PEFT (Parameter-Efficient Fine-Tuning)**: 거대 언어 모델(LLM)의 사전 학습된 가중치 대부분을 고정한 채, 일부 파라미터만 학습시켜 적은 리소스로 효율적으로 모델을 특정 작업에 맞게 미세 조정하는 기법들의 총칭입니다.
-**LoRA (Low-Rank Adaptation)**: PEFT의 대표적인 기법 중 하나로, 기존 가중치 행렬 옆에 작은 크기의 학습 가능한 행렬 두 개(Low-rank 행렬)를 추가하여 파라미터 업데이트를 효율화합니다.
-**RAG (Retrieval-Augmented Generation)**: LLM이 답변을 생성할 때, 외부 데이터베이스나 문서에서 관련 정보를 실시간으로 검색(Retrieval)하여 그 내용을 참고해 답변의 정확성과 신뢰도를 높이는(Augmented Generation) 기술입니다.
-**쿼리 변환 (Query Transformation)**: 사용자의 원본 질문을 더 나은 검색 결과를 얻기 위해 여러 개의 다양한 질문으로 변형하거나, 더 명확한 형태로 재구성하는 RAG의 심화 기법입니다.
-**재순위화 (Re-ranking)**: 1차적으로 검색된 문서들을 더 정교한 모델을 사용해 사용자 질문과의 관련도 순으로 다시 정렬하여, LLM에게 전달할 최종 문서의 정확도를 높이는 과정입니다.
-**AI 에이전트 (AI Agent)**: 목표 달성을 위해 스스로 생각하고(Reasoning), 계획을 세우며, 도구(Tools)를 사용하고, 환경과 상호작용하는 능동적인 AI 시스템입니다. LLM이 '뇌'의 역할을 수행합니다.
-**ReAct (Reason + Act)**: AI 에이전트가 '생각(Thought) -> 행동(Action) -> 관찰(Observation)'의 순환적인 추론 과정을 통해 복잡한 문제를 해결하도록 하는 대표적인 프레임워크입니다.
-**LangGraph**: 여러 에이전트가 협력하거나 순환적인 작업 흐름을 처리하는 복잡한 AI 시스템을 상태(State) 기반의 그래프 형태로 쉽게 구현하도록 돕는 LangChain의 확장 라이브러리입니다.
-**LLMOps (Large Language Model Operations)**: 프롬프트 관리, 정성적 성능 평가, 실행 과정 추적 등 LLM 기반 애플리케이션의 전체 수명 주기를 안정적으로 관리하고 운영하기 위한 MLOps의 특화된 분야입니다.
-**LangSmith**: LLM 애플리케이션의 개발 및 운영을 위한 통합 플랫폼으로, 복잡한 체인과 에이전트의 내부 동작을 추적, 모니터링, 평가하는 강력한 기능을 제공합니다.
| **캡스톤 프로젝트 (Capstone Project)** | 학문 분야에서 여러 학기 동안 배운 이론과 기술을 총동원하여 실제 결과물(작품, 서비스, 논문 등)을 기획, 설계, 개발, 구현하는 종합 프로젝트입니다. 학습한 지식의 실질적인 적용 능력을 평가하고, 포트폴리오의 핵심적인 부분을 구성합니다. ("졸업 작품"과 유사) |
| **포트폴리오 (Portfolio)** | 개인이 자신의 기술, 능력, 경험, 성과를 보여주기 위해 만든 작품집 또는 자료 모음입니다. 개발자에게는 자신이 참여하거나 직접 만든 프로젝트, 코드 샘플, 기술 블로그, GitHub 프로필 등이 해당되며, 구직 및 경력 관리에 매우 중요합니다. |
| **문제 정의 (Problem Definition)** | 해결하고자 하는 특정 문제나 필요성을 명확하고 구체적으로 기술하는 과정입니다. 프로젝트의 목표와 범위를 설정하는 첫 단계이며, "무엇을 왜 만드는가?"에 대한 답을 제시합니다. |
| **프로젝트 기획 (Project Planning)** | 정의된 문제를 해결하기 위한 구체적인 실행 계획을 수립하는 과정입니다. 목표 설정, 범위 정의, 필요한 리소스(시간, 인력, 기술 등) 파악, 일정 계획, 위험 관리 등을 포함합니다. |
| **요구사항 정의서 (Product Requirements Document, PRD)** | 개발하고자 하는 제품(서비스)의 목적, 기능, 사용자, 기술적 요구사항 등을 상세하게 기술한 문서입니다. 프로젝트 팀원 모두가 동일한 이해를 바탕으로 제품을 개발할 수 있도록 하는 청사진 역할을 합니다. |
| **시스템 아키텍처 (System Architecture)** | 개발하려는 시스템의 전체적인 구조와 구성 요소, 그리고 그들 간의 관계 및 상호작용을 정의한 설계도입니다. 데이터 흐름, 컴포넌트 간 인터페이스, 사용 기술 등을 시각적으로 표현하여 시스템의 이해를 돕습니다. (예: Mermaid, draw.io 사용) |
| **깃헙(GitHub) 협업 (GitHub Collaboration)** | 버전 관리 시스템인 Git의 웹 기반 호스팅 서비스인 GitHub를 사용하여 여러 개발자가 함께 프로젝트를 진행하는 방식입니다. 이슈 트래킹, 브랜치 전략, 풀 리퀘스트(PR)를 통한 코드 리뷰, 프로젝트 관리 등의 기능을 활용하여 효율적인 팀 개발을 지원합니다. |
| **코드 리뷰 (Code Review)** | 다른 개발자가 작성한 소스 코드를 검토하고 피드백을 제공하는 과정입니다. 코드의 품질 향상, 버그 조기 발견, 지식 공유, 팀 전체의 코드 이해도 증진 등의 효과가 있습니다. GitHub의 풀 리퀘스트(Pull Request) 기능을 통해 주로 이루어집니다. |
| **데모 (Demonstration)** | 개발한 제품이나 서비스의 주요 기능을 실제로 시연하여 보여주는 것입니다. 프로젝트의 결과물을 시각적으로 전달하고, 이해 관계자(팀원, 평가자, 사용자 등)의 피드백을 받는 데 효과적입니다. |
| **기술 블로그 (Tech Blog)** | 개발자가 자신이 학습한 기술, 프로젝트 경험, 문제 해결 과정, 개발 팁 등을 글로 작성하여 온라인에 공유하는 것입니다. 지식 정리, 개인 브랜딩, 커뮤니티 기여, 포트폴리오 강화 등 다양한 이점이 있습니다. |
---
*이 용어집은 `geumdo_docs/ai lecture/part_11_capstone_project_guide.md` 파일 내용을 기반으로 작성되었습니다.*
-**정의**: 구글에서 제공하는 클라우드 기반의 무료 Jupyter 노트북 환경. 별도의 개발 환경 설정 없이 웹 브라우저만으로 파이썬 코드를 작성하고 실행할 수 있으며, 특히 무료로 GPU 가속을 사용할 수 있어 머신러닝 및 딥러닝 모델 학습에 매우 유용합니다.
-**정의**: 구글에서 제공하는 클라우드 기반의 무료 Jupyter 노트북 환경. 별도의 개발 환경 설정 없이 웹 브라우저만으로 파이썬 코드를 작성하고 실행할 수 있으며, 특히 무료로 GPU 가속을 사용할 수 있어 머신러닝 및 딥러닝 모델 학습에 매우 유용합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**AI-Powered IDE (AI 기반 통합 개발 환경)**
-**정의**: 기존 IDE에 코드 생성, 수정, 디버깅, 질문 답변 등의 기능을 수행하는 AI 모델이 결합된 차세대 개발 환경. 개발자의 생산성을 극대화하고 반복적인 작업을 자동화합니다. (예: Cursor, GitHub Copilot)
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**Cursor**
-**정의**: VS Code를 기반으로 제작된 AI 네이티브 코드 에디터. VS Code의 모든 기능과 확장 프로그램을 그대로 사용하면서, 프로젝트 전체의 맥락을 이해하는 AI 채팅, 인라인 코드 생성 및 수정, 자동 디버깅 등 강력한 AI 기능을 제공합니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**Code Generation (코드 생성)**
-**정의**: 개발자가 자연어(주석 등)로 원하는 기능이나 로직을 설명하면, AI가 그에 맞는 코드 스니펫이나 전체 함수/클래스를 자동으로 작성해주는 기능.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**Context-aware AI (맥락 인지 AI)**
-**정의**: 단순히 주어진 질문이나 명령어만 보는 것을 넘어, 현재 작업 중인 프로젝트의 파일 구조, 열려 있는 탭, 터미널 로그, 심지어 참조된 문서까지 종합적으로 파악하여 사용자의 의도에 가장 적합한 답변이나 코드를 제공하는 AI 기술. Cursor의 핵심적인 강점 중 하나입니다.
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
-**관련 파트**: [Part 1: AI 개발 환경 완벽 구축 가이드](../part_1_ai_development_environment.md)
| **텐서 (Tensor)** | PyTorch에서 데이터를 다루는 기본 단위이자 다차원 배열입니다. NumPy의 `ndarray`와 유사하지만, GPU를 사용한 고속 연산 및 자동 미분 기능을 핵심적으로 지원하여 딥러닝 모델 학습에 필수적입니다. |
| **텐서 (Tensor)** | PyTorch에서 데이터를 다루는 기본 단위이자 다차원 배열입니다. NumPy의 `ndarray`와 유사하지만, GPU를 사용한 고속 연산 및 자동 미분 기능을 핵심적으로 지원하여 딥러닝 모델 학습에 필수적입니다. |
| **인공 신경망 (Artificial Neural Network, ANN)** | 인간의 뇌 신경망 구조에서 영감을 받아 설계된 계산 모델입니다. 여러 개의 노드(뉴런)들이 서로 연결되어 계층(layer)을 이루며, 입력 데이터로부터 패턴을 학습하여 특정 작업을 수행합니다. |
| **인공 신경망 (Artificial Neural Network, ANN)** | 인간의 뇌 신경망 구조에서 영감을 받아 설계된 계산 모델입니다. 여러 개의 노드(뉴런)들이 서로 연결되어 계층(layer)을 이루며, 입력 데이터로부터 패턴을 학습하여 특정 작업을 수행합니다. |
| **`nn.Module`** | PyTorch에서 모든 신경망 모델의 기본이 되는 클래스입니다. 사용자는 이 클래스를 상속받아 자신만의 모델 구조(`__init__`)와 데이터 흐름(`forward`)을 정의합니다. 모델의 파라미터 관리, 저장 및 로드, GPU 이동 등의 기능을 제공합니다. |
| **`nn.Module`** | PyTorch에서 모든 신경망 모델의 기본이 되는 클래스입니다. 사용자는 이 클래스를 상속받아 자신만의 모델 구조(`__init__`)와 데이터 흐름(`forward`)을 정의합니다. 모델의 파라미터 관리, 저장 및 로드, GPU 이동 등의 기능을 제공합니다. |
| **활성화 함수 (Activation Function)** | 신경망의 각 뉴런(또는 노드)에 입력된 신호를 변환하여 다음 뉴런으로 전달할지 여부와 전달할 신호의 크기를 결정하는 함수입니다. 선형 모델에 비선형성을 추가하여 모델의 표현력을 높이는 핵심적인 역할을 합니다. (예: `ReLU`, `Sigmoid`, `Tanh`) |
| **활성화 함수 (Activation Function)** | 신경망의 선형 계층(Linear Layer) 통과 후 적용되는 비선형(non-linear) 함수입니다. 이 비선형성이 없다면 여러 계층을 쌓아도 결국 하나의 선형 함수와 같기 때문에, 활성화 함수는 모델이 복잡하고 구불구불한 데이터 패턴을 학습할 수 있는 표현력(Expressiveness)을 부여하는 핵심적인 역할을 합니다. |
| **손실 함수 (Loss Function / Cost Function)** | 딥러닝 모델의 예측값과 실제 정답(레이블) 사이의 차이, 즉 '오차'를 측정하는 함수입니다. 모델 학습 과정에서 이 손실 함수의 값을 최소화하는 방향으로 모델의 파라미터(가중치)가 업데이트됩니다. (예: `nn.CrossEntropyLoss` - 분류, `nn.MSELoss` - 회귀) |
| **손실 함수 (Loss Function / Cost Function)** | 모델의 예측값(prediction)과 실제 정답(target) 사이의 차이, 즉 '오차(Error)'를 수치적으로 계산하는 함수입니다. 딥러닝 학습은 이 손실 함수의 값을 최소화하는 방향으로 모델의 파라미터(가중치)를 업데이트하는 과정입니다. 해결하려는 문제의 종류(회귀, 분류)에 따라 적합한 손실 함수를 선택해야 합니다. |
| **ReLU (Rectified Linear Unit)** | 딥러닝에서 가장 널리 사용되는 활성화 함수. 입력이 0보다 크면 값을 그대로 출력하고, 0보다 작으면 0을 출력합니다 (`max(0, x)`). 계산이 매우 빠르고 Sigmoid나 Tanh의 Vanishing Gradient 문제를 해결하여 학습 속도를 높입니다. |
| **Softmax** | 다중 클래스 분류 문제의 마지막 출력층에서 사용되는 활성화 함수입니다. 모델의 최종 출력(Logits)을 각 클래스에 대한 '확률'로 변환해줍니다. 모든 출력의 합은 1이 되므로, 가장 확률이 높은 클래스를 선택하는 근거가 됩니다. |
| **교차 엔트로피 (Cross-Entropy)** | 분류 문제에서 사용되는 대표적인 손실 함수입니다. 모델이 예측한 확률 분포와 실제 정답의 확률 분포가 얼마나 다른지를 측정합니다. 모델이 정답 클래스를 낮은 확률로 예측할수록 손실 값이 커집니다. (PyTorch의 `nn.CrossEntropyLoss`는 Softmax를 내장하고 있습니다.) |
| **옵티마이저 (Optimizer)** | 손실 함수가 계산한 오차(손실 값)를 기반으로, 모델의 파라미터(가중치와 편향)를 효과적으로 업데이트하여 손실을 최소화하는 알고리즘입니다. (예: `Adam`, `SGD`, `RMSprop`) |
| **옵티마이저 (Optimizer)** | 손실 함수가 계산한 오차(손실 값)를 기반으로, 모델의 파라미터(가중치와 편향)를 효과적으로 업데이트하여 손실을 최소화하는 알고리즘입니다. (예: `Adam`, `SGD`, `RMSprop`) |
| **순전파 (Forward Propagation)** | 인공 신경망에서 입력 데이터가 입력층에서 시작하여 은닉층들을 거쳐 출력층까지 전달되면서 각 층에서 가중치와 곱해지고 활성화 함수를 통과하여 최종 예측값을 계산하는 과정입니다. |
| **순전파 (Forward Propagation)** | 인공 신경망에서 입력 데이터가 입력층에서 시작하여 은닉층들을 거쳐 출력층까지 전달되면서 각 층에서 가중치와 곱해지고 활성화 함수를 통과하여 최종 예측값을 계산하는 과정입니다. |
| **역전파 (Backward Propagation)** | 순전파를 통해 계산된 예측값과 실제 정답 사이의 오차(손실)를 기반으로, 이 오차에 각 파라미터가 얼마나 기여했는지를 출력층부터 입력층 방향으로 거슬러 올라가며 계산하는 과정입니다(미분을 사용). 이 결과를 바탕으로 옵티마이저가 파라미터를 업데이트합니다. 딥러닝 학습의 핵심 알고리즘입니다. |
| **역전파 (Backward Propagation)** | 순전파를 통해 계산된 예측값과 실제 정답 사이의 오차(손실)를 기반으로, 이 오차에 각 파라미터가 얼마나 기여했는지를 출력층부터 입력층 방향으로 거슬러 올라가며 계산하는 과정입니다(미분을 사용). 이 결과를 바탕으로 옵티마이저가 파라미터를 업데이트합니다. 딥러닝 학습의 핵심 알고리즘입니다. |
| **에포크 (Epoch)** | 전체 훈련 데이터셋이 신경망 모델을 통해 한 번 완전히 통과(순전파 및 역전파)된 횟수를 의미합니다. 즉, 모든 훈련 샘플이 학습에 한 번 사용되면 1 에포크가 완료된 것입니다. |
| **에포크 (Epoch)** | 전체 훈련 데이터셋이 신경망 모델을 통해 한 번 완전히 통과(순전파 및 역전파)된 횟수를 의미합니다. 즉, 모든 훈련 샘플이 학습에 한 번 사용되면 1 에포크가 완료된 것입니다. |
| **CNN (Convolutional Neural Network / 합성곱 신경망)** | 이미지 인식 및 처리에 특화된 딥러닝 모델 아키텍처입니다. 입력 데이터에서 특징(feature)을 추출하는 합성곱 계층(Convolutional Layer)과 풀링 계층(Pooling Layer)을 사용하여 공간적 계층 구조를 효과적으로 학습합니다. |
| **CNN (Convolutional Neural Network / 합성곱 신경망)** | 이미지 인식 및 처리에 특화된 딥러닝 모델 아키텍처입니다. 입력 데이터에서 특징(feature)을 추출하는 합성곱 계층(Convolutional Layer)과 풀링 계층(Pooling Layer)을 사용하여 공간적 계층 구조를 효과적으로 학습합니다. |
| **Attention** | RNN의 장기 의존성 문제를 해결하기 위해 등장한 메커니즘으로, 번역할 문장을 생성할 때 인코더의 모든 출력 중 현재 예측해야 할 단어와 연관이 높은 입력 단어에 더 집중(가중치 부여)하는 방식입니다. |
| **Transformer** | RNN을 사용하지 않고 Attention 메커니즘만으로 데이터의 순차적 정보와 문맥을 학습하는 혁신적인 신경망 아키텍처입니다. 병렬 처리가 가능하여 학습 속도가 매우 빠르며, 현대 자연어 처리 모델의 기반이 됩니다. |
| **Self-Attention** | Transformer의 핵심 구성 요소로, 문장 내의 단어들이 서로를 얼마나 참조해야 하는지(관련이 있는지)를 계산하는 메커니즘입니다. 이를 통해 문맥에 맞는 단어의 의미를 파악할 수 있습니다. |
| **Positional Encoding** | 순서 정보가 없는 Transformer에게 단어의 위치 정보를 제공하기 위해 각 단어의 임베딩 벡터에 더해주는 고정된 값입니다. 사인, 코사인 함수를 사용하여 위치 정보를 벡터로 표현합니다. |
| **Encoder (인코더)** | Transformer 구조의 일부로, 입력 문장을 받아 각 단어의 의미와 문맥 정보를 함축한 벡터 표현(representation)으로 변환하는 역할을 합니다. Self-Attention과 피드포워드 신경망으로 구성됩니다. |
| **Decoder (디코더)** | Transformer 구조의 일부로, 인코더의 출력과 이전에 생성된 출력값을 입력으로 받아 다음 단어를 예측하는 역할을 합니다. |
| **BERT (Bidirectional Encoder Representations from Transformers)** | Google에서 개발한 언어 모델로, Transformer의 인코더 구조만을 사용합니다. 문장의 양방향 문맥을 모두 학습하여 문맥을 이해하는 데 매우 뛰어난 성능을 보입니다. (주로 문장 이해, 분류, 개체명 인식 등에 활용) |
| **GPT (Generative Pre-trained Transformer)** | OpenAI에서 개발한 언어 모델로, Transformer의 디코더 구조만을 사용합니다. 이전 단어들을 기반으로 다음 단어를 예측하는 방식으로 학습되어 문장 생성에 매우 뛰어난 성능을 보입니다. (주로 챗봇, 텍스트 생성 등에 활용) |
---
---
*이 용어집은 `geumdo_docs/ai lecture/part_7_deep_learning.md` 파일 내용을 기반으로 작성되었습니다.*
*이 용어집은 `geumdo_docs/ai lecture/part_7_deep_learning.md` 와 `geumdo_docs/ai lecture/part_7.1_transformer_and_llm_principles.md` 파일 내용을 기반으로 작성되었습니다.*
@@ -30,34 +30,41 @@ AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는
...
@@ -30,34 +30,41 @@ AI 서비스를 만드는 것은 마치 **'스스로 생각하고 행동하는
- Python 기본 문법은 알지만, 실제 프로젝트 경험이 부족한 **학생 또는 주니어 개발자**
- Python 기본 문법은 알지만, 실제 프로젝트 경험이 부족한 **학생 또는 주니어 개발자**
- AI 모델은 개발했지만, 이를 어떻게 서비스로 만들어야 할지 막막한 **연구자 및 데이터 분석가**
- AI 모델은 개발했지만, 이를 어떻게 서비스로 만들어야 할지 막막한 **연구자 및 데이터 분석가**
## 5. 12주 학습 로드맵 (Course Roadmap)
## 5. 학습 로드맵 (Course Roadmap)
우리는 12주 동안 다음의 로드맵에 따라 체계적으로 학습을 진행합니다. 이 로드맵은 AI 서비스 개발이라는 보물섬을 찾아가는 **'친절한 안내 지도'**입니다. 각 주차별 목표를 따라 한 걸음씩 나아가다 보면, 어느새 유능한 개발자로 성장한 자신을 발견하게 될 것입니다.
우리는 다음의 로드맵에 따라 체계적으로 학습을 진행합니다. 이 로드맵은 AI 서비스 개발이라는 보물섬을 찾아가는 **'친절한 안내 지도'**입니다. 각 주차별 목표를 따라 한 걸음씩 나아가다 보면, 어느새 유능한 AI 전문가로 성장한 자신을 발견하게 될 것입니다.
```mermaid
```mermaid
graph TD
graph TD
subgraph "1부: 파이썬 기초 다지기 (1-4주)"
subgraph "1부: AI 개발을 위한 파이썬 마스터리 (1-5주)"
W1["<a href='part_1_ai_development_environment.md'><b>1주차</b>: 과정 소개 및<br/>개발 환경 설정</a>"]
W1["<a href='part_1_ai_development_environment.md'><b>1주차</b>: 개발 환경 설정</a>"]
W2["<a href='part_2_python_core_syntax.md'><b>2주차</b>: 파이썬 핵심 문법</a>"]
W2["<a href='part_2_python_core_syntax.md'><b>2주차</b>: 파이썬 핵심 문법</a>"]
> A3: 기본적인 코딩은 일반적인 노트북으로 충분합니다. 모델 학습 등 높은 사양이 필요한 경우, 무료로 사용할 수 있는 <a href="glossaries/part_0_glossary.md#google-colab-구글-코랩">Google Colab</a>을 활용하는 방법을 안내해 드리므로 걱정하지 않으셔도 됩니다.
> A3: 기본적인 코딩은 일반적인 노트북으로 충분합니다. 모델 학습 등 높은 사양이 필요한 경우, 무료로 사용할 수 있는 <a href="glossaries/part_0_glossary.md#google-colab-구글-코랩">Google Colab</a>을 활용하는 방법을 안내해 드리므로 걱정하지 않으셔도 됩니다.
**Q4: 캡스톤 프로젝트는 어떻게 진행되나요?**
**Q4: 캡스톤 프로젝트는 어떻게 진행되나요?**
> A4: 11-12주차에 진행되며, 수강생들이 직접 주제를 선정하고 기획, 개발, 발표까지 진행합니다. 이 과정에서 멘토링을 통해 프로젝트가 올바른 방향으로 나아갈 수 있도록 적극적으로 지원합니다. 자세한 내용은 <a href="part_11_capstone_project_guide.md">캡스톤 프로젝트 가이드</a>를 참고하세요.
> A4: 과정의 마지막 15-16주차에 진행되며, 수강생들이 직접 주제를 선정하고 기획, 개발, 발표까지 진행합니다. 이 과정에서 멘토링을 통해 프로젝트가 올바른 방향으로 나아갈 수 있도록 적극적으로 지원합니다. 자세한 내용은 <a href="part_15_capstone_project.md">캡스톤 프로젝트 가이드</a>를 참고하세요.
> **💡 비유: 'F-16 전투기'에서 'AI 비서(자비스)가 탑재된 F-35 스텔스기'로**
> **💡 비유: 'F-16 전투기'에서 'AI 비서(자비스)가 탑재된 F-35 스텔스기'로**
>
>
> - **전통적인 IDE (VSCode, PyCharm)**: 수많은 계기판과 버튼을 조종사가 직접 조작해야 하는 'F-16 전투기'와 같습니다. 강력하지만 모든 것을 직접 해야 합니다.
> - **전통적인 IDE (VSCode, PyCharm)**: 수많은 계기판과 버튼을 조종사가 직접 조작해야 하는 'F-16 전투기'와 같습니다. 강력하지만 모든 것을 직접 해야 합니다.
> - **AI 네이티브 IDE (Cursor, GitHub Copilot)**: 조종사의 의도를 파악한 'AI 비서'가 복잡한 태스크 조작, 항로 계산, 위협 감지 등을 도와주는 'F-35 스텔스기'의 조종석과 같습니다. 개발자는 문제 해결이라는 본질적인 목표에만 집중할 수 있습니다.
> - **AI 네이티브 IDE (GitHub Copilot 등)**: 조종사의 의도를 파악한 'AI 비서'가 복잡한 태스크 조작, 항로 계산, 위협 감지 등을 도와주는 'F-35 스텔스기'의 조종석과 같습니다. 개발자는 문제 해결이라는 본질적인 목표에만 집중할 수 있습니다.
### AI 네이티브 IDE, 어떻게 쓸 것인가?
### AI 네이티브 IDE, 어떻게 쓸 것인가?
...
@@ -170,7 +170,7 @@ graph TD
...
@@ -170,7 +170,7 @@ graph TD
```
```
### Lab 2: AI 네이티브 IDE로 코드 리팩터링하기
### Lab 2: AI 네이티브 IDE로 코드 리팩터링하기
아래의 비효율적인 코드를 [Cursor](glossaries/part_10_glossary.md#cursor)나 [GitHub Copilot](glossaries/part_10_glossary.md#github-copilot)을 사용하여 리팩터링하세요.
아래의 비효율적인 코드를 [GitHub Copilot](glossaries/part_10_glossary.md#github-copilot)과 같은 AI 네이티브 IDE를 사용하여 리팩터링하세요.
**미션**:
**미션**:
1. 각 기능을 별도의 함수로 분리하세요.
1. 각 기능을 별도의 함수로 분리하세요.
...
@@ -254,7 +254,7 @@ AI의 세계는 광활하며 빠르게 변화합니다. 아래 로드맵을 참
...
@@ -254,7 +254,7 @@ AI의 세계는 광활하며 빠르게 변화합니다. 아래 로드맵을 참
-**AI 서비스 개발의 A to Z**: 데이터 처리, 모델링, API 서빙, 배포까지 AI 서비스 개발의 전체 생명주기를 직접 경험하며 '만드는 능력'을 갖추었습니다.
-**AI 서비스 개발의 A to Z**: 데이터 처리, 모델링, API 서빙, 배포까지 AI 서비스 개발의 전체 생명주기를 직접 경험하며 '만드는 능력'을 갖추었습니다.
-**지속가능한 AI를 위한 MLOps**: CI/CD, 버전 관리, 모니터링의 개념을 이해하고, `MLflow`와 `DVC`를 통해 AI 서비스를 안정적으로 운영하기 위한 기초를 다졌습니다.
-**지속가능한 AI를 위한 MLOps**: CI/CD, 버전 관리, 모니터링의 개념을 이해하고, `MLflow`와 `DVC`를 통해 AI 서비스를 안정적으로 운영하기 위한 기초를 다졌습니다.
-**AI 시대의 개발 생산성**: `Cursor`와 같은 AI 네이티브 도구를 활용하여 개발의 패러다임이 어떻게 변하고 있는지 체험하고, 생산성을 극대화하는 방법을 배웠습니다.
-**AI 시대의 개발 생산성**: `GitHub Copilot`과 같은 AI 네이티브 도구를 활용하여 개발의 패러다임이 어떻게 변하고 있는지 체험하고, 생산성을 극대화하는 방법을 배웠습니다.
-**AI 전문가로의 성장 로드맵**: SLM, 멀티모달, AI 에이전트 등 최신 트렌드를 파악하고, 기술적 깊이와 윤리적 소양을 함께 갖춘 전문가로 성장하기 위한 방향을 설정했습니다.
-**AI 전문가로의 성장 로드맵**: SLM, 멀티모달, AI 에이전트 등 최신 트렌드를 파악하고, 기술적 깊이와 윤리적 소양을 함께 갖춘 전문가로 성장하기 위한 방향을 설정했습니다.
이 과정이 여러분의 커리어에 단단한 발판이 되기를 진심으로 바랍니다. 여러분의 성장을 항상 응원하겠습니다.
이 과정이 여러분의 커리어에 단단한 발판이 되기를 진심으로 바랍니다. 여러분의 성장을 항상 응원하겠습니다.
머신러닝 모델을 성공적으로 개발하는 것과, 이를 안정적으로 운영하여 비즈니스 가치를 창출하는 것은 전혀 다른 차원의 문제입니다. Part 11에서는 '모델 개발' 이후의 단계, 즉 프로덕션 환경에서 마주하게 될 현실적인 과제들을 해결하는 '프로덕션 레벨 MLOps' 기술을 심도 있게 탐구합니다. 이제 여러분의 모델을 실험실에서 꺼내 실제 세상에서 살아 숨 쉬게 만드는 여정을 시작하겠습니다.
---
## 4. ML 파이프라인 오케스트레이션
### Kubeflow 소개
Kubeflow는 머신러닝(ML) 워크플로우를 Kubernetes 상에서 간단하고, 이식성 있으며, 확장 가능하게 배포하는 것을 목표로 하는 오픈소스 플랫폼입니다. Google에서 시작하여 현재는 커뮤니티 중심으로 개발되고 있으며, ML 수명주기 전반을 지원하는 다양한 도구들을 통합 제공합니다.
**주요 특징:**
-**Composability (구성성)**: 각기 다른 클라우드와 온프레미스 환경에서 동일하게 실행되는 ML 파이프라인을 쉽게 구성할 수 있습니다.
-**Portability (이식성)**: 한번 개발한 ML 워크플로우는 큰 변경 없이 로컬, 온프레미스, 클라우드 등 다양한 Kubernetes 환경으로 이전할 수 있습니다.
-**Scalability (확장성)**: Kubernetes의 강력한 확장성을 기반으로 데이터 처리, 모델 학습, 서빙 등 각 단계의 리소스를 유연하게 조절할 수 있습니다.
**핵심 구성 요소:**
-**Kubeflow Pipelines**: ML 워크플로우를 파이프라인으로 구성하고 관리하는 도구입니다. 각 단계를 컨테이너화된 컴포넌트로 정의하고, 이들의 실행 순서와 의존성을 관리합니다. 재사용 가능한 컴포넌트를 만들어 파이프라인을 효율적으로 구축할 수 있습니다.
-**Katib**: 하이퍼파라미터 튜닝 및 신경망 아키텍처 탐색(NAS)을 자동화하는 도구입니다. 최적의 모델을 찾기 위한 다양한 알고리즘(예: Grid Search, Random Search, Bayesian Optimization)을 지원합니다.
-**KServe (구 KFServing)**: 복잡한 서버리스 추론 워크로드를 Kubernetes에서 실행하기 위한 표준 모델 추론 플랫폼입니다. Canary 배포, 자동 스케일링 등 프로덕션 환경에 필수적인 기능을 제공합니다.
-**Training Operators**: TensorFlow, PyTorch, XGBoost, MPI 등 다양한 프레임워크를 사용하여 분산 학습을 쉽게 실행할 수 있도록 Kubernetes Custom Resource (CRD)를 제공합니다.
---
## 5. CI/CD for Machine Learning
### GitHub Actions를 활용한 ML CI/CD
CI/CD(Continuous Integration/Continuous Deployment & Delivery)는 소프트웨어 개발의 핵심적인 자동화 프로세스입니다. 머신러닝 시스템에 CI/CD를 적용하는 것을 특별히 MLOps의 CI/CD라고 하며, 이는 코드뿐만 아니라 데이터와 모델의 변경사항까지 지속적으로 통합하고 테스트하며 배포하는 것을 목표로 합니다.
**ML을 위한 CI/CD의 주요 단계:**
-**CI (Continuous Integration)**:
-**코드 통합**: 새로운 코드(데이터 처리, 피처 엔지니어링, 모델링 등)가 중앙 리포지토리(예: Git)에 통합될 때마다 자동화된 빌드 및 테스트를 실행합니다.
-**단위/통합 테스트**: 코드의 기능적 정확성을 검증합니다.
-**데이터 유효성 검사**: 새로운 데이터의 스키마, 분포 등을 검증합니다.
-**모델 품질 검증**: 학습된 모델이 최소 성능 요구사항을 만족하는지 검증합니다.
-**CD (Continuous Deployment/Delivery)**:
-**모델 배포 자동화**: CI를 통과한 모델을 자동으로 스테이징 또는 프로덕션 환경에 배포합니다.
-**점진적 배포 (Progressive Delivery)**: Canary 배포, Blue/Green 배포, A/B 테스트 등의 전략을 사용하여 새로운 모델을 점진적으로 릴리즈하고, 안정성을 모니터링합니다.
-**모델 롤백**: 새로운 모델에 문제가 발생했을 경우, 이전 버전으로 신속하게 롤백하는 파이프라인을 구축합니다.
**GitHub Actions란?**
GitHub Actions는 GitHub 리포지토리에서 바로 소프트웨어 개발 워크플로우를 자동화할 수 있게 해주는 도구입니다. 코드 푸시, Pull Request 생성 등 특정 이벤트에 의해 트리거되는 워크플로우를 YAML 파일 형식으로 간단하게 정의할 수 있어, ML을 위한 CI/CD 파이프라인을 구축하는 데 매우 유용합니다.
프로덕션 환경에서 운영되는 머신러닝 모델은 시간이 지남에 따라 성능이 저하될 수 있습니다. 입력 데이터의 분포가 변하는 '데이터 드리프트(Data Drift)'나 모델의 예측 성능 자체가 떨어지는 '컨셉 드리프트(Concept Drift)'가 주요 원인입니다. 따라서 모델의 상태와 성능을 실시간으로 모니터링하고, 문제가 발생했을 때 즉시 대응할 수 있는 시스템을 구축하는 것이 필수적입니다.
이 섹션에서는 다음과 같은 오픈소스 도구를 활용한 모니터링 및 알림 시스템 구축 방법을 다룹니다.
-**Prometheus**: 시계열 데이터(Time-series data)를 수집하고 저장하는 모니터링 시스템 및 데이터베이스
-**Grafana**: 수집된 데이터를 시각화하고 대시보드를 구축하는 분석 플랫폼
-**Evidently AI**: 데이터 드리프트, 모델 성능 등 ML 시스템의 품질을 평가하고 시각화하는 전문 라이브러리
### Prometheus: 시스템 메트릭 수집
Prometheus는 서비스 디스커버리 또는 정적 설정을 통해 대상(endpoint)으로부터 HTTP 요청으로 메트릭을 주기적으로 수집(pull)하는 방식으로 동작합니다. FastAPI와 같은 API 서버에서는 클라이언트 라이브러리를 사용하여 예측 요청 수, 지연 시간, 에러율 등 다양한 메트릭을 노출할 수 있습니다.
### Grafana: 모니터링 대시보드 시각화
Grafana는 Prometheus를 데이터 소스(Data Source)로 연동하여, 수집된 메트릭을 의미 있는 그래프와 차트로 시각화합니다. 사용자는 드래그 앤 드롭 인터페이스를 통해 다음과 같은 정보를 포함하는 맞춤형 대시보드를 쉽게 만들 수 있습니다.
- 시간당 예측 요청 수 (RPS)
- 예측 응답 시간의 분포 (Latency)
- HTTP 상태 코드별 에러율
또한, 특정 메트릭이 임계값을 넘었을 때 Slack, 이메일 등으로 알림(Alert)을 보내도록 설정할 수 있습니다.
### Evidently AI: ML 모델 품질 모니터링
Prometheus와 Grafana가 시스템의 운영 메트릭에 중점을 둔다면, Evidently AI는 모델 자체의 품질과 데이터의 통계적 특성 변화를 모니터링하는 데 특화되어 있습니다.
**주요 기능:**
-**데이터 드리프트 감지**: 학습에 사용된 참조(reference) 데이터셋과 현재 프로덕션 환경의 입력 데이터셋 간의 통계적 분포 차이를 감지합니다.
-**타겟 드리프트 및 모델 성능 모니터링**: 예측값의 분포 변화나, 실제 레이블이 제공될 경우 정확도/F1 점수 등 모델 성능 지표의 변화를 추적합니다.
-**시각적 리포트 생성**: 드리프트 및 성능 분석 결과를 HTML 리포트나 JSON 프로필로 생성하여 직관적으로 확인할 수 있습니다.
Evidently AI는 배치(batch) 작업으로 리포트를 생성하거나, FastAPI 엔드포인트와 통합하여 실시간으로 메트릭을 계산하고 이를 Prometheus로 노출시켜 Grafana 대시보드에 함께 표시하는 방식으로 활용할 수 있습니다.
---
## 7. Feature Store의 이해와 활용
머신러닝 모델을 개발하고 운영하는 과정에서 '피처(Feature)'는 매우 중요한 역할을 합니다. 좋은 피처를 발굴하고, 일관성 있게 관리하며, 학습과 추론 파이프라인에 안정적으로 제공하는 것은 성공적인 MLOps의 핵심 과제 중 하나입니다. Feature Store는 바로 이러한 피처 관련 작업을 중앙에서 체계적으로 관리하기 위한 데이터 시스템입니다.
### Feature Store란?
Feature Store는 ML 피처를 저장, 관리, 검색하고 제공하는 중앙 집중식 저장소입니다. ML 시스템의 학습(Training)과 서빙(Serving)이라는 두 가지 주요 사용 사례를 모두 지원하도록 설계되었습니다.
**주요 필요성:**
-**학습-서빙 스큐(Training-Serving Skew) 방지**: 모델 학습 시점과 실시간 예측 시점에서 피처를 계산하는 로직이 달라 발생할 수 있는 불일치 문제를 해결합니다. 동일한 피처 정의를 공유하여 일관성을 보장합니다.
-**피처 재사용성 증대**: 여러 모델과 팀에서 공통으로 사용하는 피처를 중앙에서 관리하여 중복 개발을 방지하고 협업을 촉진합니다.
-**피처 검색 및 탐색 용이**: 어떤 피처가 사용 가능한지, 어떻게 정의되었는지 쉽게 검색하고 이해할 수 있는 중앙 카탈로그 역할을 합니다.
-**Point-in-Time Correctness 보장**: 특정 시점 기준으로 정확한 피처를 조회할 수 있게 하여, 데이터 누수(Data Leakage) 없이 과거 데이터를 사용한 모델 학습을 지원합니다.
### Feast (Feature Store for ML) 소개
Feast는 Feature Store를 구축하기 위한 널리 사용되는 오픈소스 프레임워크입니다. Python 라이브러리 기반으로 가볍게 시작할 수 있으며, 프로덕션 환경까지 확장 가능한 유연성을 제공합니다.
**Feast의 주요 개념:**
-**Feature Repository**: Feast의 핵심으로, 피처 정의, 데이터 소스, 관련 객체들을 파일 기반으로 관리하는 디렉토리입니다. Git과 같은 버전 관리 시스템으로 쉽게 추적할 수 있습니다.
-**Data Source**: 원본 데이터가 저장된 위치를 가리킵니다. 파일(Parquet, CSV), BigQuery, Redshift, Snowflake 등 다양한 소스를 지원합니다.
-**Entity**: 피처가 연결되는 기본 키(Primary Key)입니다. 예를 들어, '사용자 ID', '상품 ID' 등이 Entity가 될 수 있습니다.
-**Feature View**: 피처를 논리적으로 그룹화하고, 데이터 소스와 Entity를 연결하는 핵심 객체입니다. Feature View를 통해 특정 Entity에 대한 피처들을 어떻게 가져올지 정의합니다.
-**Offline Store**: 대량의 과거 피처 데이터를 저장하는 곳입니다. 주로 모델 학습용 데이터를 생성하는 데 사용됩니다. (예: 파일, BigQuery, Snowflake)
-**Online Store**: 낮은 지연 시간(Low-latency)으로 최신 피처 값을 조회할 수 있도록 저장하는 키-밸류(Key-Value) 저장소입니다. 실시간 모델 추론 시 사용됩니다. (예: Redis, DynamoDB, Datastore)
**Feast 아키텍처:**
Feast는 크게 두 가지 데이터 흐름을 관리합니다.
-**Materialization (구체화)**: 오프라인 스토어의 피처 데이터를 주기적으로 읽어와 온라인 스토어에 최신 상태로 적재하는 프로세스입니다. `feast materialize` 명령어로 실행합니다.
-**Data Retrieval (데이터 조회)**:
-**학습 데이터셋 생성**: `get_historical_features()` 함수를 사용하여 여러 Feature View에서 특정 시점 기준의 피처들을 조인하여 학습용 데이터프레임을 생성합니다.
-**온라인 피처 서빙**: `get_online_features()` 함수를 사용하여 특정 Entity 키에 해당하는 최신 피처 벡터를 빠르게 조회하여 실시간 추론에 사용합니다.
---
## 8. 개념 확인 퀴즈 (Concept Check Quiz)
1. Kubeflow Pipelines의 주요 역할은 무엇이며, ML 워크플로우를 어떻게 구성하나요?
2. ML을 위한 CI/CD 파이프라인에서 '데이터 유효성 검사'와 '모델 품질 검증'이 왜 중요한가요?
3. Feature Store가 해결하고자 하는 핵심 문제인 '학습-서빙 스큐(Training-Serving Skew)'는 무엇인가요?
---
## 9. 과제 (Assignment)
1.**모니터링 시스템 설계**: Prometheus와 Grafana를 사용하여 간단한 FastAPI 애플리케이션의 API 요청 수와 응답 시간을 모니터링하는 대시보드를 구축하는 과정을 순서대로 설명해 보세요. (실제 구축이 아닌, 개념적 순서 설명)
2.**Feature Store 도입 설득**: 여러분이 데이터 사이언티스트 팀의 리드라고 상상해 보세요. 동료들에게 Feature Store 도입의 필요성을 설득하기 위한 3가지 핵심 논거를 제시해 보세요.
---
## 10. 되짚어보기 (Summary)
이번 파트에서는 모델 개발 이후, 프로덕션 환경에서 AI 모델을 안정적으로 운영하기 위한 MLOps 기술들을 심도 있게 다루었습니다.
-**ML 파이프라인 오케스트레이션**: Kubernetes 기반의 ML 워크플로우 자동화 도구인 Kubeflow의 핵심 구성 요소와 역할을 이해했습니다.
-**CI/CD for ML**: GitHub Actions를 활용하여 코드, 데이터, 모델의 변경 사항을 지속적으로 통합하고 배포하는 자동화 파이프라인 구축법을 배웠습니다.
-**실시간 모니터링**: Prometheus, Grafana, Evidently AI를 조합하여 시스템 메트릭부터 데이터 드리프트, 모델 성능까지 다각도로 모니터링하는 방법을 확인했습니다.
-**Feature Store**: 학습-서빙 스큐 방지, 피처 재사용성 증대를 위한 Feature Store의 개념을 이해하고, 오픈소스 프레임워크인 Feast의 작동 방식을 탐구했습니다.
---
## 11. 더 깊이 알아보기 (Further Reading)
-[Kubeflow 공식 문서](https://www.kubeflow.org/docs/): Kubeflow의 다양한 컴포넌트에 대한 상세한 가이드
-[GitHub Actions 문서](https://docs.github.com/en/actions): 워크플로우 작성법 및 다양한 예제
-[Evidently AI 공식 문서](https://docs.evidentlyai.com/): 데이터 드리프트 및 모델 성능 모니터링 리포트 생성 가이드
-[Feast 공식 문서](https://docs.feast.dev/): Feature Store 구축을 위한 튜토리얼 및 핵심 개념
---
**➡️ 다음 시간: [Part 12: 대규모 AI 모델 최적화 및 서빙](./part_12_model_optimization.md)**
최신 AI 모델의 크기는 기하급수적으로 증가하고 있으며, 이는 전례 없는 성능 향상을 가져왔지만 동시에 엄청난 컴퓨팅 자원을 요구하는 도전 과제를 안겨주었습니다. Part 12에서는 이처럼 거대한 모델을 현실적인 제약 속에서 어떻게 다룰 수 있는지에 대한 해법을 제시합니다. 여러 GPU를 활용하여 학습의 한계를 돌파하고, 모델의 군살을 빼서 서빙 효율을 높이는 기술들을 통해, 여러분의 AI 모델을 더 빠르고, 더 가볍고, 더 강력하게 만드는 방법을 배우게 될 것입니다.
---
## 4. 효율적 분산 학습
최근 언어 모델(LLM)을 필두로 AI 모델의 파라미터 수는 수천억, 수조 개에 달할 정도로 거대해지고 있습니다. 이처럼 거대한 모델을 단일 GPU 메모리에 올려 학습하는 것은 불가능에 가깝습니다. 설령 메모리가 충분하더라도, 대규모 데이터셋으로 학습을 완료하는 데는 수개월 이상이 소요될 수 있습니다.
**분산 학습(Distributed Training)**은 이러한 한계를 극복하기 위해 여러 개의 GPU(또는 여러 노드의 GPU들)를 사용하여 학습을 병렬로 처리하는 기술입니다. 분산 학습을 통해 우리는 다음을 달성할 수 있습니다.
-**더 큰 모델 학습**: 단일 GPU의 메모리 한계를 넘어 수십, 수백억 개 파라미터의 모델을 학습시킬 수 있습니다.
-**학습 시간 단축**: 여러 GPU가 작업을 나누어 처리함으로써 전체 학습 시간을 획기적으로 줄일 수 있습니다.
### 분산 학습의 종류
분산 학습은 크게 데이터 병렬 처리와 모델 병렬 처리로 나뉩니다.
-**데이터 병렬 처리 (Data Parallelism)**
- 가장 기본적인 분산 학습 방식으로, 여러 GPU에 동일한 모델을 복제하고, 전체 학습 데이터를 미니배치로 나누어 각 GPU에 할당합니다.
- 각 GPU는 할당된 데이터로 모델을 학습하여 그래디언트(gradient)를 계산하고, 모든 GPU의 그래디언트를 동기화하여 모델 파라미터를 업데이트합니다.
- 모델 크기가 단일 GPU에 담길 수 있을 때 효과적입니다.
- PyTorch의 `DistributedDataParallel` (DDP)가 대표적인 예입니다.
-**모델 병렬 처리 (Model Parallelism)**
- 모델 자체가 너무 커서 단일 GPU 메모리에 올라가지 않을 때 사용합니다. 모델의 레이어나 파라미터를 여러 GPU에 나누어 배치합니다.
-**텐서 병렬 처리 (Tensor Parallelism)**: 모델의 각 레이어 내부 연산(예: 행렬 곱)을 여러 GPU로 분할하여 처리합니다.
-**파이프라인 병렬 처리 (Pipeline Parallelism)**: 모델의 레이어들을 여러 GPU에 순차적으로 할당하고, 마이크로배치(micro-batch)를 파이프라인처럼 흘려보내며 학습을 진행합니다.
-**ZeRO (Zero Redundancy Optimizer)**: 데이터 병렬처리를 기반으로 하지만, 모델 파라미터, 그래디언트, 옵티마이저 상태(state)까지 여러 GPU에 분할(shard)하여 저장함으로써 메모리 사용량을 극적으로 최적화합니다.
---
### PyTorch FSDP (Fully Sharded Data Parallel)
PyTorch FSDP는 PyTorch 2.0부터 정식으로 포함된 차세대 분산 학습 기술로, ZeRO-3와 유사한 아이디어를 기반으로 구현되었습니다. 데이터 병렬처리를 수행하면서 모델 파라미터, 그래디언트, 옵티마이저 상태를 모든 GPU에 분할하여 저장합니다.
**주요 특징:**
-**메모리 효율성**: 각 GPU는 전체 파라미터의 일부만 소유하므로, 훨씬 큰 모델을 학습시킬 수 있습니다.
-**통신 오버랩**: 연산(computation)과 통신(communication)을 최대한 겹치게(overlap) 설계하여 학습 속도 저하를 최소화합니다.
-**PyTorch 통합**: PyTorch에 네이티브하게 통합되어 있어 `DistributedDataParallel` (DDP)에서 마이그레이션하기 비교적 용이합니다.
**FSDP 사용법:**
FSDP는 모델의 각 레이어를 'FSDP unit'으로 감싸는 방식으로 동작합니다. `auto_wrap` 정책을 사용하면 특정 레이어 타입(예: TransformerBlock)을 지정하여 자동으로 감싸도록 설정할 수 있어 편리합니다.
| **통합성** | PyTorch 네이티브. 생태계와 긴밀하게 통합 | 외부 라이브러리. 별도 설치 및 설정 필요 |
| **사용 편의성** | 코드 수정이 더 필요할 수 있음 | JSON 설정 파일 기반으로 코드 수정 최소화 |
| **기능** | Sharded Data Parallelism에 집중 | ZeRO, 3D 병렬처리, 추론 최적화 등 종합적인 기능 제공 |
| **커뮤니티/지원**| PyTorch 공식 지원 | Microsoft 및 활발한 오픈소스 커뮤니티 |
최근에는 FSDP가 PyTorch의 기본 분산 학습 방식으로 자리 잡아가고 있지만, DeepSpeed는 여전히 강력한 기능과 편리함으로 많은 연구 및 프로덕션 환경에서 사용되고 있습니다. 어떤 것을 선택할지는 프로젝트의 요구사항과 개발 환경에 따라 달라질 수 있습니다.
---
## 5. 모델 경량화 기법
대규모 모델은 뛰어난 성능을 보이지만, 막대한 계산 리소스와 메모리를 요구하여 실제 서비스에 배포하고 운영하는 데 큰 부담이 됩니다. 특히 모바일, 엣지 디바이스와 같이 리소스가 제한적인 환경에서는 모델을 그대로 사용하기 어렵습니다.
**모델 경량화(Model Quantization)**는 이미 학습된 모델의 성능을 최대한 유지하면서, 모델 크기를 줄이고 추론 속도를 향상시키는 기술들을 총칭합니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.
-**빠른 추론 속도**: 모델의 연산량이 줄어들어 예측 결과를 더 빠르게 얻을 수 있습니다.
-**메모리 사용량 감소**: 모델이 차지하는 메모리와 스토리지 공간이 줄어듭니다.
-**온디바이스(On-device) AI 구현**: 스마트폰, IoT 기기 등 엣지 디바이스에 직접 AI 모델을 탑재할 수 있습니다.
-**서버 비용 절감**: 더 적은 계산 리소스로 동일한 서비스를 처리할 수 있어 클라우드 비용 등이 절감됩니다.
대표적인 모델 경량화 기법으로는 양자화(Quantization), 가지치기(Pruning), 지식 증류(Knowledge Distillation)가 있습니다.
### 1. 양자화 (Quantization)
**양자화**는 모델의 가중치(weights)와 활성화 함수(activations) 값의 데이터 타입을 더 적은 비트(bit)로 표현하여 모델 크기를 줄이는 가장 널리 사용되는 경량화 기법입니다. 일반적으로 32-bit 부동소수점(FP32)으로 표현되는 실수 값들을 8-bit 정수(INT8)나 16-bit 부동소수점(FP16) 등으로 변환합니다.
-**장점**: 모델 크기를 약 1/4(FP32 -> INT8)로 크게 줄일 수 있으며, 정수 연산이 가능한 하드웨어(CPU, GPU, NPU)에서 매우 빠른 추론 속도를 얻을 수 있습니다.
-**단점**: 데이터 표현의 정밀도가 낮아져 모델 성능이 약간 저하될 수 있습니다.
**주요 양자화 기법:**
-**PTQ (Post-Training Quantization)**: 이미 학습된 FP32 모델을 가지고 추가적인 학습 없이 양자화를 수행합니다. 간단하게 적용할 수 있지만, 모델에 따라 성능 하락이 클 수 있습니다.
-**QAT (Quantization-Aware Training)**: 모델 학습 과정 자체에 양자화로 인한 오차를 시뮬레이션하여, 양자화 후에도 성능 저하를 최소화하도록 훈련하는 방식입니다. PTQ보다 과정이 복잡하지만 더 좋은 성능을 보장합니다.
### 2. 가지치기 (Pruning)
**가지치기**는 모델의 성능에 거의 영향을 주지 않는 불필요한 뉴런(neuron)이나 가중치 연결을 제거하여 모델을 희소(sparse)하게 만드는 기법입니다. 마치 나무의 잔가지를 쳐내어 더 튼튼하게 만드는 것과 같습니다.
-**장점**: 모델의 파라미터 수를 직접적으로 줄여 크기를 감소시키고, 연산량을 줄여 추론 속도를 향상시킬 수 있습니다.
-**단점**: 어떤 가중치를 제거할지 결정하는 기준이 복잡하며, 구조화되지 않은 가지치기는 실제 하드웨어에서 속도 향상으로 이어지기 어려울 수 있습니다.
**주요 가지치기 기법:**
-**비구조적 가지치기 (Unstructured Pruning)**: 개별 가중치의 중요도를 평가하여 중요도가 낮은 가중치를 하나씩 제거합니다. 모델 압축률은 높지만, 희소한 행렬 연산을 지원하는 특수한 하드웨어가 없으면 속도 향상을 기대하기 어렵습니다.
-**구조적 가지치기 (Structured Pruning)**: 채널(channel), 필터(filter), 레이어(layer) 등 특정 구조 단위로 연결을 제거합니다. 모델의 구조가 유지되어 일반적인 하드웨어에서도 속도 향상을 얻기 용이하지만, 비구조적 방식보다 압축률이 낮을 수 있습니다.
### 3. 지식 증류 (Knowledge Distillation)
**지식 증류**는 크고 복잡하지만 성능이 좋은 **선생님 모델(Teacher Model)**의 지식을 작고 가벼운 **학생 모델(Student Model)**에게 전달하여, 학생 모델이 선생님 모델의 성능을 모방하도록 학습시키는 기법입니다.
-**작동 방식**: 학생 모델은 실제 정답(hard label)뿐만 아니라, 선생님 모델의 예측 결과(soft label, 각 클래스에 대한 확률 분포)를 함께 학습합니다. 선생님 모델의 "정답에 대한 확신도"까지 학습함으로써, 학생 모델은 더 풍부한 정보를 바탕으로 효율적으로 훈련될 수 있습니다.
-**장점**: 완전히 다른 구조의 작은 모델을 만들 수 있어 유연성이 높고, 압축률의 한계가 없습니다. 단독으로 사용되거나 양자화, 가지치기 등 다른 기법과 함께 사용되기도 합니다.
-**단점**: 좋은 성능의 선생님 모델을 먼저 확보해야 하며, 학생 모델을 처음부터 학습시켜야 하므로 훈련 비용과 시간이 많이 소요됩니다.
---
## 6. 고성능 추론 서버 활용
모델을 경량화하는 것만큼, 학습된 모델을 효율적으로 서빙하는 것 또한 중요합니다. Python 기반의 웹 프레임워크(예: FastAPI, Flask)는 모델 서빙 API를 빠르고 간단하게 만들 수 있다는 장점이 있지만, 대규모 트래픽 처리나 복잡한 서빙 요구사항에는 한계가 있습니다.
**고성능 추론 서버(High-Performance Inference Server)**는 프로덕션 환경에서 머신러닝 모델을 안정적이고 효율적으로 배포하고 운영하기 위해 특별히 설계된 전문 소프트웨어입니다.
### 왜 전문 추론 서버가 필요한가?
-**처리량(Throughput) 극대화**: 들어오는 요청들을 자동으로 그룹화하여 GPU에서 병렬로 한 번에 처리하는 **동적 배치(Dynamic Batching)** 기능을 통해 GPU 활용률을 극대화하고 처리량을 높입니다.
-**다중 모델 서빙**: 단일 서버 인스턴스에서 서로 다른 프레임워크(PyTorch, TensorFlow, ONNX 등)로 만들어진 여러 모델을 동시에 서빙할 수 있습니다.
-**동시성(Concurrency)**: 여러 모델을 동시에 실행하거나, 단일 모델의 여러 인스턴스를 동시에 실행하여 여러 요청을 지연 없이 처리할 수 있습니다.
-**표준화된 인터페이스**: HTTP/gRPC와 같은 표준 프로토콜을 지원하여 어떤 클라이언트 환경에서도 쉽게 모델 추론을 요청할 수 있습니다.
### NVIDIA Triton Inference Server
NVIDIA Triton은 클라우드 및 엣지 환경에서 AI 모델 추론을 표준화하기 위해 설계된 오픈소스 추론 서빙 소프트웨어입니다.
**주요 특징:**
-**다양한 프레임워크 지원**: TensorRT, PyTorch, TensorFlow, ONNX, OpenVINO 등 거의 모든 주요 ML 프레임워크를 지원합니다.
-**동적 배치 (Dynamic Batching)**: 서버에 도착하는 개별 추론 요청들을 실시간으로 큐에 모았다가, 지정된 배치 크기(batch size)가 되면 한 번에 묶어 GPU로 보내 처리합니다. 이를 통해 GPU의 병렬 처리 능력을 최대한 활용하여 처리량을 높입니다.
-**동시 모델 실행 (Concurrent Model Execution)**: 단일 GPU에서 여러 모델 또는 동일 모델의 여러 인스턴스를 동시에 로드하여, 서로 다른 요청을 병렬로 처리할 수 있습니다.
-**모델 저장소 (Model Repository)**: 특정 디렉토리 구조에 맞게 모델 파일을 저장해두면, Triton 서버가 자동으로 모델을 인식하고 로드합니다. 모델 버전 관리, 업데이트, 로드/언로드 등의 기능을 CLI나 API를 통해 제어할 수 있습니다.
-**모델 앙상블 (Model Ensemble)**: 여러 모델의 추론 파이프라인을 단일 워크플로우로 묶어 서빙할 수 있습니다. 예를 들어, 전처리 모델 -> 메인 모델 -> 후처리 모델의 흐름을 하나의 앙상블로 정의하여 클라이언트가 한 번의 요청으로 전체 결과를 받을 수 있게 합니다.
**Triton 아키텍처:**
Triton은 클라이언트/서버 모델로 작동합니다. 클라이언트는 HTTP나 gRPC를 통해 Triton 서버에 추론 요청을 보냅니다. Triton 서버는 모델 저장소에서 모델을 관리하며, 들어온 요청을 스케줄링하고 백엔드(PyTorch, ONNX 등)를 통해 실행하여 결과를 반환합니다.
TorchServe는 PyTorch 커뮤니티에서 직접 개발하고 지원하는 PyTorch 모델 서빙을 위한 공식 도구입니다.
**주요 특징:**
-**PyTorch 최적화**: PyTorch 모델 서빙에 특화되어 있으며, `torch-model-archiver`를 통해 모델과 핸들러를 `.mar` 파일로 쉽게 패키징할 수 있습니다.
-**기본 서빙 기능**: REST 및 gRPC API, 로깅, 메트릭 수집, 모델 버전 관리 등 모델 서빙에 필요한 기본적인 기능들을 제공합니다.
-**간단한 사용법**: 상대적으로 가볍고 설정이 간단하여 PyTorch 모델을 빠르게 서빙하고자 할 때 좋은 선택지입니다.
**Triton vs TorchServe:**
-**범용성**: Triton은 거의 모든 프레임워크를 지원하는 반면, TorchServe는 PyTorch에 집중합니다.
-**성능/기능**: Triton이 동적 배치, 모델 앙상블 등 더 진보되고 고성능을 위한 다양한 기능을 제공합니다.
-**사용 편의성**: TorchServe가 더 가볍고 빠르게 시작할 수 있습니다.
따라서, 다양한 종류의 모델을 복잡한 서빙 로직과 함께 운영해야 하는 환경이라면 Triton이, 오직 PyTorch 모델만을 빠르고 간단하게 서빙하는 것이 목표라면 TorchServe가 좋은 선택이 될 수 있습니다.
---
## 7. 개념 확인 퀴즈 (Concept Check Quiz)
1. 데이터 병렬 처리(Data Parallelism)와 모델 병렬 처리(Model Parallelism)의 가장 큰 차이점은 무엇인가요? 어떤 상황에서 각각 사용되나요?
2. 모델 경량화 기법 중 양자화(Quantization)의 기본 원리는 무엇이며, PTQ와 QAT 방식의 차이점은 무엇인가요?
3. NVIDIA Triton 추론 서버의 '동적 배치(Dynamic Batching)' 기능이 왜 GPU 활용률을 높이는 데 효과적인가요?
---
## 8. 과제 (Assignment)
1.**분산 학습 전략 선택**: 매우 큰 언어 모델(LLM)을 학습시켜야 하는 상황입니다. PyTorch FSDP와 Microsoft DeepSpeed 중 하나를 선택해야 한다면, 어떤 기준(최소 2가지)으로 기술을 선택할 것이며 그 이유는 무엇인가요?
2.**모델 경량화 전략 수립**: 여러분이 개발한 이미지 분류 모델을 스마트폰 앱에 탑재해야 합니다. 모델의 성능 저하를 최소화하면서 용량과 추론 속도를 개선하기 위한 경량화 전략을 2가지 이상 조합하여 제시해 보세요. (예: 지식 증류 후 양자화 적용)
---
## 9. 되짚어보기 (Summary)
이번 파트에서는 대규모 AI 모델을 현실적인 제약 속에서 효율적으로 다루기 위한 핵심 기술들을 배웠습니다.
-**효율적 분산 학습**: 단일 GPU의 한계를 넘어 거대 모델을 학습시키기 위한 데이터 병렬 처리와 모델 병렬 처리의 개념을 이해하고, PyTorch FSDP와 Microsoft DeepSpeed와 같은 최신 분산 학습 프레임워크의 작동 방식과 특징을 비교 분석했습니다.
-**모델 경량화 기법**: 학습된 모델을 더 빠르고 가볍게 만들기 위한 양자화(Quantization), 가지치기(Pruning), 지식 증류(Knowledge Distillation)의 원리와 장단점을 파악했습니다.
-**고성능 추론 서버**: 대규모 트래픽 환경에서 모델을 안정적으로 서빙하기 위한 NVIDIA Triton과 TorchServe의 필요성을 이해하고, 동적 배치와 같은 핵심 기능들을 학습했습니다.
---
## 10. 더 깊이 알아보기 (Further Reading)
-[PyTorch FSDP 공식 튜토리얼](https://pytorch.org/tutorials/intermediate/FSDP_tutorial.html): FSDP를 시작하는 상세한 가이드
-[DeepSpeed 공식 문서](https://www.deepspeed.ai/): ZeRO를 포함한 다양한 최적화 기능 소개
-[NVIDIA Triton Inference Server 문서](https://developer.nvidia.com/triton-inference-server): Triton의 아키텍처 및 사용법
-[The Illustrated Guide to Model Quantization (블로그)](https://arxiv.org/abs/2403.15933): 모델 양자화의 개념을 쉽게 설명한 자료
---
**➡️ 다음 시간: [Part 13: 생성형 AI 및 AI 에이전트 심화](./part_13_generative_ai.md)**
거대 언어 모델(LLM)의 등장은 AI의 패러다임을 바꾸어 놓았습니다. 이제 AI는 단순히 주어진 데이터를 처리하는 것을 넘어, 스스로 지식을 생성하고, 도구를 사용하며, 목표를 향해 자율적으로 행동하는 단계로 진화하고 있습니다. Part 13에서는 생성형 AI의 최전선에 있는 기술들을 탐험합니다. LLM을 내 목적에 맞게 길들이는 효율적인 파인튜닝 방법부터, 더 똑똑하게 정보를 찾아 활용하는 RAG 심화 기술, 그리고 궁극적으로 스스로 문제를 해결하는 AI 에이전트를 만드는 설계도까지, 차세대 AI 애플리케이션을 구축하는 핵심 역량을 배우게 될 것입니다.
---
## 4. LLM 효율적 Fine-tuning 및 RAG 심화
사전 학습된 거대 언어 모델(LLM)은 그 자체로도 강력하지만, 특정 도메인이나 스타일에 맞게 성능을 최적화하기 위해서는 파인튜닝(Fine-tuning) 과정이 필요합니다. 하지만 수백억, 수천억 개의 파라미터를 가진 LLM 전체를 파인튜닝하는 것은 엄청난 컴퓨팅 자원을 요구하며, 때로는 원본 모델이 가진 일반적인 지식을 잃어버리는 '치명적 망각(Catastrophic Forgetting)' 현상을 겪기도 합니다.
이러한 문제를 해결하기 위해, 모델의 극히 일부 파라미터만 업데이트하여 효율적으로 파인튜닝하는 **PEFT(Parameter-Efficient Fine-Tuning)** 기법들이 등장했습니다.
### PEFT (Parameter-Efficient Fine-Tuning) 란?
PEFT는 LLM의 사전 학습된 가중치(weights) 대부분을 그대로 두고, 일부 추가되거나 선택된 파라미터만을 학습시키는 방법론의 총칭입니다. 이를 통해 다음과 같은 장점을 얻습니다.
-**메모리 효율성**: 전체 모델이 아닌, 수백만 개 수준의 적은 파라미터만 학습하므로 훨씬 적은 GPU 메모리로 파인튜닝이 가능합니다. (예: 단일 GPU에서도 가능)
-**빠른 학습 속도**: 학습 대상 파라미터가 적어 학습 시간이 단축됩니다.
-**치명적 망각 방지**: 원본 모델의 가중치를 변경하지 않으므로, 기존에 학습된 지식을 보존하는 데 유리합니다.
-**다중 작업 용이성**: 원본 LLM 하나에 여러 개의 작은 PEFT 모듈(어댑터)을 추가하여, 작업에 따라 어댑터만 교체하며 사용할 수 있습니다.
### LoRA (Low-Rank Adaptation of Large Language Models)
LoRA는 가장 대표적이고 널리 사용되는 PEFT 기법 중 하나입니다.
**핵심 아이디어**:
LoRA는 "사전 학습된 언어 모델은 낮은 내재적 차원(low intrinsic rank)을 가진다"는 가정에서 출발합니다. 즉, 특정 작업에 맞게 모델을 업데이트할 때, 가중치 행렬의 변화량(Weight Update Matrix, ΔW) 또한 낮은 랭크(low rank)를 가질 것이라고 가정합니다.
**작동 방식**:
기존의 가중치 행렬 `W` (d x d)를 직접 업데이트하는 대신, `W` 옆에 작은 크기의 학습 가능한 행렬 `A` (d x r)와 `B` (r x d)를 추가합니다. 여기서 `r`은 랭크(rank)로, `d`보다 훨씬 작은 값(예: 8, 16, 64)입니다. 학습 중에는 원본 `W`는 고정된 채 `A`와 `B` 행렬만 업데이트됩니다. 최종적으로 모델의 가중치는 `W + BA`로 계산됩니다.
```
Input (x)
|
+-----+
| W | (Frozen) <-- 기존 가중치 (d x d)
+-----+
|
+----------------> Output (h = Wx + BAx)
|
+-----+
| A | (Trainable) <-- Low-rank matrix (r x d)
+-----+
|
+-----+
| B | (Trainable) <-- Low-rank matrix (d x r)
+-----+
|
```
Hugging Face의 `peft` 라이브러리를 사용하면 LoRA를 매우 쉽게 적용할 수 있습니다.
기본적인 RAG는 외부 문서에서 관련 정보를 검색하여 LLM의 답변에 활용하는 강력한 기술이지만, 복잡한 질문에 대해서는 한계를 보이기도 합니다. 사용자의 질문이 모호하거나, 검색된 문서의 순위가 최적이 아닐 수 있기 때문입니다. 고급 RAG는 이러한 문제를 해결하기 위해 '쿼리 변환'과 '재순위화' 같은 기법들을 도입합니다.
#### 1. 쿼리 변환 (Query Transformation)
사용자의 원본 질문을 그대로 벡터 검색에 사용하기보다, 더 나은 검색 결과를 얻기 위해 질문을 여러 개로 변형하거나 더 명확하게 만드는 과정입니다.
-**Multi-Query**: LLM을 사용하여 사용자의 단일 질문을 다양한 관점의 여러 질문으로 확장합니다. 예를 들어, "RAG의 장단점은?" 이라는 질문을 "RAG의 장점은 무엇인가?", "RAG의 단점은 무엇인가?", "RAG는 어떤 경우에 유용한가?" 와 같이 여러 개로 만들어 각각 검색을 수행하고 결과를 종합합니다.
-**RAG-Fusion**: Multi-Query와 유사하지만, 검색된 결과들의 순위를 Reciprocal Rank Fusion (RRF) 알고리즘을 사용하여 지능적으로 결합하여 가장 관련성 높은 문서를 찾아냅니다.
-**Step-back Prompting**: 사용자의 구체적인 질문에서 한 단계 물러나, 더 일반적이고 근원적인 질문을 생성하여 검색에 활용합니다. 예를 들어, "우리 회사 복지제도 중 출산휴가는 며칠이야?" 라는 질문에 대해 "회사의 휴가 관련 복지제도" 라는 상위 개념의 질문을 생성하여 먼저 검색하고, 그 결과를 바탕으로 구체적인 답변을 찾게 하여 더 정확한 컨텍스트를 확보합니다.
#### 2. 재순위화 (Re-ranking)
벡터 검색(Retriever)은 수많은 문서 중에서 관련성이 있을 법한 후보 문서들을 빠르게 찾아내는 데 효과적입니다. 하지만 이 초기 검색 결과가 항상 최적의 순서를 보장하지는 않습니다. **재순위화**는 Retriever가 찾아온 상위 K개의 문서를 더 정교하지만 느린 모델(Cross-Encoder)을 사용하여 다시 평가하고, 사용자 질문과의 관련성이 가장 높은 순서로 재정렬하는 과정입니다.
-**작동 방식**:
1.**1단계 (Retrieval)**: Bi-Encoder 기반의 빠른 벡터 검색으로 후보 문서 50~100개를 검색합니다.
2.**2단계 (Re-ranking)**: Cross-Encoder 모델이 '(질문, 문서1)', '(질문, 문서2)' ... 와 같이 질문과 각 후보 문서를 쌍으로 입력받아, 두 텍스트 간의 실제 관련도를 0과 1 사이의 점수로 계산합니다.
3. 이 점수를 기준으로 문서들의 순위를 다시 매겨, 가장 관련도 높은 상위 3~5개의 문서를 최종적으로 LLM에 전달합니다.
-**장점**: 검색의 정확도(Precision)를 크게 향상시켜, LLM이 더 정확하고 관련성 높은 답변을 생성하도록 돕습니다.
AI 에이전트(Agent)는 단순히 주어진 질문에 답변하는 것을 넘어, 목표 달성을 위해 스스로 생각하고, 도구를 사용하며, 계획을 수정하는 능동적인 시스템을 의미합니다. 에이전트는 LLM을 '뇌'로 사용하여 주변 환경(API, 데이터베이스, 웹 검색 등)과 상호작용하며 복잡한 문제를 해결합니다.
### ReAct (Reason + Act) 프레임워크
ReAct는 에이전트가 어떻게 행동해야 할지 결정하는 가장 대표적인 프레임워크 중 하나입니다. 이름 그대로 **추론(Reasoning)**과 **행동(Action)**을 결합합니다.
**작동 방식**:
LLM은 단순히 최종 답변을 내놓는 것이 아니라, 다음과 같은 생각의 연쇄 과정을 통해 목표를 달성합니다.
1.**Thought (생각)**: 현재 상황을 분석하고 목표를 달성하기 위한 다음 행동 계획을 세웁니다.
2.**Action (행동)**: 계획에 따라 사용할 도구(Tool)와 그 도구에 전달할 입력(Input)을 결정합니다. 예를 들어, '웹 검색' 도구에 'AI 에이전트 최신 동향'이라는 입력을 전달할 수 있습니다.
3.**Observation (관찰)**: 행동의 결과(도구의 출력)를 관찰합니다. 웹 검색 결과, API 호출 결과 등이 해당됩니다.
4.**Thought (생각)**: 관찰된 결과를 바탕으로 목표가 달성되었는지, 또는 다음 행동은 무엇이어야 할지 다시 생각합니다.
5. 위 과정을 목표가 달성될 때까지 반복합니다.
이러한 "생각-행동-관찰"의 순환 구조를 통해 에이전트는 복잡한 작업을 체계적으로 해결하고, 중간에 문제가 발생했을 때 대처할 수 있는 능력을 갖게 됩니다.
### LangGraph: 복잡한 에이전트 워크플로우 구축
하나의 에이전트만으로는 해결하기 어려운 복잡한 작업(예: 여러 리서치 결과를 종합하여 보고서 작성)을 위해서는 여러 전문 에이전트가 서로 협력하는 '멀티-에이전트(Multi-agent)' 시스템이 필요합니다.
**LangGraph**는 LangChain에서派生된 라이브러리로, 이러한 멀티-에이전트 시스템이나 순환(cyclic)적인 계산 흐름을 그래프(Graph) 형태로 쉽게 구현할 수 있도록 돕습니다.
**주요 개념:**
-**State (상태)**: 그래프 전체에서 공유되는 데이터 객체입니다. 각 단계(노드)를 거치면서 상태가 업데이트됩니다. 예를 들어, '수집된 정보', '남은 작업 목록' 등이 상태에 포함될 수 있습니다.
-**Nodes (노드)**: 그래프의 각 단계를 나타내며, 특정 작업을 수행하는 함수나 LangChain Runnable 객체입니다. 각 노드는 현재 상태를 입력받아 작업을 수행하고, 변경된 상태를 반환합니다.
-**Edges (엣지)**: 노드 간의 연결을 정의하며, 다음으로 어떤 노드로 이동할지 결정하는 역할을 합니다.
-**Conditional Edges (조건부 엣지)**: 특정 노드의 실행 결과(상태)에 따라 다음에 실행될 노드를 동적으로 결정할 수 있습니다. 예를 들어, '리서치 결과가 충분하면 보고서 작성 노드로, 부족하면 추가 검색 노드로 이동'과 같은 분기 처리를 구현할 수 있습니다.
**LangGraph의 장점:**
-**순환성 및 제어**: 기존의 LangChain Expression Language (LCEL)이 비순환 그래프(DAG)에 최적화된 것과 달리, LangGraph는 "생각-행동-관찰" 루프와 같은 순환적인 흐름을 자연스럽게 구현할 수 있습니다.
-**상태 관리**: 중앙 집중화된 상태 객체를 통해 여러 에이전트나 노드 간의 정보 공유 및 흐름 제어가 명확하고 용이합니다.
-**시각화 및 디버깅**: 복잡한 에이전트의 작동 흐름을 그래프로 시각화할 수 있어, 전체 구조를 이해하고 디버깅하기 편리합니다.
LangGraph를 사용하면, 각자 다른 전문성을 가진 여러 에이전트(리서처, 작가, 비평가 등)가 서로의 작업 결과를 바탕으로 협력하고, 필요에 따라 작업을 반복하거나 수정하는 정교한 자율 에이전트 시스템을 효과적으로 구축할 수 있습니다.
---
## 6. LLMOps & AgentOps
LLM과 에이전트 기반의 애플리케이션이 프로덕션 환경에서 안정적으로 운영되기 위해서는 기존의 MLOps를 넘어서는 새로운 운영 패러다임이 필요합니다. 이것이 바로 **LLMOps**와 **AgentOps**입니다.
### LLMOps: LLM 기반 애플리케이션을 위한 MLOps
LLMOps는 LLM 기반 애플리케이션의 전체 수명 주기(프로토타이핑, 테스트, 배포, 모니터링, 유지보수)를 관리하고 자동화하기 위한 DevOps 원칙과 MLOps 프랙티스를 확장한 개념입니다.
**기존 MLOps와의 차이점 및 LLMOps의 고유한 과제:**
-**프롬프트 관리 (Prompt Management)**: LLM 앱의 성능은 프롬프트에 매우 민감합니다. 프롬프트의 버전을 관리하고, 여러 프롬프트를 A/B 테스트하며, 성능을 지속적으로 최적화하는 '프롬프트 엔지니어링'이 핵심적인 관리 대상이 됩니다.
-**성능 평가의 모호성**: 모델의 정확도, F1 점수 등으로 비교적 명확하게 평가할 수 있었던 기존 ML 모델과 달리, LLM의 출력은 정성적인 평가(예: 답변의 유용성, 창의성, 적절성)가 중요합니다. 이를 위해 LLM 자체를 평가자(LLM-as-a-judge)로 활용하거나, 사람이 직접 피드백하는 등 새로운 평가 파이프라인이 필요합니다.
-**실시간 추적 및 디버깅의 어려움**: 복잡한 체인(Chain)이나 에이전트의 작동 과정에서 어떤 프롬프트와 컨텍스트가 사용되었고, 중간 결과는 어떠했는지 추적하기 어렵습니다. 문제 발생 시 원인을 파악하기 위한 상세한 실행 로그와 추적 기능이 필수적입니다.
-**컨텍스트 및 외부 데이터 관리**: RAG 시스템의 경우, 벡터 데이터베이스, 검색 알고리즘, 외부 API 등 관리해야 할 요소가 추가됩니다. 데이터가 변경되었을 때 전체 시스템에 미치는 영향을 관리하고 최신 상태를 유지해야 합니다.
### AgentOps: 자율 에이전트 시스템을 위한 운영
AgentOps는 LLMOps에서 한 단계 더 나아가, 여러 도구와 상호작용하며 자율적으로 작업을 수행하는 AI 에이전트 시스템에 특화된 운영 방법론입니다. 에이전트의 복잡한 "생각-행동-관찰" 루프와 멀티-에이전트 간의 상호작용을 안정적으로 운영하는 데 중점을 둡니다.
**AgentOps의 주요 관심사:**
-**도구 사용 모니터링**: 에이전트가 사용하는 외부 도구(API, 데이터베이스 등)의 성공/실패 여부, 지연 시간, 비용 등을 모니터링합니다.
-**에이전트 궤적(Trajectory) 분석**: 에이전트가 목표를 달성하기 위해 거친 전체 의사결정 과정(생각의 연쇄)을 추적하고 분석하여, 비효율적인 행동이나 잘못된 판단을 개선합니다.
-**동적 계획 및 회복력(Resilience)**: 예기치 않은 오류(예: API 실패, 잘못된 도구 사용)가 발생했을 때, 에이전트가 스스로 문제를 인식하고 계획을 수정하여 작업을 계속할 수 있도록 하는 메커니즘을 구축합니다.
### LangSmith: LLMOps & AgentOps를 위한 통합 플랫폼
LangSmith는 LangChain 개발팀이 만든 LLM 애플리케이션 개발 및 운영을 위한 통합 플랫폼입니다. 복잡한 LLM 및 에이전트 애플리케이션의 내부 작동을 투명하게 들여다보고, 문제를 진단하며, 성능을 평가하는 데 강력한 기능을 제공합니다.
**주요 기능:**
-**추적 (Tracing)**:
- LLM 호출, 체인 실행, 에이전트의 모든 단계를 시각적으로 추적합니다.
- 각 단계별 입력, 출력, 사용된 프롬프트, 토큰 사용량, 지연 시간 등의 상세 정보를 확인할 수 있어 디버깅에 매우 유용합니다.
-**모니터링 (Monitoring)**:
- 프로덕션 환경에서 운영되는 LLM 앱의 전반적인 상태를 모니터링하는 대시보드를 제공합니다.
- API 에러율, 평균 지연 시간, 토큰 사용량, 사용자 피드백 등을 통해 서비스의 이상 징후를 신속하게 파악할 수 있습니다.
-**평가 (Evaluation)**:
- 특정 데이터셋에 대한 LLM 앱의 성능을 정량적/정성적으로 평가하는 프레임워크를 제공합니다.
- 사용자 정의 평가 기준(예: 답변의 간결성, 유해성)을 만들거나, LLM을 평가자로 사용하여 "답변이 컨텍스트에 기반하는가?"와 같은 항목을 자동으로 채점할 수 있습니다.
- 여러 버전의 프롬프트나 모델을 비교 평가하여 최적의 조합을 찾는 데 활용됩니다.
-**프롬프트 허브 (Prompt Hub)**:
- 자주 사용되거나 성능이 검증된 프롬프트를 중앙에서 관리하고 버전 제어를 할 수 있습니다. (LangChain 커뮤니티와 프롬프트를 공유할 수도 있습니다)
LangSmith는 개발 초기 단계의 디버깅부터 프로덕션 환경의 모니터링 및 성능 최적화에 이르기까지, LLMOps와 AgentOps의 거의 모든 과정을 지원하는 핵심적인 도구라고 할 수 있습니다.
---
## 7. 개념 확인 퀴즈 (Concept Check Quiz)
1. LLM을 파인튜닝할 때 전체 파라미터를 학습시키는 것과 비교하여 LoRA 방식이 갖는 가장 큰 장점은 무엇인가요?
2. 고급 RAG 파이프라인에서 '재순위화(Re-ranking)' 단계가 필요한 이유는 무엇인가요?
3. AI 에이전트의 ReAct 프레임워크에서 'Thought', 'Action', 'Observation'의 순환 구조는 어떤 역할을 하나요?
---
## 8. 과제 (Assignment)
1.**고급 RAG 파이프라인 설계**: 여러분 회사의 내부 문서를 기반으로 답변하는 Q&A 챗봇을 만들려고 합니다. 사용자의 질문이 모호하거나 너무 구체적인 경우에도 정확한 답변을 찾을 수 있도록, 본문에서 배운 '쿼리 변환' 기법 중 2가지 이상을 조합하여 RAG 파이프라인을 어떻게 개선할지 구체적인 예시와 함께 설명해 주세요.
2.**AI 에이전트 설계**: LangGraph를 사용하여 '오늘 날씨를 확인하고, 날씨에 맞는 옷차림을 추천해 주는' 간단한 AI 에이전트를 설계해 보세요. 어떤 노드(Node)들이 필요하고, 노드 간의 엣지(Edge)는 어떻게 연결되어야 할지 순서도나 의사 코드로 표현해 보세요.
---
## 9. 되짚어보기 (Summary)
이번 파트에서는 생성형 AI의 최전선에 있는 기술들과, 스스로 문제를 해결하는 자율 AI 에이전트를 구축하는 방법을 탐험했습니다.
-**효율적 LLM 파인튜닝**: PEFT의 개념을 이해하고, 대표적인 기법인 LoRA를 사용하여 적은 리소스로 LLM을 특정 작업에 맞게 효율적으로 튜닝하는 방법을 배웠습니다.
-**RAG 심화**: 기본적인 RAG를 넘어 쿼리 변환, 재순위화 등의 고급 기술을 통해 검색 증강 생성의 정확도를 한 단계 끌어올리는 방법을 확인했습니다.
-**자율 AI 에이전트**: LLM을 두뇌로 사용하는 AI 에이전트의 개념을 이해하고, ReAct 프레임워크와 LangGraph를 사용하여 복잡한 작업을 수행하는 에이전트를 설계하고 구축하는 방법을 학습했습니다.
-**LLMOps & AgentOps**: LLM 기반 애플리케이션의 안정적인 운영을 위한 LLMOps의 개념과 LangSmith를 활용한 추적, 모니터링, 평가 방법을 이해했습니다.
---
## 10. 더 깊이 알아보기 (Further Reading)
-[Hugging Face PEFT 라이브러리](https://huggingface.co/docs/peft/index): LoRA 등 다양한 PEFT 기법 구현체
-[LangChain RAG 문서](https://python.langchain.com/v0.2/docs/concepts/#retrieval-augmented-generation-rag): 쿼리 변환, 재순위화 등 다양한 RAG 관련 기능 소개
-[LangGraph 공식 문서](https://langchain-ai.github.io/langgraph/): 순환적인 에이전트 워크플로우 구축 가이드
-[LangSmith 공식 문서](https://docs.smith.langchain.com/): LLM 애플리케이션 추적 및 평가 플랫폼
---
**➡️ 다음 시간: [Part 14: AI 윤리 및 거버넌스 실무](./part_14_ai_ethics.md)**
AI 기술이 사회 깊숙이 자리 잡으면서, 우리는 그 성능만큼이나 '책임'과 '신뢰'에 대해 고민해야 하는 시대에 살고 있습니다. AI가 내린 결정이 사람과 사회에 미치는 영향이 막대하기 때문입니다. Part 14에서는 "AI를 어떻게 더 똑똑하게 만들 것인가?"라는 질문을 넘어, "어떻게 더 올바르고 공정하게 만들 것인가?"에 대한 답을 찾아갑니다. 모델의 속마음을 들여다보는 XAI 기술부터, 숨겨진 차별을 찾아내는 편향성 분석, 그리고 글로벌 표준이 될 AI 규제까지, 신뢰할 수 있는 AI 전문가로 성장하기 위한 마지막 필수 역량을 갖추게 될 것입니다.
---
## 4. 설명가능 AI (XAI)
복잡한 딥러닝 모델이나 앙상블 모델은 종종 '블랙박스(Black Box)'로 취급됩니다. 뛰어난 예측 성능을 보이지만, 왜 그런 결정을 내렸는지 그 내부 과정을 이해하기 어렵기 때문입니다. 이러한 문제는 금융, 의료, 법률 등 결정에 대한 설명 책임이 중요한 분야에서 모델의 신뢰도를 떨어뜨리고, 공정성 문제를 야기하며, 디버깅을 어렵게 만듭니다.
**설명가능 AI (eXplainable AI, XAI)**는 이러한 블랙박스 모델의 예측 결과를 사람이 이해할 수 있는 형태로 설명하고 해석하는 것을 목표로 하는 기술 및 방법론의 총칭입니다.
**XAI의 중요성:**
-**신뢰성 및 투명성 확보**: 모델의 결정 과정을 이해함으로써 사용자와 규제 기관의 신뢰를 얻을 수 있습니다.
-**공정성 검증**: 모델이 특정 인구 집단에 대해 편향된 예측을 하는지 확인하고, 그 원인을 파악하는 데 도움을 줍니다.
-**디버깅 및 모델 개선**: 예측이 잘못된 경우, 어떤 피처(feature)가 잘못된 판단에 영향을 미쳤는지 분석하여 모델을 개선할 수 있습니다.
-**규제 준수**: GDPR의 '설명을 요구할 권리'나 다양한 AI 관련 규제에 대응하기 위해 필수적입니다.
LIME은 "특정 예측 하나"에 대한 설명을 제공하는 데 중점을 두는 대표적인 **로컬(Local)** XAI 기법입니다. 'Model-agnostic'이라는 이름처럼, 어떤 종류의 블랙박스 모델(딥러닝, 앙상블 등)에도 적용할 수 있는 범용적인 방법입니다.
**핵심 아이디어**:
복잡한 전체 모델의 결정 경계(decision boundary)를 이해하려는 대신, 설명하고자 하는 특정 데이터 포인트 주변의 '지역적인(local)' 공간에만 집중합니다. 그리고 그 좁은 지역에서는 간단한 선형 모델(Linear Model)과 같은 해석 가능한 모델로 복잡한 모델의 행동을 근사(approximate)할 수 있다고 가정합니다.
**작동 방식**:
1. 설명하고 싶은 데이터 포인트(예: 특정 고객의 대출 승인 예측)를 선택합니다.
2. 해당 데이터 포인트 주변에 수많은 가상의 샘플 데이터들을 생성합니다. (예: 특정 피처 값을 약간씩 변경)
3. 생성된 각 샘플에 대해 블랙박스 모델의 예측 값을 얻습니다.
4. 원본 데이터에 가까운 샘플에 더 높은 가중치를 주어, 이 샘플들과 예측 값들을 가장 잘 설명하는 간단한 선형 모델을 학습시킵니다.
5. 학습된 선형 모델의 회귀 계수(coefficients)를 통해, "이 예측에 어떤 피처가 긍정적/부정적으로 얼마나 영향을 미쳤는지"를 설명합니다.
-**장점**: 이해하기 쉽고 직관적이며, 어떤 모델에도 적용할 수 있습니다.
-**단점**: 샘플링 방식에 따라 설명 결과가 불안정할 수 있으며, '지역적'이라는 범위의 정의가 모호할 수 있습니다.
### 2. SHAP (SHapley Additive exPlanations)
SHAP은 협력 게임 이론(Cooperative Game Theory)의 '섀플리 값(Shapley Value)' 개념을 AI 모델 설명에 적용한 기법입니다. 각 피처를 게임에 참여하는 '플레이어'로 보고, 모델의 예측에 각 피처가 얼마나 '기여'했는지를 공정하게 배분하여 설명합니다.
**핵심 아이디어**:
어떤 피처의 기여도는 "해당 피처가 있을 때의 예측 값"과 "해당 피처가 없을 때의 예측 값"의 차이로 계산할 수 있습니다. SHAP은 가능한 모든 피처 조합에 대해 이 기여도를 계산하고 평균을 내어, 각 피처의 최종적인 기여도(SHAP Value)를 결정합니다.
**SHAP Value의 의미**:
-**양수(+) SHAP Value**: 해당 피처의 값이 예측을 증가시키는 방향으로 작용했습니다.
-**음수(-) SHAP Value**: 해당 피처의 값이 예측을 감소시키는 방향으로 작용했습니다.
-**절대값 크기**: 기여도의 크기를 의미합니다.
**주요 특징 및 시각화**:
-**로컬 및 글로벌 설명**: LIME처럼 개별 예측에 대한 설명(Local)이 가능할 뿐만 아니라, 전체 데이터셋에 대한 각 피처의 영향을 종합하여 모델 전체를 설명(Global)하는 것도 가능합니다.
-**일관성 및 정확성**: 탄탄한 이론적 배경을 바탕으로, LIME보다 일관성 있고 신뢰도 높은 설명을 제공합니다.
-**다양한 시각화 도구**:
-**Force Plot**: 특정 예측에 대한 각 피처의 긍정/부정적 영향을 시각적으로 보여줍니다.
-**Summary Plot**: 전체 데이터에 대해 각 피처가 예측에 미치는 영향의 분포와 중요도를 한눈에 보여줍니다.
-**장점**: 이론적 기반이 탄탄하고, 로컬/글로벌 설명을 모두 제공하며, 시각화 도구가 강력합니다.
-**단점**: 계산량이 많아, 특히 데이터가 크거나 피처가 많을 경우 계산 시간이 매우 오래 걸릴 수 있습니다.
---
## 5. 편향성 탐지 및 완화
AI 모델은 학습 데이터에 내재된 사회적, 역사적 편견을 그대로 학습하여 특정 그룹에 불리한 예측을 내놓을 위험이 있습니다. 예를 들어, 과거 채용 데이터에 남성 지원자가 많았다면, AI 채용 모델은 성별을 중요한 판단 기준으로 학습하여 여성 지원자에게 불리한 결정을 내릴 수 있습니다. 이러한 모델의 **편향성(Bias)**은 기업의 신뢰도를 해치고, 법적 문제를 야기하며, 사회적 불평등을 심화시킬 수 있습니다.
**공정한 AI(Fair AI)**는 이러한 편향성을 탐지하고, 측정하며, 완화하여 모델이 모든 사람에게 공평하게 작동하도록 보장하는 것을 목표로 합니다.
### Microsoft Fairlearn: 공정성 측정을 위한 도구
Fairlearn은 Microsoft에서 개발한 오픈소스 라이브러리로, 머신러닝 시스템의 공정성을 평가하고 개선하는 데 필요한 다양한 기능을 제공합니다.
**주요 기능:**
-**편향성 시각화**: 다양한 공정성 지표에 대한 모델의 성능을 그룹별(예: 성별, 인종별)로 비교하여 시각적으로 보여주는 대시보드를 제공합니다.
-**공정성 지표 측정**: 수십 가지의 공정성 관련 지표를 계산하여 모델의 편향성 정도를 정량적으로 평가할 수 있습니다.
-**편향성 완화 알고리즘**: 학습 데이터나 모델을 수정하여 편향성을 줄일 수 있는 다양한 완화 알고리즘을 제공합니다.
### 공정성 지표의 종류
Fairlearn에서는 크게 두 가지 유형의 공정성 문제를 다룹니다.
1.**Allocation Harms (자원 할당의 피해)**: AI의 결정이 기회나 자원(예: 채용, 대출 승인)의 분배에 영향을 미칠 때 발생합니다.
-**Demographic Parity (인구 통계학적 동등성)**: 모든 그룹에서 '긍정적인 예측 결과(예: 합격, 대출 승인)'의 비율이 동일해야 한다는 원칙입니다. 즉, `P(모델 예측=1 | 그룹=A) = P(모델 예측=1 | 그룹=B)` 입니다. 가장 직관적이지만, 그룹 간 실제 긍정 비율(base rate)이 다른 경우 오히려 역차별을 낳을 수 있습니다.
-**Equalized Odds (동등한 기회)**: 실제 결과가 참(True)인 경우와 거짓(False)인 경우 각각에 대해, 모든 그룹이 동일한 예측 확률(True Positive Rate, False Positive Rate)을 가져야 한다는 원칙입니다. 즉, 모든 그룹에서 민감도(Sensitivity)와 특이도(Specificity)가 같아야 합니다. Demographic Parity보다 더 엄격하고 정교한 기준으로 여겨집니다.
2.**Quality-of-Service Harms (서비스 품질의 피해)**: 모델의 성능(예: 정확도)이 특정 그룹에서 현저히 낮게 나타날 때 발생합니다.
-**Equal Accuracy (동일 정확도)**: 모든 그룹에서 모델의 정확도(Accuracy)가 동일해야 합니다.
어떤 지표를 사용할지는 문제의 종류와 사회적 합의에 따라 달라지며, 모든 지표를 동시에 만족시키는 것은 일반적으로 불가능합니다.
### 편향성 완화 기법
Fairlearn은 편향성을 완화하기 위해 머신러닝 파이프라인의 각 단계에 적용할 수 있는 세 가지 유형의 알고리즘을 제공합니다.
1.**전처리 (Preprocessing)**: 모델을 학습시키기 전에, 원본 데이터를 변환하여 데이터 자체의 편향성을 줄이는 방법입니다.
- 예: `Reweighing` - 소수 그룹의 데이터 샘플에 더 높은 가중치를 부여하여 학습 과정에서 더 큰 영향을 미치도록 합니다.
2.**인프로세싱 (In-processing) / 학습 중 처리**: 모델 학습 과정 자체에 공정성 제약 조건을 추가하여, 정확도와 공정성을 동시에 최적화하는 모델을 학습시키는 방법입니다.
- 예: `GridSearch` - 정확도와 공정성 지표 사이의 트레이드오프를 고려하여 여러 모델을 학습시키고 최적의 모델을 선택합니다.
3.**후처리 (Post-processing)**: 이미 학습된 블랙박스 모델의 예측 결과를 조정하여 편향성을 완화하는 방법입니다. 모델 자체를 수정할 수 없을 때 유용합니다.
- 예: `ThresholdOptimizer` - 각 그룹별로 최적의 예측 임계값(threshold)을 다르게 설정하여 공정성 지표를 만족시키도록 조정합니다.
이러한 기법들을 사용하여 개발자는 모델의 성능과 공정성 사이의 균형을 맞추고, 더 책임감 있는 AI 시스템을 구축할 수 있습니다.
---
## 6. AI 규제와 컴플라이언스
AI 기술이 사회 전반에 확산되면서, 각국 정부와 국제기구는 AI의 잠재적 위험을 관리하고 신뢰를 확보하기 위한 규제 및 거버넌스 체계를 마련하고 있습니다. 개발자와 기업은 이러한 규제를 준수하고 사회적 책임을 다하기 위해 노력해야 합니다.
### EU AI Act: 세계 최초의 포괄적 AI 법안
유럽연합(EU)의 AI Act는 AI 시스템을 위험 수준에 따라 4단계(불용, 고위험, 제한된 위험, 최소 위험)로 분류하고, 각 등급별로 차등적인 의무를 부과하는 세계 최초의 포괄적인 AI 법률입니다.
**핵심 내용**:
1.**위험 기반 접근 방식 (Risk-Based Approach)**:
-**불용 위험 (Unacceptable Risk)**: 사회적 점수화, 잠재의식적 조작 등 인간의 안전과 권리에 명백한 위협이 되는 AI 시스템은 **전면 금지**됩니다.
-**고위험 (High-Risk)**: 채용, 신용 평가, 의료, 핵심 인프라 등 개인과 사회에 중대한 영향을 미칠 수 있는 AI 시스템입니다. 고위험 AI는 시장에 출시되기 전과 운영 중에 엄격한 요구사항(데이터 품질, 문서화, 투명성, 인간 감독 등)을 준수해야 합니다.
-**제한된 위험 (Limited Risk)**: 챗봇, 딥페이크 등 사용자가 AI와 상호작용하고 있다는 사실을 인지해야 하는 시스템입니다. **투명성 의무**가 부과됩니다.
-**최소 위험 (Minimal Risk)**: AI 기반 비디오 게임, 스팸 필터 등 대부분의 AI 시스템이 여기에 해당하며, 별도의 의무는 없지만 자발적인 행동 강령 준수가 권장됩니다.
2.**범용 AI (General-Purpose AI) 모델에 대한 규제**:
- GPT, Claude와 같은 대규모 AI 모델도 규제 대상에 포함됩니다. 모델 개발자는 기술 문서를 작성하고, EU 저작권법을 존중하며, 학습 데이터에 대한 상세한 요약을 제공해야 할 의무가 있습니다.
EU AI Act는 유럽 시장에 AI 제품이나 서비스를 제공하는 모든 기업(EU 외 기업 포함)에 적용되므로, 글로벌 스탠더드로 자리 잡을 가능성이 높습니다.
### 모델 카드 (Model Cards)
모델 카드는 구글에서 제안한 개념으로, 학습된 머신러닝 모델의 성능, 특성, 한계 등을 투명하게 공개하기 위한 **표준화된 문서**입니다. 마치 제품의 '영양성분표'처럼, 모델 사용자가 모델에 대해 충분히 이해하고 책임감 있게 사용할 수 있도록 돕는 것을 목표로 합니다.
**주요 포함 내용**:
-**모델 기본 정보**: 모델 이름, 버전, 개발자, 연락처 등
-**용도**: 모델이 어떤 목적으로 개발되었고, 어떤 상황에서 사용되어야 하는지(Intended Use)와 사용되어서는 안 되는지(Out-of-Scope Use)를 명시합니다.
-**성능 지표**: 전체 데이터셋 및 인구 통계학적 하위 그룹(성별, 인종 등)에 대한 정확도, 정밀도, 재현율, 공정성 지표 등을 상세히 기술합니다.
-**학습 데이터**: 모델 학습에 사용된 데이터셋의 출처, 구성, 전처리 과정 등을 설명합니다.
-**윤리적 고려사항**: 모델의 잠재적 편향성, 개인정보보호 문제, 사회적 영향 등에 대한 분석과 완화 노력을 포함합니다.
### 데이터 시트 (Datasheets for Datasets)
데이터 시트는 마이크로소프트에서 제안한 개념으로, 데이터셋 자체에 대한 상세한 정보를 제공하는 문서입니다. 머신러닝 모델의 성능과 편향성은 학습 데이터에 크게 의존하기 때문에, 데이터셋의 특성과 한계를 명확히 이해하는 것은 매우 중요합니다.
**주요 포함 내용**:
-**데이터셋 기본 정보**: 데이터셋 이름, 버전, 생성자, 라이선스 등
-**수집 동기 및 과정**: 어떤 목적으로, 누가, 어떻게 데이터를 수집하고 정제했는지 상세히 기록합니다.
-**데이터 구성**: 데이터의 형식(이미지, 텍스트 등), 통계적 특성, 민감 정보 포함 여부 등을 기술합니다.
-**권장 사용법 및 한계**: 데이터셋이 어떤 종류의 작업에 적합하며, 잠재적으로 어떤 편향을 포함하고 있는지, 사용 시 주의할 점은 무엇인지 명시합니다.
모델 카드와 데이터 시트는 AI 시스템의 투명성과 책임성을 높이는 핵심적인 도구입니다. 개발자는 이러한 문서를 충실히 작성하고 공개함으로써 사용자와의 신뢰를 구축하고, AI 기술의 건강한 생태계를 만드는 데 기여할 수 있습니다.
---
## 7. 개념 확인 퀴즈 (Concept Check Quiz)
1. XAI 기법인 LIME과 SHAP의 가장 큰 차이점은 무엇인가요? (설명의 범위 관점에서)
2. AI의 공정성 지표 중 'Demographic Parity'와 'Equalized Odds'는 각각 무엇을 의미하며, 어떤 상황에서 서로 다른 결론을 내릴 수 있을까요?
3. '모델 카드'를 작성하는 가장 중요한 목적은 무엇이라고 생각하시나요?
---
## 8. 과제 (Assignment)
1.**공정성 문제 해결 시나리오**: 여러분이 은행의 대출 심사 AI 모델 개발자라고 가정해 봅시다. 모델이 특정 그룹에게 불리한 결정을 내린다는 의심이 제기되었습니다. Fairlearn 라이브러리를 사용하여 이 문제를 (1)탐지하고, (2)측정하고, (3)완화하기 위한 단계를 구체적으로 설명해 보세요.
2.**모델 카드 작성 연습**: 여러분이 이전에 만들었던 프로젝트(또는 가상의 이미지 분류 모델)에 대한 '모델 카드'의 주요 항목(용도, 성능 지표, 학습 데이터, 윤리적 고려사항)을 간략하게 채워보는 연습을 해보세요.
---
## 9. 되짚어보기 (Summary)
이번 파트에서는 AI를 더 똑똑하게 만드는 것을 넘어, 더 올바르고 공정하게 만들기 위한 AI 윤리와 거버넌스 실무에 대해 학습했습니다.
-**설명가능 AI (XAI)**: '블랙박스' 모델의 결정을 이해하기 위한 XAI의 필요성을 배우고, 대표적인 기법인 LIME과 SHAP의 원리와 활용법을 익혔습니다.
-**편향성 탐지 및 완화**: AI 모델이 학습 데이터로부터 편견을 학습할 수 있음을 인지하고, Fairlearn을 사용하여 모델의 편향성을 측정하고 완화하는 다양한 기법들을 살펴보았습니다.
-**AI 규제와 컴플라이언스**: EU AI Act와 같은 글로벌 AI 규제 동향을 파악하고, 모델 카드와 데이터 시트를 통해 AI 시스템의 투명성과 책임성을 확보하는 방법을 학습했습니다.
---
## 10. 더 깊이 알아보기 (Further Reading)
-[LIME 원문 논문 (KDD 2016)](https://arxiv.org/abs/1602.04938)
-[SHAP 원문 논문 (NeurIPS 2017)](https://arxiv.org/abs/1705.07874)
-[Fairlearn 공식 문서](https://fairlearn.org/): 공정성 측정 및 완화 알고리즘 가이드
-[Hugging Face Blog: Model Cards](https://huggingface.co/blog/model-cards): 모델 카드 작성에 대한 좋은 예시와 설명
-[EU AI Act 최종안 (영문)](https://artificialintelligenceact.com/): AI 법안의 상세 조항 확인
---
**➡️ 다음 시간: [Part 15: 나만의 AI 서비스 만들기 (캡스톤 프로젝트 가이드)](./part_15_capstone_project.md)**
@@ -343,6 +343,52 @@ Jupyter Notebook/Lab은 코드 스니펫을 빠르게 테스트하고, 데이터
...
@@ -343,6 +343,52 @@ Jupyter Notebook/Lab은 코드 스니펫을 빠르게 테스트하고, 데이터
VS Code는 단순한 스크립트 작성부터 대규모 프로젝트 개발까지 모두 지원하는 강력하고 유연한 도구입니다. Jupyter Notebook과 함께 사용하면 더욱 효율적인 개발이 가능합니다.
VS Code는 단순한 스크립트 작성부터 대규모 프로젝트 개발까지 모두 지원하는 강력하고 유연한 도구입니다. Jupyter Notebook과 함께 사용하면 더욱 효율적인 개발이 가능합니다.
### 6.3. AI 기반 코드 에디터 활용 (Cursor)
지금까지 우리는 AI 개발을 위한 기초 체력을 기르기 위해 Anaconda, VS Code 등 필수적인 도구들을 설치하고 가상 환경을 구축했습니다. 이제 개발 생산성을 극대화할 수 있는 강력한 도구인 **AI 기반 코드 에디터, Cursor**의 활용법에 대해 알아봅니다.
VS Code가 '스마트 작업대'라면, Cursor는 **'AI 조수가 함께하는 최첨단 스마트 작업대'**라고 할 수 있습니다. Cursor는 VS Code를 기반으로 만들어져 기존 VS Code의 모든 기능을 그대로 사용하면서, 강력한 AI 기능을 통합하여 개발의 모든 단계에서 도움을 줍니다.
#### 왜 AI 코드 에디터를 사용해야 할까요?
-**개발 시간 단축**: 반복적인 코드 작성, 복잡한 로직 구현, 문서 검색 등에 소요되는 시간을 AI가 대신 처리해주어 핵심 비즈니스 로직에 더 집중할 수 있습니다.
-**학습 곡선 완화**: 새로운 라이브러리나 프레임워크를 배울 때, AI에게 직접 질문하고 코드 예시를 받으며 빠르게 학습할 수 있습니다.
-**코드 품질 향상**: AI가 코드 스니펫 생성, 리팩토링, 버그 수정 등을 제안하여 더 깨끗하고 효율적인 코드를 작성하도록 돕습니다.
-**맥락(Context) 기반의 정확한 지원**: AI가 현재 작업 중인 전체 프로젝트 구조, 열려 있는 파일, 터미널 내용 등을 이해하고 질문의 의도에 맞는 정확하고 실용적인 답변을 제공합니다.
#### Cursor 설치 및 기본 설정
1.**설치**:
-[Cursor 공식 홈페이지](https://cursor.sh/)에 접속하여 자신의 운영체제에 맞는 버전을 다운로드하고 설치합니다.
- 설치 과정은 일반적인 애플리케이션과 동일하며 매우 간단합니다.
2.**기본 설정 (OpenAI API 키 연동 - 선택 사항)**:
- Cursor는 기본적으로 내장된 AI 모델을 무료로 제공하지만, 더 높은 성능의 GPT-4와 같은 모델을 사용하려면 개인의 OpenAI API 키를 등록할 수 있습니다.
-`File > Preferences > Settings` (단축키: `Ctrl + ,`) 로 이동한 후 'Cursor'를 검색하여 관련 설정을 찾을 수 있습니다.
3.**기존 VS Code 설정 마이그레이션**:
- Cursor는 최초 실행 시 기존에 사용하던 VS Code의 확장 프로그램과 설정을 그대로 가져올지 묻습니다. 이를 통해 별도의 설정 없이 기존 개발 환경을 그대로 사용할 수 있습니다.
#### Cursor 핵심 기능 완전 정복
Cursor의 핵심 기능은 단축키 `Ctrl + K` (AI에게 질문/코드 생성)와 `Ctrl + L` (채팅)에 집약되어 있습니다.
| 기능 | 단축키 (Windows/Linux) | 설명 | 활용 예시 |
|---|---|---|---|
| **AI 채팅 (Chat)** | `Ctrl + L` | 사이드바 형태의 채팅창을 열어 AI와 대화합니다. 현재 열린 파일이나 선택된 코드 블록을 자동으로 인식(`@` 기호 활용)하여 맥락에 맞는 답변을 제공합니다. | - "이 `calculate_metrics` 함수의 코드를 설명해줘."<br>- "Pandas 데이터프레임에서 중복된 행을 제거하는 방법을 알려줘."<br>- "이 프로젝트의 전체 구조를 다이어그램으로 그려줘." |
| **인라인 코드 생성/수정 (Inline Edit/Generate)** | `Ctrl + K` | 코드 편집기 내에서 직접 AI에게 코드 생성을 요청하거나, 기존 코드를 수정하도록 지시합니다. | - 빈 줄에서: "사용자 정보를 담는 `User` Pydantic 모델을 만들어줘."<br>- 기존 코드 블록 선택 후: "이 코드를 try-except 구문으로 감싸서 예외 처리를 추가해줘."<br>- "이 함수의 이름을 `process_data`로 변경하고 관련 참조도 모두 수정해줘." |
| **컨텍스트 활용 (`@` 기호)** | 채팅 또는 인라인(`Ctrl+K`)에서 `@` 입력 | AI에게 참고할 파일이나 심볼(함수/클래스), 문서를 명시적으로 지정하여 더 정확한 답변을 유도합니다. | - `@main.py` 파일의 내용을 기반으로 질문<br>- `@calculate_metrics` 함수에 대해 질문<br>- `@fastapi` 공식 문서를 참고하여 답변 요청 |
| **AI를 이용한 디버깅 (Debug with AI)** | 코드 에디터의 'Run and Debug' 또는 에러 발생 시 | 코드 실행 중 발생한 에러에 대해 `Fix with AI` 버튼을 클릭하면, AI가 에러의 원인을 분석하고 해결책을 제시합니다. | - `NullPointerException` 발생 시 원인 분석 및 해결 코드 제안 |
#### 사내 Best Practice 공유
-**새로운 기능 구현은 AI와 함께**: 새로운 API 엔드포인트나 데이터 처리 로직을 구현할 때, 주석으로 원하는 기능을 명시하고 `Ctrl + K`를 눌러 AI에게 초안 작성을 맡겨보세요. 개발 속도가 비약적으로 향상됩니다.
-**문서(Documentation)는 AI에게**: 잘 작성된 코드 블록을 선택하고 "이 코드에 대한 docstring을 작성해줘"라고 요청하면, 표준 형식에 맞는 문서 초안을 얻을 수 있습니다.
-**리팩토링은 부담 없이**: 개선하고 싶은 코드(예: 중복 코드, 긴 함수)를 선택하고 "이 코드를 더 효율적으로 리팩토링해줘" 또는 "이 함수를 여러 개의 작은 함수로 분리해줘" 와 같이 요청하여 코드 품질을 지속적으로 관리하세요.
-**막힐 때는 바로 질문하기**: 개발 중 모르는 것이 생겼을 때 웹 브라우저를 열어 검색하는 대신, `Ctrl + L`을 눌러 바로 AI에게 질문하세요. 작업의 흐름을 유지하면서 필요한 정보를 즉시 얻을 수 있습니다.
Cursor와 같은 AI 기반 도구를 적극적으로 활용하는 것은 이제 선택이 아닌 필수입니다. 이러한 도구를 통해 반복적인 작업을 자동화하고, 창의적인 문제 해결에 더 많은 시간을 투자하여 개발자로서의 가치를 더욱 높일 수 있습니다.
## 7. 개발 환경 설정 FAQ 및 트러블슈팅 (Troubleshooting)
## 7. 개발 환경 설정 FAQ 및 트러블슈팅 (Troubleshooting)
개발 환경 설정 과정에서 몇 가지 일반적인 문제에 직면할 수 있습니다. 다음은 자주 묻는 질문과 해결 방법입니다. ([용어집의 FAQ 섹션](glossaries/part_1_glossary.md#자주-묻는-질문-faq)도 참고하세요.)
개발 환경 설정 과정에서 몇 가지 일반적인 문제에 직면할 수 있습니다. 다음은 자주 묻는 질문과 해결 방법입니다. ([용어집의 FAQ 섹션](glossaries/part_1_glossary.md#자주-묻는-질문-faq)도 참고하세요.)
...
@@ -401,10 +447,10 @@ VS Code는 단순한 스크립트 작성부터 대규모 프로젝트 개발까
...
@@ -401,10 +447,10 @@ VS Code는 단순한 스크립트 작성부터 대규모 프로젝트 개발까
***Anaconda**는 Python과 필수 데이터 과학 패키지를 쉽게 설치하고 관리할 수 있게 해주는 배포판입니다.
***Anaconda**는 Python과 필수 데이터 과학 패키지를 쉽게 설치하고 관리할 수 있게 해주는 배포판입니다.
***가상 환경(`conda`)**은 프로젝트별로 독립된 개발 환경을 제공하여 의존성 문제를 해결하고 재현성을 높입니다. **모든 프로젝트는 새로운 가상 환경에서 시작하는 것을 강력히 권장합니다.**
***가상 환경(`conda`)**은 프로젝트별로 독립된 개발 환경을 제공하여 의존성 문제를 해결하고 재현성을 높입니다. **모든 프로젝트는 새로운 가상 환경에서 시작하는 것을 강력히 권장합니다.**
***Jupyter Notebook/Lab**은 대화형 코드 실행 및 문서화에 유용하며, 특히 데이터 분석과 실험에 효과적입니다.
***Jupyter Notebook/Lab**은 대화형 코드 실행 및 문서화에 유용하며, 특히 데이터 분석과 실험에 효과적입니다.
***VS Code**는 강력한 기능을 갖춘 코드 편집기로, Python 개발 및 대규모 프로젝트 관리에 적합합니다.
***VS Code**는 강력한 기능을 갖춘 코드 편집기로, Python 개발을 비롯한 다양한 프로그래밍 작업에 널리 사용됩니다.
환경 설정은 때때로 지루하고 복잡하게 느껴질 수 있지만, 이 단계를 탄탄하게 다져놓으면 앞으로의 학습과 개발 과정이 훨씬 수월해질 것입니다.
환경 설정은 때때로 지루하고 복잡하게 느껴질 수 있지만, 이 단계를 탄탄하게 다져놓으면 앞으로의 학습과 개발 과정이 훨씬 수월해질 것입니다.
**다음 시간에는 본격적으로 Python 프로그래밍의 세계로 뛰어들어, AI 개발의 기초 체력을 기르기 위한 핵심 문법을 배우게 됩니다.** 준비되셨나요?
**다음 시간에는 본격적으로 Python 프로그래밍의 세계로 뛰어들어, AI 개발의 기초 체력을 기르기 위한 핵심 문법을 배우게 됩니다.** 준비되셨나요?
**➡️ 다음 시간: [Part 2: Python 핵심 문법 마스터하기](part_2_python_core_syntax.md)**
**➡️ 다음 시간: [Part 2: 파이썬 핵심 문법](part_2_python_core_syntax.md)**
## 3. 도입: 문장의 '진짜 의미'를 파악하는 똑똑한 번역가 (Introduction)
> **💡 비유: Transformer는 '능숙한 동시통역사'**
> - **초보 번역가 (RNN)**: 문장을 앞에서부터 한 단어씩 순서대로 듣고 바로 번역합니다. "나는 강가에 가서..." 까지 듣고 'I go to the river bank and...' 라고 번역을 시작합니다. 하지만 뒤에 '낚시를 했다'가 나올지 '수영을 했다'가 나올지에 따라 문맥이 달라질 수 있습니다. 긴 문장을 들으면 앞부분을 잊어버리는 단점도 있습니다.
> - **능숙한 통역사 (Transformer)**: 문장 전체("그는 강가에서 낚시를 했다")를 일단 다 듣습니다. 그리고 '낚시를 했다'라는 핵심 행동을 파악한 뒤, 이 행동과 가장 관련이 깊은 '강가', '그'라는 단어에 **더 집중(Attention)**하여 "He went fishing by the river" 라는 자연스러운 번역을 완성합니다. 문장 전체의 핵심과 단어 간의 관계를 파악하는 데 능숙합니다.
이처럼 Transformer는 문장 전체를 보고 단어 간의 관계와 중요도를 파악하는 **Attention** 메커니즘을 사용하여 자연어의 복잡한 문맥을 이해하는 혁신적인 방법을 제시했습니다.
---
## 4. Transformer 핵심 원리 파헤치기
### 4-1. Attention 메커니즘의 등장: RNN의 한계를 넘어서
기존의 순차 데이터 처리 모델인 RNN(Recurrent Neural Network)은 문장이 길어질수록 앞쪽 정보가 뒤로 전달되며 소실되는 **장기 의존성 문제(Long-Term Dependency Problem)**가 있었습니다. 또한, 순차적으로 계산해야 해서 GPU 병렬 처리가 어려워 학습 속도가 느렸습니다.
이를 해결하기 위해 **Attention**이 제안되었습니다. 출력 단어를 예측할 때마다, 입력 문장 전체를 다시 참고하여 **가장 관련 높은 단어에 '주목'**하는 방식입니다.
### 4-2. Transformer: "Attention Is All You Need"
2017년 구글 논문 "Attention Is All You Need"에서 소개된 Transformer는 RNN 구조를 완전히 버리고 오직 Attention 메커니즘만으로 언어를 처리하는 모델입니다.
**주요 구성 요소**
-**인코더 (Encoder)**: 입력 문장을 받아 각 단어의 의미와 문맥 정보를 풍부하게 담은 **표현(Representation)**으로 변환합니다. 문장을 '이해'하는 데 특화된 부분입니다.
-**디코더 (Decoder)**: 인코더가 만든 표현과 이전에 생성된 단어들을 바탕으로 다음 단어를 예측하여 새로운 문장을 '생성'하는 데 특화된 부분입니다.
### 4-3. 핵심 메커니즘: Self-Attention
Transformer의 심장은 **Self-Attention**입니다. 문장 안에서 단어들이 **서로에게 얼마나 중요한지**를 계산하여, 문맥에 맞는 단어의 의미를 파악하는 과정입니다.
> **예시**: "The animal didn't cross the street because **it** was too tired."
>
> 여기서 'it'이 가리키는 대상은 'animal'일까요, 'street'일까요? 사람은 쉽게 'animal'이라고 파악합니다. Self-Attention은 'it'과 문장 내 다른 모든 단어와의 관련도 점수를 계산하여, 'it'이 'animal'을 가리킨다는 것을 높은 확률로 학습하게 됩니다.
이 과정은 각 단어에 대해 `Query(Q)`, `Key(K)`, `Value(V)`라는 세 가지 벡터를 만들어 계산합니다.
-`Query`: 현재 단어의 정보 (분석의 주체)
-`Key`: 다른 단어들과의 관련성을 계산하기 위한 '꼬리표'
-`Value`: 다른 단어들의 실제 의미
현재 단어의 `Query`가 다른 모든 단어의 `Key`들과 얼마나 '어울리는지(유사도)'를 계산하고, 이 점수를 각 단어의 `Value`에 곱해 최종적으로 문맥이 반영된 새로운 표현을 만들어냅니다.
### 4-4. 순서 정보 학습: Positional Encoding
Transformer는 RNN과 달리 단어를 한 번에 처리하므로, "나는 너를 좋아해"와 "너는 나를 좋아해"를 구분하지 못합니다. 단어의 순서 정보를 알려주기 위해, 각 단어의 위치마다 고유한 값을 더해주는 **Positional Encoding**을 사용합니다. 사인(sine), 코사인(cosine) 함수를 이용해 각 위치에 대한 벡터를 만들어 입력 임베딩에 추가해 줍니다.
---
## 5. Transformer의 두 갈래: BERT와 GPT
Transformer 아키텍처는 현대 LLM의 근간이 되었습니다. 대표적인 두 모델인 BERT와 GPT는 Transformer의 구조를 각기 다른 방식으로 활용합니다.
| 구분 | BERT (Bidirectional Encoder Representations from Transformers) | GPT (Generative Pre-trained Transformer) |
|---|---|---|
| **개발사** | Google | OpenAI |
| **주요 구조** | Transformer의 **인코더(Encoder)만** 사용 | Transformer의 **디코더(Decoder)만** 사용 |
| **특징** | **"문맥을 이해하는 전문가"**<br>문장 전체를 보고 빈칸(Mask)을 채우는 방식으로 학습 (양방향). 문맥 이해, 의미 분석, 분류 등 **이해(Understanding)** 기반 작업에 강력함. | **"이야기를 만들어내는 작가"**<br>이전 단어들을 보고 다음 단어를 예측하며 순차적으로 학습 (단방향). 문장 생성, 요약, 번역 등 **생성(Generation)** 기반 작업에 강력함. |
| **주요 활용** | 구글 검색 엔진, 텍스트 분류, 감성 분석, 개체명 인식 | 챗봇(ChatGPT), 콘텐츠 초안 생성, 코드 자동 완성 |
---
## 6. 개념 확인 퀴즈 (Concept Check Quiz)
1. Transformer 이전의 순차 데이터 모델(RNN)이 가졌던 가장 큰 한계점은 무엇이었나요?
2. 'Self-Attention' 메커니즘의 역할을 한 문장으로 설명해 보세요.
3. GPT가 주로 사용하는 Transformer의 구성요소는 인코더(Encoder)인가요, 디코더(Decoder)인가요?
---
## 7. 과제 (Assignment)
1.**BERT와 GPT의 활용 분야 비교 조사**: BERT와 GPT가 각각 어떤 종류의 AI 서비스(e.g., 검색 엔진, 챗봇, 번역기)에 더 적합한지, 그 이유와 함께 실제 서비스 예시를 2가지 이상 찾아 설명해 주세요.
2.**쉬운 비유로 설명하기**: 'Self-Attention'의 원리를 비전공자 친구에게 설명한다고 상상하고, 쉬운 비유를 들어 3문장 이내로 설명하는 글을 작성해 주세요. (예: "칵테일 파티에서 여러 사람과 대화할 때, 나와 가장 관련 있는 주제를 이야기하는 사람의 목소리에 더 집중하는 것과 같아요.")
---
## 8. 되짚어보기 (Summary)
이번 파트에서는 현대 NLP의 혁신을 가져온 Transformer에 대해 배웠습니다.
-**Attention의 등장**: RNN의 장기 의존성 문제를 해결하기 위한 아이디어로 시작했습니다.
-**Transformer의 구조**: RNN을 완전히 배제하고, 인코더-디코더 구조와 Self-Attention만으로 문장의 문맥을 파악하는 방법을 이해했습니다.
-**BERT와 GPT**: Transformer의 인코더와 디코더가 각각 어떻게 문맥 이해와 텍스트 생성이라는 두 가지 큰 흐름을 만들어냈는지 확인했습니다.
## 9. 더 깊이 알아보기 (Further Reading)
-[Attention Is All You Need (원문 논문)](https://arxiv.org/abs/1706.03762): 모든 것의 시작이 된 논문.
-[The Illustrated Transformer (영문 블로그)](http://jalammar.github.io/illustrated-transformer/): 그림과 함께 Transformer를 쉽게 설명한 최고의 자료 중 하나.
-[Hugging Face Course - How do Transformers work?](https://huggingface.co/learn/llm-course/en/chapter1/4): 본문에 많이 참고된 허깅페이스의 LLM 강좌.
---
**➡️ 다음 시간: [Part 7.5: LangChain으로 LLM 애플리케이션 개발 맛보기](./part_7.5_llm_application_development_with_langchain.md)**
> ### 심화: 활성화 함수, 왜 필요한가? (Deep Dive: Activation Functions)
> 선형 계층(`nn.Linear`)만 계속 쌓으면 결국 하나의 큰 선형 계층과 다를 바 없습니다. 활성화 함수는 여기에 '비선형성'이라는 마법을 더해, 복잡하고 구불구불한 데이터 패턴도 학습할 수 있게 해주는 필수 요소입니다.
>
> **Q: 왜 굳이 `ReLU` 같은 활성화 함수를 중간에 삽입해야 할까요? 선형 계층(`nn.Linear`)만 여러 개 쌓으면 더 간단하지 않을까요?**
---
>
> **A: 모델에 '비선형성(Non-linearity)'을 부여하기 위해서입니다.** 만약 활성화 함수 없이 선형 계층만 계속 쌓는다면, 이는 결국 하나의 거대한 선형 계층을 쌓은 것과 수학적으로 동일합니다.
## 5. 딥러닝 모델 학습 과정
>
> - **선형 변환의 한계**: 선형 변환은 데이터를 늘리거나, 줄이거나, 회전시키는 것은 가능하지만, 구불구불한 복잡한 형태의 데이터를 구분하는 경계선을 만들 수는 없습니다.
> **🎯 3-4일차 목표:** 손실 함수, 옵티마이저의 개념을 이해하고 전체 학습 루프를 구현합니다.
> - **비선형성의 마법**: 활성화 함수는 이러한 선형 변환 결과에 '비틀기'나 '접기'와 같은 비선형적인 변환을 가합니다. 이 과정을 여러 층 반복함으로써, 신경망은 아무리 복잡한 데이터 분포라도 학습하고 구분해낼 수 있는 유연하고 강력한 표현력(Expressiveness)을 갖추게 됩니다.
>
### 5-1. 모델의 나침반과 조율사
> **주요 활성화 함수 비교**
-**손실 함수(Loss Function)**: 모델의 예측이 실제 정답과 얼마나 다른지를 측정하는 **'오차 측정기'**. (예: `nn.CrossEntropyLoss` - 분류 문제)
>
-**옵티마이저(Optimizer)**: 손실 함수가 계산한 오차를 기반으로, 모델의 파라미터(가중치)를 어느 방향으로 얼마나 업데이트할지 결정하는 **'조율사'**. (예: `torch.optim.Adam`)
> | 활성화 함수 | 수식 / 특징 | 장점 | 단점 | 주요 사용처 |
> |---|---|---|---|---|
### 5-2. 핵심 프로세스: 학습 루프(Training Loop)
> | **Sigmoid** | `1 / (1 + e^-x)`<br>출력을 (0, 1) 사이로 압축 | 출력을 확률처럼 해석 가능 | **Vanishing Gradient** 문제 발생<br>출력의 중심이 0이 아님 | 이진 분류 문제의 출력층 |
> | **Tanh** | `(e^x - e^-x) / (e^x + e^-x)`<br>출력을 (-1, 1) 사이로 압축 | 출력의 중심이 0 (Sigmoid 단점 보완) | **Vanishing Gradient** 문제 여전히 존재 | RNN의 은닉층에서 종종 사용 |
> | **ReLU** | `max(0, x)`<br>입력이 0보다 작으면 0, 크면 그대로 출력 | 계산이 매우 빠름<br>Vanishing Gradient 문제 해결 | **Dying ReLU** 문제 (입력이 음수면 뉴런이 죽음) | 대부분의 딥러닝 모델의 은닉층 (가장 대중적) |
> | **Leaky ReLU** | `max(α*x, x)` (α는 작은 수, 예: 0.01)<br>ReLU의 변형 | Dying ReLU 문제 해결 | α 값을 직접 설정해야 함 | ReLU 대신 사용해볼 수 있는 대안 |
>| **Softmax** | `e^zi / Σ(e^zj)`<br>다중 클래스 분류의 출력을 확률 분포로 변환 | 각 클래스에 대한 확률을 직관적으로 보여줌 | - | 다중 클래스 분류 문제의 출력층 |
>
>
> ---
>
> ## 5. 딥러닝 모델 학습 과정
>
> > **🎯 3-4일차 목표:** 손실 함수, 옵티마이저의 개념을 이해하고 전체 학습 루프를 구현합니다.
>
> ### 5-1. 모델의 예측을 어떻게 평가할까? (손실 함수)
>
> 훌륭한 모델을 만들기 위해서는, 현재 모델이 얼마나 '잘하고' 또는 '못하고' 있는지를 측정할 객관적인 '평가 지표'가 필요합니다. 이 역할을 하는 것이 바로 **손실 함수(Loss Function)** 입니다.
>
> - **손실 함수(Loss Function)**: 모델의 예측값(`prediction`)과 실제 정답(`target`) 사이의 차이, 즉 **'오차(Error)'를 계산하는 함수**입니다. 딥러닝 학습의 목표는 이 손실 함수가 계산한 값을 **최소화(Minimize)**하는 것입니다.
> - **옵티마이저(Optimizer)**: 손실 함수가 계산한 오차를 기반으로, 모델의 파라미터(가중치)를 어느 방향으로 얼마나 업데이트할지 결정하는 **'조율사'**. (예: `torch.optim.Adam`)
>
> ### 심화: 대표적인 손실 함수 (MSE vs Cross-Entropy)
>
> 손실 함수는 해결하려는 문제의 종류에 따라 적절한 것을 선택해야 합니다.
>
> #### 1. 평균 제곱 오차 (Mean Squared Error, MSE)
> - **개념**: 예측값과 실제 정답 사이의 '거리'를 기반으로 오차를 측정합니다. 각 데이터 포인트의 오차를 제곱하고, 이를 모두 더한 후 평균을 냅니다.
> - **언제 사용하나?**: **회귀(Regression)** 문제. (예: 집값 예측, 주가 예측 등 연속적인 값을 예측할 때)