<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sumin_baek.log</title>
        <link>https://velog.io/</link>
        <description>낮에는 AI 엔지니어로, 밤에는 대학원생으로 인공지능을 탐구하며 기록하는 공간입니다.</description>
        <lastBuildDate>Tue, 05 May 2026 12:57:05 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sumin_baek.log</title>
            <url>https://velog.velcdn.com/images/sumin_baek/profile/cad92a7f-5000-4c8c-ad4f-adbcd8aca341/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sumin_baek.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sumin_baek" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[논문리뷰] Mixtral of Experts (2024)]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Mixtral-of-Experts-2024</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Mixtral-of-Experts-2024</guid>
            <pubDate>Tue, 05 May 2026 12:57:05 GMT</pubDate>
            <description><![CDATA[<h2 id="1-도입-모델-스케일링의-딜레마">1. 도입: 모델 스케일링의 딜레마</h2>
<ul>
<li><strong>배경:</strong> 최근 자연어 처리 분야에서 모델의 성능을 높이기 위해 파라미터(매개변수) 크기를 무작정 키우는 추세가 지속되었습니다.</li>
<li><strong>문제점:</strong> 연산량이 기하급수적으로 증가하여 추론 속도가 느려지고 막대한 컴퓨팅 비용이 발생합니다.</li>
<li><strong>해결책 제시 (MoE):</strong> 모든 데이터를 처리할 때 전체 신경망을 다 쓰는 대신, &quot;입력된 데이터에 가장 적합한 일부 네트워크만 활성화하자&quot;는 희소(Sparse) 모델링 기법이 다시 주목받게 되었습니다.</li>
</ul>
<h2 id="2-핵심-비유-만능-천재-1명-vs-전문가-팀과-팀장">2. 핵심 비유: &#39;만능 천재 1명&#39; vs &#39;전문가 팀과 팀장&#39;</h2>
<p>MoE(Mixture of Experts)의 구조는 일상적인 업무 배분 방식과 같습니다.</p>
<ul>
<li><strong>전통적 모델 (Dense Model):</strong> 모든 문제를 한 명의 만능 천재가 처음부터 끝까지 다 풉니다. 똑똑해질수록 덩치가 커져서 대답이 느려집니다.</li>
<li><strong>MoE 모델 (Sparse Model):</strong> 8명의 분야별 전문가(Expert)와 1명의 라우터(Router, 팀장)로 구성됩니다.</li>
<li><strong>작동 방식:</strong> 입력이 들어오면 라우터가 문제를 분석하여 <strong>가장 잘 풀 수 있는 전문가 2명에게만 일을 배분</strong>합니다. 나머지 6명은 연산에 참여하지 않고 쉬고 있으므로 계산 자원을 크게 절약할 수 있습니다.</li>
</ul>
<h2 id="3-mixtral-8x7b-아키텍처-상세">3. Mixtral 8x7B 아키텍처 상세</h2>
<p>Mixtral 8x7B는 기존 트랜스포머(Transformer) 구조에서 피드포워드(FFN) 블록을 8개의 전문가 네트워크로 교체한 모델입니다.</p>
<p><img src="attachment:ab94b858-63ae-430d-a7a1-39c038f20a33:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-04-10_22.00.49.png" alt="스크린샷 2026-04-10 22.00.49.png"></p>
<p><img src="attachment:43bc6b52-c538-4690-9ac5-29eba599765a:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-04-10_22.01.50.png" alt="스크린샷 2026-04-10 22.01.50.png"></p>
<ul>
<li><p><strong>토큰 단위 라우팅:</strong> 문장이 아닌 &#39;단어(Token)&#39; 단위로 전문가를 매번 새로 평가하고 할당합니다.</p>
</li>
<li><p><strong>수식적 이해:</strong> 라우터는 입력값 $x$에 가중치를 곱해 상위 2개의 전문가를 확률적으로 선택(Softmax)합니다. 선택된 두 전문가의 결과값을 가중합하여 최종 출력을 만듭니다.</p>
<p>  $y = \sum_{i=0}^{n-1} \text{Softmax}(\text{Top2}(x \cdot W_g))_i \cdot \text{SwiGLU}_i(x)$</p>
</li>
<li><p><strong>연산 효율성 (Active vs Sparse)</strong></p>
<ul>
<li><strong>전체 파라미터 (Sparse):</strong> 470억 개 (47B) - 메모리에 올려두어야 하는 총용량.</li>
<li><strong>활성 파라미터 (Active):</strong> 130억 개 (13B) - 특정 단어를 처리할 때 실제로 연산되는 용량.</li>
</ul>
</li>
</ul>
<h2 id="4-객관적-성능-지표">4. 객관적 성능 지표</h2>
<p>단순히 연산량만 줄인 것이 아니라 훨씬 큰 단일 모델들을 뛰어넘는 결과를 보여주었습니다.</p>
<p><img src="attachment:fa88ed7e-0a9e-4dc6-8f27-afbc7a924d00:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-04-10_22.02.55.png" alt="스크린샷 2026-04-10 22.02.55.png"></p>
<ul>
<li><strong>비교 우위:</strong> 활성 파라미터가 약 5배 더 큰 <strong>Llama 2 70B</strong>와 비교했을 때 대부분의 벤치마크(상식 추론, 세계 지식 등)에서 동등하거나 더 높은 성능을 기록했습니다.</li>
<li><strong>강세 분야:</strong> 특히 수학(Math)과 코드 생성(Code), 다국어 처리(프랑스어, 독일어 등) 능력이 기존 모델 대비 압도적으로 향상되었습니다.</li>
</ul>
<h2 id="5-라우팅-분석-전문가는-어떻게-역할을-나눌까">5. 라우팅 분석: 전문가는 어떻게 역할을 나눌까?</h2>
<ul>
<li><strong>주제별 분할 (X):</strong> 수학, 생물학, 철학 등 도메인(주제)에 따라 전담 전문가가 나뉘지 않았습니다.</li>
<li><strong>구문/문법별 분할 (O):</strong> 특정 단어(예: 파이썬의 <code>self</code>, 영어의 <code>Question</code>)나 코드의 &#39;들여쓰기(Indentation)&#39; 등 텍스트의 구문적 구조(Syntax)에 따라 동일한 전문가가 반응하는 경향이 강했습니다.</li>
<li><strong>시간적 지역성:</strong> 방금 1번 전문가를 사용했다면, 바로 다음 단어에서도 1번 전문가를 연속으로 사용할 확률이 매우 높게 나타났습니다.</li>
</ul>
<h2 id="6-한계점-및-비판적-평가">6. 한계점 및 비판적 평가</h2>
<p>MoE 구조가 완벽한 해결책은 아니며 실무 적용 시 다음과 같은 명확한 한계가 존재합니다.</p>
<ol>
<li><p><strong>VRAM (그래픽 메모리) 병목:</strong> 추론 연산량은 13B 수준으로 가볍지만 어떤 전문가가 호출될지 모르기 때문에 전체 47B 파라미터를 모두 GPU 메모리(VRAM)에 상주시켜야 합니다. 즉 하드웨어 메모리 요구량은 여전히 막대합니다.</p>
</li>
<li><p><strong>전문가 붕괴 및 로드 밸런싱:</strong> 모델을 학습시킬 때 라우터가 일을 잘하는 특정 소수의 전문가에게만 계속 데이터를 몰아주는 현상이 발생할 수 있습니다. 이를 방지하기 위해 각 전문가가 고르게 학습되도록 강제하는 보조 손실 함수 등 까다로운 추가 최적화 과정이 필수적입니다.</p>
</li>
<li><p><strong>분산 처리의 오버헤드</strong></p>
<p> 여러 GPU에 전문가를 나누어 배치할 경우, GPU 간에 토큰 데이터를 주고받는 통신 비용이 발생하여 전체 시스템이 지연될 수 있습니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] From Local to Global: A GraphRAG Approach to Query-Focused Summarization]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-From-Local-to-Global-A-GraphRAG-Approach-to-Query-Focused-Summarization</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-From-Local-to-Global-A-GraphRAG-Approach-to-Query-Focused-Summarization</guid>
            <pubDate>Tue, 05 May 2026 12:55:56 GMT</pubDate>
            <description><![CDATA[<h1 id="0-abstract">0. Abstract</h1>
<ul>
<li>기존 RAG 는 “데이터셋의 주요 트렌드는 무엇인가?” 와 같은 전역적 질문에는 답변을 잘 못함</li>
<li>그래서 그래프 기반 RAG 제안</li>
<li>LLM 으로 엔티티 지식 그래프 구축하고 계층적 요약본을 사전에 생성하여 map-reduce 방식으로 최종 답변 도출</li>
<li>약 100만 토큰 규모의 데이터셋 테스트(GPT-4 기반) 결과, 기존 RAG 보다 낫다</li>
</ul>
<h1 id="1-introduction">1. Introduction</h1>
<ul>
<li>기존 기술의 한계<ul>
<li>Vector RAG의 분절성: 쿼리와 유사한 텍스트 조각에만 의존하는 Local Search 방식. 특정 사실 검색엔 좋지만 전체 주제를 묻는 포괄적 질문엔 취약</li>
<li>QFS(쿼리 중심 요약)의 한계: 문서 요약은 가능하나 일반적인 RAG 수준의 방대한 문서량엔 시스템적 적용 불가</li>
</ul>
</li>
<li>해결책<ul>
<li>엔티티 지식 그래프 구축: LLM으로 원본 문서에서 핵심 엔티티와 관계를 추출해 지식 그래프 생성</li>
<li>커뮤니티 요약 사전 생성: 연결된 엔티티들을 그룹화하고 Bottom-up 방식으로 각 커뮤니티 단위 요약본을 사전 생성해 둠</li>
</ul>
</li>
</ul>
<h1 id="2-background">2. Background</h1>
<ul>
<li><p>최근 LLM을 사용해서 복잡한 분야에서 인간과 유사한 센스메이킹을 자동화하려는 시도가 이루어지고 있으나 전체 텍스트 말뭉치에 대한 질문에 답하는 것은 여전히 어려움</p>
</li>
<li><p>기존 RAG 방식은 전체 데이터셋에 대한 포괄적인 이해를 요구하는 질문에는 적합하지 않음</p>
</li>
<li><p>이 논문에서는 이러한 한계를 극복하기 위해 Graph RAG 제안</p>
<p>  <img src="attachment:bc346850-ee51-4ed9-b84b-a5c865fbfcd8:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.02.23.png" alt="스크린샷 2026-05-05 21.02.23.png"></p>
</li>
</ul>
<h1 id="3-methods">3. Methods</h1>
<ol>
<li>source documents → text chunks<ul>
<li>긴 텍스트를 청크로 분할</li>
<li>트레이드 오프: 청크를 크게하면 LLM 호출 비용이 절감되지만 앞부분 정보 누락 될 수 있다. 반대로 청크를 작게하면 LLM 호출 비용은 증가하지만 정보 보존율 높다.</li>
</ul>
</li>
<li>text chunks → entities &amp; relationships<ul>
<li>LLM 을 활용해서 텍스트 내 핵심 정보 추출, 요약</li>
<li>엔티티(인물, 장소, 조직 등), 관계(엔티티 간의 연결성), 주장(관련된 사실 및 이벤트) 등</li>
</ul>
</li>
<li>entities &amp; relationships → knowledge graph<ul>
<li>추출된 정보들을 하나의 네트워크(그래프)로 병합</li>
<li>중복 엔티티는 단일 노드로 통합, 빈출 관계일수록 높은 가중치 부여</li>
</ul>
</li>
<li>konwledge graph → graph communities<ul>
<li>커뮤니티 감지 알고리즘을 사용하여 그래프를 노트 커뮤니티로 분할</li>
<li>이 파이프라인에서는 Leiden 알고리즘 사용</li>
</ul>
</li>
<li>graph communities → community summaries<ul>
<li>Leiden 계층 구조의 각 커뮤니티에 대해 보고서 형식의 요약 생성</li>
<li>하위 레벨 커뮤니티 요약은 상위 레벨 커뮤니티 요약을 생성하는데 사용됨</li>
<li>상위 레벨 커뮤니티는 모든 요소 요약이 컨텍스트 창의 토큰 제한 내에 맞는 경우, 하위 레벨 커뮤니티와 동일하게 진행하여 커뮤니티 내 모든 요소를 요약</li>
</ul>
</li>
<li>community summaries → community answers → global answer<ul>
<li>사용자 쿼리가 주어지면 이전 단계에서 생성된 커뮤니티 요약을 사용하여 다단계 프로세스로 최종 답변 생성</li>
</ul>
</li>
</ol>
<h1 id="4-analysis">4. Analysis</h1>
<ul>
<li><p>테스트 데이터셋</p>
<ul>
<li><p>팟캐스트 대본: 기술 리더들의 인터뷰 텍스트 (약 100만 토큰)</p>
</li>
<li><p>뉴스 기사: 다양한 카테고리의 10년 치 뉴스 기사 모음 (약 170만 토큰)</p>
<p>  <img src="attachment:e9e58cb7-9f5a-4365-be26-c4e818a3e872:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.36.34.png" alt="스크린샷 2026-05-05 21.36.34.png"></p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>비교 대조군</p>
<p>  <img src="attachment:08f003ef-e2c5-477c-bdc4-88ffe85810dd:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.36.57.png" alt="스크린샷 2026-05-05 21.36.57.png"></p>
<ul>
<li><strong>SS (Vector RAG):</strong> 기존의 단순 유사도 기반 검색 방식 (비교의 기준점)</li>
<li><strong>TS (Text Summarization):</strong> 지식 그래프 없이 원본 텍스트 전체를 Map-Reduce 방식으로 무작정 요약하는 방식</li>
<li><strong>C0 ~ C3 (GraphRAG 계층):</strong> 지식 그래프의 커뮤니티 계층별 요약<ul>
<li><em>C0 (Root-level):</em> 최상위 계층, 가장 넓은 범위의 포괄적 요약</li>
<li><em>C3 (Low-level):</em> 최하위 계층, 가장 좁고 디테일한 범위의 요약</li>
</ul>
</li>
</ul>
</li>
<li><p>검증 방식</p>
<ul>
<li>실험 1 (LLM 평가자): LLM이 4가지 기준(포괄성, 다양성, 역량 강화, 직접성)을 바탕으로 두 시스템의 답변을 1:1로 맞비교(Win-rate 측정)</li>
<li>실험 2 (팩트 추출 교차 검증): LLM의 주관적 평가를 보완하기 위해 생성된 답변 내에서 검증 가능한 사실이 몇 개 추출되는지, 그 사실들이 얼마나 다양한 군집을 이루는지 통계적으로 분석</li>
</ul>
</li>
</ul>
<h1 id="5-results">5. Results</h1>
<ol>
<li><p>실험 1 결과 (LLM 기반 상대 평가)</p>
<p> <img src="attachment:54e89652-306e-411c-b5fa-9f061a81753d:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.48.18.png" alt="스크린샷 2026-05-05 21.48.18.png"></p>
<p> 전반적으로 GraphRAG는 특히 &quot;Comprehensiveness&quot;(포괄성) 및 &quot;Diversity&quot;(다양성) 측면에서 기존의 벡터 RAG(SS)보다 &quot;Global sensemaking&quot;(전역적 상황 인식) 쿼리에 대해 월등히 우수한 성능을 보였다. </p>
</li>
<li><p>실험 2 결과 (추출된 사실/주장 기반 교차 검증)</p>
<p> <img src="attachment:21952777-2adb-4871-9d16-dcb4dc7f3367:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.50.47.png" alt="스크린샷 2026-05-05 21.50.47.png"></p>
<ul>
<li><p>조건별 및 데이터셋 유형별 보고된 추출된 주장의 평균 수</p>
<p><img src="attachment:b56dc604-f50d-4814-b8f5-457d1611d899:%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2026-05-05_21.51.07.png" alt="스크린샷 2026-05-05 21.51.07.png"></p>
</li>
<li><p>조건 및 데이터셋 유형별 보고된 다양한 거리 임계값에 따른 평균 클러스터 수</p>
</li>
</ul>
</li>
</ol>
<h1 id="6-discussion-7-conclusion">6. Discussion, 7. Conclusion</h1>
<ul>
<li><p>평가의 한계</p>
<ul>
<li>약 100만 토큰 범위의 두 말뭉치에 대한 특정 유형의 질문만 평가</li>
<li>다양한 질문 유형, 데이터 유형, 데이터셋 크기에 따른 성능 변화 연구 필요</li>
<li>센스메이킹 질문과 목표 메트릭(포괄성, 다양성, 권한 부여, 직접성)에 대한 최종 사용자 검증 필요</li>
<li>SelfCheckGPT와 같은 도구를 사용한 hallucination 비율 비교 필요</li>
</ul>
</li>
<li><p>그래프 인덱스 구축의 트레이드오프</p>
<ul>
<li>Graph RAG가 다른 방법들보다 일관되게 우수한 성능 보임</li>
<li>그래프를 사용하지 않는 원본 텍스트 전역 요약 접근법도 경쟁력 있는 성능 보여줌</li>
<li>실제 적용 시 고려할 요소: 계산 예산, 데이터셋당 예상 쿼리 횟수, 그래프 인덱스의 부가 가치(일반 커뮤니티 요약, 다른 그래프 관련 RAG 접근법 활용 등)</li>
</ul>
</li>
<li><p>향후 연구 방향</p>
<ul>
<li>사용자 쿼리와 그래프 주석 간 임베딩 기반 매칭을 통한 지역적 RAG 접근법 개발</li>
<li>커뮤니티 보고에 대한 임베딩 기반 매칭과, 맵리듀스 요약을 결합한 하이브리드 RAG 방식 개발</li>
<li>커뮤니티 계층의 더 많은 레벨에 걸친 &quot;롤업&quot; 작업 확장</li>
<li>상위 레벨 커뮤니티 요약 정보를 따라가는 탐색적 &quot;드릴 다운&quot; 메커니즘 구현</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Generative Adversarial Networks (GAN) - Goodfellow et al. (2014)]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Generative-Adversarial-Networks-GAN-Goodfellow-et-al.-2014</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Generative-Adversarial-Networks-GAN-Goodfellow-et-al.-2014</guid>
            <pubDate>Sun, 15 Mar 2026 04:20:49 GMT</pubDate>
            <description><![CDATA[<h1 id="0-사전학습">0. 사전학습</h1>
<ul>
<li><strong>생성 모델 (Generative Model):</strong> 데이터의 확률 분포를 학습하여 그와 유사한 새로운 데이터를 생성해내는 모델입니다.</li>
<li><strong>판별 모델 (Discriminative Model):</strong> 입력 데이터가 어떤 클래스에 속하는지, 혹은 진짜인지 가짜인지 분류하는 모델입니다.</li>
<li><strong>다층 퍼셉트론 (MLP):</strong> 여러 개의 은닉층을 가진 기본적인 신경망 구조입니다.
  <img src="https://velog.velcdn.com/images/sumin_baek/post/b9972353-b6c1-4058-8a1c-960d65e71368/image.png" alt=""></li>
</ul>
<ul>
<li><strong>역전파 (Backpropagation):</strong> 신경망의 가중치를 업데이트하기 위해 오차를 뒤에서부터 앞으로 전달하는 알고리즘입니다.</li>
<li><strong>마르코프 체인 (Markov Chain):</strong> 과거의 상태와 무관하게 현재 상태에 의해서만 미래 상태가 결정되는 확률 과정입니다. 기존 생성 모델들은 이를 활용했으나 연산 비용이 컸습니다.<ul>
<li>동전 앞뒤를 예측하는 것은 독립시행이기 때문에 n번째 상태가 n+1번째 상태에 영향을 주지 않으므로 마르코프 성질이 없다.</li>
<li>반면 날씨 예측과 같이 직관적으로 오늘 날씨에 의해 내일 날씨가 결정될 수 있으므로 마르코프 성질이 있다.</li>
</ul>
</li>
<li><strong>게임 이론 (Minimax Game):</strong> 한쪽은 이득을 최대화하고 다른 쪽은 손실을 최소화하려는 전략적 대결 상황을 의미합니다.</li>
</ul>
<h1 id="1-연구-배경-및-목표">1. 연구 배경 및 목표</h1>
<h3 id="연구-배경">연구 배경</h3>
<ul>
<li>그동안 딥러닝은 고차원의 센서 입력을 클래스 레이블로 매핑하는 <strong>판별 모델</strong>에서 큰 성공을 거두었습니다. 이는 역전파와 드롭아웃, 선형 유닛(ReLU 등)의 발전 덕분이었습니다.</li>
<li>반면 <strong>딥 생성 모델</strong>은 판별 모델에 비해 큰 두각을 나타내지 못했습니다. 그 이유는 다음과 같습니다.<ol>
<li>최대 가능도 추정(Maximum Likelihood Estimation) 과정에서 발생하는 복잡한 확률 연산을 근사하기가 매우 어렵습니다.</li>
<li>판별 모델에서 효과적이었던 선형 유닛들의 장점을 생성 모델에 적용하기 어려웠습니다.</li>
</ol>
</li>
</ul>
<h3 id="연구-목표">연구 목표</h3>
<ul>
<li>복잡한 확률 계산이나 마르코프 체인 없이도 학습이 가능한 새로운 생성 모델 프레임워크를 제안하는 것입니다.</li>
<li>오직 역전파와 드롭아웃만을 사용하여 학습하고 순전파만으로 샘플을 생성할 수 있는 시스템을 구축하고자 합니다.</li>
</ul>
<h1 id="2-핵심-방법론-generative-adversarial-nets">2. 핵심 방법론 (Generative Adversarial Nets)</h1>
<p>기존의 생성 모델들은 수학적으로 매우 복잡하고 다루기 힘들었습니다.</p>
<p>→ GAN 의 해결책: &quot;수학적으로 확률 분포를 정의하지 말자! 대신 <strong>가짜를 만드는 기계($G$)와 가짜를 찾는 기계($D$)를 싸우게 만들자.</strong>&quot;</p>
<p><strong>생성자 (Generator, $G$)</strong></p>
<ul>
<li><strong>입력:</strong> 의미 없는 무작위 노이즈($z$)</li>
<li><strong>출력:</strong> 실제 데이터와 똑같이 생긴 가짜 데이터($G(z)$)</li>
<li><strong>목표:</strong> 판별자($D$)를 완벽하게 속이는 것</li>
</ul>
<hr>
<p><strong>판별자 (Discriminator, $D$)</strong></p>
<ul>
<li><strong>입력:</strong> 실제 데이터($x$) 또는 생성자가 만든 가짜($G(z)$)</li>
<li><strong>출력:</strong> 입력 데이터가 &#39;진짜&#39;일 확률 (0에서 1 사이의 값)</li>
<li><strong>목표:</strong> 진짜와 가짜를 구별해내는 것</li>
</ul>
<p><strong>미니맥스(Minimax) 게임의 수식 풀이</strong></p>
<p>$\min_{G} \max_{D} V(D, G) = \mathbb{E}{x \sim p{data}(x)}[\log D(x)] + \mathbb{E}{z \sim p{z}(z)}[\log(1 - D(G(z)))]$</p>
<ul>
<li>좌변<ul>
<li><strong>$V(D, G)$:</strong> $G$와 $D$가 벌이는 게임의 <strong>가치 함수(Value Function)</strong>입니다. 쉽게 말해 &#39;<strong>판별자 $D$의 점수</strong>&#39;라고 생각하면 됩니다.</li>
<li><strong>$\max_{D}$:</strong> 판별자($D$)는 자신의 점수인 $V$를 <strong>최대한 높이려</strong>고 노력합니다.</li>
<li><strong>$\min_{G}$:</strong> 생성자($G$)는 판별자의 점수인 $V$를 <strong>최대한 낮추려</strong>고 노력합니다.</li>
</ul>
</li>
<li>우변<ul>
<li>첫번째 항 (진짜를 진짜라고 맞히기)<ul>
<li><strong>$x \sim p_{data}(x)$:</strong> 실제 데이터 분포($p_{data}$)에서 뽑은 진짜 데이터($x$)를 의미합니다.</li>
<li><strong>$\mathbb{E}$ (Expectation):</strong> 기댓값입니다. 데이터를 여러 번 뽑았을 때 나오는 값들의 평균을 내겠다는 뜻입니다.</li>
<li><strong>$D(x)$:</strong> 진짜 데이터($x$)를 보고 판별자가 내놓은 &quot;진짜일 확률&quot;입니다. (0~1 사이의 값)</li>
<li><strong>$\log D(x)$:</strong><ul>
<li>판별자가 진짜를 진짜라고 잘 판단하면($D(x)$가 1에 가까우면), $\log 1 = 0$이 됩니다.</li>
<li>판별자가 진짜를 가짜라고 오판하면($D(x)$가 0에 가까우면), $\log 0 = -\infty$가 되어 점수가 매우 낮아집니다.</li>
<li><strong>즉, 판별자($D$)는 이 값을 0(최대치)으로 유지하려고 노력합니다.</strong></li>
</ul>
</li>
</ul>
</li>
<li>두번째 항 (가짜를 가짜라고 맞히기)<ul>
<li><strong>$z \sim p_{z}(z)$:</strong> 무작위로 생성된 노이즈($z$)입니다.</li>
<li><strong>$G(z)$:</strong> 생성자($G$)가 노이즈를 받아 만들어낸 <strong>가짜 데이터</strong>입니다.</li>
<li><strong>$D(G(z))$:</strong> 판별자가 가짜 데이터($G(z)$)를 보고 판단한 &quot;진짜일 확률&quot;입니다.</li>
<li><strong>$1 - D(G(z))$:</strong> 판별자가 가짜를 보고 &quot;이건 가짜야&quot;라고 올바르게 판단할 확률입니다.</li>
<li><strong>$\log(1 - D(G(z)))$:</strong><ul>
<li>판별자가 가짜를 가짜라고 잘 잡아내면($D(G(z))$가 0에 가까우면), $\log(1-0) = \log 1 = 0$이 되어 점수가 높아집니다.</li>
<li>반대로 생성자가 판별자를 완벽히 속이면($D(G(z))$가 1에 가까우면), $\log(1-1) = \log 0 = -\infty$가 되어 판별자의 점수가 깎입니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>GAN의 학습 과정과 최종 목표</strong>
<img src="https://velog.velcdn.com/images/sumin_baek/post/38d06169-0b04-49eb-9974-93a9e7b96020/image.png" alt=""></p>
<ul>
<li><strong>검은 점선 :</strong> 실제 데이터의 분포입니다. 우리가 닮고 싶어 하는 &#39;정답&#39;입니다.</li>
<li><strong>초록 실선:</strong> 생성자()가 만들어낸 가짜 데이터의 분포입니다.</li>
<li><strong>파란 파선:</strong> 판별자의 분포입니다. 값이 높으면 진짜라고 판단하고, 낮으면 가짜라고 판단하는 &#39;기준선&#39;입니다.</li>
<li><strong>아래쪽 수평선:</strong> 생성자의 입력으로 들어가는 노이즈 공간입니다.</li>
<li><strong>위쪽 수평선:</strong> 실제 데이터가 존재하는 공간입니다.</li>
<li><strong>화살표:</strong> 노이즈를 생성자에 넣었을 때, 실제 데이터 공간의 어느 지점으로 매핑되는지를 보여줍니다.</li>
</ul>
<h1 id="3-실험">3. 실험</h1>
<h3 id="1-사용된-데이터셋">1) 사용된 데이터셋</h3>
<ul>
<li><strong>MNIST:</strong> 손글씨 숫자 데이터.</li>
<li><strong>TFD (Toronto Face Database):</strong> 얼굴 표정 데이터.</li>
<li><strong>CIFAR-10:</strong> 사물 이미지 데이터.
<img src="https://velog.velcdn.com/images/sumin_baek/post/6d94d7f7-0cca-4eb1-8b84-05a19d21d915/image.png" alt=""></li>
</ul>
<h3 id="2-모델-구조-사용된-기술"><strong>2) 모델 구조 (사용된 기술)</strong></h3>
<ul>
<li><strong>생성자 ($G$):</strong> ReLU 활성화 함수와 Sigmoid를 섞어서 사용했습니다. 노이즈($z$)는 맨 아래 층에만 입력했습니다.</li>
<li><strong>판별자 ($D$):</strong> Maxout 활성화 함수를 사용했고 과적합을 막기 위해 <strong>Dropout</strong> 기술을 적용했습니다.</li>
</ul>
<h3 id="3-성능-평가-방법-parzen-window">3) 성능 평가 방법: Parzen Window</h3>
<p>GAN은 생성된 결과물이 실제와 얼마나 유사한지 수치화하기가 매우 어렵습니다. 그래서 이 논문은 가우시안 Parzen 창(Gaussian Parzen Window)이라는 방법을 썼습니다.</p>
<ul>
<li><p><strong>방법:</strong> 생성자가 만든 샘플들을 주변으로 가우시안 분포를 씌워 전체적인 확률 밀도를 추정하는 방식입니다.</p>
<ul>
<li><p>작동 원리</p>
<ol>
<li><p><strong>샘플 준비</strong>
생성자($G$)를 이용해 가짜 이미지 샘플들을 아주 많이(예: 수천 장) 뽑아냅니다. 이 샘플들은 공간 위에 흩뿌려진 점들이 됩니다.</p>
</li>
<li><p>가우시안 분포 씌우기 (번지게 하기)</p>
<p> 각각의 점(샘플) 위에 <strong>종 모양의 가우시안(Gaussian) 분포</strong>를 하나씩 얹습니다.</p>
<ul>
<li>그러면 뾰족했던 점들이 주변으로 부드럽게 번지게 됩니다.</li>
<li>이때 얼마나 넓게 번지게 할지를 결정하는 값이 논문에 나온 $\sigma$ (표준편차)입니다.</li>
</ul>
</li>
<li><p><strong>전체 합치기</strong></p>
<p> 번진 수많은 종 모양들을 모두 더합니다.</p>
<ul>
<li>점들이 몰려 있는 곳은 산처럼 높게 솟아오르고 점이 없는 곳은 낮게 유지됩니다.</li>
<li>이렇게 합쳐진 전체 모양이 바로 생성자가 만든 가짜 데이터의 확률 밀도 함수($p_g$)가 됩니다.</li>
</ul>
</li>
</ol>
</li>
</ul>
</li>
<li><p><strong>결과:</strong> GAN은 기존의 유명한 모델보다 <strong>더 높은 로그 가능도(Log-likelihood) 수치</strong>를 기록하며 우수함을 입증했습니다.</p>
</li>
</ul>
<pre><code>| **모델** | **MNIST (정확도 ↑)** | **TFD (정확도 ↑)** |
| --- | --- | --- |
| DBN | $138 \pm 2$ | $1909 \pm 66$ |
| Deep GSN | $214 \pm 1.1$ | $1890 \pm 29$ |
| **GAN** | **$225 \pm 2$** | **$2057 \pm 26$** |</code></pre><h1 id="4-장점과-단점"><strong>4. 장점과 단점</strong></h1>
<p><strong>단점 (부족한 점)</strong></p>
<ul>
<li><strong>수치화의 어려움:</strong> &quot;이 이미지가 진짜일 확률이 몇 %인가?&quot;라는 질문에 정확한 숫자로 답하기 어렵습니다.</li>
<li><strong>학습의 불안함:</strong> 생성자가 판별자를 너무 빨리 이겨버리면, 맨날 똑같은 이미지(치트키)만 만드는 <strong>&#39;모드 붕괴&#39;</strong> 현상이 일어납니다.</li>
</ul>
<p><strong>장점 (좋은 점)</strong></p>
<ul>
<li><strong>속도와 간결함:</strong> 복잡한 수학적 절차 없이 딥러닝 기본 원리(역전파)만으로 아주 빠르게 학습합니다.</li>
<li><strong>설계의 자유:</strong> 어떤 신경망이든 가져다 쓸 수 있어 응용 범위가 넓습니다.</li>
<li><strong>선명함:</strong> 기존 모델들보다 훨씬 <strong>또렷하고 진짜 같은 이미지</strong>를 만듭니다.</li>
</ul>
<h1 id="5-향후-계획"><strong>5. 향후 계획</strong></h1>
<ol>
<li><strong>조종하기:</strong> &quot;고양이 그려줘&quot;처럼 내가 원하는 결과를 고를 수 있게 만들기 (<strong>cGAN</strong>)</li>
<li><strong>분류하기:</strong> 사진이 뭔지 맞히는 인공지능 학습에 활용하기 (<strong>준지도 학습</strong>)</li>
<li><strong>효율 높이기:</strong> 생성자와 판별자가 더 효율적으로 경쟁하는 방법 찾기</li>
</ol>
<hr>
<h3 id="gan의-분야별-활용-사례">GAN의 분야별 활용 사례</h3>
<ol>
<li><strong>이미지 및 영상 분야</strong><ul>
<li><strong>이미지 합성 및 변환</strong></li>
<li><strong>화질 개선</strong></li>
<li><strong>이미지 복원</strong></li>
<li><strong>딥페이크</strong></li>
</ul>
</li>
<li><strong>음성 및 오디오 분야</strong><ul>
<li><strong>음성 합성</strong></li>
<li><strong>노이즈 제거</strong></li>
<li><strong>악기 소리 변환</strong></li>
</ul>
</li>
<li><strong>의료 및 과학 분야</strong><ul>
<li><strong>의료 데이터 증강</strong></li>
<li><strong>신약 개발</strong></li>
</ul>
</li>
<li><strong>보안 및 기타</strong><ul>
<li><strong>이상 탐지</strong></li>
<li><strong>텍스트 생성</strong></li>
</ul>
</li>
</ol>
<h3 id="강화학습과의-차이점">강화학습과의 차이점</h3>
<p>(생성자가 판별자의 피드백을 받아 성능을 개선한다는 점은 강화학습의 &#39;보상&#39; 개념과 매우 유사해 보인다.)</p>
<p>가장 핵심적인 차이는 생성자가 <strong>&quot;어떻게 고쳐야 할지 구체적으로 아느냐&quot;</strong> 아니면 &quot;잘했는지 못했는지만 아느냐&quot;의 차이입니다.</p>
<ul>
<li><strong>GAN (미분 가능한 통로):</strong> 판별자는 생성자에게 &quot;너의 픽셀 중 이 부분이 어색해서 가짜라고 판단했어&quot;라는 정보를 경사도(Gradient)라는 수치를 통해 직접 전달합니다. 생성자는 이 통로(역전파)를 통해 <strong>어디를 어떻게 수정해야 할지 구체적인 방향</strong>을 즉시 알 수 있습니다.</li>
<li><strong>강화학습 (보상 수치):</strong> 에이전트(생성자 역할)는 행동을 한 뒤에 &quot;10점&quot; 또는 &quot;-5점&quot; 같은 스칼라 보상(Reward)만 받습니다. 왜 그 점수를 받았는지, 어느 부분을 고쳐야 점수가 오르는지는 스스로 수많은 시행착오(Exploration)를 거치며 깨달아야 합니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Multi-Task Learning 기반 딥 러닝 모델을 활용한 표 인식 및 표 구조 분석에 관한 연구 : 표 추출 통합 학습 방법]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Multi-Task-Learning-%EA%B8%B0%EB%B0%98-%EB%94%A5-%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%91%9C-%EC%9D%B8%EC%8B%9D-%EB%B0%8F-%ED%91%9C-%EA%B5%AC%EC%A1%B0-%EB%B6%84%EC%84%9D%EC%97%90-%EA%B4%80%ED%95%9C-%EC%97%B0%EA%B5%AC-%ED%91%9C-%EC%B6%94%EC%B6%9C-%ED%86%B5%ED%95%A9-%ED%95%99%EC%8A%B5-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Multi-Task-Learning-%EA%B8%B0%EB%B0%98-%EB%94%A5-%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%91%9C-%EC%9D%B8%EC%8B%9D-%EB%B0%8F-%ED%91%9C-%EA%B5%AC%EC%A1%B0-%EB%B6%84%EC%84%9D%EC%97%90-%EA%B4%80%ED%95%9C-%EC%97%B0%EA%B5%AC-%ED%91%9C-%EC%B6%94%EC%B6%9C-%ED%86%B5%ED%95%A9-%ED%95%99%EC%8A%B5-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Wed, 18 Feb 2026 08:57:53 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요?</p>
<p>오늘은 고려대학교 SW·AI융합대학원 인공지능융합학과의 석사학위논문인 _&lt;Multi-Task Learning 기반 딥 러닝 모델을 활용한 표 인식 및 표 구조 분석에 관한 연구 : 표 추출 통합 학습 방법&gt;_ 논문에 대해 공부해보았습니다.  </p>
<h1 id="1-서론">1. 서론</h1>
<ul>
<li><strong>연구 배경</strong>: 디지털 문서 처리 및 데이터 분석 자동화에서 문서 내 표 추출(Table Extraction, TE) 기술의 중요성 증대</li>
<li><strong>표 추출의 구성</strong>: 표 인식(TD), 표 구조 분석(TSR), 기능 분석(FA)의 세 단계로 구분됨</li>
<li><strong>기존 연구의 한계</strong><ul>
<li>각 단계를 독립된 모델로 처리 시 자원 효율성 저하 및 오류 전파 문제 발생</li>
<li>데이터셋 통합 시 관리 비용 및 복잡성 증가</li>
</ul>
</li>
<li><strong>연구 목적</strong>: Multi-Task Learning(MTL) 기반의 통합 모델을 설계하여 학습 효율성을 높이고 데이터 관리 부담을 완화함.</li>
</ul>
<h1 id="2-관련-연구">2. 관련 연구</h1>
<h3 id="21-표-추출">2.1 표 추출</h3>
<ol>
<li><strong>주요 접근 방식</strong><ul>
<li><strong>방법론</strong>: 이미지-텍스트 변환, 그래프 기반, <strong>객체 탐지(주류)</strong> 등</li>
</ul>
</li>
<li><strong>기존 독립 모델 방식의 한계</strong><ul>
<li><strong>자원 비효율</strong>: 모델 중복 운용 → 메모리 낭비 및 추론 속도 저하</li>
<li><strong>오류 전파</strong>: 표 인식(1단계)의 오류가 구조 분석(2단계)으로 전파 → 시스템 강건성 저하</li>
</ul>
</li>
<li><strong>필요성</strong><ul>
<li>하위 작업을 <strong>통합적으로 해결</strong>하여 효율성과 정확도를 동시에 확보하는 새로운 접근법 요구</li>
</ul>
</li>
</ol>
<h3 id="22-multi-tasking-learning">2.2 Multi-tasking Learning</h3>
<ul>
<li><strong>개념</strong>: 여러 하위 작업을 동시에 학습하여 효율성과 예측 정확도를 향상시키는 기법</li>
<li><strong>방식</strong><ul>
<li><strong>Hard Parameter Sharing</strong>: 대부분의 파라미터를 공유하는 방식 (본 논문 채택 방식)</li>
<li><strong>Soft Parameter Sharing</strong>: 작업별 고유 파라미터를 유지하며 상호 연결</li>
</ul>
</li>
</ul>
<h3 id="23-객체-탐지-모델">2.3 객체 탐지 모델</h3>
<ol>
<li><p><strong>객체 탐지 기반의 표 추출</strong></p>
<ul>
<li><strong>정의</strong>: 이미지 내 객체의 위치와 클래스를 예측하여 표 성분을 추출</li>
<li><strong>탐지 대상</strong>: 표 자체 및 세부 구조(행, 열, 헤더, 병합 셀 등)를 각각의 객체로 정의</li>
</ul>
</li>
<li><p><strong>YOLO v8 선정 이유</strong></p>
<ul>
<li><p><strong>모듈형 구조</strong>: Backbone, Neck, Head가 분리되어 있어 Head 추가가 용이 → <strong>Hard Parameter Sharing</strong> 구현에 최적</p>
<p>  → 공통 특징을 추출하는 Backbone과 Neck은 그대로 공유하면서 수행하려는 작업(표 인식, 표 구조 분석)에 맞춰 각각의 <strong>Head만 추가로 설계</strong>하여 붙일 수 있다.</p>
</li>
<li><p><strong>Anchor-Free 방식</strong>: 고정된 Anchor를 쓰지 않고 객체의 중심점과 경계까지의 거리를 직접 예측하기 때문에 정형화되지 않은 다양한 형태의 표와 그 내부의 미세한 구조(행, 열 등)를 훨씬 더 정확하고 유연하게 찾아낼 수 있다.</p>
<p>  (기존 YOLO 시리즈나 많은 객체 탐지 모델들은 사전에 정의된 고정된 박스 크기인 &#39;Anchor Box&#39;를 기반으로 객체를 찾았음)</p>
</li>
</ul>
</li>
<li><p><strong>연구 방향</strong></p>
<ul>
<li>YOLO v8 기반의 <strong>Multi-Task Learning(MTL)</strong> 통합 모델 설계</li>
<li>여러 하위 작업을 단일 모델로 통합하여 효율적으로 해결</li>
</ul>
</li>
</ol>
<h3 id="24-pubtables-1m-데이터-셋">2.4 PubTables-1M 데이터 셋</h3>
<ul>
<li><strong>특징</strong>: 과학 기사에서 추출한 약 100만 개의 표 포함, TD/TSR/FA 작업을 모두 지원하는 대규모 데이터셋.</li>
<li><strong>구성</strong>: 약 52.7%가 복잡한 표(Spanning Cell 포함)로 구성되어 성능 검증에 적합함.</li>
</ul>
<h1 id="3-실험">3. 실험</h1>
<h3 id="31-모델-구조">3.1 모델 구조</h3>
<ul>
<li>YOLOv8 구조 기반 설계</li>
<li>Hard Parameter Sharing 방법 적용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/43c145c3-7018-4967-8cf1-f751ba4e4f11/image.png" alt=""></p>
<p><strong>1. Backbone (척추/몸통) : &quot;공통 특징 추출&quot;</strong></p>
<ul>
<li><strong>역할</strong>: 이미지의 전체적인 특징을 파악합니다. 선, 면, 질감 등 표를 인식하는 데 필요한 기초 정보를 뽑아냅니다.</li>
<li><strong>다중 스케일 특징 맵</strong>: 표는 아주 클 수도, 아주 작을 수도 있습니다. 그래서 세 가지 크기(P3, P4, P5)의 맵을 만듭니다.<ul>
<li><strong>P3 (80x80)</strong>: 아주 세밀한 부분 탐지 (작은 글씨나 얇은 줄)</li>
<li><strong>P4 (40x40)</strong>: 중간 크기의 특징 탐지</li>
<li><strong>P5 (20x20)</strong>: 이미지의 굵직한 특징 탐지 (전체적인 표의 윤곽)</li>
</ul>
</li>
</ul>
<p><strong>2. Neck (목) : &quot;특징 가공 및 전달&quot;</strong></p>
<ul>
<li><strong>역할</strong>: Backbone에서 뽑아낸 세 가지 크기의 정보를 서로 섞고 강화합니다.</li>
<li><strong>특징</strong>: &quot;표라는 건 이런 특징이 있구나&quot;라는 것을 더 명확하게 만들어 각 Head(머리)가 판단하기 좋게 배달해 주는 정거장 역할을 합니다.</li>
</ul>
<p><strong>3. Head (머리) : &quot;개별 작업 수행&quot;</strong></p>
<ul>
<li><strong>역할</strong>: 전달받은 정보를 바탕으로 실제 정답을 맞힙니다.</li>
<li><strong>구성</strong>: 본 논문에서는 두 개의 머리를 달았습니다.<ul>
<li><strong>Head A (표 인식)</strong>: &quot;이 이미지에서 표가 어디에 있는가?&quot;를 찾음.</li>
<li><strong>Head B (표 구조 분석)</strong>: &quot;표 안에 행과 열이 어떻게 나뉘어 있는가?&quot;를 분석함.</li>
</ul>
</li>
</ul>
<h3 id="32-학습-방법">3.2 학습 방법</h3>
<p>MTL 방법을 기반으로 각 작업의 손실을 계산한 후 이를 평균내어 공유 Parameter를 학습시키는 방법
<img src="https://velog.velcdn.com/images/sumin_baek/post/9a35a629-6139-4252-985c-3f219c30b089/image.png" alt=""></p>
<pre><code class="language-python">import torch
import torch.optim as optim

# 1. 모델 및 옵티마이저 설정
# model.shared_parameters()와 model.head_parameters()가 구현되어 있다고 가정
epochs = 100
learning_rate = 0.003  # 논문 초기 학습률

optimizer = optim.SGD(model.parameters(), lr=learning_rate, momentum=0.937)

# 2. OneCycleLR 스케줄러 설정 (논문 내용 반영)
# 전체 스텝 수 = 에포크 수 * 배치 당 스텝 수
scheduler = optim.lr_scheduler.OneCycleLR(
    optimizer, 
    max_lr=learning_rate, 
    steps_per_epoch=len(train_loader_td), 
    epochs=epochs,
    final_div_factor=10.16  # 최종 LR을 초기값의 약 9.56%로 맞춤
)

# 3. 전체 학습 루프
for epoch in range(epochs):
    model.train()

    # 두 데이터셋을 동시에 불러온다고 가정 (zip 활용)
    for (x1, y1), (x2, y2) in zip(train_loader_td, train_loader_tsr):

        # 데이터를 GPU로 이동
        x1, y1 = x1.to(device), y1.to(device)
        x2, y2 = x2.to(device), y2.to(device)

        # Step 1: Forward Pass (예측 및 오차 계산)
        outputs1 = model(x1, task=&#39;td&#39;)   # 표 인식 전용 머리 사용
        outputs2 = model(x2, task=&#39;tsr&#39;)  # 구조 분석 전용 머리 사용

        loss1 = criterion1(outputs1, y1)
        loss2 = criterion2(outputs2, y2)

        # Step 2: Backward Pass (기울기 계산)
        optimizer.zero_grad()

        # retain_graph=True를 주어야 두 번째 backward 시 shared 파라미터 그래프가 유지됨
        loss1.backward(retain_graph=True) 
        loss2.backward()

        # Step 3: 공유 파라미터 기울기 평균 처리 (핵심 로직)
        # PyTorch의 backward는 기울기를 더하므로(accumulate), 0.5를 곱해 평균을 냄
        for param in model.shared_parameters():
            if param.grad is not None:
                param.grad.data *= 0.5

        # Step 4: 가중치 업데이트 및 스케줄러 적용
        optimizer.step()
        scheduler.step() # 매 스텝마다 학습률 미세 조정

    print(f&quot;Epoch [{epoch+1}/{epochs}] 완료&quot;)</code></pre>
<h3 id="33-모델-학습">3.3 모델 학습</h3>
<ol>
<li><p><strong>모델 구성 및 초기화</strong></p>
<ul>
<li><strong>모델</strong>: YOLO v8x 기반 통합 모델</li>
<li><strong>초기화</strong>:<ul>
<li><strong>몸통(Backbone/Neck)</strong>: COCO 사전 학습 가중치 사용</li>
<li><strong>머리(Head)</strong>: 무작위 초기화</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>학습 설정</strong></p>
<ul>
<li><p><strong>Optimizer</strong>: SGD (확률적 경사 하강법)</p>
</li>
<li><p><strong>이미지 크기</strong>: 640 × 640</p>
</li>
<li><p><strong>배치 사이즈</strong>: 64</p>
</li>
<li><p><strong>Learning Rate</strong>: 0.003 → 0.000295 (OneCycleLR 적용)</p>
<ul>
<li><p>OneCycleLR ?</p>
<p>  딥러닝 모델을 학습시킬 때 <strong>학습률(Learning Rate)을 고정하지 않고 한 주기(Cycle) 동안 역동적으로 변화시키는 스케줄러이다.</strong></p>
<p>  (처음에는 속도를 높여 시원시원하게 학습하고 끝날 때쯤엔 속도를 줄여 정교하게 마무리하는 전략)</p>
<ul>
<li><p>일반적인 방식보다 적은 반복 횟수로도 높은 정확도에 도달할 수 있다.</p>
</li>
<li><p>처음에는 천천히, 중간에는 빠르게, 마지막에는 다시 정밀하게 학습함으로써 &#39;가짜 정답(Local Minimum)&#39;에 빠지지 않도록 도와준다.</p>
</li>
<li><p>학습률을 높게 가져가는 구간이 있어 모델이 특정 데이터에 과하게 익숙해지는(Overfitting) 것을 방지한다.</p>
</li>
<li><p>*&lt;논문에서의 적용&gt;**</p>
</li>
<li><p><strong>초기값</strong>: 0.003</p>
</li>
<li><p><strong>최종값</strong>: 0.000295</p>
<p>  → 매 에포크마다 학습률을 점진적으로 감소시켜 학습 후반부에 정밀한 최적화를 이뤘다.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<ol>
<li><strong>학습 환경</strong><ul>
<li><strong>GPU</strong>: NVIDIA H100</li>
<li><strong>Framework</strong>: PyTorch 2.1.2 / CUDA 11.8</li>
</ul>
</li>
</ol>
<h3 id="34-실험-결과">3.4 실험 결과</h3>
<ol>
<li>작업별 정확도(mAP) 비교
<img src="https://velog.velcdn.com/images/sumin_baek/post/f5fb6c11-49ce-4557-a8b8-4462d260352b/image.png" alt="">
<img src="https://velog.velcdn.com/images/sumin_baek/post/dca1698a-efa2-447d-b465-3db1619b9db3/image.png" alt=""></li>
</ol>
<ul>
<li>표 인식 (pubtables-1m detection): 최종 Epoch에서 제안한 모델의 mAP는 99.7%로, 기존 모델의 99.5% 보다 약간 우수한 결과를 보였다.</li>
<li>표 구조 분석 (pubtables-1m structure): 최종 Epoch 에서 제안한 모델의 mAP 는 93.7%로, 기존
모델의 94.5% 보다 근소하게 낮은 성능을 보였다.</li>
</ul>
<ol>
<li><strong>자원 효율성 및 속도</strong></li>
</ol>
<p>모델 통합을 통해 하드웨어 자원 사용량을 획기적으로 감소시킴</p>
<ul>
<li><strong>GPU 메모리 사용량</strong>: 약 <strong>70.8% 절감</strong> (2,470 MiB → 721 MiB)</li>
<li><strong>추론 속도 (Latency)</strong>: 약 <strong>19.3% 단축</strong> (26.73 ms → 21.57 ms)</li>
</ul>
<p>→ 정확도는 기존과 대등하거나 더 높으면서 <strong>메모리는 1/3 수준으로 줄이고 속도는 약 20% 끌어올린</strong> 효율적인 모델임을 입증</p>
<h3 id="35-이미지-전처리">3.5 이미지 전처리</h3>
<ol>
<li><p><strong>도입 배경: 성능 불균형 해결</strong></p>
<ul>
<li><strong>초기 문제</strong>: 표 인식(TD)은 99.7%로 우수했으나 표 구조 분석(TSR)은 71%에 머물며 기존 모델 대비 약 20% 이상의 성능 저하 발생</li>
<li><strong>원인 분석</strong>: 두 작업 간 입력 이미지 데이터 형태의 불일치로 인해 공유 파라미터가 두 작업의 특성을 균형 있게 학습하지 못한 것으로 판단</li>
</ul>
</li>
<li><p><strong>해결 방법: Letterbox 기법 적용</strong></p>
<ul>
<li><strong>개념</strong>: 이미지의 가로세로 비율을 유지하면서 타겟 크기(640×640)에 맞게 조정하고 남는 공간은 검은색 등(zero-padding)으로 채우는 방식</li>
<li><strong>목적</strong>: 표 구조 분석 이미지를 표 인식 데이터와 유사한 형태로 변환하여 데이터 간의 불일치 해소</li>
</ul>
</li>
<li><p><strong>적용 결과 및 효과</strong></p>
<ul>
<li><strong>성능 향상</strong>: 표 구조 분석(TSR)의 mAP가 <strong>71%에서 93.7%로 22.7% 대폭 개선</strong></li>
<li><strong>결론</strong>: 이미지 전처리가 작업 간의 데이터 불일치를 효과적으로 해결하고 통합 모델이 안정적으로 학습할 수 있는 환경을 제공함을 입증</li>
</ul>
</li>
</ol>
<h1 id="4-결론">4. 결론</h1>
<p>MTL(Multi-Task Learning) 기반 통합 모델을 통해 높은 정확도를 유지하면서도 GPU 메모리는 약 71% 절감하고 추론 속도는 약 19% 향상시켜 표 추출의 자원 효율성과 성능을 동시에 증명!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] LLM과 RAG 기반 문서 검색 구조를 활용한 한국어 쇼핑몰 VoC 카테고리 분류]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-LLM%EA%B3%BC-RAG-%EA%B8%B0%EB%B0%98-%EB%AC%B8%EC%84%9C-%EA%B2%80%EC%83%89-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%95%9C%EA%B5%AD%EC%96%B4-%EC%87%BC%ED%95%91%EB%AA%B0-VoC-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%B6%84%EB%A5%98</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-LLM%EA%B3%BC-RAG-%EA%B8%B0%EB%B0%98-%EB%AC%B8%EC%84%9C-%EA%B2%80%EC%83%89-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%ED%95%9C%EA%B5%AD%EC%96%B4-%EC%87%BC%ED%95%91%EB%AA%B0-VoC-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%B6%84%EB%A5%98</guid>
            <pubDate>Mon, 16 Feb 2026 06:31:18 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요?</p>
<p>오늘은 고려대학교 대학원 통계학과의 석사학위논문 _&lt;LLM과 RAG 기반 문서 검색 구조를 활용한 한국어 쇼핑몰 VoC 카테고리 분류&gt;_ 에 대해 공부해보았습니다.</p>
<h1 id="1-서론-introduction">1. 서론 (Introduction)</h1>
<h3 id="11-연구-배경-및-목적">1.1 연구 배경 및 목적</h3>
<ul>
<li><strong>VoC (Voice of Customer) 분석의 중요성</strong><ul>
<li>고객의 숨겨진 니즈 파악 및 전략적 의사결정 수단</li>
<li>단순 감성 분석(긍/부정)만으로는 실질적인 CS 대응(부서 분류 등)에 한계가 있음</li>
</ul>
</li>
<li><strong>기존 방법론의 한계</strong><ul>
<li>수작업: 시간/인건비 비효율, 자동화된 분류 시스템의 필요성 제기</li>
<li>기존 ML (TF-IDF, Word2Vec): 단어 빈도 기반이라 &#39;구매&#39; vs &#39;구입&#39; 같은 유의어 구분에 취약. 문맥 파악 불가</li>
<li>LLM 단독: 도메인 지식 부재로 인한 환각(Hallucination) 발생. 잘못된 분류 야기</li>
</ul>
</li>
<li><strong>제안: RAG (Retrieval-Augmented Generation) 도입. 외부 지식을 검색해 맥락을 보강함으로써 정확도를 높이고 환각 억제</strong></li>
</ul>
<hr>
<h1 id="2-이론적-배경-theoretical-background">2. 이론적 배경 (Theoretical Background)</h1>
<h3 id="21-rag-retrieval-augmented-generation">2.1 RAG (Retrieval-Augmented Generation)</h3>
<ul>
<li><p><strong>구조:</strong> 파라메트릭 메모리(LLM 내부 지식) + <strong>비파라메트릭 메모리(외부 지식 검색)</strong>.</p>
</li>
<li><p><strong>프로세스</strong>
  <img src="https://velog.velcdn.com/images/sumin_baek/post/644922b9-eed5-473f-aa25-7603baee28e3/image.png" alt=""></p>
<ol>
<li><p><strong>Retriever (검색기)</strong></p>
<p> <img src="https://velog.velcdn.com/images/sumin_baek/post/838d6360-0c1c-4277-bc67-0cf5a1d41ed4/image.png" alt=""></p>
<ul>
<li><p>특정 문서 $z$가 질문 $x$와 관련있을 확률</p>
<blockquote>
<p>$x$: 사용자의 질문 (Query)</p>
<p>$z$: 데이터베이스에 있는 문서 (Document)</p>
<p>$q(x)$: 질문을 임베딩 모델(BERT 등)에 넣어 만든 질문 벡터</p>
<p>$d(z)$: 문서를 임베딩 모델에 넣어 만든 문서 벡터</p>
<p>$d(z)^\top q(x)$: 내적(Dot Product). 두 벡터가 얼마나 유사한지 계산하는 것(코사인 유사도와 거의 같음). 값이 클수록 관련성이 높음</p>
<p>$\eta$: 검색기 모델(인코더)의 학습 파라미터</p>
</blockquote>
</li>
<li><p>질문 벡터 $q(x)$와 문서 벡터 $d(z)$를 곱(내적)해서 유사도를 구한다.</p>
</li>
<li><p>이 값에 $\exp$(지수 함수)를 취한다. (점수 차이를 벌리고 양수로 만들기 위함. Softmax의 분자 부분과 같음)</p>
</li>
<li><p>결론: 질문과 내적값이 큰 문서일수록 선택될 확률 $p_\eta(z|x)$가 높아진다.</p>
</li>
</ul>
</li>
<li><p><strong>Generator (생성기)</strong></p>
<p> <img src="https://velog.velcdn.com/images/sumin_baek/post/aadec6fb-96fd-4bfe-a431-7b8fb2a55e76/image.png" alt=""></p>
<ul>
<li><p>최종 답변 문장 $y$가 생성될 확률</p>
<blockquote>
<p>$\sum_{z \in \text{top-}k}$: 검색된 상위 $k$개의 문서 각각에 대해 계산해서 더하겠다는 뜻 (Marginalization)</p>
<p>$p_\eta(z|x)$: 검색기의 신뢰도 (위 1번 식에서 구한 값)</p>
<p>$\prod_{i=1}^{N}$: 1번째 단어부터 $N$번째 단어까지 쭉 곱한다는 뜻</p>
<p>$y_i$: 현재 생성하려고 하는 $i$번째 단어</p>
<p>$y_{1:i-1}$: 지금까지 생성한 앞부분의 문맥</p>
<p>$p_\theta(\dots)$: 생성기(LLM)가 다음 단어를 예측할 확률</p>
</blockquote>
</li>
<li><p><strong>$\prod$ 부분 (단어 생성)</strong></p>
<ul>
<li>LLM은 질문($x$), 참고 문서($z$), 지금까지 쓴 글($y_{1:i-1}$)을 보고 다음 단어($y_i$)를 예측한다.</li>
<li>이것을 문장이 끝날 때까지($N$) 계속 곱해서 문장 전체가 만들어질 확률을 구한다.</li>
</ul>
</li>
<li><p><strong>$p_\eta(z|x)$ 곱하기 (가중치 적용)</strong></p>
<ul>
<li><p>그냥 만드는 게 아니라 참고한 문서 $z$가 얼마나 정확한지($p_\eta$)를 가중치로 곱해준다.</p>
<p>  → 검색 점수가 높은 문서를 보고 만든 답변에 더 힘을 실어주는 것</p>
</li>
</ul>
</li>
<li><p>$\sum$ <strong>부분 (종합)</strong></p>
<ul>
<li>상위 $k$개의 문서 각각에 대해 이 과정을 반복하고 합쳐서 최종 답변 확률을 도출한다.</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
</ul>
<h3 id="22-임베딩-기법-및-검색-구조">2.2 임베딩 기법 및 검색 구조</h3>
<p><strong>1) 검색 방식 비교</strong></p>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/81b08b17-db0d-4147-9c20-605463d6f400/image.png" alt=""></p>
<ul>
<li><strong>희소 검색 (Sparse):</strong> BM25 등. <strong>단어 일치 기반.</strong> 속도 빠름, 직관적이지만 의미론적 유사성 못 잡음.</li>
<li><strong>밀집 검색 (Dense):</strong> <strong>벡터 유사도 기반.</strong> 의미 검색 가능. 한국어 특화 임베딩 성능이 관건.</li>
</ul>
<p><strong>2) 실험 대상 임베딩 모델 비교</strong> (2024년 10월 기준 Korean MTEB 리더보드 상위권)</p>
<table>
<thead>
<tr>
<th>모델명</th>
<th>특징 및 메커니즘</th>
</tr>
</thead>
<tbody><tr>
<td><strong>KoBERT</strong></td>
<td>SKT Brain 개발. 한국어 위키/뉴스 학습. SentencePiece 토크나이저 사용(OOV 강건). 하지만 대조 학습(Contrastive Learning) 부재로 <strong>의미 유사도 계산에 취약</strong>.</td>
</tr>
<tr>
<td><strong>KoE5</strong></td>
<td>고려대 개발. <code>multilingual-E5-large</code> 기반 파인튜닝. <strong>Key:</strong> <strong>Hard Negative(유사하지만 오답인 문서) 학습</strong> 및 데이터 필터링(유사도 구간별 노이즈 제거).</td>
</tr>
<tr>
<td><strong>Jina-v3</strong></td>
<td>5.7억 파라미터 경량화. <strong>LoRA 어댑터</strong>로 태스크별(검색, 분류 등) 최적화. RoPE 적용으로 <strong>8,192 토큰</strong>까지 처리 가능.</td>
</tr>
<tr>
<td><strong>text-3-small</strong></td>
<td>OpenAI 범용 모델. 비용 효율적. Baseline.</td>
</tr>
</tbody></table>
<h3 id="23-advanced-rag-기법">2.3 Advanced RAG 기법</h3>
<p><strong>1) Hybrid Search</strong></p>
<ul>
<li><p><strong>개념:</strong> 키워드 기반 검색(Lexical) + 의미 기반 검색(Dense) 결합</p>
</li>
<li><p><strong>결합 방식</strong></p>
<ol>
<li><p><strong>Convex Combination (CC)</strong></p>
<p> 각 검색 방식에서 생성된 정규화된 점수를 가중합하여 최종 점수를 산출하는 방식</p>
<p> $score_{hybrid} = \alpha \cdot score_{dense} + (1 - \alpha) \cdot score_{lexical}, \quad \alpha \in [0, 1]$</p>
<ul>
<li>$\alpha$는 키워드 기반 검색의 가중치를 나타내며 그 값이 클수록 의미 기반 점수가 더 크게 반영된다.</li>
</ul>
</li>
<li><p><strong>Reciprocal Rank Fusion (RRF)</strong></p>
<p>  순위(rank)를 활용하여 두 검색 방식으로 얻은 문서들을 결합하는 방식</p>
<p> $score_{w-rrf}(d) = \frac{\lambda}{k + rank_{lexical}(d)} + \frac{1 - \lambda}{k + rank_{dense}(d)}$</p>
<ul>
<li>$k$는 ranking constant 를 의미하며 점수가 너무 높은 순위에만 과하게 집중되는 현상을 방지한다.</li>
</ul>
</li>
</ol>
</li>
</ul>
<p><strong>2) HyDE (Hypothetical Document Embeddings)</strong></p>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/42fd4710-2430-4765-8ab2-7aac92cec8c4/image.png" alt=""></p>
<ul>
<li><strong>개념:</strong> LLM이 질문을 보고 &#39;가상 답변(Hypothetical Passage)&#39;을 먼저 생성한 뒤 이를 밀집 검색기의 입력으로 사용한다.</li>
<li><strong>이점:</strong> 질문이 짧거나 키워드가 부족할 때 문맥을 풍부하게 만듦 (Zero-shot 환경 유리).</li>
<li><strong>예시</strong><ul>
<li><strong>질문 입력:</strong> &quot;전자제품 수리 어디서 해?&quot;</li>
<li><strong>가상 답변 생성 (Hallucination 활용):</strong> LLM한테 &quot;이 질문에 대한 답변을 대충 지어내봐&quot;라고 시킨다다.<ul>
<li><em>LLM의 가상 답변:</em> &quot;전자제품 <strong>A/S</strong>는 <strong>고객센터</strong>나 홈페이지에서 접수 가능합니다. <strong>보증 기간</strong> 내에는 무상입니다.&quot; (※ 이건 사실이 아닐 수도 있는 가짜 답변.)</li>
</ul>
</li>
<li><strong>임베딩 &amp; 검색:</strong> 이 가상 답변을 벡터로 변환해서 검색한다.</li>
<li><strong>매칭:</strong> 이제 검색어(가상 답변) 안에 &quot;A/S&quot;, &quot;고객센터&quot;, &quot;보증 기간&quot; 같은 단어가 들어있다.<ul>
<li>DB에 있는 진짜 문서(&quot;A/S 절차 안내문&quot;)와 <strong>벡터 유사도가 훨씬 높아져서</strong> 검색이 잘 된다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="3-실험-설계-experiment-setup">3. 실험 설계 (Experiment Setup)</h1>
<h3 id="31-데이터셋-및-전처리">3.1 데이터셋 및 전처리</h3>
<ul>
<li><p><strong>Source:</strong> AI Hub &#39;소상공인 고객 주문 질의-응답 텍스트 데이터셋&#39; 중 생활잡화 도메인 데이터 활용.</p>
<p>  <img src="https://velog.velcdn.com/images/sumin_baek/post/00cf7831-7864-4cb4-8800-6fed6e7fef73/image.png" alt=""></p>
</li>
<li><p><strong>Labeling (8개 클래스)</strong></p>
<ul>
<li>기존 11개 대분류 중 데이터 적은 것(매장, 멤버십) 제외.</li>
<li>유사 항목 통합: <code>결제</code>+<code>구매</code> → <strong><code>구매</code></strong>. <code>교환|반품|환불</code> 등 오타 유발 라벨 → <code>교환/반품/환불</code>로 통일.</li>
<li>최종 8개: <code>제품</code>, <code>배송</code>, <code>교환/반품/환불</code>, <code>행사</code>, <code>구매</code>, <code>AS</code>, <code>포장</code>, <code>웹사이트</code>.</li>
</ul>
</li>
<li><p><strong>Undersampling:</strong> 클래스 불균형 해소를 위해 <strong>각 1,800개</strong>로 맞춤 (총 14,400개).</p>
</li>
<li><p><strong>Split:</strong> Train(13,200) / Val(200) / Test(1,000).</p>
</li>
</ul>
<h3 id="32-환경-설정">3.2 환경 설정</h3>
<ul>
<li><strong>LLM:</strong> <code>gpt-3.5-turbo</code> (<strong>Temperature = 0</strong> 설정: 일관된 분류 목적).</li>
<li>임베딩 모델: text-embedding-3-small 을 제외하고 모두 Hugging Face에서 제공하는 SentenceTransformer 기반 모델</li>
<li><strong>Vector Store:</strong> FAISS.</li>
<li><strong>Retrieval $k$값:</strong> Validation 결과 <strong>$k=3$</strong> 선정 (3, 5, 7, 10 중 F1-score 최고).</li>
<li><strong>Hybrid Weight:</strong> $\lambda$값 0.1~0.9 테스트 결과, <strong>Lexical 0.3 : Dense 0.7</strong> 비율 선정.</li>
</ul>
<h3 id="33-프롬프트-설계">3.3 프롬프트 설계</h3>
<p><strong>1) 분류 프롬프트 (Classification)</strong></p>
<ul>
<li><p>JSON 포맷 강제, 불필요한 설명 제거.</p>
<pre><code>  **System:**
  Classify the query into one of: 제품, 배송, 교환/반품/환불, 행사, AS, 포장, 구매, 웹사이트.
  Return only one category exactly as listed above. No other categories or explanations.
  Return in JSON: {“prediction”: “category”}

  **Human:**
  Query: {query}
  Relevant cases: {similar cases}</code></pre></li>
