DOCS/research/autonomous_agents/robeing_vla_diffusion_deep_dive.md
happybell80 c8bcb396cc fix: Mermaid 다이어그램 문법 오류 수정
- 괄호와 특수문자 포함된 노드 레이블을 큰따옴표로 감싸기
- POLICY, CAND1-3, EXEC 노드의 파싱 오류 해결
2025-09-15 20:32:49 +09:00

20 KiB

tags, date, modified
tags date modified
VLA
Diffusion
Robeing
Autonomous Agent
AI
Architecture
2025-09-15 2025-09-15

VLA, Diffusion, 자율 에이전트: '로빙'을 위한 기술 심층 분석

1. Executive Summary

이 문서는 로봇 공학 분야에서 시작된 VLA(Vision-Language-Action) 및 디퓨전(Diffusion) 모델의 핵심 원리를 분석하고, 이를 '로빙(Roboing)'과 같은 인터넷 기반 자율 에이전트에 적용하기 위한 기술적 청사진을 제시합니다.

문서는 크게 세 부분으로 구성됩니다.

  1. 핵심 개념: VLA와 디퓨전의 기본 원리를 비유와 함께 설명합니다.
  2. 기술 심층 분석: 로빙에 필요한 비전 인코더, 백본 LLM, 액션 학습을 위한 데이터베이스 설계 및 학습 프로세스를 구체적인 코드 예시와 함께 제안합니다.
  3. 로빙 적용 시나리오: 현재 로빙의 기능 수준에서 시작하여 장기적인 자율 에이전트로 발전하기 위한 단계별 아키텍처와 구체적인 시나리오를 다이어그램과 함께 제시합니다.

궁극적으로 이 문서는 로빙이 단순한 챗봇을 넘어, 시각적 맥락을 이해하고, 복잡한 다단계 작업을 자율적으로 계획하며, 인간의 개입을 최소화하는 '제로-UI(Zero-UI)' 에이전트로 진화하기 위한 로드맵을 제공하는 것을 목표로 합니다.


2. 핵심 개념 설명: VLA와 디퓨전

2.1. VLA (Vision-Language-Action): 행동의 3요소

VLA는 이름 그대로 세 가지 요소를 통합하여 지능적인 행동을 결정하는 모델 구조입니다.

  1. Vision (시각): 주변 환경과 상태를 인식합니다.

    • 로봇: 카메라를 통해 본 실제 세계의 객체, 장애물.
    • 로빙: 웹페이지 스크린샷, PDF 문서의 레이아웃, 차트 이미지, GUI 애플리케이션 화면.
  2. Language (언어): 사용자의 지시, 목표, 또는 텍스트 형태의 정보를 이해합니다.

    • 로봇: "사과를 집어줘" 와 같은 자연어 명령.
    • 로빙: "이 보고서 요약해줘" 라는 슬랙 메시지, 이메일 본문, 검색 쿼리.
  3. Action (행동): 인식한 시각 정보와 이해한 언어적 목표를 바탕으로 다음에 수행할 행동을 결정합니다.

    • 로봇: 로봇 팔의 관절 각도 조절, 바퀴 구동.
    • 로빙: API 호출, 웹 브라우저의 버튼 클릭, 텍스트 입력, 슬랙 메시지 전송.

쉬운 비유: LLM이 "말로 설명된 요리법"을 생성하고, VLM이 "사진 속 재료와 도구"를 인식한다면, **VLA는 "사진 속 냉장고를 보고, 레시피를 이해해서, 직접 요리를 만드는 행동 순서"**를 만들어내는 것과 같습니다.

2.2. 디퓨전 모델 (Diffusion Models): 이미지에서 행동 계획으로

디퓨전 모델은 본래 이미지 생성 분야에서 놀라운 성능을 보여준 기술입니다.

  • 작동 원리: 깨끗한 이미지에 점진적으로 노이즈를 추가하는 과정(Forward Process)을 학습한 뒤, 그 역과정(Reverse Process)을 통해 완전한 노이즈로부터 깨끗한 이미지를 생성해냅니다.

  • 행동 계획에서의 의미: 이 원리를 행동 계획에 적용하면, 단 하나의 '정답' 행동을 예측하는 대신, 가능한 행동들의 확률 분포에서 가장 그럴듯한 **행동 순서(Trajectory)**를 점진적으로 샘플링하고 복원해낼 수 있습니다.

쉬운 비유: 조각가가 대리석 원석(노이즈)에서 불필요한 부분을 점차 깎아내어 최종 조각상(목표 행동)을 완성하는 것과 유사합니다. 처음에는 무작위적인 행동에서 시작해, 점차 목표에 부합하는 정교한 행동 순서로 수렴시키는 방식입니다.

2.3. Diffusion-VLA: 두 기술의 시너지

Diffusion-VLA는 VLA의 '상황 인식 및 목표 이해' 능력과 디퓨전의 '안정적인 다단계 계획 생성' 능력을 결합한 것입니다.

  • VLA: "무엇을(Vision), 왜(Language) 해야 하는가?"를 파악합니다.
  • Diffusion: "어떻게(Action Sequence) 해야 하는가?"에 대한 여러 경로를 탐색하고 최적의 경로를 생성합니다.

이를 통해 "박스를 정리해줘"와 같이 모호한 지시에도, '박스를 연다 → 물건을 꺼낸다 → 분류한다 → 제자리에 놓는다'와 같은 다양한 행동 순서 후보를 생성하고 그중 가장 효율적인 계획을 선택할 수 있게 됩니다.


3. GUI/인터넷 환경 적용: ZeroGUI와 자율 학습

로봇 공학의 VLA를 인터넷 환경으로 가져오려는 시도 중 가장 주목할 만한 것은 ZeroGUI와 같은 GUI 자동화 연구입니다.

3.1. ZeroGUI란? (Zero Human Cost, Not Zero-Shot)

  • 핵심 아이디어: "Zero-Shot(사전 학습만으로 새로운 작업을 수행)"의 의미가 아니라, GUI 에이전트 학습에 필요한 **"인간의 라벨링 비용을 0(Zero)"**으로 만들자는 목표를 가집니다.
  • 기존 방식: "이 버튼을 클릭해" 와 같이 사람이 모든 행동 경로를 데이터로 만들어줘야 했습니다.
  • ZeroGUI 방식: 에이전트가 스스로 GUI 환경과 상호작용하며 학습 데이터를 생성하고, 스스로 보상을 평가하여 자율적으로 학습합니다.

3.2. 자율 학습의 3단계 메커니즘

ZeroGUI가 인간의 개입 없이 학습하는 과정은 다음과 같습니다.

  1. 태스크 생성 (Task Generation): 에이전트가 GUI 화면을 탐색하며 가능한 상호작용(클릭, 입력 등)을 조합하여 스스로 "해볼 만한" 태스크 후보들을 만들어냅니다.
  2. 보상 추정 (Reward Estimation): VLM(Vision-Language Model)을 심판으로 활용합니다. VLM이 목표(예: "뉴스 검색")와 실행 후 결과 화면을 비교하여, 태스크 성공 여부를 점수(보상)로 매깁니다.
  3. 온라인 상호작용 (Online Interaction): 실제 GUI 환경에서 '탐색 → 태스크 생성 → 실행 → 보상 추정'의 강화학습 루프를 지속적으로 반복하며 정책을 점진적으로 개선합니다.

3.3. ZeroGUI의 실험 구성

  • 환경: OSWorld(데스크톱 GUI 벤치마크), AndroidLab(모바일 시뮬레이터)
  • 베이스 에이전트: UI-TARS, Aguvis와 같은 기존 GUI 에이전트 위에 ZeroGUI의 자율 학습 루프를 적용하여 성능 향상을 증명했습니다.
  • 하드웨어: 특정 고사양 하드웨어를 요구하기보다는, VLM을 구동할 수 있는 표준적인 GPU 환경에서 재현 가능하도록 깃허브에 스크립트와 모델을 공개했습니다.