</ul>
<p>2) HyDE 프롬프트</p>
<ul>
<li><p>비용 절감을 위해 생성 길이 <strong>200자 제한</strong>.</p>
<pre><code class="language-bash">  **System:**
  Generate a hypothetical passage that is relevant to the given query.
  Limit the passage to a maximum of 200 characters.

  **Human:**
  User query: {query}</code></pre>
</li>
</ul>
<h3 id="34-평가지표">3.4 평가지표</h3>
<ul>
<li><p><strong>임베딩 모델 평가지표</strong></p>
<ol>
<li><p>Recall@k (재현율): 상위 k개 안에 정답이 있는지?</p>
<p> $Recall@k = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[answer_i \in Top\text{-}k_i]$</p>
<blockquote>
<p>$N$: 전체 질의(질문) 개수.
 $Top\text{-}k_i$: $i$번째 질문에 대해 검색된 상위 $k$개의 문서들.
 $answer_i$: 실제 정답 문서.
 $\mathbb{1}[\cdot]$ (지시 함수): 조건이 <strong>참(정답이 있음)이면 1, 거짓(없음)이면 0</strong>.</p>
</blockquote>
<ul>
<li>예시<ul>
<li><strong>질문 A:</strong> 정답 문서가 <strong>1등</strong>으로 나옴 → <strong>성공 (1점)</strong></li>
<li><strong>질문 B:</strong> 정답 문서가 <strong>3등</strong>으로 나옴 → <strong>성공 (1점)</strong></li>
<li><strong>질문 C:</strong> 정답 문서가 <strong>5등</strong>으로 나옴 → <strong>실패 (0점)</strong> (3등 밖이니까)</li>
<li><strong>최종 점수:</strong> $(1 + 1 + 0) / 3 = \mathbf{0.66}$</li>
</ul>
</li>
</ul>
</li>
<li><p>MMR@k (평균 역수 순위): 정답이 몇 번째에 나왔는지?</p>
<p> $MRR@k = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{rank_i}$</p>
<blockquote>
<p>$rank_i$: $i$번째 질문에 대한 정답 문서의 등수.
 만약 정답이 $k$위 안에 없으면 점수는 0.</p>
</blockquote>
<ul>
<li>예시<ul>
<li><strong>질문 A:</strong> 정답이 <strong>1등</strong>으로 나옴 → 점수 <strong>$\frac{1}{1} = 1.0$</strong></li>
<li><strong>질문 B:</strong> 정답이 <strong>3등</strong>으로 나옴 → 점수 <strong>$\frac{1}{3} \approx 0.33$</strong></li>
<li><strong>질문 C:</strong> 정답이 <strong>5등</strong>으로 나옴 → 점수 <strong>$\frac{1}{5} = 0.2$</strong></li>
<li><strong>최종 점수:</strong> $(1.0 + 0.33 + 0.2) / 3 = \mathbf{0.51}$</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
<li><p><strong>분류 성능 평가지표</strong></p>
</li>
</ul>
<pre><code>| 지표 | 설명 |
| --- | --- |
| Accuracy | 전체 예측 중 정답 비율 |
| Macro Precision | 클래스별 정밀도의 산술 평균 |
| Macro Recall | 클래스별 재현율의 산술 평균 |
| Macro F1-score | Macro Precision과 Recall 의 조화 평균 |
| Weighted F1-score | 클래스별 샘플 수 기반 가중 평균 F1-score |

&lt;aside&gt;
💡

- Macro F1: 모델이 엉뚱한 라벨을 만들어내면 점수가 내려감 → &quot;모델이 환각을 얼마나 했는지 감지 가능&quot;
- Weighted F1: 엉뚱한 라벨은 무시하고 기존 8개 카테고리 내에서의 성능만 집중함.
&lt;/aside&gt;</code></pre><hr>
<h1 id="4-실험-결과">4. 실험 결과</h1>
<h3 id="41-임베딩-실험-결과">4.1 임베딩 실험 결과</h3>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/9e362765-ab15-4895-94d9-558e697f6c05/image.png" alt=""></p>
<ul>
<li><strong>Winner:</strong> <strong>KoE5</strong> (모든 지표 1위)</li>
<li><strong>2위:</strong> Jina-embeddings-v3 (KoE5와 근소한 차이)</li>
<li><strong>Baseline:</strong> text-embedding-3-small (KoE5 대비 5~9%p 낮음)</li>
<li><strong>Worst:</strong> <strong>KoBERT</strong> (Semantic 유사도 성능 매우 낮음)</li>
</ul>
<h3 id="42-rag-분류-결과">4.2 RAG 분류 결과</h3>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/abee9c2b-2431-4359-a00b-10404ff0b730/image.png" alt=""></p>
<p><strong>상세 분석</strong></p>
<ol>
<li><p><strong>Recall 향상:</strong> RAG 적용 시 Precision보다 Recall 향상 폭이 큼</p>
<p> → 실제 카테고리를 더 정확히 맞추는 방향으로 모델 성능이 개선되었음을 의미</p>
</li>
<li><p><strong>환각 억제:</strong> No RAG에서는 정의되지 않은 라벨(예: 폐배터리)이 생성되어 Macro F1이 크게 깎였으나 RAG 적용 후 안정화됨.</p>
</li>
</ol>
<hr>
<h1 id="5-결론-및-제언">5. 결론 및 제언</h1>
<ul>
<li><strong>최적 조합:</strong> <strong>KoE5 임베딩 + Hybrid Search ($w=0.3:0.7$)</strong></li>
<li><strong>성과:</strong> 복잡한 파인튜닝 없이 RAG 구조만으로 VoC 분류 자동화 가능성 입증.</li>
<li><strong>HyDE의 한계:</strong> 짧고 명확한 키워드가 있는 VoC 도메인에서는 오히려 가상 답변 생성이 노이즈가 되거나 비용 효율이 떨어짐.</li>
<li><strong>Future Work</strong><ul>
<li>실무 적용을 위한 경량화 모델 도입, 검색 후보군 축소, 문서 길이 필터링 등 최적화된 방안 필요</li>
<li>참조 문서를 단순 유사 질의가 아닌 &#39;상담 매뉴얼/규정집&#39;으로 확장 테스트 필요</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Human-level control through deep reinforcement learning]]></title>
            <link>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Human-level-control-through-deep-reinforcement-learning</link>
            <guid>https://velog.io/@sumin_baek/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Human-level-control-through-deep-reinforcement-learning</guid>
            <pubDate>Sat, 07 Feb 2026 01:39:02 GMT</pubDate>
            <description><![CDATA[<h1 id="0-사전학습">0. 사전학습</h1>
<h3 id="1-강화-학습-reinforcement-learning">1) 강화 학습 (Reinforcement Learning)</h3>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/ae67f71c-0312-431a-96c6-171db678d8c2/image.png" alt=""></p>
<p>강화 학습은 &#39;시시비비&#39;가 아니라 &#39;보상&#39;으로 배우는 방식입니다. 마치 강아지에게 &quot;앉아&quot;를 가르칠 때 앉으면 간식을 주고 안 앉으면 아무것도 주지 않는 것과 같습니다.</p>
<ul>
<li><strong>에이전트(Agent):</strong> 주인공(AI). 게임을 플레이하는 주체입니다.</li>
<li><strong>상태(State):</strong> 현재 상황. 게임 화면 속 캐릭터의 위치, 적의 유무 등입니다.</li>
<li><strong>행동(Action):</strong> 주인공이 할 수 있는 선택. (왼쪽 이동, 점프, 공격 등)</li>
<li><strong>보상(Reward):</strong> 행동의 결과로 얻는 점수.</li>
</ul>
<h3 id="2-q-learning-q-러닝">2) Q-Learning (Q-러닝)</h3>
<p>Q-러닝은 &#39;미래 가치 계산기&#39;입니다. 단순히 지금 점수를 얻는 것뿐만 아니라, &quot;지금 이 행동을 하면 나중에 얼마나 큰 이득이 올까?&quot;를 수치화한 것이 <strong>Q-값</strong>입니다.</p>
<ul>
<li><strong>핵심:</strong> 모든 상황에서 각 행동에 대한 점수표(Q-table)를 만드는 작업입니다. 예를 들어 &quot;적 앞에 있을 때 공격&quot; 행동의 Q-값이 높다면 AI는 그 행동을 선택하게 됩니다.</li>
</ul>
<h3 id="3-cnn-convolutional-neural-network-합성곱-신경망">3) CNN (Convolutional Neural Network, 합성곱 신경망)</h3>
<p>이 논문의 혁신은 AI에게 &#39;눈(Vision)&#39;을 달아준 것입니다. 이전의 AI는 데이터(좌표값 등)를 숫자로 입력받아야 했지만 CNN 덕분에 게임 화면 그 자체(이미지)를 보고 상황을 판단할 수 있게 되었습니다.</p>
<ul>
<li><strong>역할:</strong> 화면 속의 픽셀들을 분석해 &quot;이건 공이고, 저건 벽이다&quot;라는 특징을 스스로 추출합니다.</li>
</ul>
<h3 id="4-dqn-deep-q-network">4) DQN (Deep Q-Network)</h3>
<p>이 논문의 제목인 &quot;Deep Reinforcement Learning&quot;이 바로 이 개념입니다. CNN(Deep Learning)과 <strong>Q-Learning</strong>을 합친 것이죠.</p>
<ul>
<li><strong>왜 합쳤나?</strong><ul>
<li>기존의 방식은 게임의 모든 상황을 기록한 &#39;거대한 점수표(Q-table)&#39;가 필요했습니다. 하지만 게임 속 경우의 수가 너무 많아 표를 만드는 것이 물리적으로 불가능했습니다.</li>
</ul>
</li>
<li><strong>해결 방법</strong><ul>
<li>인공지능이 모든 경우의 수를 외우는 대신 <strong>CNN</strong>을 통해 &quot;지금 눈앞에 보이는 화면&quot;의 특징을 실시간으로 파악하게 했습니다.</li>
<li>그 정보로 &quot;이 상황에서는 이 행동의 점수가 가장 높겠네&quot;라고 즉석에서 계산하도록 만들어 본 적 없는 상황에서도 유연하게 대처할 수 있게 한 것입니다.</li>
</ul>
</li>
</ul>
<h3 id="5-t-sne">5) t-SNE</h3>
<p><strong>t-SNE</strong>는 수천 개의 변수를 가진 복잡한 데이터를 2차원 평면에 점으로 찍어 보여주는 기술입니다.</p>
<ul>
<li><strong>핵심 원리:</strong> 원래 데이터 공간에서 서로 비슷했던 데이터들은 2차원 평면에서도 <strong>가깝게 모이고</strong> 달랐던 데이터들은 <strong>멀리 떨어지게</strong> 만듭니다.</li>
</ul>
<h1 id="1-연구-배경-및-목표"><strong>1. 연구 배경 및 목표</strong></h1>
<ul>
<li>기존 RL agent들은 feature를 수작업으로 설계하거나 low-dimensional state space에 국한되어 있었습니다.</li>
<li>본 연구에서는 이러한 한계를 극복하고 여러 환경에서 픽셀 데이터(화면)와 게임 점수만을 input 으로 받아들이면서도 인간 전문가 수준의 성능을 달성했습니다. → 범용 인공지능(AGI)의 시작</li>
</ul>
<pre><code>&lt;aside&gt;
💡