4. 기술 심층 분석: '로빙'을 위한 빌딩 블록

4.1. 'Vision' 컴포넌트: 비전 인코더

로빙이 PDF의 차트, 웹페이지의 레이아웃을 '보기' 위해 필요한 모듈입니다.

4.1.1. 사전학습 인코더 비교

모델명 개발사 특징 장점 (로빙 적용 시) 단점
CLIP OpenAI 이미지-텍스트를 동일 공간에 매핑 "그래프 찾아줘" 등 언어-이미지 매칭에 탁월. 생태계 넓음. 세밀한 텍스트/숫자 인식은 약함.
DINOv2 Meta 텍스트 라벨 없이 자기지도학습 시각적 패턴, 레이아웃 등 세부 특징 추출에 매우 강력. 언어와 직접 결합된 구조가 아님. 계산 비용이 큼.
SigLIP Google CLIP 개선판. 시그모이드 손실 함수. CLIP보다 텍스트-이미지 정렬 성능 우수. LLM과 결합 시 안정적. CLIP만큼 생태계가 넓지는 않음.
BLIP-2 Salesforce 이미지 캡셔닝, VQA(질의응답) 특화 "이 차트는 무엇을 의미해?" 와 같은 이미지 질의응답에 강점. 단순 특징 추출 용도로는 구조가 복잡하고 무거움.
Florence-2 Microsoft 멀티태스크(캡션, OCR, 객체탐지) 통합 하나의 모델로 문서 내 텍스트 인식, 레이아웃 분석 등 복합 작업 가능. 아직 공개 범위가 제한적이고 무거움.

결론: 초기에는 SigLIP으로 언어-이미지 정렬을 구현하고, 정밀한 차트/표 분석이 필요할 때 DINOv2를 보조적으로 사용하는 것이 현실적입니다.

4.1.2. 예제 구현 (Python)

# 1. SigLIP으로 텍스트 지시와 문서 이미지 정렬
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModel

# model_id = "openai/clip-vit-large-patch14"  # 또는 CLIP
model_id = "google/siglip-so400m-patch14-384"  # SigLIP 권장
device = "cuda" if torch.cuda.is_available() else "cpu"

processor = AutoProcessor.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id).to(device)
model.eval()

def score_image_text(image_path: str, text: str) -> float:
    """이미지와 텍스트 간의 관련도 점수를 계산합니다."""
    image = Image.open(image_path).convert("RGB")
    inputs = processor(text=[text], images=[image], return_tensors="pt", padding=True).to(device)
    with torch.no_grad():
        outputs = model(**inputs)
        image_emb = torch.nn.functional.normalize(outputs.image_embeds, dim=-1)
        text_emb  = torch.nn.functional.normalize(outputs.text_embeds, dim=-1)
        sim = (image_emb @ text_emb.T).squeeze().item()
    return float(sim)

# 예시: "재무지표 표"와 가장 관련 높은 페이지 찾기
query = "재무지표 표와 관련된 섹션을 찾아 요약하라"
candidates = ["page1.png", "page2.png", "page3.png"]
# scored = [(p, score_image_text(p, query)) for p in candidates]
# best_page, best_score = max(scored, key=lambda x: x[1])
# print(f"가장 관련 높은 페이지: {best_page}, 점수: {best_score:.3f}")

# 2. DINOv2로 이미지 내 정보 밀도가 높은 영역 찾기
import timm
import torchvision.transforms as T
import numpy as np

backbone = timm.create_model("vit_large_patch14_dinov2", pretrained=True).to(device).eval()
preproc = T.Compose([
    T.Resize(518), T.CenterCrop(518),
    T.ToTensor(), T.Normalize(mean=0.5, std=0.5)
])