AGI(Artificial General Intelligence): 인간과 동등하거나 그 이상의 지능을 갖고 스스로 학습하며 모든 인지적 작업을 수행할 수 있는 범용적인 AI

&lt;/aside&gt;</code></pre><h1 id="2-핵심-방법론">2. 핵심 방법론</h1>
<h3 id="1-reinforcement-learning의-목적-함수"><strong>1) Reinforcement Learning의 목적 함수</strong></h3>
<p>강화 학습의 에이전트는 환경과 상호작용하며 누적 보상을 최대화하는 최적 행동 가치 함수 $Q^*(s, a)$를 학습합니다. 이는 벨만 방정식(Bellman Equation)이라는 재귀적 관계를 기초로 합니다.</p>
<p>$Q^<em>(s, a) = \mathbb{E}<em>{s&#39; \sim \mathcal{E}} [r + \gamma \max</em>{a&#39;} Q^</em>(s&#39;, a&#39;) \mid s, a]$</p>
<table>
<thead>
<tr>
<th><strong>요소</strong></th>
<th><strong>이름</strong></th>
<th><strong>의미</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>$Q^*(s, a)$</strong></td>
<td><strong>최적 행동 가치 함수</strong></td>
<td>상황($s$)에서 행동($a$)을 했을 때, 게임 끝날 때까지 얻을 수 있는 &#39;최종 합계 점수의 기댓값&#39;입니다.</td>
</tr>
<tr>
<td><strong>$s$ (State)</strong></td>
<td><strong>상태</strong></td>
<td><strong>현재 상황</strong>입니다. 아타리 게임에서는 화면 픽셀 데이터(이미지)가 곧 상태입니다.</td>
</tr>
<tr>
<td><strong>$a$ (Action)</strong></td>
<td><strong>행동</strong></td>
<td>현재 상황에서 내가 <strong>누른 버튼</strong>입니다. (예: 왼쪽 이동, 공격 등)</td>
</tr>
<tr>
<td><strong>$\mathbb{E}_{s&#39; \sim \mathcal{E}}$</strong></td>
<td><strong>기댓값</strong></td>
<td>환경($\mathcal{E}$)의 불확실성을 고려한 <strong>평균치</strong>입니다. 적이 무작위로 움직일 수도 있으니, 다음에 올 상황($s&#39;$)들에 대한 평균 점수를 계산한다는 뜻입니다.</td>
</tr>
<tr>
<td><strong>$r$ (Reward)</strong></td>
<td><strong>즉각 보상</strong></td>
<td>행동을 하자마자 <strong>지금 바로 받는 점수</strong>입니다.</td>
</tr>
<tr>
<td><strong>$\gamma$ (Gamma)</strong></td>
<td><strong>할인율</strong></td>
<td><strong>미래 점수의 가치를 깎는 비율</strong>(보통 0.99)입니다. &quot;내일의 100점보다 오늘 당장의 100점이 더 가치 있다&quot;는 것을 수학적으로 나타냅니다.</td>
</tr>
<tr>
<td><strong>$\max_{a&#39;}$</strong></td>
<td><strong>최대화</strong></td>
<td>다음 상황($s&#39;$)이 되었을 때, 에이전트가 바보같이 행동하지 않고 <strong>&#39;가장 높은 점수를 주는 행동($a&#39;$)&#39;을 선택할 것</strong>이라는 가정입니다.</td>
</tr>
<tr>
<td><strong>$Q^*(s&#39;, a&#39;)$</strong></td>
<td><strong>다음 상태 가치</strong></td>
<td><strong>다음 상황($s&#39;$)에서 할 수 있는 최고의 행동 가치</strong>입니다.</td>
</tr>
<tr>
<td>- <strong>의미:</strong> $Q^<em>(s, a)$란, 상태 $s$에서 행동 $a$를 했다는 조건이 주어졌을 때*</em>($\mid s, a$)**, 즉시 얻는 보상($r$)과 다음 상황의 미래 가치($\gamma \max Q&#39;$)를 합친 것의 평균값($\mathbb{E}$)이다.</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- <strong>한계:</strong> 기존 Q-learning은 모든 상태-행동 쌍을 테이블 형태로 기록해야 했으므로 아타리 게임처럼 상태가 무한에 가까운 경우 일반화가 불가능했습니다.</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h3 id="2-cnn의-활용"><strong>2) CNN의 활용</strong></h3>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/670519a2-aca9-42e0-a984-523290bcc560/image.png" alt="">
DQN은 Q-함수를 근사하기 위해 CNN을 사용합니다. 이는 전처리된 픽셀 데이터에서 특징을 추출하여 최적의 행동을 추론하는 구조입니다.</p>
<p>(신경망의 최종 출력은 각 가능한 행동에 대한 Q-값이다.)</p>
<p><strong>아키텍처 세부 구성</strong></p>
<ul>
<li><strong>입력층:</strong> $84 \times 84 \times 4$ 이미지. (연속된 4개 프레임을 쌓아 물체의 가속도와 방향 정보를 확보)</li>
<li><strong>합성곱 층(Convolutional Layers)</strong><ul>
<li><strong>Layer 1:</strong> 32개의 8x8 필터, Stride 4.</li>
<li><strong>Layer 2:</strong> 64개의 4x4 필터, Stride 2.</li>
<li><strong>Layer 3:</strong> 64개의 3x3 필터, Stride 1.</li>
</ul>
</li>
<li><strong>완전 연결 층(Fully Connected Layers):</strong> 512개의 유닛을 거쳐 최종적으로 가능한 각 행동의 <strong>Q-value</strong>를 출력합니다.</li>
<li><strong>특징:</strong> 단 한 번의 연산(Forward pass)으로 현재 상태에서 가능한 모든 행동의 가치를 동시에 산출하여 효율성을 극대화했습니다.</li>
</ul>
<h3 id="3-학습-안정화-기법"><strong>3) 학습 안정화 기법</strong></h3>
<p>신경망(CNN)을 강화 학습에 도입할 때 발생하는 수치적 불안정성(발산 및 진동)을 해결하기 위해 두 가지 장치를 도입했습니다.</p>
<p><strong>① Experience Replay (경험 재생)</strong></p>
<p>에이전트의 경험 데이터 $(s_t, a_t, r_t, s_{t+1})$를 리플레이 메모리($D$)에 저장하고 학습 시 무작위로 추출한 미니배치를 사용합니다.</p>
<ul>
<li><strong>데이터 효율성:</strong> 하나의 경험 데이터를 여러 번 학습에 재사용할 수 있습니다.</li>
<li><strong>상관관계 제거:</strong> 연속된 데이터 사이의 시간적 상관관계를 끊어 수렴 성능을 높입니다.</li>
<li><strong>안정성:</strong> 행동 분포를 평활화(Smoothing)하여 파라미터가 급격히 변하거나 국소 최적해에 빠지는 것을 방지합니다.</li>
</ul>
<p><strong>② Separate Target Network (타겟 네트워크 분리)</strong></p>
<p>학습 목표가 되는 <strong>Target Value</strong>를 계산할 때, 현재 학습 중인 가중치($\mathbf{h}$)가 아닌 별도의 타겟 가중치($\mathbf{h}^{-}$)를 사용합니다.</p>
<ul>
<li><strong>작동 방식:</strong> 타겟 네트워크는 일정 주기($C$ step)마다 현재 네트워크의 가중치를 복제하여 업데이트합니다. 이를 통해 학습 목표가 실시간으로 변동하는 것을 막아 안정적인 수렴을 유도합니다.</li>
</ul>
<h3 id="4-손실-함수-및-정규화-loss-function--regularization"><strong>4) 손실 함수 및 정규화 (Loss Function &amp; Regularization)</strong></h3>
<p>학습의 목표는 벨만 방정식의 좌변($Q$)과 우변(Target) 사이의 평균 제곱 오차(MSE)를 최소화하는 것입니다.</p>
<p>$L_i(\mathbf{h}<em>i) = \mathbb{E}</em>{(s, a, r, s&#39;) \sim U(D)} \left[ \left( r + \gamma \max_{a&#39;} Q(s&#39;, a&#39;; \mathbf{h}^{-}_i) - Q(s, a; \mathbf{h}_i) \right)^2 \right]$</p>
<table>
<thead>
<tr>
<th><strong>요소</strong></th>
<th><strong>의미</strong></th>
<th><strong>역할</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>$L_i(\mathbf{h}_i)$</strong></td>
<td><strong>손실(Loss)</strong></td>
<td>현재 신경망이 얼마나 엉터리로 예측하고 있는지를 나타내는 &#39;벌점&#39;입니다. 이 값이 0에 가까울수록 똑똑한 AI입니다.</td>
</tr>
<tr>
<td><strong>$\mathbb{E}_{\sim U(D)}$</strong></td>
<td><strong>무작위 추출</strong></td>
<td>리플레이 메모리($D$)에서 과거 경험을 균일한 확률($U$)로 무작위로 꺼내서 평균을 낸다는 뜻입니다.</td>
</tr>
<tr>
<td><strong>$r + \gamma \max_{a&#39;} Q(\dots; \mathbf{h}^{-}_i)$</strong></td>
<td><strong>타겟(Target)</strong></td>
<td>&quot;정답지&quot;입니다. 타겟 네트워크($\mathbf{h}^{-}$)를 이용해 계산한 &quot;이랬어야 해&quot;라는 목표값입니다.</td>
</tr>
<tr>
<td><strong>$Q(s, a; \mathbf{h}_i)$</strong></td>
<td><strong>예측값</strong></td>
<td>&quot;나의 대답&quot;입니다. 현재 학습 중인 네트워크($\mathbf{h}$)가 내놓은 추측치입니다.</td>
</tr>
<tr>
<td><strong>$(\dots - \dots)^2$</strong></td>
<td><strong>제곱 오차</strong></td>
<td>정답과 내 대답의 차이를 제곱합니다. 차이가 클수록 벌점이 기하급수적으로 커지게 만듭니다.</td>
</tr>
<tr>
<td>- 의미: 손실 함수($L_i$)란, 리플레이 메모리에서 무작위로 꺼낸 과거 경험들을 바탕으로 &#39;에이전트가 만든 정답(Target)&#39;과 &#39;현재의 예측값($Q$)&#39; 사이의 거리를 측정하여 반성하는 지표이다.</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h3 id="5-훈련-세부-사항-및-탐색-전략"><strong>5. 훈련 세부 사항 및 탐색 전략</strong></h3>
<ul>
<li><strong>Frame Skipping:</strong> 연산 효율을 위해 4프레임마다 한 번씩 행동을 결정하고 그 사이 프레임은 이전 행동을 유지합니다.</li>
<li><strong>$\epsilon$-greedy:</strong> 초기에는 무작위 행동(Exploration)을 많이 하다가 점진적으로 학습된 최적 행동(Exploitation)의 비중을 높여 탐색과 활용의 균형을 맞춥니다.</li>
<li><strong>최적화:</strong> 총 5,000만 프레임의 게임 경험을 학습하며 <strong>RMSProp</strong> 옵티마이저를 사용해 가중치를 업데이트합니다.</li>
</ul>
<h3 id="6-요약">6. 요약</h3>
<aside>
💡

<ol>
<li><strong>플레이 (경험 수집)</strong>: <strong>[5. 탐색 전략]</strong>인 $\epsilon$-greedy를 사용하여 행동하고 <strong>[2. CNN]</strong>으로 처리된 화면 데이터를 기반으로 발생한 $(s, a, r, s&#39;)$ 경험을 쌓습니다.</li>
<li><strong>복습 (데이터 정제)</strong>: <strong>[3-①. Experience Replay]</strong>를 통해 메모리에 저장된 과거 경험을 무작위로 추출합니다. 이는 데이터 간 상관관계를 끊어 학습의 안정성을 확보하는 핵심 과정입니다.</li>
<li><strong>비교 (목표 설정)</strong>: <strong>[3-②. Target Network]</strong>가 제시한 &#39;고정된 정답(Target)&#39;과 현재 Q-network의 &#39;예측치&#39;를 대조합니다. 이 과정은 <strong>[1. 목적 함수]</strong>의 좌변($Q$)과 우변($Target$)을 맞추는 작업입니다.</li>
<li><strong>교정 (최적화)</strong>: 둘 사이의 차이를 <strong>[4. 손실 함수]</strong>로 계산하고 가중치를 업데이트합니다. 이 결과로 에이전트의 예측은 점차 정교해집니다.</aside>


</li>
</ol>
<h1 id="3-평가-및-결과">3. 평가 및 결과</h1>
<h3 id="1-성능-평가"><strong>1) 성능 평가</strong></h3>
<ul>
<li><p>아타리 2600의 49개 게임 중 29개 게임에서 인간 전문가 수준(75% 이상)의 성능 달성하였습니다.</p>
<p>  → 범용성 입증</p>
</li>
<li><p>기존의 선형 학습 모델보다 압도적인 성능 우위 확인하였습니다.</p>
</li>
</ul>
<h3 id="2-학습-표현의-시각화-t-sne-분석"><strong>2) 학습 표현의 시각화 (t-SNE 분석)</strong></h3>
<p>DQN이 단순히 픽셀을 외우는 것이 아니라, 게임의 <strong>맥락적 의미</strong>를 학습했는지 확인하기 위해 고차원 데이터를 2차원으로 투영했습니다.</p>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/f0903813-f50b-4b22-8b21-d83b9fd22bc0/image.png" alt=""></p>
<p>&lt;DQN 에이전트가 학습을 완료하고 게임을 플레이하면서 경험한 상태들을 시각화&gt;</p>
<aside>
💡

<ul>
<li><p><strong>각각의 점들:</strong> 수많은 게임 상태들의 표현을 나타냅니다. 각 점은 하나의 게임 상태를 나타내며 점의 색깔은 해당 상태의 예측된 가치(V)를 나타냅니다.</p>
</li>
<li><p><strong>클러스터 및 군집:</strong> 비슷한 색상의 점들이 모여 클러스터를 형성하는 것을 볼 수 있습니다. 이는 DQN이 유사한 상태들을 비슷한 방식으로 인식하고 표현한다는 것을 의미합니다.</p>
</li>
<li><p><strong>상태 가치 (V)와의 상관관계</strong></p>
<ul>
<li><strong>높은 가치 → 빨간색</strong></li>
<li><strong>낮은 가치 → 파란색</strong></aside>
</li>
</ul>
</li>
<li><p><strong>분석 결과</strong></p>
<ul>
<li><strong>군집화:</strong> 게임 화면의 픽셀 구성은 다르더라도 <strong>보상 가치가 비슷한 상태</strong>들은 평면상에서 가깝게 모였습니다.</li>
<li><strong>의미 파악:</strong> 예를 들어 적군이 거의 다 죽어가는 고득점 직전의 상황들을 AI는 서로 비슷한 &#39;중요한 상태&#39;로 분류했습니다.</li>
</ul>
</li>
<li><p><strong>결론:</strong> DQN은 화면을 사진 찍듯 외우는 게 아니라, 어떤 상황이 유리한지 그 <strong>&#39;전략적 가치&#39;를 스스로 추상화</strong>해서 학습하고 있음을 시각적으로 보여줍니다.</p>
</li>
</ul>
<h3 id="3-학습의-안정성-확인">3) 학습의 안정성 확인</h3>
<p>학습이 진행됨에 따라 AI가 예측하는 점수(Q-value)와 실제 얻는 점수가 어떻게 변하는지 추적했습니다.</p>
<p><img src="https://velog.velcdn.com/images/sumin_baek/post/b69866a0-7d60-490f-a186-cdb7ca9b54b5/image.png" alt=""></p>
<ul>
<li><strong>안정적인 상승:</strong> 시간이 지날수록 평균 점수와 예상 가치가 부드럽게 상승했습니다.</li>
<li><strong>불안정성 극복:</strong> 앞서 언급한 <strong>Experience Replay</strong>와 <strong>Target Network</strong> 덕분에, 학습 데이터가 요동쳐도 AI가 혼란에 빠지지 않고 안정적으로 실력을 쌓아가는 모습을 확인했습니다.</li>
</ul>
<h1 id="4-결론">4. 결론</h1>
<ul>
<li><strong>최초의 범용 AI</strong>: 동일한 모델과 설정값으로 수십 가지의 서로 다른 게임을 마스터한 최초의 에이전트입니다.</li>
<li><strong>시각 정보와 행동의 결합</strong>: 복잡한 화면 데이터(픽셀)에서 직접 최적의 행동을 도출하는 기술적 진보를 이뤘습니다.</li>
<li><strong>생물학적 영감</strong>: 뇌의 기억 원리를 본뜬 &#39;Experience Replay&#39;를 도입해 딥러닝과 강화 학습의 결합을 안정시켰습니다.</li>
<li><strong>미래 가능성</strong>: 머신러닝과 생물학적 메커니즘을 결합하면 인간 수준의 강력한 AI를 구축할 수 있음을 증명했습니다.</li>
</ul>
<p>&quot;생물학적 기억 원리를 활용해 복잡한 화면을 스스로 학습하고 정복하는 최초의 범용 AI 시대를 열었다.”</p>
]]></description>
        </item>
    </channel>
</rss>