def extract_grid_saliency(image_path: str):
    """이미지를 그리드로 나누고 각 패치의 정보량(분산)을 계산합니다."""
    img = Image.open(image_path).convert("RGB")
    x = preproc(img).unsqueeze(0).to(device)
    with torch.no_grad():
        feats = backbone.forward_features(x)['tokens']
        tokens = feats[:, 1:, :] # class 토큰 제외
        sal = tokens.var(dim=-1).squeeze().detach().cpu().numpy()
    side = int(np.sqrt(sal.shape[0]))
    sal_map = sal.reshape(side, side)
    top_idx = np.unravel_index(np.argmax(sal_map), sal_map.shape)
    return sal_map, top_idx

# sal_map, peak = extract_grid_saliency(best_page)
# print(f"가장 정보량 높은 패치 위치: {peak}")

4.2. 'Language' 컴포넌트: 백본 LLM

로빙의 두뇌 역할을 하며, 사용자의 지시와 시각적 맥락을 종합하여 추론하고 계획을 수립합니다.

4.2.1. 추천 LLM 및 단계별 전략

구분 추천 모델 장점 단점 적용 단계
상용 API GPT-4o mini, Claude 3.5 Sonnet 고성능, 안정적, 긴 문맥 처리 API 비용 발생, 외부 의존성 현재 ~ 단기: 빠른 프로토타이핑 및 안정성 확보
오픈소스 LLaMA 3.1, Qwen2, Mistral 자체 호스팅으로 비용 절감, 커스터마이징 용이 운영을 위한 GPU 자원 필요, 한국어 성능 한계 중기 ~ 장기: 비용 효율화 및 특정 태스크 최적화

전략: 초기에는 상용 API로 빠르게 기능을 구현하고, 데이터가 축적되면 특정 기능(분류, 요약 등)을 경량 오픈소스 모델로 대체하는 하이브리드 방식이 현실적입니다.

4.2.2. 예상 API 비용 (하루 100회 호출 기준)

  • 가정: 호출당 입력 500토큰, 출력 300토큰
  • GPT-4o mini: 약 $0.77 / 월
  • Claude 3.5 Sonnet: 약 $10 / 월

하루 100회 정도의 호출은 저렴한 모델 사용 시 월 1달러 내외로 운영 가능하여 초기 실험에 부담이 적습니다.

4.3. 'Action' 컴포넌트: 학습과 실행

4.3.1. 액션 학습을 위한 Polyglot DB 아키텍처

다양한 형태의 데이터를 효율적으로 저장하고 검색하기 위해 여러 DB를 조합하는 '폴리글롯(Polyglot)' 구조를 제안합니다.

  • PostgreSQL: 계정, 권한, 문서 메타데이터 등 정형 데이터 (트랜잭션 보장)
  • Object Storage (S3/MinIO): PDF, 이미지 등 원본 파일 저장
  • Vector DB (ChromaDB): 텍스트/이미지 임베딩 벡터 저장 및 의미 검색
  • Search Engine (OpenSearch): 키워드 기반 전문(Full-text) 검색
  • Graph DB (Neo4j): 엔티티(사람, 조직), 문서 간의 관계 추적
  • Redis: 캐시, 실시간 작업 큐

4.3.2. 핵심 테이블 스키마 (PostgreSQL 예시)

-- 문서 메타 정보
CREATE TABLE doc (
  doc_id          BIGSERIAL PRIMARY KEY,
  owner_id        BIGINT NOT NULL,
  title           TEXT NOT NULL,
  source_uri      TEXT,
  storage_key     TEXT NOT NULL,     -- S3 경로
  sensitivity     SMALLINT NOT NULL, -- 민감도 레벨
  created_at      TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- 문서 버전 관리
CREATE TABLE doc_version (
  version_id      BIGSERIAL PRIMARY KEY,
  doc_id          BIGINT NOT NULL REFERENCES doc(doc_id) ON DELETE CASCADE,
  rev             INTEGER NOT NULL,
  checksum_sha256 BYTEA NOT NULL,
  created_at      TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- 검색/임베딩 단위 (문단, 표, 그림 등)
CREATE TABLE doc_chunk (
  chunk_id        BIGSERIAL PRIMARY KEY,
  version_id      BIGINT NOT NULL REFERENCES doc_version(version_id) ON DELETE CASCADE,
  chunk_type      TEXT NOT NULL,     -- 'text', 'table', 'figure'
  loc_page        INTEGER,           -- 페이지 번호
  loc_bbox        JSONB,             -- 페이지 내 위치 [x1,y1,x2,y2]
  text_norm       TEXT,              -- 정규화된 텍스트
  meta            JSONB              -- 표 헤더, 차트 종류 등 추가 정보
);

-- 사용자 질의와 에이전트 행동 추적 로그
CREATE TABLE qa_trace (
  trace_id      BIGSERIAL PRIMARY KEY,
  user_id       BIGINT NOT NULL,
  query_text    TEXT NOT NULL,
  topk_json     JSONB,            -- 검색된 근거 chunk_id 리스트
  answer_ref    TEXT,             -- 생성된 답변의 저장 위치
  created_at    TIMESTAMPTZ DEFAULT now()
);

-- 자율 행동 계획 로그
CREATE TABLE action_plan (
  plan_id       BIGSERIAL PRIMARY KEY,
  user_id       BIGINT NOT NULL,
  context_json  JSONB,            -- 행동 결정 시점의 컨텍스트
  steps_json    JSONB,            -- 생성된 행동 순서 [{op:"API.CALL",...}]
  status        TEXT,             -- 'planned', 'running', 'done', 'failed'
  created_at    TIMESTAMPTZ DEFAULT now()
);

4.3.3. 액션 학습 프로세스

qa_traceaction_plan에 축적된 로그를 사용하여 다음과 같이 정책 모델을 학습시킬 수 있습니다.

  1. 행동 모방 (Behavioral Cloning): 성공적으로 완료된 action_plansteps_json을 정답으로 간주하고, 주어진 context_json에서 이 행동 순서를 예측하도록 지도학습을 수행합니다. (초기 모델 학습에 용이)
  2. 오프라인 강화학습 (Offline RL): 사용자의 긍정적 피드백(저장, 재사용 등)을 받은 계획에 높은 보상을, 부정적 피드백(수정, 무시)을 받은 계획에 낮은 보상을 부여하여, 로그 데이터만으로 정책을 점진적으로 개선합니다.
  3. 정책 쉴드 (Policy Shield): 학습된 정책이 위험한 행동(예: 개인정보 유출, 비용 과다 발생)을 생성하지 않도록, 실행 전에 외부의 보안/윤리 모듈이 항상 검사하고 필터링합니다.

5. '로빙' 적용 시나리오 및 아키텍처

5.1. 로빙의 진화 로드맵

단계 이름 핵심 기능 발전 요소
1 (현재) 뉴스 브리핑 어시스턴트 뉴스 크롤링, 요약, 슬랙 전송 주기적/키워드 기반 브리핑
2 (단기) 업무 검색 파트너 자연어 명령 이해, 웹/문서 검색 후 요약 Intent Analyzer, 자동 요약 답변
3 (중기) 파일 처리 에이전트 Slack에 업로드된 파일(PDF, DOCX) 처리 파일 파서, 텍스트/표 추출, 지식베이스 저장
4 (장기) 자율적 협업 파트너 사용자 패턴 학습, 선제적 작업 제안, 멀티에이전트 협업 기억 시스템, 자율 행동 범위 확대

5.2. Diffusion-VLA 기반 아키텍처 진화

1단계: 기본 VLA 구조 (현재)

flowchart LR
    U[사용자 지시] --> LLM[언어 인코더]
    ENV[뉴스/웹 페이지] --> VISION[텍스트/HTML 파서]
    LLM --> POLICY["액션 정책 (규칙 기반)"]
    VISION --> POLICY
    POLICY --> A["단일 액션 실행 (Slack 메시지, 검색)"]

2단계: 액션 후보 분포 생성 (디퓨전 도입)

flowchart LR
    U[사용자 지시] --> LLM[언어 인코더]
    ENV[문서/뉴스/Slack 상태] --> VISION[비전 인코더]
    LLM --> POLICY[디퓨전 정책]
    VISION --> POLICY
    POLICY --> DIST[행동 분포 샘플링]
    DIST --> CAND1["후보1: 뉴스 수집→요약→Slack"]
    DIST --> CAND2["후보2: 뉴스 수집→분석→Notion"]
    DIST --> CAND3["후보3: Slack+Notion 동시 기록"]

3단계: 평가 및 윤리/스탯 모듈 연동

flowchart LR
    subgraph "계획 단계"
        DIST[행동 후보 분포] --> EVAL[평가 모듈]
    end
    subgraph "검증 단계"
        EVAL --> ETHICS[윤리 체크]
        EVAL --> STATS[스탯/레벨업 모델]
    end
    subgraph "실행 단계"
        ETHICS --> SELECT[최종 액션 선택]
        STATS --> SELECT
        SELECT --> EXEC["실행 (Slack/Notion/Email)"]
    end

4단계: 멀티에이전트 확장

flowchart LR
    SELECT[최적 액션 시퀀스] --> COORD[멀티에이전트 코디네이터]
    COORD -- 작업 분배 --> AG1[에이전트1: 뉴스 크롤링]
    COORD -- 작업 분배 --> AG2[에이전트2: 요약·분석]
    COORD -- 작업 분배 --> AG3[에이전트3: Slack 보고]
    AG1 --> MERGE[결과 통합]
    AG2 --> MERGE
    AG3 --> MERGE
    MERGE --> USER[최종 사용자 피드백]

5.3. Zero-UI: 보이지 않는 인터페이스

사용자가 명시적으로 부르지 않아도, 로빙이 맥락을 파악하여 조용히 작업을 처리하고 최소한으로 개입하는 것을 목표로 합니다.

  • 트리거: 시간(매일 아침), 이벤트(특정 키워드 언급), 상태(과도한 알림 억제)
  • 상호작용: 슬랙 스레드에 "이대로 생성할까요? [예/아니오]" 와 같은 한 줄 확인
  • 가드레일: 외부 발송, 비용 발생, 권한 변경 등 고위험 행동은 항상 명시적 승인 요구

즉시 적용 가능한 Zero-UI 시나리오 3가지:

  1. 뉴스 인텔 브리핑: 매일 아침 지정된 키워드의 뉴스를 요약하여 DM으로 전송.
  2. 제로-클릭 태스크 생성: 슬랙 채널에서 "누가?", "언제까지?" 등의 대화가 감지되면, 할 일 초안을 자동으로 만들어 스레드에 제안.
  3. 링크 자동 요약: 채널에 URL이 공유되면, 해당 페이지를 크롤링하여 5줄 요약과 핵심 키워드를 스레드에 답글로 달아줌.

6. 결론 및 다음 단계

VLA와 디퓨전 모델은 로빙이 단순한 정보 제공자를 넘어, 시각적 맥락을 이해하고 복잡한 인터넷 기반 작업을 자율적으로 계획하고 실행하는 '존재형 에이전트'로 성장하기 위한 핵심 기술입니다.

다음 단계 제안:

  1. 데이터 로깅 강화: 제안된 qa_traceaction_plan 스키마에 따라 모든 사용자 상호작용과 에이전트 행동을 구조화하여 기록 시작.
  2. Vision 모듈 도입: SigLIP을 사용하여, 슬랙에 공유되는 이미지나 URL의 썸네일과 사용자 질의 간의 관련도를 측정하는 기능부터 프로토타이핑.
  3. Zero-UI 시나리오 구현: '링크 자동 요약'과 같이 위험도가 낮고 효용이 높은 시나리오를 먼저 구현하여 사용자 피드백 수집 및 학습 데이터 축적.