<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sy_kim.log</title>
        <link>https://velog.io/</link>
        <description>MedicalAI Researcher</description>
        <lastBuildDate>Mon, 27 Apr 2026 04:47:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sy_kim.log</title>
            <url>https://velog.velcdn.com/images/sy_kim/profile/ac66701f-5f7e-4d5f-9f7a-3061a007276a/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sy_kim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sy_kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[논문 리뷰] MoMA]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MoMA</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MoMA</guid>
            <pubDate>Mon, 27 Apr 2026 04:47:41 GMT</pubDate>
            <description><![CDATA[<h1 id="overview">Overview</h1>
<ul>
<li><strong>제목</strong>: <a href="https://www.nature.com/articles/s41746-025-02219-4">MoMA: a mixture-of-multimodal-agents architecture for enhancing clinical prediction modelling</a></li>
<li><strong>저널</strong>: npj Digital Medicine (25년 12월)</li>
<li><strong>요약</strong><ul>
<li>멀티모달 EHR 데이터를 활용한 임상 예측 작업을 수행하는 LLM 에이전트</li>
<li>비정형(의료영상) 데이터를 각 모달리티별 <strong>Specialist Agent</strong>로 구조화된 텍스트 요약문 생성</li>
<li>각 모달리티의 요약문을 <strong>Aggregator Agent</strong>로 단일 요약문 생성</li>
<li><strong>Predictor Agent</strong>로 임상 예측 수행 (파인튜닝 적용)</li>
</ul>
</li>
</ul>
<h1 id="introduction">Introduction</h1>
<p>현대 의료는 임상 노트, 의료 영상, 활력 징후, 실험실 결과와 같은 다양한 환자 데이터 모달리티를 통합하는 전자 건강 기록(EHR) 을 점점 더 많이 활용하고 있습니다. 각 모달리티는 고유하고 상호 보완적인 정보를 제공합니다.</p>
<ul>
<li><strong>기록지</strong>: 의료 전문가가 기록한 환자의 증상, 진단 및 치료를 요약합니다.</li>
<li><strong>의료 영상</strong>: 해부학적 구조와 병리학적 상태를 객관적으로 묘사하여 질병 탐지 및 모니터링을 용이하게 합니다.</li>
<li><strong>랩데이터 및 바이탈 사인</strong>: 환자의 생리적 상태와 이상 징후를 수치화합니다.</li>
</ul>
<p>이러한 멀티모달 EHR 데이터의 통합은 환자의 건강 상태에 대한 보다 총체적인 이해를 가능하게 합니다. 실제로 과업 관련 멀티모달 데이터를 통합하는 머신러닝 모델은 단일 모달리티에 의존하는 모델보다 우수한 성능을 보이는 것으로 나타났습니다.</p>
<h3 id="멀티모달-통합-방법론">멀티모달 통합 방법론</h3>
<p>멀티모달 통합 방법론은 일반적으로 세 가지 범주로 나뉩니다:</p>
<ol>
<li><strong>조기 결합(Early Fusion)</strong>: 훈련 전 입력을 결합.</li>
<li><strong>공동 결합(Joint Fusion)</strong>: 훈련 중 표현(Representation)을 함께 학습.</li>
<li><strong>후기 결합(Late Fusion)</strong>: 별도로 훈련된 모델의 출력을 결합.</li>
</ol>
<p>특히 <strong>공동 결합</strong>은 모달리티 전반에 걸쳐 공유 임베딩 공간(Shared Embedding Space)을 학습하며, 이는 조기 또는 후기 결합보다 더 깊은 교차 모달 관계를 표현할 수 있습니다. 최근의 멀티모달 대규모 언어 모델(LLM)은 이러한 공동 결합 방법의 발전을 이끌고 있습니다.</p>
<h3 id="기존-방식의-한계">기존 방식의 한계</h3>
<p>하지만 기존의 모든 접근 방식(LLaVA-Med, VILA-M3 등)은 여전히 다음과 같은 문제에 직면해 있습니다.</p>
<ul>
<li><strong>방대한 데이터 요구</strong>: 공동 벡터 공간을 학습하기 위해 대규모의 <strong>쌍을 이룬(paired) 멀티모달 데이터셋</strong>이 필요합니다.</li>
<li><strong>데이터 확보의 어려움</strong>: 의료 분야에서는 데이터 파편화와 복잡성으로 인해 동일한 환자나 사례에 대해 여러 모달리티가 완벽하게 연결된 데이터를 충분히 확보하기 어렵습니다.</li>
<li><strong>확장성 부족</strong>: 새로운 모달리티가 추가될 때마다 상당한 수준의 지도 학습 기반 정렬(Supervised Alignment)이 필요합니다.</li>
</ul>
<h3 id="제안-방법-mixture-of-multimodal-agents-moma">제안 방법: Mixture-of-Multimodal-Agents (MoMA)</h3>
<p>이러한 한계를 극복하기 위해, 본 연구는 사전 학습된 LLM의 고유한 능력, 즉 <strong>멀티모달 임상 데이터를 자연어로 번역하는 능력</strong>을 활용하고자 합니다.</p>
<h3 id="moma의-핵심-아이디어">MoMA의 핵심 아이디어</h3>
<ul>
<li><strong>언어를 공유 공간으로 활용</strong>: 최신 멀티모달 LLM은 비텍스트 데이터(영상, 수치 등)를 텍스트 요약으로 변환할 수 있습니다. 이 <strong>변환된 텍스트</strong>는 전통적인 공동 결합 방식의 &#39;공유 벡터 공간&#39;과 유사한 역할을 수행합니다.</li>
<li><strong>제로샷(Zero-shot) 변환</strong>: 이 과정은 사전 학습된 LLM을 사용하여 추가 데이터 없이 수행될 수 있어, 방대한 데이터 요구 사항을 피할 수 있습니다.</li>
<li><strong>협업 에이전트 구조</strong>: 여러 LLM 에이전트가 협력할 때 더 나은 결과를 낸다는 점에 착안하여, MoMA 아키텍처를 설계했습니다.</li>
</ul>
<h3 id="moma-아키텍처의-작동-원리">MoMA 아키텍처의 작동 원리</h3>
<ol>
<li><strong>전문가 에이전트(Specialist Agents)</strong>: 각 비텍스트 모달리티를 전담하는 LLM 에이전트가 데이터를 텍스트 요약으로 변환합니다.</li>
<li><strong>통합 에이전트(Aggregator Agent)</strong>: 생성된 요약들과 기존 임상 노트를 통합하여 하나의 통합된 서사(Unified Narrative)를 형성합니다.</li>
<li><strong>예측 에이전트(Predictor Agent)</strong>: 최종적으로 통합된 정보를 바탕으로 임상 예측을 수행합니다.</li>
</ol>
<h3 id="moma의-장점-및-검증-결과">MoMA의 장점 및 검증 결과</h3>
<p>MoMA는 기존 모델들과 차별화되는 몇 가지 강력한 이점을 가집니다.</p>
<ul>
<li><strong>플러그 앤 플레이(Plug-and-play)</strong>: 재학습 없이 최신 멀티모달 LLM을 즉시 교체하거나 추가할 수 있습니다.</li>
<li><strong>효율성</strong>: 전문가 및 통합 에이전트는 제로샷으로 작동하며, 오직 <strong>예측 에이전트만 미세 조정(Fine-tuning)</strong>이 필요합니다.</li>
<li><strong>우수한 성능</strong>: 실제 의료 데이터셋(흉부 외상 중증도, 알코올 오남용 선별 등)에서 검증한 결과, 전체 테스트 세트뿐만 아니라 모든 성별 및 인종 하위 그룹에서도 베이스라인 모델을 능가했습니다.</li>
<li><strong>자원 절감</strong>: 대규모 쌍을 이룬 데이터가 부족하거나 개인정보 보호 규정으로 인해 모델 공유가 어려운 기관에서도 정확한 임상 예측 모델을 개발할 수 있게 해줍니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/0f24b9f4-ca45-4949-aaaa-8b76c5d6b504/image.png" alt=""></p>
<h1 id="method">Method</h1>
<p>이 섹션에서는 본 연구에서 제안하는 MoMA 아키텍처를 제시합니다. 먼저 MoMA의 핵심적인 설계 통찰을 개략적으로 설명한 후, 각 에이전트의 역할과 최종 출력을 생성하기 위한 협력 프로세스를 상세히 기술합니다. 또한, 비교 베이스라인 역할을 하는 교차 주의(Cross-attention) 및 전문가 혼합(Mixture-of-Experts) 기반의 통합 방법을 소개합니다. 본 연구는 TRIPOD-LLM(개별 예후 또는 진단을 위한 다변량 예측 모델의 투명한 보고 - 대규모 언어 모델) 가이드라인을 준수하며, 부록 4에 상세히 기재된 모든 보고 요구사항을 충족하는 체크리스트를 완료했습니다.</p>
<h2 id="멀티모달-에이전트-혼합moma-아키텍처"><strong>멀티모달 에이전트 혼합(MoMA) 아키텍처</strong></h2>
<p>MoMA 아키텍처의 설계는 <strong>전문가 혼합(Mixture-of-Experts, MoE)</strong>과 <strong>에이전트 혼합(Mixture-of-Agents, MoA)</strong>이라는 두 가지 프레임워크를 기반으로 합니다.</p>
<ul>
<li><strong>MoE 프레임워크</strong>: 게이팅 네트워크를 통해 각 입력을 가장 관련성 있는 전문가에게 전달함으로써, 전문가 지식을 적응적으로 활용하고 각 전문가에게 불필요한 정보가 과부하되지 않도록 하는 방식입니다.</li>
<li><strong>MoA 아키텍처</strong>: 전통적인 전문가와 게이팅 네트워크를 서로 다른 사전 학습된 LLM 에이전트로 대체하여 MoE 개념을 확장합니다. LLM 에이전트는 원래의 입력 텍스트에만 의존할 때보다 다른 LLM 에이전트의 출력을 추가 입력으로 포함할 때 더 나은 성능을 달성하는 경향이 있습니다.</li>
</ul>
<p>본 연구에서는 MoA 프레임워크를 EHR 데이터의 여러 모달리티를 수용할 수 있도록 확장하여 <strong>MoMA 아키텍처</strong>를 제안합니다. 단일 텍스트 입력을 분석하는 기존 MoA와 달리, MoMA는 각 비텍스트 모달리티를 텍스트 요약으로 변환하는 <strong>전용 전문가 에이전트</strong>를 할당합니다. 이러한 요약들은 LLM의 협업 능력을 활용하기 위해 일련의 LLM 층을 통해 처리됩니다. 이 아키텍처는 멀티모달 LLM을 <strong>플러그 앤 플레이(plug-and-play)</strong> 방식으로 통합하여 점점 늘어나는 모달리티를 지원할 수 있습니다.</p>
<h3 id="아키텍처-세부-정보-및-수식"><strong>아키텍처 세부 정보 및 수식</strong></h3>
<p>MoMA의 핵심 설계 원칙은 다양한 모달리티를 <strong>텍스트 공간으로 정렬</strong>하는 것입니다. 원래의 임상 텍스트는 통합 에이전트에 도달할 때까지 처리되지 않은 상태로 유지됩니다.</p>
<ol>
<li><strong>전문가 및 통합 단계</strong><ul>
<li>전문가 에이전트는 이미지나 구조화된 실험실 결과와 같은 비텍스트 데이터를 간결한 텍스트 요약으로 변환합니다. 예를 들어, <strong>LLaVA-Med</strong>나 <strong>CXR-LLAVA</strong>는 의료 영상에서 요약을 생성하고, 구조화된 EHR 데이터는 <strong>Llama-3</strong>와 같은 범용 LLM으로 요약할 수 있습니다.</li>
<li>샘플 $i$에 대해 통합 에이전트에게 제공되는 입력 $m_i$는 다음과 같이 정의됩니다:$$m_i = t_i \oplus \left(\bigoplus_{j=1}^{M} S_j(k_{i,j})\right)$$
• $t_i$: 샘플 $i$의 원본 임상 텍스트
• $\oplus$: 텍스트 결합(Concatenation) 연산
• $M$: 비텍스트 모달리티의 수
• $S_j$: $j$번째 비텍스트 모달리티를 처리하는 전문가 에이전트
• $k_{i,j}$: $j$번째 비텍스트 모달리티의 입력 데이터</li>
</ul>
</li>
<li><strong>통합 및 예측 단계</strong><ul>
<li>통합 에이전트($\mathcal{A}$)는 $m_i$를 입력받아 모든 모달리티의 정보를 통합한 포괄적이고 간결한 요약을 생성합니다. 이 요약은 최종 예측을 수행하는 예측 에이전트($\mathcal{P}$)에게 전달됩니다.$$\widehat{y}_i = \mathcal{P}(\mathcal{A}(m_i))$$</li>
<li>여기서 $\widehat{y}_i$는 샘플 $i$의 출력 예측값입니다.</li>
<li>본 연구에서는 <strong>Llama-3</strong>를 표 형식 데이터의 전문가 에이전트, 통합 에이전트, 그리고 예측 에이전트로 모두 활용했습니다. 최종 예측을 생성하기 위해, 미세 조정된 Llama-3 통합 에이전트가 출력한 <strong>마지막 토큰의 은닉 상태(hidden state)</strong>를 추출하여 순전파 층(feedforward layer)에 통과시킴으로써 최종 로짓(logit)을 생성합니다. 사용자는 필요에 따라 이러한 에이전트들을 더 진보된 모델로 자유롭게 교체할 수 있습니다.</li>
</ul>
</li>
</ol>
<h2 id="프롬프트-엔지니어링">프롬프트 엔지니어링</h2>
<p>본 연구는 MoMA 프레임워크에 최적화된 프롬프트를 생성하기 위한 일반적인 가이드라인을 제공합니다. 사용자는 아래 나열된 요소들을 LLM에 입력하여 프롬프트를 자동으로 생성할 수 있습니다. 구체적으로, 프롬프트는 <strong>텍스트 전문가 에이전트</strong>가 과업별 임상 정보를 추출하도록 안내하고, <strong>비텍스트 전문가 에이전트</strong>가 임상 텍스트와 관련성이 높고 상호 보완적인 데이터를 식별하도록 지시하며, <strong>통합 에이전트</strong>가 모든 전문가 에이전트의 출력을 합성 및 요약하도록 지시해야 합니다.</p>
<h3 id="1-텍스트-전문가-에이전트를-위한-프롬프트-가이드라인">1. 텍스트 전문가 에이전트를 위한 프롬프트 가이드라인</h3>
<p>텍스트 전문가 에이전트의 프롬프트 구성 요소는 다음과 같습니다.</p>
<ol>
<li><strong>관련 핵심 포인트 식별 (Identify Relevant Points)</strong><ul>
<li>전체 노트를 주의 깊게 읽고 주된 초점과 관련된 직접적인 언급을 강조합니다.</li>
<li><em>예시: &quot;숙련된 외상 의사로서... 흉부 외상 부상을 요약하십시오.&quot;</em></li>
</ul>
</li>
<li><strong>지정된 기준 적용 (Apply Specified Criteria)</strong><ul>
<li>기록된 세부 사항을 명시된 임계값(예: 하루 음주 횟수, 특정 방사선 보고서 결과 등)과 비교합니다.</li>
<li><em>예시: &quot;과도한 음주: 여성의 경우 하루 4잔 이상, 남성의 경우 5잔 이상...&quot;</em></li>
</ul>
</li>
<li><strong>추가 환자 속성 통합 (Incorporate Additional Patient Attributes)</strong><ul>
<li>주요 소견과 겹치거나 이를 설명할 수 있는 공존 질환 또는 요인(예: 다른 진단명, 생활 방식 문제 등)을 찾습니다.</li>
<li><em>예시: &quot;간염, 신기능 장애 등과 같은 상태에 대해 노트를 훑어보십시오...&quot;</em></li>
</ul>
</li>
<li><strong>명확성과 흐름 유지 (Maintain Clarity and Flow)</strong><ul>
<li>소견을 하나의 일관된 요약으로 제시합니다. 확정적인 증거부터 시작하여 경계선에 있거나 불확실한 항목을 언급하고, 혼란 변수(Confounder)로 마무리합니다.</li>
<li><em>예시: &quot;[X]의 증거와 다른 상태의 증거를 명확히 구분하여 소견을 요약하십시오...&quot;</em></li>
</ul>
</li>
<li><strong>전문 용어 사용 및 비밀 유지 (Professional Language and Confidentiality)</strong><ul>
<li>객관적인 임상 용어를 사용합니다.</li>
<li>개인 건강 정보(PHI)를 누락하고 추측을 피합니다.</li>
<li><em>예시: &quot;개인 건강 정보(PHI)를 포함하지 마십시오... 직접적으로 증명되지 않는 정보에 기반해 추측하거나 추론하지 마십시오.&quot;</em></li>
</ul>
</li>
<li><strong>최종 구조화된 검토 (Final Structured Review)</strong><ul>
<li>확인된 증거, 부분적/부재한 소견 및 관련 혼란 변수에 대한 간결한 개요로 마무리합니다.</li>
<li><em>예시: &quot;이 기준을 충족하는 직접적인 증거가 발견되지 않으면, 직접적인 증거가 없음을 명시적으로 기재하십시오.&quot;</em></li>
</ul>
</li>
</ol>
<h3 id="2-비텍스트-전문가-에이전트를-위한-프롬프트-가이드라인">2. 비텍스트 전문가 에이전트를 위한 프롬프트 가이드라인</h3>
<p>비텍스트 전문가 에이전트의 프롬프트 구성 요소는 다음과 같습니다.</p>
<ol>
<li><strong>관련 지표 식별 (Identify Relevant Indicators)</strong><ul>
<li>결과와 관련된 직접적인 측정치(예: 혈중 알코올 농도)를 스캔합니다.</li>
<li>검토의 초점이나 질환에 연결된 주요 수치를 찾습니다.</li>
<li><em>예시: &quot;알코올 소비와 흔히 연관된 초기 측정치를 식별하십시오...&quot;</em></li>
</ul>
</li>
<li><strong>간접적 증거 평가 (Evaluate Indirect Evidence)</strong><ul>
<li>결과와 관련된 이차적 또는 간접적 측정치(예: 비정상적인 효소 수치)를 확인합니다.</li>
<li>이것이 당면한 문제를 간접적으로 시사하는지 유의합니다.</li>
<li><em>예시: &quot;간 수치 상승과 같은 간접적인 증거가 있는 실험실 검사를 고려하십시오...&quot;</em></li>
</ul>
</li>
<li><strong>간결하게 요약 (Summarize Concisely)</strong><ul>
<li>가장 관련성이 높은 소견을 강조하는 짧고 명확한 개요를 작성합니다.</li>
<li>전문성을 유지하고 불필요한 추측을 배제합니다.</li>
</ul>
</li>
</ol>
<h3 id="3-통합-전문가-에이전트를-위한-프롬프트-가이드라인">3. 통합 전문가 에이전트를 위한 프롬프트 가이드라인</h3>
<p>통합 전문가 에이전트의 프롬프트 구성 요소는 다음과 같습니다.</p>
<ol>
<li><strong>에이전트 생성 요약에서 핵심 포인트 수집 (Gather Key Points from Agent-Generated Summaries)</strong><ul>
<li>임상 관찰, 실험실 소견 또는 영상 결과와 같이 각 요약에서 모든 관련 소견을 수집합니다.</li>
<li><em>예시: &quot;에이전트가 생성한 요약을 검토하여 행동 패턴을 포함한 알코올 사용과 관련된 세부 정보를 식별하십시오...&quot;</em></li>
</ul>
</li>
<li><strong>상충하는 정보 처리 (Handle Contradicted Information)</strong><ul>
<li>보고서 내용이 상충하는 경우, 자동 생성된 정보가 이미 확정된 증거를 덮어쓰지 않도록 합니다.</li>
<li><em>예시: &quot;LLM이 생성한 방사선 보고서가 임상 노트와 서로 상충하는 경우, 임상 노트를 무시하지 않도록 하십시오...&quot;</em></li>
</ul>
</li>
<li><strong>혼란 정보 제외 (Exclude Confounding Information)</strong><ul>
<li>목표와 관련 없는 대안적인 원인이 있는 세부 사항은 제외합니다.</li>
<li><em>예시: &quot;언급된 실험실 이상 수치에 대해 임상 요약을 검토하여 알코올 사용과 관련 없는 원인이 있는지 확인하십시오.&quot;</em></li>
</ul>
</li>
<li><strong>통합된 요약 생성 (Create a Unified Summary)</strong><ul>
<li>특정 예측 과업을 위해 멀티모달 데이터에서 얻은 에이전트 생성 보고서들을 통합하여 포괄적인 요약을 생성합니다.</li>
<li><em>예시: &quot;임상 요약과 실험실 결과 모두에서 관련 세부 정보를 통합하여 환자의 알코올 사용에 대한 종합적인 요약을 작성하십시오.&quot;</em></li>
</ul>
</li>
</ol>
<h2 id="published-sota">Published SOTA</h2>
<p>본 연구에서는 성능 비교를 위해 기존의 최신 기술(SOTA) 방식들을 다음과 같이 구현하고 검증했습니다.</p>
<ul>
<li><strong>ClinicalBERT 기반 모델</strong>: Gao 등의 설계를 따라 응급실(ED) 노트와 방사선 보고서를 입력값으로 사용하여 ClinicalBERT를 미세 조정했습니다.<ul>
<li><strong>토큰 할당</strong>: ClinicalBERT의 입력 길이 제한으로 인해, 정보 제공 가능성이 높은 노트를 우선순위에 두었습니다. ED 노트는 긴 순서대로, 방사선 보고서는 이른 시간 순서대로 정렬했습니다.</li>
<li><strong>상세 설정</strong>: 첫 300개 토큰은 ED 노트에, 나머지 토큰은 방사선 보고서에 할당했으며, 한 쪽에서 토큰이 남으면 다른 쪽에 재할당했습니다. 전체 한도를 초과하는 노트는 절단(Truncation) 처리되었습니다.</li>
</ul>
</li>
<li><strong>cTAKES 및 1D-CNN 모델</strong>: Afshar 등의 연구에 따라, 자연어 처리 엔진인 cTAKES를 사용하여 모든 환자 기록에서 질병, 증상, 해부학적 부위, 약물 및 처치와 같은 임상 개념을 추출했습니다.<ul>
<li><strong>예측 방식</strong>: 추출된 개념들은 임베딩 과정을 거쳐 알코올, 마약성 진통제(Opioid) 및 비마약성 약물 오남용에 대한 다중 과업 예측을 수행하는 1차원 합성곱 신경망(1D-CNN)으로 처리되었습니다.</li>
<li><strong>검증</strong>: 기존 연구의 학습된 모델을 추가 미세 조정 없이 본 연구의 테스트 세트에서 평가했으며, MoMA와 동일한 코호트(환자군)를 사용하여 모델을 재학습시키기도 했습니다.</li>
</ul>
</li>
</ul>
<h2 id="계산-자원-및-실행-시간">계산 자원 및 실행 시간</h2>
<p>모델의 학습과 추론에 소요된 하드웨어 및 시간적 비용은 다음과 같습니다.</p>
<ul>
<li><strong>하드웨어 사양</strong>: 모든 실험은 <strong>80GB 메모리를 갖춘 두 대의 A100 GPU</strong>에서 수행되었습니다.</li>
<li><strong>외상 중증도 분류 과업</strong>: 흉부 및 척추 외상 과업의 경우, 전문가 에이전트를 통한 요약 생성에 약 <strong>72시간</strong>이 소요되었으며, 나머지 프로세스는 <strong>4시간 이내</strong>에 완료되었습니다.</li>
<li><strong>알코올 오남용 선별 과업</strong>: 전문가 에이전트의 요약 생성에 약 <strong>48시간</strong>이 소요되었고, 나머지 과정은 <strong>3시간 이내</strong>에 마무리되었습니다.</li>
</ul>
<h1 id="results">Results</h1>
<h3 id="datasets-and-cohort-characteristics">Datasets and cohort characteristics</h3>
<p>본 연구진은 위스콘신 대학교 병원 및 클리닉(UW Health)에서 수집된 비공개 데이터 세트를 활용하여 세 가지 임상 예측 작업인 <strong>흉부 외상 중증도 층화</strong>, <strong>흉부 및 척추 외상 중증도 다중 작업(multitask) 층화</strong>, 그리고 <strong>비건강 음주 선별</strong>에 대해 MoMA 아키텍처를 검증했습니다. 이 작업들은 복잡성과 분류 구조 면에서 차이가 있습니다. 첫 번째는 흉부 외상에 대한 다중 클래스 분류를, 두 번째는 흉부와 척추 모두의 중증도를 공동으로 예측하는 다중 클래스 분류를, 세 번째는 비건강 음주에 대한 이진 분류를 다룹니다. 또한 작업별로 사용된 모달리티 조합도 다릅니다. 처음 두 작업은 자유 형식의 임상 노트와 흉부 X선 영상을 통합하며, 비건강 음주 선별 작업은 자유 형식 텍스트와 실험실 검사 수치를 결합합니다.</p>
<p>외상은 45세 미만 인구의 주요 사망 원인입니다. 흉부 외상은 가장 흔히 발생하는 외상 중 하나로, 외상 관련 사망의 거의 절반이 입원 후에 발생하며, 흉부 외상 중증도를 적시에 층화하는 것은 환자를 분류하고 합병증을 예측하는 데 도움이 될 수 있습니다. 흉부 외상 중증도 층화 작업에 사용된 코호트는 2015년 1월부터 2019년 12월 사이에 수집되었으며, 총 2,722명의 고유 환자 샘플로 구성되었습니다. 이 작업은 부상 중증도를 음성(negative), 경증/중등도(minor/moderate), 중증 이상(serious or greater)으로 분류하는 3개 클래스 분류를 포함했습니다.</p>
<p>UW Health의 공인 외상 등록 코더팀은 각 환자의 진료 사례에 대해 광범위한 수동 차트 추상화(manual chart abstraction)를 수행했습니다. 이 과정에서 미국 외상학회(ACS) 및 외상 질 향상 프로그램(TQIP) 표준을 준수하여 간이 외상 점수(AIS) 및 관련 외상 지표를 산출하고 검증했습니다. 각 환자 사례에는 전자 건강 기록(EHR)에서 추출된 텍스트 모달리티인 <strong>임상 노트</strong>와 비텍스트 모달리티인 <strong>흉부 X선 영상</strong>이 포함되어 있습니다.</p>
<p>흉부 외상 중증도 층화 작업과 동일한 코호트를 사용하여, 모델이 흉부와 척추의 부상 중증도를 동시에 예측하는 더 복잡한 <strong>다중 작업(multitask)</strong> 환경을 정의했습니다. 각 사례는 흉부 외상 중증도 층화 작업과 동일한 주석 프로토콜을 사용하여 라벨링되었으며, 흉부와 척추 각각에 대해 부상 중증도가 평가되었습니다. 각 샘플은 텍스트 모달리티인 임상 노트와 비텍스트 모달리티인 흉부 X선 영상을 포함합니다.</p>
<p>또한 본 연구진은 <strong>비건강 음주 선별</strong> 작업에서도 MoMA를 검증했습니다. 알코올 오남용은 세계보건기구(WHO)에 의해 질병 부담에 기여하는 5대 위험 요인 중 하나로 인식되고 있으며, 비건강 음주에 대한 적시 선별은 알코올 관련 피해 위험을 완화하는 데 도움이 될 수 있습니다. 전향적 연구에서 두 개의 연구팀이 배치되어 2021년 9월부터 2024년 2월 사이에 동의를 얻은 2,096명의 환자를 선별하고 등록했습니다. 이들은 미국 국립 약물 남용 연구소(NIDA)에서 권장하는 <strong>TAPS</strong>(담배, 알코올, 처방약 및 기타 물질) 선별 도구를 사용하여 지난 3개월 동안의 비건강 음주 여부를 평가받았습니다.</p>
<p>이 작업은 환자가 지난 3개월 동안 비건강 음주를 했는지 여부를 이진 분류의 라벨로 사용합니다. 훈련된 코디네이터로 구성된 응급실(ED) 모집 팀이 참여 의사가 있는 환자를 대상으로 적격성을 심사했습니다. 입원 시 중독 의학 연구팀이 적격 환자에게 접근하여 서면 동의를 구하고 TAPS 선별 도구를 시행했으며, 참여를 마친 환자에게는 기프트 카드가 제공되었습니다. 수동 선별 결과는 설문 데이터베이스에 수집되었으며, 해당 환자의 EHR 관련 진료 사례와 연결되었습니다. 여기에는 텍스트 모달리티인 임상 노트와 표 형식의 실험실 검사 수치가 비텍스트 모달리티로 포함됩니다.</p>
<p>본 연구진은 테스트 세트가 개발 세트와 독립적임을 보장하기 위해 세 가지 작업 모두에 대해 <strong>시간적 검증(temporal validation)</strong>을 수행했습니다. 흉부 외상 및 다중 작업 층화의 경우, 개발 세트는 2015년 1월부터 2018년 12월까지의 데이터를, 테스트 세트는 2019년 1월부터 2019년 12월까지의 데이터를 사용했습니다. 비건강 음주 선별의 경우, 개발 세트는 2021년 9월부터 2023년 8월까지의 데이터를, 테스트 세트는 2023년 9월부터 2024년 1월까지의 데이터를 사용했습니다. 두 코호트의 특성은 <strong>표 1(Table 1)</strong>에 정리되어 있습니다.</p>
<h1 id="overall-performance">Overall performance</h1>
<h3 id="비교-베이스라인-및-평가-지표">비교 베이스라인 및 평가 지표</h3>
<p>본 연구진은 흉부 외상 중증도 층화 작업과 다중 작업(흉부 및 척추) 외상 층화 작업을 위해, 기존에 발표된 베이스라인인 Gao 등의 방법론에 따라 자유 형식 텍스트로 미세 조정된 <strong>ClinicalBERT</strong>를 사용했습니다. 비건강 음주 선별 작업의 경우, 의학 개념(CUI; Concept Unique Identifier)으로 매핑된 임상 텍스트를 처리하는 Afshar 등의 <strong>1차원 합성곱 신경망(1D-CNN)</strong> 모델과 비교했습니다. 이러한 베이스라인들은 해당 세 가지 작업에 대한 최신(SOTA) 접근 방식을 나타냅니다.</p>
<p>또한, 의료 분야에서 널리 사용되는 대표적인 다중 모달 LLM 베이스라인인 <strong>LLaVA-Med</strong>와도 성능을 비교했습니다. LLaVA-Med는 표 형식(tabular)의 데이터를 지원하지 않으므로, 음주 선별 작업에서는 표 형식의 EHR 데이터를 일반 텍스트로 변환하여 미세 조정했습니다. 이 외에도 두 가지 벡터 기반 다중 모달 융합 방법인 <strong>교차 주의(Cross-attention)</strong> 모듈 방식과 <strong>전문가 혼합(MoE)</strong> 메커니즘 방식을 추가로 평가했습니다.</p>
<h3 id="주요-실험-결과">주요 실험 결과</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/36ada588-4a9e-4def-ad0f-da678b03f97f/image.png" alt=""></p>
<h3 id="외상-중증도-층화-작업">외상 중증도 층화 작업</h3>
<p>흉부 및 다중 작업 외상 층화 작업 모두에서 MoMA는 미세 조정된 LLaVA-Med를 포함한 <strong>모든 베이스라인보다 우수한 성능을 보였습니다</strong>. 특히 교차 주의 및 MoE 베이스라인보다 월등한 성능을 기록했습니다.</p>
<ul>
<li><strong>흉부 외상</strong>: 단일 작업 및 다중 작업 환경 모두에서 <strong>Macro-F1 0.85 근처, Micro-F1 0.90 이상</strong>의 점수를 달성했습니다.</li>
<li><strong>척추 외상 (다중 작업)</strong>: <strong>Macro-F1 0.75 이상, Micro-F1 0.90에 근접</strong>한 점수를 기록했습니다.</li>
<li><strong>모달리티 포화</strong>: 연구진은 외상 작업에 세 번째 모달리티(검사 결과)를 추가해 보았으나, 이미 두 가지 모달리티만으로도 성능이 포화 상태에 이르러 추가적인 이득은 없음을 발견했습니다.</li>
</ul>
<h3 id="2-비건강-음주-선별-작업">2. 비건강 음주 선별 작업</h3>
<p>이 작업의 기존 베이스라인(1D-CNN)은 54,915건이라는 훨씬 큰 데이터 세트로 학습되었기 때문에 LLaVA-Med나 MoE 방식보다 우수한 성능을 보였습니다. 그러나 MoMA와 동일한 소규모 코호트로 1D-CNN을 재학습시킨 결과, 성능이 크게 저하되었습니다 (AUROC 0.641, AUPR 0.325).</p>
<ul>
<li><strong>MoMA의 성과</strong>: 동일한 소규모 코호트 조건에서 MoMA는 <strong>AUROC 약 0.75, AUPR 약 0.50</strong>에 달하는 강력한 결과를 도출하며 베이스라인들을 능가했습니다.</li>
</ul>
<p><strong>결론적으로</strong>, MoMA는 대규모 데이터가 부족한 환경에서도 비텍스트 데이터를 자연어 공간으로 번역함으로써 기존의 벡터 기반 융합 방식보다 훨씬 유연하고 정확한 예측이 가능함을 입증했습니다.</p>
<h2 id="상세-실험-결과">상세 실험 결과</h2>
<h3 id="소집단-분석-subgroup-analysis">소집단 분석 (Subgroup analysis)</h3>
<p>임상 예측 모델에서 소집단 분석은 다양한 환자 군 전반에 걸쳐 일관된 성능을 보장하는 데 필수적입니다. 인종 및 성별과 같은 하위 그룹별 모델 성능을 평가함으로써, 연구진은 특정 집단에 영향을 미칠 수 있는 성능 변동을 식별할 수 있습니다.</p>
<ul>
<li><strong>분석 결과</strong>: MoMA 아키텍처는 분석된 모든 하위 그룹에서 일관되게 가장 우수한 성능을 달성했습니다.</li>
<li><strong>통계적 검증</strong>: 여성 대 남성, 비백인 대 백인 집단 간의 성능을 비교하기 위해 대응 표본 t-검정(paired t-tests)을 실시한 결과, MoMA는 하위 그룹 간에 일관된 성능을 보여주었습니다.</li>
<li><strong>베이스라인과의 차이</strong>: 반면, 베이스라인 방법들은 흉부 외상 중증도 층화 및 다중 작업(흉부 및 척추) 외상 층화 작업에서 하위 그룹 간에 눈에 띄는 성능 차이를 나타냈습니다.</li>
<li><strong>참고 사항</strong>: 비건강 음주 선별 코호트의 경우, 비백인 사례 수가 적어 변동성이 높았기 때문에 백인 대 비백인 그룹 간의 비교는 분석에서 제외되었습니다.</li>
</ul>
<hr>
<h3 id="제거-연구-ablation-study">제거 연구 (Ablation study)</h3>
<p>비텍스트 모달리티가 성능 향상에 기여하는 바를 검증하기 위해, MoMA의 다른 구성 요소는 유지한 채 비텍스트 입력만을 제거하는 연구를 수행했습니다. 구체적으로 흉부 외상 작업에서는 흉부 X선 영상을, 음주 선별 작업에서는 실험실 검사 수치를 제외했습니다.</p>
<ul>
<li><strong>결과</strong>: 다중 모달 입력을 사용하는 MoMA는 텍스트만 사용하는 모델보다 우수한 성능을 보였습니다.</li>
<li><strong>결론</strong>: 이러한 결과는 MoMA의 향상된 성능이 단순히 LLM의 뛰어난 텍스트 이해 능력뿐만 아니라, <strong>비텍스트 모달리티를 효과적으로 통합하고 활용하는 아키텍처의 능력</strong> 덕분임을 입증합니다.</li>
</ul>
<hr>
<h3 id="사례-연구-case-study">사례 연구 (Case study)</h3>
<p>사례 연구는 MoMA 아키텍처가 비텍스트 정보를 어떻게 효과적으로 통합하고 모든 가용 데이터를 하나의 요약본으로 합성하는지를 보여줍니다.</p>
<ul>
<li><strong>영상 정보 통합 사례</strong>: 흉부 X선 전용 에이전트가 영상 이미지를 분석하여 심각한 상태를 식별하거나 배제합니다. 한 사례에서 에이전트는 심각한 소견이 없음을 확인하여 부상을 &#39;중등도(moderate)&#39;로 정확하게 분류할 수 있게 했습니다. 반면, <strong>텍스트 전용 접근 방식은 이 사례를 &#39;심각(severe)&#39;으로 잘못 분류</strong>했는데, 이는 중요한 방사선 정보를 활용하지 못하는 한계를 보여줍니다.</li>
<li><strong>데이터 정제 및 해석력</strong>: 전용 에이전트와 통합 에이전트는 수천 단어에 달하는 방대한 임상 텍스트와 수십 개의 검사 수치를 핵심 정보는 유지하면서 무관한 세부 사항은 필터링한 간결한 요약본으로 증류해냅니다. 이를 통해 예측 에이전트가 정확한 분류를 할 수 있도록 돕는 동시에, MoMA의 의사 결정 과정에 대한 <strong>투명성과 해석 가능성</strong>을 높였습니다.</li>
<li><strong>통합 메커니즘</strong>: 통합 에이전트는 임상 노트를 기본 정보원으로 사용하며, 영상 소견이 텍스트를 명확하게 하거나 보강할 때만(예: &quot;통합 에이전트와 영상 전용 에이전트 모두 기흉 없음 보고&quot;) 선택적으로 반영합니다. 텍스트 정보가 이미 명확하고 결정적인 증거를 제공하는 경우 영상 증거의 비중은 낮게 조정됩니다.</li>
</ul>
<h1 id="고찰-discussion">고찰 (Discussion)</h1>
<h3 id="1-moma-아키텍처의-설계와-의의">1. MoMA 아키텍처의 설계와 의의</h3>
<p>본 연구에서는 다중 모달 의료 데이터를 활용한 임상 예측 작업을 위해 사전 학습된 대규모 언어 모델(LLM)의 위력을 활용하도록 설계된 유연한 아키텍처인 <strong>MoMA(Mixture-of-Multimodal-Agents)</strong>를 소개했습니다. MoMA는 최신 LLM이 특정 데이터 유형을 처리하는 전용 에이전트 역할을 수행할 수 있도록 하는 모듈식 &#39;플러그 앤 플레이(plug-and-play)&#39; 설계를 채택하고 있으며, 이는 작업 요구 사항에 따라 쉽게 교체하거나 확장할 수 있습니다.</p>
<p>본 아키텍처는 서로 다른 EHR 모달리티 조합(방사선 영상 + 임상 텍스트, 실험실 검사 수치 + 임상 텍스트)과 다양한 예측 유형(다중 클래스, 다중 작업, 이진 분류)을 포함하는 세 가지 임상 작업에서 검증되었습니다. 특히 모든 작업에 <strong>비공개 데이터 세트</strong>를 활용함으로써, 공개 데이터가 모델의 사전 학습 단계에 포함되었을 가능성으로 인한 데이터 누출(data leakage) 위험을 배제했습니다. MoMA는 이러한 작업 전반에서 베이스라인 모델보다 우수한 성능을 달성하며, 광범위한 임상 예측 작업을 처리하기 위한 매우 효과적이고 유연한 솔루션으로서의 잠재력을 입증했습니다.</p>
<h3 id="2-데이터-통합-및-정제-메커니즘">2. 데이터 통합 및 정제 메커니즘</h3>
<p>MoMA의 근본적인 원리는 임상 위험 예측이 다중 모달 EHR의 총체적인 합성으로부터 이득을 얻는다는 점에 있습니다.</p>
<ul>
<li><strong>정보의 보완과 노이즈 제거</strong>: 전용 에이전트는 원시 데이터(픽셀 등)에서 직접 작동하여 표현 능력을 극대화하는 대신, 원본 임상 노트와 협력적으로 융합될 수 있는 <strong>보완적이고 노이즈가 제거된(denoised) 텍스트 인상</strong>을 생성합니다.</li>
<li><strong>정보 손실과 이득의 균형</strong>: 이러한 변환 과정에서 일부 정보 손실이 발생할 수 있으나, 실험 결과 노이즈 제거와 정보 보완을 통해 얻는 이득이 정보 손실로 인한 비용보다 크다는 것을 확인했습니다.</li>
<li><strong>자문 역할의 통합</strong>: 통합 에이전트는 전용 에이전트의 출력을 <strong>자문(consultant) 역할</strong>로 활용하며, 전용 에이전트의 요약이 임상 노트를 명확히 할 때만 선택적으로 정보를 수집하고 요약본이 전체 내용을 지배하지 않도록 조절합니다.</li>
</ul>
<h3 id="3-연구의-차별점-및-해석-가능성">3. 연구의 차별점 및 해석 가능성</h3>
<p>현재 멀티 에이전트 아키텍처에 대한 연구는 주로 생성(generative) 작업에서의 텍스트 이해 능력 향상에 중점을 두어 왔습니다. 그러나 이러한 아키텍처가 다중 모달 EHR 데이터를 포함하는 분류 작업에서 예측 성능을 효과적으로 개선할 수 있는지에 대해서는 아직 입증된 바가 거의 없었습니다. 본 연구는 LLM의 텍스트 이해 능력을 활용하여 다양한 모달리티에 걸친 임상 분류 작업에서 뛰어난 성능을 달성함으로써 이러한 격차를 직접적으로 해결합니다.</p>
<p>또한, MoMA는 성능뿐만 아니라 <strong>투명성과 해석 가능성</strong> 측면에서도 효과적인 솔루션을 제공합니다. 전용 에이전트가 핵심 정보를 추출하고 통합 에이전트가 이를 간결하게 정제하는 순차적 접근 방식은 의사 결정 과정의 투명성을 높입니다. 예측의 근거를 이해하는 것이 정확도만큼이나 중요한 임상 환경에서 MoMA는 성능과 해석 가능성을 동시에 잡은 모델입니다.</p>
<h3 id="4-유연성-및-확장성">4. 유연성 및 확장성</h3>
<p>MoMA는 대규모의 쌍을 이루는 사전 학습 데이터(paired pretraining data)를 요구하는 일반적인 통합 방법론과 달리, 기존의 사전 학습된 모델을 활용하여 비텍스트 모달리티를 텍스트 공간으로 <strong>&#39;투영(projecting)&#39;</strong>할 수 있는 유연성을 제공합니다. 이러한 독립성 덕분에 사전 학습 시 특정 데이터 세트의 가용성에 구애받지 않고 다양한 임상 작업에 더 잘 일반화될 수 있습니다.</p>
<p>나아가 MoMA의 모듈식 설계는 향후 더 발전된 모델의 원활한 통합을 가능하게 합니다.</p>
<ul>
<li><strong>새로운 모달리티 확장</strong>: 방사선 영상이나 검사 수치 외에도, 적절한 전용 에이전트를 선택함으로써 다양한 비텍스트 모달리티를 쉽게 통합할 수 있습니다.</li>
<li><strong>에이전트 예시</strong>: 예를 들어 3D CT 스캔을 위한 <strong>BrainGPT</strong>, 병리 영상을 위한 <strong>HistoGPT</strong>, 단일 세포 시퀀싱 데이터를 위한 <strong>scChat</strong> 등을 MoMA 워크플로우에 쉽게 포함할 수 있습니다.</li>
</ul>
<h3 id="5-실험-결과의-함의">5. 실험 결과의 함의</h3>
<p>실험 과정에서 연구진은 외상 중증도 층화 작업에 세 번째 모달리티인 실험실 검사 수치를 추가하는 것이 성능을 더 이상 향상시키지 않는다는 점을 발견했습니다. 이는 부상 정도(AIS 점수)가 주로 임상 노트와 영상에 기록된 해부학적 부상에 의해 결정되는 반면, 일상적인 실험실 수치(전해질 등)는 이와 약하게 연결되어 있기 때문입니다. 반대로 <strong>비건강 음주 선별</strong> 작업에서는 혈중 알코올 농도와 같은 실험실 수치가 직접적으로 관련이 있어 성능 개선에 기여했습니다.</p>
<p>이러한 결과는 MoMA가 작업별 정렬을 반영하고 있음을 보여줍니다. 즉, 프레임워크가 임상 결과에 유익한 모달리티를 활용하고 관련성이 낮은 신호의 비중은 낮추는 능력을 갖추고 있음을 의미합니다.</p>
<h3 id="6-학습-효율성-및-환각hallucination-관리">6. 학습 효율성 및 환각(Hallucination) 관리</h3>
<p>MoMA의 또 다른 핵심 장점은 비텍스트 모달리티 번역을 위해 별도의 학습 과정이 필요하지 않다는 것입니다. 오직 <strong>예측 에이전트만 미세 조정(fine-tuning)</strong>하면 되므로, 대규모 다중 모달 모델 학습에 수반되는 컴퓨팅 부담과 데이터 요구 사항을 크게 줄여줍니다.</p>
<p>또한, LLM의 고질적인 문제인 <strong>&#39;환각&#39;</strong> 이슈를 해결하기 위해 MoMA는 생성된 요약본을 인간의 해석에만 의존하게 두지 않습니다. 대신 이 요약본을 하위 예측을 위한 중간 표현으로 사용하며, 실제 임상 라벨(Ground truth)을 사용하여 예측 에이전트를 미세 조정함으로써 모델 예측과 실제 결과 사이의 정렬을 유도하고 환각의 부정적 영향을 완화합니다.</p>
<h3 id="7-한계점-및-결론">7. 한계점 및 결론</h3>
<p>몇 가지 한계점은 향후 탐구가 필요합니다:</p>
<ul>
<li><strong>에이전트 간 상호작용</strong>: 현재 에이전트 간 소통 방식은 단순하며, 이를 더 고도화하면 모델의 능력을 향상시킬 수 있습니다.</li>
<li><strong>추론 비용</strong>: 다중 모달 재학습 비용은 줄였으나, 추론 시 여러 에이전트를 실행해야 하므로 컴퓨팅 비용이 발생합니다.</li>
<li><strong>범위 확장</strong>: 본 연구는 임상 분류에 집중했으나, 향후 의료 시각 질의응답(Medical VQA) 등으로 확장하기 위한 검증이 필요합니다.</li>
</ul>
<p>요약하자면, <strong>MoMA는 다중 모달 의료 데이터를 임상 예측 작업에 활용하는 데 있어 비약적인 발전</strong>을 나타냅니다. 실제 응용 환경에서 기존 모델을 압도하는 성능을 보여주는 동시에, 해석 가능성과 입력 형식에 대한 유연성을 제공하여 임상 의사 결정을 개선할 수 있는 매우 유망한 도구임을 입증했습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] MOSCARD]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MOSCARD</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MOSCARD</guid>
            <pubDate>Mon, 27 Apr 2026 04:29:41 GMT</pubDate>
            <description><![CDATA[<ul>
<li>논문 제목: MOSCARD - Multimodal Opportunistic Screening for Cardiovascular Adverse events with Causal Reasoning and De-confounding</li>
<li>링크: <a href="https://papers.miccai.org/miccai-2025/0582-Paper3125.html">https://papers.miccai.org/miccai-2025/0582-Paper3125.html</a></li>
<li>저널: MICCAI 2025</li>
</ul>
<h1 id="0-background">0. Background</h1>
<h3 id="데이터-편향-data-bias">데이터 편향 (Data Bias)</h3>
<ol>
<li><strong>선택 편향 (Selection Bias)</strong>: 연구 대상자를 선정하거나 제외하는 <strong>기준이 결과에 영향을 미쳐</strong>, 비교하려는 집단 간의 특성이 이미 차이가 나버리는 상태<ul>
<li>예시:  병원에 입원한 환자들만을 대상으로 &#39;고혈압&#39;과 &#39;당뇨&#39;의 상관관계를 조사한다면, 일반인보다 고혈압과 당뇨를 동시에 가지고 있을 확률이 훨씬 높아, 두 질환의 상관관계가 실제보다 높게 측정되는 문제가 발생함.</li>
</ul>
</li>
<li><strong>샘플링 편향 (Sampling Bias)</strong>: 모집단(전체 대상) 중에서 표본을 추출할 때, <strong>특정 성향을 가진 표본이 다른 표본보다 더 많이 혹은 더 적게 뽑히는 것</strong><ul>
<li>예시: 특정 검사 기록이 있는 환자만 추출한다면, 해당 검사가 필요할 정도로 증상이 있었던 환자들로만 표본이 한정되는 문제가 발생함.</li>
</ul>
</li>
</ol>
<ul>
<li><strong>발생하는 문제점: Shortcut Learning</strong><ul>
<li>딥러닝 모델이 데이터에 내재된 <strong>본질적인 특징</strong>을 배우는 대신, 정답을 맞히기 위해 쉽고 단순한 <strong>가짜 상관관계(Spurious Correlation)</strong>&#39;를 학습하는 현상임.</li>
<li>모델 입장에서는 복잡한 패턴을 분석하는 것보다, 데이터에 섞여 들어온 단순한 부가 정보를 활용하는 것이 손실 함수를 줄이는 효율적인 지름길이기 때문에 발생함.</li>
<li>예시: 기흉 환자의 CXR 데이터에는 치료를 위해 흉관을 삽입한 사진이 많을 수 있으므로, 모델은 폐의 상태를 보는 게 아니라 &quot;흉관이 보이면 기흉이다&quot;라고 학습하게 됨.</li>
</ul>
</li>
<li><strong>모델링 관점에서의 해결 방법: 적대적 탈편향(Adversarial debiasing)</strong><ul>
<li>모델이 예측을 수행할 때, 원치 않는 <strong>편향된 정보(보호 변수, 예: 인종, 성별 등)를 사용하지 못하도록 강제</strong>하는 학습 기법으로 GAN 구조를 차용하여 두 개의 네트워크가 서로 경쟁하며 학습</li>
<li><strong>예측기 (Predictor):</strong> 데이터를 입력 받아, 원래 목표 label을 예측<ul>
<li><strong>예측기의 목표:
Task 1:</strong> 원래 정답을 잘 맞힌다.</li>
<li><em>Task 2:*</em> 적대자가 보호 변수를 맞히지 못하도록 <strong>방해</strong>한다.</li>
</ul>
</li>
<li><strong>적대자 (Adversary):</strong> 예측기의 출력 값으로 성별, 인종 등과 같은 <strong>보호 변수를 역으로 추론</strong><ul>
<li><strong>적대자의 목표:</strong> 예측기의 출력에서 보호 변수를 최대한 잘 맞히는 것입니다. 즉, 편향의 흔적을 찾아내는 &#39;탐정&#39; 역할을 합니다.</li>
</ul>
</li>
<li>적대자가 잘 맞히는 방향의 반대 방향으로 예측기를 업데이트하여, 예측기는 <strong>&quot;보호 변수와 상관관계가 없는 독립적인 특징(Bias-invariant features)&quot;</strong>만을 학습함</li>
<li>한계: 단일 교란 요인(confounder)만을 대상으로 하기 때문에 그 복잡성으로 인해 효과가 제한적이며, 연령 및 동반 질환과 같은 상호 의존적인 요인들을 모델링하는 데 실패함!</li>
</ul>
</li>
</ul>
<h3 id="교란-요인-confounder"><strong>교란 요인 (Confounder)</strong></h3>
<p>입력 데이터($X$)와 예측 목표($Y$) 모두에 영향을 주어, 둘 사이의 <strong>진정한 인과관계를 왜곡하거나 가짜 상관관계를 만들어내는 제3의 변수($C$)</strong></p>
<ul>
<li>예시: 나이($C$)가 많을수록 심장 상태($X$)가 나쁠 확률이 높으면서, 실제로 심혈관 사건($Y$)이 발생할 확률도 높음.</li>
<li><strong>왜 문제인가? 상관관계(Correlation)이지 인과관계(Causality)가 아님</strong><ul>
<li>모델은 CXR 데이터($X$)에서 심장 비대나 폐 부종 같은 <strong>생물학적 징후</strong>를 찾아야 함. 하지만 나이($C$)라는 교란 요인이 끼어들면, 모델은 CXR에 있는 노화의 흔적만 보고 결과를 예측함.</li>
</ul>
</li>
</ul>
<h1 id="1-introduction">1. Introduction</h1>
<h3 id="목적">목적</h3>
<p>기회적 선별검사(Opportunistic screening)를 통해 주요 심혈관 사건(MACE) 위험이 있는 환자 예측</p>
<ul>
<li><strong>기회적 선별검사(Opportunistic screening):</strong> 환자가 다른 건강상의 이유로 병원을 방문했을 때, 의료진이 기회를 포착하여 환자가 인지하지 못했거나 요청하지 않은 추가적인 질병 선별 검사를 시행하는 것 (본 연구: 건강 검진 목적의 CXR과 ECG 검사)</li>
<li><strong>주요 심혈관 사건(Major Adverse Cardiovascular Events, MACE):</strong> 심혈관계 질환 관련 임상 연구에서 약물의 효과나 수술의 안전성을 평가할 때 사용하는 평가지표(Composite Endpoint)<ul>
<li><strong>3-point MACE</strong></li>
</ul>
<ol>
<li><strong>심혈관 사망</strong>: 심부전, 부정맥, 심근경색 등 심혈관 질환이 직접적인 원인이 되어 사망한 경우</li>
<li><strong>비치명적 심근경색:</strong> 심장 근육의 괴사가 일어났으나 사망에 이르지는 않은 경우</li>
<li><strong>비치명적 뇌졸중</strong>: 뇌혈관 문제로 뇌 손상이 발생했으나 사망에 이르지는 않은 경우</li>
</ol>
</li>
</ul>
<h3 id="기존-연구의-한계">기존 연구의 한계</h3>
<ul>
<li><strong>멀티 모달리티의 한계</strong><ul>
<li>이질적인 고차원 데이터를 결합하는 것은 데이터의 복잡성, 노이즈, 의미론적 상호운용성, 편향 및 윤리적 딜레마로 인해 헬스케어 AI 분야에서 해결 해야 할 과제임.</li>
<li>MedClip과 같은 시각-언어 모델은 모달리티의 제약(주로 텍스트와 이미지)과 내재된 편향으로 인해 의료 영역에서 여전히 제한적임.</li>
</ul>
</li>
<li><strong>선택적 코호트의 일반화 성능 감소</strong>: 선택적 샘플링에 기반한 인구 집단 편향으로 인해 다양한 인구 집단에서 성능 저하를 보이는 경우가 많음. 이러한 편향은 훈련 데이터에 충분한 다양성이 부족할 때 발생하며, 이는 지름길 학습(shortcut learning)과 소수 집단(underrepresented groups) 간의 지속적인 부정확성을 초래함.</li>
</ul>
<h3 id="개선-방안">개선 방안</h3>
<ul>
<li><strong>멀티 모달리티 통합:</strong> 동일한 방문 시 획득한 <strong>CXR과 12-Lead ECG를 통합</strong>하는 것은 환자의 심장 건강에 대한 보다 포괄적인 관점을 나타낼 수 있음. 기회적 선별검사의 경우, 이러한 조합이 심장 초음파, CT, MRI와 같은 더 정교한 영상 장비에 비해 자원 효율적임.<ul>
<li><strong>Chest X-Ray(CXR)</strong>: 심장 질환에 기여하는 만성 질환의 징후를 감지하는 데 유용함.</li>
<li><strong>12-Lead ECG</strong>: 심장의 전기적 활동을 직접 평가하여 부정맥, 허혈성 변화 및 구조적 이상을 감지함.</li>
</ul>
</li>
<li><strong>데이터셋의 편향 및 교란 요인 제거</strong><ul>
<li>혼동 손실(confusion loss)을 통해 CXR 및 ECG 데이터 특징화에서 교란 요인 효과(선택 편향)를 제거.</li>
<li>동반 질환과 목표 MACE 위험 사이의 인과 관계(예: 비만 → 인슐린 저항성 → 이상지질혈증 → 동맥경화증 → 심혈관 질환 위험)를 모델링하기 위해 인과 추론을 적용.</li>
</ul>
</li>
</ul>
<h1 id="2-methods"><strong>2. Methods</strong></h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/77ef6d31-dad5-49be-b919-f9c8ff4747ad/image.png" alt="Overall Architecture"></p>
<ul>
<li><strong>제안하는 방법론</strong>: 2-stage 멀티모달 프레임워크 MOSCARD를 제안함.<ul>
<li><strong>1단계(그림 a)</strong>: 교란 요인(confounder) 효과를 제거하기 위해 <strong>혼동 손실(confusion loss)</strong>을 사용하여 단일 모달리티 인코더를 훈련함</li>
<li><strong>2단계(그림 b)</strong>: <strong>Co-attention</strong>을 활용한 멀티모달 학습을 적용함.</li>
</ul>
</li>
<li>2단계에서 인과 관계를 모델링하기 위해, 이미지($X$), 대상 레이블($Y$), 인과 인자($A$), 그리고 교란 요인($C$)을 나타내는 <strong>구조적 인과 모델(SCM)</strong>과 그 매개변수화인 <strong>유향 비순환 그래프(DAG)</strong>를 적용했습니다.</li>
<li>멀티모달 모델은 <strong>세 가지 예측 브랜치</strong>로 구성됨.<ul>
<li><strong>메인 브랜치</strong>: MACE($Y$) 예측 용도</li>
<li><strong>각 모달리티의 판별 브랜치</strong>: ViT 인코더의 초기 레이어 피처를 사용하여 인과 인자($Y_{ca}$)와 교란 요인 레이블($Y_{conf}$)을 예측합니다.</li>
</ul>
</li>
</ul>
<h2 id="stage-1-single-modality-encoder">Stage 1: <strong>Single Modality Encoder</strong></h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/61d3744a-adae-468f-9d11-9bd26a77aad0/image.png" alt="Single Modality"></p>
<ul>
<li><p>CXR 및 ECG 영상($X_{CXR}$ 및 $X_{ECG}$)을 처리하기 위한 별개의 <strong>12개 레이어 ViT 인코더</strong>를 통해 탈교란(de-confounding)을 설계함.</p>
</li>
<li><p>인과 관계 $X \rightarrow Y$는 우리가 원하는 효과를 나타내지만, 백도어 경로(backdoor path) $X \leftarrow C \rightarrow Y$는 가짜 상관관계(spurious correlations)를 도입하고 예측에 영향을 미치는 교란 요인 $C$의 영향을 강조합니다 (그림  a). 이러한 편향을 완화하기 위해, 우리는 <strong>두 개의 별도 역전파(backpropagation)</strong> 그래프를 사용하여 잘못된 연결인 $C \rightarrow X$ 및 $C \rightarrow Y$를 제거함으로써 각 인코더에서 교란 영향을 개별적으로 제거합니다.</p>
</li>
<li><p><strong>손실 함수 1</strong>: 메인 MACE 예측 작업에 집중</p>
<p>  $$
  Loss_{Main} = L_{CE}(y, \hat{y})
  $$</p>
</li>
<li><p><strong>손실 함수 2</strong>:  성별 및 연령 예측을 처리하는 교란 요인 작업에 할당되며, 교차 엔트로피를 사용</p>
<ul>
<li><p>교란 요인의 영향을 더욱 완화하기 위해, 교란 요인 예측이 균등 분포(uniform distribution)에 근사하도록 유도하는 <strong>혼동 손실(confusion loss)</strong> $\alpha L_{Conf}(\hat{y}_c)$를 통합합니다. 교란 요인을 효과적으로 완화하기 위해, 우리는 주로 저수준(low-level) 패턴을 포착하고 성별 및 연령과 같은 요인과 관련된 강한 교란 신호를 자연스럽게 인코딩하는 ViT의 초기 레이어 피처를 활용합니다.</p>
<p>$$
Loss_{Conf} = L_{CE}(y_c, \hat{y}<em>c) + \alpha L</em>{Conf}(\hat{y}_c)
$$</p>
<p>$$
\alpha L_{Conf}(\hat{y}<em>c) = \alpha \cdot \frac{1}{N}\sum</em>{i,c} u_{i,c},\log p_{i,c}, \quad \alpha = -10,\ u_{i,c}\sim\mathcal{U}(0,1)
$$</p>
</li>
</ul>
</li>
</ul>
<h2 id="stage-2-multimodal-co-attention-alignment"><strong>Stage 2: Multimodal Co-attention alignment</strong></h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/567e6af5-ed40-4a64-b969-55ad7c2b5176/image.png" alt="Multimodal"></p>
<ul>
<li>stage 1에서 얻은 사전 훈련된 인코더 가중치를 고정(freeze)하여 활용함.</li>
</ul>
<h3 id="co-attention">Co-Attention</h3>
<ul>
<li><p>CXR의 주요 정보를 보존하고, ECG를 가이드 모달리티(guiding modality)로 사용하기 위함.</p>
<ul>
<li><p><strong>Key &amp; Value</strong>: CXR 피처($CXR$)</p>
</li>
<li><p><strong>Query</strong>: ECG 피처($E$)</p>
<p>$$
CoAttn_{E \rightarrow CXR}(E, C) = \text{softmax} \left( \frac{Q_{CXR} K_k^T}{\sqrt{d_k}} \right) V_E
$$</p>
</li>
</ul>
</li>
<li><p>Attention score: 투영된 쿼리($Q = W_q^E E$)와 키($K = W_k^{CXR} CXR$) 사이의 유사도를 계산하여 얻어지며, 수치적 안정성을 위해 $\sqrt{d_k}$로 스케일링됩니다. 소프트맥스 연산이 적용되어 Co-attnetion 행렬($A_{coattn} \in \mathbb{R}^{N \times M}$)이 생성되며, 이는 CXR의 서로 다른 영역에 중요도 가중치를 할당합니다. 이 어텐션 가중치들은 CXR 특징의 가중 합을 계산하는 데 사용되어, 이를 다음과 같이 정제된 $C\hat{X}R$로 변환합니다.</p>
</li>
<li><p>학습되는 가중치: $W_q^E, W_k^{CXR}, W_v^{CXR} \in \mathbb{R}^{d_k \times d_k}$</p>
</li>
<li><p>Value:  $V = W_v^{CXR} CXR$ (CXR 특징으로부터 유도됨)</p>
</li>
<li><p>이를 통해 모델이 ECG 특징을 Condition으로 활용하여 가장 정보가 많은 영역에 선택적으로 집중할 수 있게 함.</p>
</li>
</ul>
<p>$$
\text{softmax} \left( \frac{W_q^E E CXR^T W_k^{CXR}}{\sqrt{d_k}} \right) W_v^{CXR} CXR \rightarrow A_{coattn} W_v^{CXR} CXR \rightarrow C\hat{X}R
$$</p>
<h3 id="classification">Classification</h3>
<ul>
<li>Co-Attention 메커니즘 이후, CXR과 ECG 특징은 두 개의 트랜스포머와 다층 퍼셉트론(MLP) 브랜치를 거쳐 분류 작업을 수행함.</li>
<li>모델은 다섯 개의 브랜치로 구성되어 두 가지 작업을 수행함.<ul>
<li><strong>인과 작업(causal task)</strong>: 분류 레이블 $Y_{ca}$를 예측</li>
<li><strong>메인 작업(main task)</strong>: 분류 레이블 $Y$를 예측</li>
<li>그림 b에 표시된 바와 같이, $X \leftarrow A \rightarrow Y$의 관계는 인과 인자 $A$가 $X$와 $Y$ 모두에 영향을 미침</li>
</ul>
</li>
</ul>
<h3 id="loss-function">Loss function</h3>
<ul>
<li><strong>목적</strong>: 모델이 $A$의 정보를 활용하여 MACE 예측에 대한 일반화 성능을 향상시키는 것</li>
<li><strong>Causal learning</strong>: 모달리티별 고유의 정보와 향상된 분류 성능을 위한 결합된 표현의 이질성을 보존하기 위해, 인과 학습(Causal learning)은 CXR과 ECG 특징 각각에 별도로 적용됩니다.</li>
<li>다섯 개 브랜치 분류 작업의 전체 손실 함수<ul>
<li>CXR에 대한 인과 및 메인 손실: $\mathcal{L}<em>{causal}^{CXR}$ &amp; $\mathcal{L}</em>{main}^{CXR}$</li>
<li>ECG에 대한 인과 및 메인 손실: $\mathcal{L}<em>{causal}^{ECG}$ &amp; $\mathcal{L}</em>{main}^{ECG}$</li>
<li>결합된(concat) ECG와 CXR에 대한 통합 손실: $<em>\mathcal{L}_{main}^{concat}</em>$</li>
</ul>
</li>
</ul>
<p>$$
\mathcal{L}<em>{Total} = \mathcal{L}</em>{causal}^{CXR} + \mathcal{L}<em>{main}^{CXR} + \mathcal{L}</em>{causal}^{ECG} + \mathcal{L}<em>{main}^{ECG} + \mathcal{L}</em>{main}^{concat}
$$</p>
<h1 id="3-results"><strong>3. Results</strong></h1>
<h2 id="dataset">Dataset</h2>
<h3 id="internal-cohort"><strong>Internal cohort</strong></h3>
<ul>
<li>미국 내 서로 다른 4개 기관에서 21,872명의 환자에 대한 후향적 데이터 수집</li>
<li><strong>Inclusion</strong><ul>
<li>CXR을 수행하고 $\pm$ 6개월 이내에 일치하는 12-Lead ECG 검사를 받은 환자</li>
</ul>
</li>
<li><strong>Exclusion</strong><ul>
<li>6개월 이내에 추적 관찰이 중단된 환자 제외</li>
</ul>
</li>
<li><strong>최종 환자 수</strong>: <strong>12,612명</strong><ul>
<li>Train/Valid 분할: 8:2 랜덤 샘플링 (<strong>Train: 79,648개, Valid: 21,108개</strong>의 ECG-CXR 쌍)</li>
<li>MACE 결과는 수동 차트 리뷰를 통해 편집</li>
<li>고위험 심장 질환 환자들로 구성되어 있으며, 6개월 및 1년 이내 MACE 발생률은 각각 51.77%와 55.91%로 높게 나타남.</li>
</ul>
</li>
</ul>
<h3 id="shift-cohort---emergency-department-ed"><strong>Shift cohort - Emergency Department (ED)</strong></h3>
<ul>
<li>시프트 데이터에 대한 모델의 일반화 능력을 평가하기 위해, 응급실에서 CXR을 수행한 환자들로부터 테스트 데이터를 수집함.</li>
<li>환자 수 : 2,638명</li>
<li>데이터 건수: ECG-CXR 쌍 2,830개</li>
<li>Internal cohort와 비교<ul>
<li>더 젊은 환자: 80세 이상 8.34%</li>
<li>낮은 동반 질환의 유병률: 울혈성 심부전(CHF 0%), 만성 신장 질환(CKD 0%), 당뇨병(0.94%), 고혈압(2%)</li>
<li>낮은 1년 이내 MACE 발생률: 25.12%</li>
</ul>
</li>
</ul>
<h3 id="shift-cohort---mimic"><strong>Shift cohort - MIMIC</strong></h3>
<ul>
<li>벤치마킹 목적으로 MIMIC-IV eICU 데이터에서 모델을 평가함.</li>
<li>입원 중 CXR 촬영을 받은 환자 200명을 무작위로 선택하고, 그중 시간적으로 일치하는 ECG 기록이 있는 175명의 환자를 식별함.</li>
<li>임상 기록과 입원 환자 사망률 데이터를 파싱하여 6개월 MACE 결과를 큐레이션했으며, MACE 발생률은 25.71% 였음.</li>
</ul>
<h2 id="performance"><strong>Performance</strong></h2>
<ul>
<li>우리는 단일 모달리티 및 베이스라인 멀티모달 모델을 우리가 제안한 교란 요인 탈편향(Conf), 인과+교란 요인(With Confounder), 그리고 인과 전용(Without Confounder) 모델과 비교했습니다. 베이스라인 단일 모달리티 인코더는 MedCLIP에서 파생되었으며, CXR 및 ECG 데이터에 대해 각각 별도로 미세 조정(fine-tuning)되었습니다. 제안된 멀티모달 정렬 프레임워크인 MOSCARD를 MedCLIP(대조 학습) 및 ALBEF(지식 증류) 베이스라인과 비교했습니다. 단일 및 멀티모달 모델에 대한 평가 결과는 표 1과 2에 요약되어 있습니다.</li>
</ul>
<h3 id="single-modality">Single Modality</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/e7dec500-075b-486f-907b-453a5c8885b4/image.png" alt=""></p>
<ul>
<li>Internal 테스트셋에서 <strong>베이스라인 CXR</strong>은 특히 5년 시점의 MACE 예측에서 0.739의 AUC로 가장 좋은 성능을 보임.</li>
<li>탈교란(de-confounding) 브랜치를 통합하는 것이 Internal 테스트셋에서 성능을 향상시키지는 않았으며, 이는 <strong>탈교란이 홀드아웃(hold-out) 테스트에서의 예측 성능을 강화하지 않음</strong>을 나타냄. (CXR Conf 5년 AUC 0.722).</li>
<li>탈교란 모델은 외부 데이터셋(ED: 0.778 CXR Conf, MIMIC: 0.66 AUC ECG Conf)에서 최적의 일반화 능력을 보여주었으며, 이는 <strong>탈교란이 없는 베이스라인 모델들이 일반화되지 않는 예측용 &#39;지름길 특징(shortcut features)&#39;에 의존할 수 있음</strong>을 입증함.</li>
</ul>
<h3 id="multi-modality">Multi Modality</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/ee9ff7e3-0c73-4d90-adde-6be9092db795/image.png" alt=""></p>
<ul>
<li>각 멀티모달 모델은 세 가지 유형의 예측을 수행함<ol>
<li>정렬 후 CXR 및 ECG 특징을 결합(concat)하여 유도된 <strong>&#39;결합(combined)&#39;</strong> 예측</li>
<li>정렬된 공간의 특징을 사용한 <strong>&#39;CXR&#39;</strong> 단독 예측</li>
<li>정렬된 공간의 특징을 사용한 <strong>&#39;ECG&#39;</strong> 단독 예측. </li>
</ol>
</li>
<li>멀티모달 모델의 경우, <strong>인과성을 적용한 MOSCARD 모델</strong>이 내부 및 외부 데이터셋 모두에서 최고의 성능을 달성했으며 MedCLIP(MIMIC CXR AUC 0.550, ED CXR AUC 0.528) 및 ALBEF(MIMIC ECG AUC 0.604, ED ECG AUC 0.732) 베이스라인을 능가함.</li>
<li>내부 데이터셋에서의 최고 성능은 MOSCARD의 &#39;결합&#39; 예측에서 관찰되었으며, 특히 1년 시점의 MACE 예측에서 0.750의 AUC를 기록함.</li>
<li>MOSCARD를 사용했을 때 <strong>ECG 특징만을 기반으로 한 예측이 단일 모달리티 ECG 모델의 성능을 일관되게 능가</strong>한다는 점을 발견했으며, 이는 단방향 어텐션을 사용하더라도 ECG 기반 예측을 개선하는 데 있어 멀티모달 통합이 갖는 이점을 보여줌.</li>
<li>인과성을 적용한 <strong>MOSCARD(CXR 브랜치)</strong>는 외부 응급실(ED) 데이터셋에서 최고의 성능(<strong>AUC = 0.837</strong>)을 달성한 반면, <strong>MOSCARD(ECG 브랜치)</strong>는 6개월 시점의 MACE 예측에서 MIMIC 데이터셋에 대해 최고의 성능(<strong>AUC = 0.71</strong>)을 보임. 이러한 발견은 데이터셋 고유의 특성이 모달리티의 효과성에 어떻게 영향을 미치는지 강조함. 하지만 내부 데이터셋과 마찬가지로, 멀티모달 학습은 외부 ED 및 MIMIC 데이터셋 모두에서 성능을 향상시킴. 이러한 결과는 내부 데이터셋의 경우, 교란 요인(confounder) 모델을 포함한 MOSCARD가 단일 모달리티 대비 최고의 성능을 달성함을 나타냄.</li>
<li>외부 데이터셋의 경우 MOSCARD가 다른 모델들보다 우수한 성능을 보였는데, 이는 질병 유병률 및 인구통계학적 분포의 차이로 인해 <strong>탈교란(de-confounding) 및 인과 학습이 외부 데이터셋에 특히 유익</strong>하다는 것을 시사함.</li>
</ul>
<h3 id="subgroups">Subgroups</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/1b4de213-09e7-445c-866a-38675b018693/image.png" alt=""></p>
<ul>
<li>MOSCARD가 내부 및 외부 ED 데이터 모두에 대해 동반 질환 및 인구통계학적 특성을 포함한 모든 하위 그룹에서 최적의 균등화된 성능을 달성했음을 보여줌. 탈교란된 인코더는 베이스라인 대비 하위 그룹 성능을 향상시켰으며, 홀드아웃(hold-out) 세트에서는 유사한 성능을 달성했으나 외부 ED 테스트에서의 성능 하락을 개선함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/5c00d32d-9c65-4757-aee7-37b5ccdb1f1e/image.png" alt=""></p>
<ul>
<li>2단계 학습의 맥락에서, 우리는 MOSCARD의 추론이 단일 모달리티 인코딩과 어떻게 다른지 탐구하기 위해 몇 가지 흥미로운 사례에 대해 픽셀 마스킹을 활용한 <strong>살리언시 맵(saliency map)</strong> 해석을 적용함.</li>
<li>두 사례 모두에서 단일 모달리티 모델은 예측을 수행할 때 주로 외부 전선이나 보조 장치에 의존했습니다. 탈교란 후에도 초점은 이동했으나, 모델의 예측은 여전히 틀리거나 과도하게 확신하는 상태을 보임. 반면, ECG 가이드를 받은 <strong>MOSCARD</strong>는 외부 전선이나 보조 장치에 방해 받지 않고 심장과 폐 영역에 집중함으로써 두 사례 모두에서 성공적으로 올바른 예측을 내렸음.</li>
</ul>
<h2 id="4-discussion"><strong>4. Discussion</strong></h2>
<ul>
<li>MOSCARD가 전통적인 단일 모달리티 및 기존의 멀티모달 모델과 비교하여, 환자군 변화(고위험군에서 저위험군으로의 변화)에 대해 더 정확하고 공정한 예측을 제공하는 데 효과적임을 보여줌.</li>
<li><strong>탈교란(De-confounding)</strong>은 외부 데이터셋에서의 일반화 성능을 향상시키는 데 강력한 힘을 발휘했음.<ul>
<li>CXR Conf 모델: 응급실(ED) 데이터셋에서 0.778의 AUC 달성</li>
<li>ECG Conf 모델은 MIMIC 데이터셋에서 0.66의 AUC 달성</li>
<li>인과 추론을 적용한 MOSCARD: 외부 데이터셋에서 최고의 성능을 기록</li>
<li>인과 버전(causal version) 모델: ED 데이터셋에서 1yr MACE에 대해 0.837의 AUC 달성</li>
<li>MIMIC 데이터셋: MOSCARD의 ECG 브랜치 성능이 더 우수(AUC = 0.71)</li>
<li>MOSCARD는 내부 및 외부 ED 데이터셋 모두에서 동반 질환 및 인구통계학적 특성에 기반한 모든 하위 그룹에 걸쳐 최적의 성능을 달성</li>
</ul>
</li>
<li><strong>일반화 가능한 멀티모달 예후 프레임워크</strong>: 심혈관 평가를 위해 구체적으로 내원한 환자들에게만 의존하기보다, MACE 위험이 있는 개인을 조기에 식별 가능함. 또한 이전에 본 적 없는 다양한 인구 집단에 대해 견고하게 작동함.</li>
<li><strong>인구통계학적 편향 완화</strong>: 멀티모달 데이터에서 교란 요인과 기저의 인과 구조의 역할을 간과하는 경우가 많은 기존의 대다수 문헌과 달리, 동반 질환을 통합하고 <strong>혼동 손실(confusion loss)</strong>을 사용하여 인구통계학적 편향을 완화함으로써 인과 추론을 명시적으로 통합함</li>
<li><strong>탈편향(debiasing) 전략</strong>: 이질적인 코호트에서 모델의 일반화 가능성과 효과성을 강화함.<ul>
<li>ED 데이터셋: 동반 질환이 적고 MACE 발생률이 낮은 비교적 건강한 환자들을 포함</li>
<li>MIMIC-IV: 추가적인 동반 질환을 가진 더 복잡한 중환자실(ICU) 환자군</li>
<li>CXR 브랜치: 초기 동맥경화나 폐 울혈과 같은 초기 단계의 심혈관 이상 징후를 식별함으로써 ED 데이터셋에서 가장 좋은 성능</li>
<li>ECG 브랜치: 전기적 활동 평가를 기반으로 질병이 진행된 단계일 가능성이 높은 MIMIC-IV 환자들에 대해 더 우수한 성능</li>
<li>MOSCARD 내에서의 CXR과 ECG co-alignment는 두 모달리티 모두에서 학습하고 인구 집단 간의 차이를 조정할 수 있어, 모델이 단일 모달리티의 성능을 크게 앞지르는 데 기여함</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Selective Learning]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Selective-Learning</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Selective-Learning</guid>
            <pubDate>Fri, 02 Jan 2026 09:32:44 GMT</pubDate>
            <description><![CDATA[<h1 id="selective-learning-for-deep-time-series-forecasting">Selective Learning for Deep Time Series Forecasting</h1>
<ul>
<li>Paper : <a href="https://arxiv.org/pdf/2510.25207">https://arxiv.org/pdf/2510.25207</a></li>
<li>Github : <a href="https://github.com/GestaltCogTeam/selective-learning">https://github.com/GestaltCogTeam/selective-learning</a></li>
<li>NeurIPS 2025 (citation: 2)</li>
<li>요약<ul>
<li>MSE 손실(loss)을 통해 모든 타임스텝(timestep)을 일률적으로 최적화하며, 불확실하거나 이상한 타임스텝들까지 차별 없이 학습하여 <strong>노이즈와 이상치에 취약</strong>한 시계열의 본질적인 특성으로 인해 과적합(overfitting)이 발생한다.</li>
<li>최적화 과정에서 MSE 손실을 계산할 전체 타임스텝 중 일부를 선별하며, 모델이 일반화가 불가능한 타임스텝은 무시하고 일반화 가능한 타임스텝에 집중하도록 유도하는 <strong>&#39;선택적 학습(selective learning)&#39;</strong> 전략을 제안한다.</li>
<li>불확실한 타임스텝을 필터링하는 <strong>불확실성 마스크(uncertainty mask)</strong>와 이상 타임스텝을 제외하는 <strong>이상치 마스크(anomaly mask)</strong> <strong>이중 마스크(dual-mask) 메커니즘</strong>을 도입하였다.</li>
</ul>
</li>
</ul>
<h1 id="introduction">Introduction</h1>
<h2 id="problem">Problem</h2>
<p>산업용 센서는 기계적 진동이나 전자기 방해에 쉽게 영향을 받으며, 주식 가격은 정책 개입에 따라 비정상적인 변동을 보인다. 이러한 간섭 요인들은 <strong>노이즈와 이상치(anomalies)로 인한 과적합(overfitting)</strong> 문제를 야기한다.</p>
<p>기존 손실 함수(MSE, MAE)는 각 타임스텝을 동일하게 취급하여 계산한다. 이는 모델이 일반화될 수 없는 <strong>불확실하고 이상한 타임스텝</strong>까지 학습하게 하여 과적합 문제를 야기하고 모델의 성능을 저하시킨다.</p>
<p>Figure 1. (Right)과 같이  iTransformer 모델은 ETTh1 데이터셋으로 학습될 때 MSE loss가 세 번째 에포크 이후 다시 증가하며 과적합 되는 것을 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/e19c3725-f0d8-4cf4-8c3b-b8f86c38a1bd/image.png" alt="Figure 1. Right"></p>
<p>Figure 1. Right</p>
<h2 id="solution">Solution</h2>
<p>이러한 문제를 해결하기 위해, 본 논문에서는 <strong>일반화 가능한 타임스텝</strong>만 최적화에 사용하고, 식별된 불확실하거나 이상한 타임스텝은 폐기하는 <strong>선택적 학습(selective learning)</strong>을 제안하며, 비일반화(non-generalizable) 타임스텝을 동적으로 필터링하기 위한 <strong>이중 마스크(dual-mask) 메커니즘</strong>을 도입하였다.</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/04b664ef-f9d0-44aa-a7d4-768eff96dd17/image.png" alt="Figure 1. Left"></p>
<p>Figure 1. Left</p>
<p>모델의 일반화 성능을 저하시키는 두 가지 주요 타임스텝:</p>
<ol>
<li><strong>불확실한(Uncertain) 타임스텝:</strong> 주로 노이즈(예: 신호 방해)로 인해 발생하며, 높은 예측 불확실성을 가진다. 결과적으로 gradients 업데이트가 무작위 방향으로 이루어져 노이즈에 원치 않게 적합되는 결과를 초래한다.</li>
<li><strong>이상(Anomalous) 타임스텝:</strong> 주로 예외적인 사건(예: 센서 오작동)에 의해 발생합니다. 모델의 예측은 확신이 있을 수 있으나 상당한 오차가 발생하며, 이는 모델이 인스턴스 특화된 특징을 학습하도록 강제하여 일반화를 저해한다.</li>
</ol>
<h2 id="related-works">Related Works</h2>
<h3 id="deep-models">Deep Models</h3>
<ul>
<li><strong>Transformer 기반 모델:</strong> 장기적인 시간적 의존성<ul>
<li>Informer : 2차 복잡도를 줄이기 위해 ProbSparse 어텐션을 도입하였다.</li>
<li>PatchTST : 시계열을 patch 단위로 나누고 channel-independent 전략을 사용한다.</li>
<li>iTransformer : 각 시계열을 독립적으로 변수 토큰(variate token)에 임베딩하고 셀프 어텐션을 적용하여 다변량 상관관계를 포착한다.</li>
</ul>
</li>
<li><strong>CNN 기반 모델:</strong> 지역적 패턴 추출<ul>
<li>TimesNet : 시계열을 2D 텐서로 변환하고 CNN을 사용하여 주기 내 및 주기 간 의존성을 포착한다.</li>
</ul>
</li>
<li><strong>MLP 기반 모델:</strong> 가벼운 구조<ul>
<li>DLinear : 분해(decomposition) 기법이 적용된 단순한 선형 레이어를 활용한다.</li>
<li>TimeMixer : MLP 레이어를 통해 다중 스케일(multi-scale) 정보를 포착한다.</li>
</ul>
</li>
</ul>
<h3 id="training-strategies">Training Strategies</h3>
<p>현재의 딥러닝 패러다임은 모든 타임스텝에 대해 일관되게 회귀 손실(예: MSE/MAE)을 계산하며, 다양한 대안 방법들이 존재하지만 특정 데이터셋과 시나리오에 최적화 되어 일반화되지 못했다.</p>
<ul>
<li>iTransformer : 대규모 다변량 시계열을 위해 변수의 서브셋을 무작위로 선택하는 학습 전략을 제안했다.</li>
<li>Merlin : 데이터 누락에 대한 모델의 견고성을 높이기 위해 지식 증류(knowledge distillation) 전략을 채택 했다.</li>
<li>MTGNN : 학습 중에 예측 길이를 점진적으로 늘려가는 커리큘럼 학습(curriculum learning)의 아이디어를 시계열 예측에 적용했다.</li>
</ul>
<h1 id="method">Method</h1>
<h2 id="preliminaries">Preliminaries</h2>
<h3 id="notations">Notations</h3>
<ul>
<li>$\mathbf{X}_{0:T} \in \mathbb{R}^{T \times N}$ : 전체 시계열 데이터</li>
<li>$X_t \in \mathbb{R}^N$ : $N$개의 변수를 가진 다변량 시계열에 대한, $t$번째 타임스텝</li>
<li>$\mathbf{X}<em>{t-L:t} = {X</em>{t-L}, X_{t-L+1}, \dots, X_{t-1}} \in \mathbb{R}^{L \times N}$ : 과거(look-back) 윈도우 크기가 $L$인 과거 시계열</li>
<li>$\hat{\mathbf{X}}<em>{t:t+F} = {X_t, X</em>{t+1}, \dots, X_{t+F-1}} \in \mathbb{R}^{F \times N}$ : 예측 윈도우 크기가 $F$인 미래 값</li>
<li>$\mathcal{D}<em>{train} = {(\mathbf{X}</em>{t-L:t}, \mathbf{X}<em>{t:t+F})}</em>{t=L}^{T-F}$ : 학습 데이터셋은 스트라이드가 1인 슬라이딩 윈도우</li>
<li>$f(\cdot; \theta) : \mathbb{R}^{L \times N} \rightarrow \mathbb{R}^{F \times N}$ : 파라미터 $\theta$로 정의된 심층 신경망 모델</li>
<li>$\eta$ : 학습률(learning rate)</li>
<li>$\tau$ : 학습 중의 반복 횟수(iterations)</li>
</ul>
<h3 id="problem-statement">Problem Statement</h3>
<p>최적의 예측값 $\hat{\mathbf{X}}<em>{t:t+F} = f(\mathbf{X}</em>{t-L:t}; \theta)$ 를 구하는 것이 목표이며, 평균 제곱 오차(MSE)는 예측값($\hat{\mathbf{X}}<em>{t:t+F}$)과 GT($\mathbf{X}</em>{t:t+F}$) 사이의 차이를 계산하며, $\theta$를 최적화하기 위해 사용되는 대표적인 손실 함수이다.</p>
<p>$$
\mathcal{L}<em>{MSE}(\theta) = \frac{1}{N \cdot F} \sum</em>{i=0}^{F-1} |X_{t+i} - f(\mathbf{X}_{t-L:t}; \theta)_i|^2 \tag{1}
$$</p>
<p>$$
\theta_{\tau+1} = \theta_{\tau} - \eta \nabla_{\theta} \mathcal{L}_{MSE} \tag{2}
$$</p>
<h2 id="selective-learning">Selective Learning</h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/32c7b483-bd75-4bd7-8719-8e50d27c8b0f/image.png" alt="Figure 2"></p>
<p>Figure 2. (a) Overall framework of selective learning. (b) Uncertainty mask. (c) Anomaly mask.</p>
<p>핵심 아이디어는 <strong>일반화 가능한 타임스텝의 서브셋에 대해서만 MSE 손실을 계산</strong>한다는 것이며, 두 가지 범주의 타임스텝을 마스킹하여 동적으로 필터링하는 <strong>이중 마스크(dual-mask) 메커니즘</strong>을 제안한다.</p>
<ol>
<li><p><strong>불확실한(Uncertain) 타임스텝 :</strong> 모델이 예측한 값과 GT의 잔차(residual)를 이용해 잔차 분포의 엔트로피를 불확실성 척도로 사용한다. 슬라이딩 윈도우 샘플링을 통해 서로 다른 윈도우에서 예측된 타임스텝샘플들을 얻을 수 있으며, 이를 통해 잔차의 엔트로피를 정량화하여 높은 엔트로피를 가진 타임스텝을 걸러내는 지표로 활용한다.</p>
</li>
<li><p><strong>이상(Anomalous) 타임스텝 :</strong> 간단한 모듈을 추가하여 각 타임스텝의 잔차 하한(lower bound)을 구하도록 학습한다. 현재 잔차가 하한에 가장 가까운 타임스텝을 마스킹함으로써, 학습해야 할 타임스텝은 유지하면서 비일반화 이상치를 동적으로 제거한다.</p>
<p>$\tau$번째 반복(iteration)에서의 시계열 예측 모델 $f(\cdot, \theta)$가 주어졌을 때, 비일반화 타임스텝의 서브셋에서만 최적화를 제한하는 마스크 $\mathcal{M}^{(\tau)} \in {0, 1}^F$를 만들어 손실 함수를 계산한다.</p>
</li>
</ol>
<p>$$
\mathcal{L}<em>{SL}(\theta) = \frac{1}{N \cdot |\mathcal{M}^{(\tau)}|} \sum</em>{i=0}^{F-1} |\mathcal{M}^{(\tau)}(X_{t+i} - f(\mathbf{X}_{t-L:t}; \theta)_i)|^2
$$</p>
<p>여기서 $\mathcal{M}^{(\tau)} = \mathcal{M}_u^{(\tau)} \lor \mathcal{M}_a^{(\tau)}$이며, $\mathcal{M}_u^{(\tau)}$와 $\mathcal{M}_a^{(\tau)}$는 각각 <strong>불확실성 마스크</strong>와 <strong>이상치 마스크</strong>를 $\lor$는 요소별(element-wise) OR 연산자를 의미한다. 또한 채널 독립(channel-independent) 전략을 채택하여 각 변수에 대해 독립적으로 마스크를 생성한다.</p>
<h3 id="uncertainty-mask">Uncertainty Mask</h3>
<p>높은 예측 불확실성을 보이는 타임스텝을 위한 엔트로피 기반의 마스킹 접근법</p>
<p>$\epsilon_t = X_t - \hat{X}_t$를 $t$번째 타임스텝의 잔차라고 할 때, 각 타임스텝은 한 에포크 내에서 $n_t = \min{t - L + 1, F}$번 예측된다. 잔차는 가우시안 분포 $\epsilon_t \sim \mathcal{N}(\mu_t, \sigma_t^2)$를 따른다고 가정하며, 이에 따라 잔차 엔트로피와 분산은 다음과 같이 계산한다:</p>
<p>$$
\hat{H}(\epsilon_t) = \frac{1}{2} \ln(2\pi e \hat{\sigma}_t^2)
$$</p>
<p>$$
\hat{\sigma}<em>t^2 = \frac{1}{n_t} \sum</em>{i=1}^{n_t} (\epsilon_t^{(i)} - \bar{\epsilon}_t)^2
$$</p>
<p>잔차 엔트로피가 상위 $r_u%$인 타임스텝에 하드 임계값(hard thresholding) $\gamma_u$를 적용하여 불확실성 마스크 $\mathcal{M}_u^{(\tau)}$를 얻는다:</p>
<p>$$
(\mathcal{M}_u^{(\tau)})_t = \begin{cases} 0, &amp; \hat{H}(\epsilon_t) &gt; \gamma_u \ 1, &amp; \text{otherwise} \end{cases}
$$</p>
<h3 id="anomaly-mask">Anomaly Mask</h3>
<p>이상 타임스텝은 일반적으로 실제값과의 편차로 인해 큰 잔차를 발생 시키기 때문에 단순히 잔차 $| \epsilon_t |$가 큰 타임스텝을 마스킹하는 방식은, <strong>실제 이상치</strong>와 <strong>학습이 덜 되었지만 일반화 가능한 패턴</strong>을 구분하지 못한다는 한계가 있다.</p>
<p>이러한 한계를 극복하기 위해, 잔차와 이론적 하한(lower bound) $\epsilon_t^{LB}$ 사이의 편차인 $S(X_t)$를 정의한다:</p>
<p>$$
S(X_t) = |X_t - f(\mathbf{X}; \theta)_t| - \epsilon_t^{LB} \tag{12}
$$</p>
<p>따라서, <strong>이상 타임스텝</strong>은 높은 잔차 하한을 가져 상대적으로 <strong>작은 $S(X)$</strong> 값을 보이고, <strong>학습되지 않은 타임스텝</strong>은 현재 잔차와 이론적 최소값 사이의 큰 격차로 인해 <strong>큰 $S(X)$</strong> 값을 보인다. </p>
<p>잔차 하한(residual lower bound)을 추정하기 위해 학습 데이터셋 $\mathcal{D}_{train}$ 상에서 가단한 모델 $g(\cdot; \phi)$를 학습 시키고, 이를 통해 $\hat{S}(X_t)$를 다음과 같이 추정한다: </p>
<p>$$
\hat{S}(X_t) = \underbrace{|X_t - f(\mathbf{X}; \theta)<em>t|}</em>{\text{residual } \epsilon_t} - \underbrace{|X_t - g(\mathbf{X}; \phi)<em>t|}</em>{\text{estimated LB } \hat{\epsilon}_t^{LB}} \tag{13}
$$</p>
<p>하드 임계값(hard thresholding) $\gamma_a$를 사용하여 $\hat{S}(X_t)$ 값이 가장 작은 상위 $r_u%$의 타임스텝을 필터링해 이상치 마스크 $\mathcal{M}_a^{(\tau)} \in {0, 1}^F$를 얻는다:</p>
<p>$$
(\mathcal{M}_a^{(\tau)})_t = \begin{cases} 0, &amp; \hat{S}(X_t) &lt; \gamma_a \ 1, &amp; \text{otherwise} \end{cases} \tag{14}
$$</p>
<p>특히, 추정된 잔차 하한을 정적(static)인 마스킹 기준으로 사용하지 않고, $S(X_t)$는 현재의 예측값에 따라 마스킹을 <strong>동적으로 조정</strong>할 수 있다. 이러한 방식은 두 가지 장점이 있다.</p>
<ol>
<li><strong>편향 완화:</strong> 정적 마스킹은 학습 데이터셋 $\mathcal{D}_{train}$의 분포를 크게 변화시켜 편향(bias)을 유발하는 반면, 동적 마스킹은 학습 중에 마스크를 적응시켜 기대치(expectation) 측면에서 이러한 편향을 완화한다.</li>
<li><strong>점진적 학습:</strong> 일반화가 덜 되는 드물지만 중요한 극한 이벤트(예: 극단적 날씨)에 대해, 동적 마스킹은 먼저 일반화 가능한 타임스텝을 학습한 후, 이전에 이상치로 간주되었던 타임스텝들을 점진적으로 학습하도록 시도한다.</li>
</ol>
<h1 id="experiments">Experiments</h1>
<p><strong>실험 설정</strong></p>
<ul>
<li>ILI 데이터셋의 경우 예측 길이 $F \in {24, 36, 48, 60}$, 
그 외 데이터셋은 $F \in {96, 192, 336, 720}$</li>
<li>하이퍼파라미터: 기존의 하이퍼파라미터 설정을 따르면서 마스킹 비율 $r_a$와 $r_n$만 조정</li>
<li>옵티마이저 : Adam</li>
</ul>
<h2 id="main-results">Main Results</h2>
<p>SOTA 베이스라인 모델(iTransformer, TimeMixer)를 포함한 <strong>192개의 모든 케이스에서 성능이 향상</strong>됨</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/e46203bf-8f44-455c-bd7e-aedf93de3d0c/image.png" alt="Table 1"></p>
<p>Table 1. main results</p>
<h2 id="zero-shot-forecasting">Zero-shot Forecasting</h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/77453019-a666-441a-a301-ae5a3113ab24/image.png" alt="Table 2"></p>
<p>Table 2. zero-shot forcasting results</p>
<ul>
<li>모델을 데이터셋 $\mathcal{D}_A$에서 학습시킨 후 추가 학습 없이 데이터셋 $\mathcal{D}_B$에서 평가했다.</li>
<li>어려운 시나리오(ETTh2 → ETTh1, ETTm2 → ETTm1)에서 선택적 학습은 평균적으로 <strong>MSE를 22.6%, MAE를 14.5% 감소</strong>시키며 상당한 개선을 이루었다.</li>
<li>일부 케이스에서는 타겟 데이터셋에서 처음부터 학습한(train-from-scratch) 결과보다 더 뛰어난 성능을 보이기도 하였다.</li>
</ul>
<h2 id="comparison-with-other-training-objectives">Comparison with Other Training Objectives</h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/c97eea7a-308b-43a4-975a-3bc0336398cf/image.png" alt="Table 3"></p>
<p>Table 3. Comparison between selective learning (SL) and other training objectives with iTransformer as backbone</p>
<ul>
<li>선택적 학습은 높은 호환성을 가지기 때문에 모델에 완전히 무관(model-agnostic)하며, 다양한 정규화 방법이 적용된 어떠한 딥러닝 아키텍처에도 적용할 수 있다.</li>
<li>선택적 학습은 point-wise의 학습을 기반으로 하며, 형태 기반(TILDE-Q), 주파수 기반(FreDF), 분포 기반(PS loss) 목표를 포함한 point-wise가 아닌 대안적 학습 목표들과 비교했다.</li>
<li>타겟 시퀀스의 특정 타임스텝들이 본질적으로 일반화가 불가능하기 때문에 시간 또는 주파수 도메인에서 형태나 분포를 맞추는 <strong>전체 시퀀스에 대한 전역적 정렬(global alignment) 방식이 최선이 아님</strong>을 입증한다.</li>
</ul>
<h2 id="ablation-study">Ablation Study</h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/4e09b86e-fe4e-411a-b73a-93e89e9b716a/image.png" alt="Table 4"></p>
<p>Table 4. Ablation results for selective learning with iTransformer as backbone</p>
<ul>
<li>어느 한쪽 마스크라도 제거하면 4개 데이터셋 모두에서 상당한 성능 저하가 발생하며, 이는 두 마스크가 일반화 불가능한 패턴을 필터링하는 데 있어 필수적이고 서로 구별되는 기능을 수행함을 시사한다.</li>
<li>무작위 마스킹으로 대체하면 모델 성능이 마스킹을 하지 않은 경우와 비슷하거나 오히려 더 나빠지는데, 이는 단순히 타임스텝의 일부에 무작위로 주의를 기울이는 것만으로는 모델의 성능과 일반화 능력을 향상시킬 수 없음을 의미한다.</li>
</ul>
<h2 id="hyperparameter-analysis">Hyperparameter Analysis</h2>
<h3 id="effects-of-masking-ratio">Effects of Masking Ratio</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/c520edf6-5a25-4642-9964-0d3140572ed9/image.png" alt="Figure 3"></p>
<p>Figure 3. Forecasting results under different masking ratios. The prediction length is 336.</p>
<ul>
<li>비정상성(non-stationary)이 강한 데이터셋(ETTh1, Exchange)에서는 <strong>더 큰 마스킹 비율</strong>이 우수한 성능을 보였다.</li>
<li>반면, 주기적인 패턴을 보이는 데이터셋(Weather)은 <strong>더 작은 마스킹 비율</strong>에서 향상된 성능을 보였다.</li>
<li>특히, Exchange 데이터셋의 경우 90%의 이상치 마스킹 비율에서 최고 성능을 보였는데, 이는 이 데이터셋에서 시장에 의한 일반화 불가능한 이상치가 노이즈보다 훨씬 더 큰 영향을 미치기 때문이다.</li>
</ul>
<h3 id="effects-of-estimation-model">Effects of Estimation Model</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/b2e58954-dccf-457f-9fa6-3210008f7218/image.png" alt="Figure 4"></p>
<p>Figure 4. Forecasting performance with iTransformer as backbone and various estimation models. The results are averaged from all prediction lengths.</p>
<ul>
<li>비정상성이 매우 높은 데이터셋(ETTh1, Exchange)에서는 <strong>단순한 모델</strong>이 우수한 성능을 보인 반면, 주기적 패턴을 보이는 데이터셋(Weather)은 <strong>더 복잡한 추정 모델</strong>이 유리했다.</li>
<li>그럼에도 불구하고, 추정 모델의 선택이 전체 성능에 미치는 영향은 제한적이었으며, 이는 선택적 학습의 견고성(robustness)을 강조한다.</li>
</ul>
<h2 id="learning-curve-analysis">Learning Curve Analysis</h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/a23cddae-22f1-4186-bd03-bd9340efe25e/image.png" alt="Figure 5"></p>
<p>Figure 5. Test MSE curve on the ETTh1 dataset. The prediction length is 336.</p>
<ul>
<li>비교된 세 모델 모두 다양한 정도의 과적합을 보이는 반면, 선택적 학습의 모델들은 <strong>안정적인 수렴과 우수한 성능</strong>을 달성하였다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] TSLANet]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-TSLANet</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-TSLANet</guid>
            <pubDate>Mon, 18 Aug 2025 04:59:13 GMT</pubDate>
            <description><![CDATA[<h3 id="tslanet-rethinking-transformers-for-time-series-representation-learning">TSLANet: Rethinking Transformers for Time Series Representation Learning</h3>
<ul>
<li>Paper : <a href="https://arxiv.org/pdf/2404.08472">https://arxiv.org/pdf/2404.08472</a></li>
<li>Github : <a href="https://github.com/emadeldeen24/TSLANet">https://github.com/emadeldeen24/TSLANet</a></li>
<li>ICML 2024</li>
</ul>
<h1 id="요약">요약</h1>
<ol>
<li><strong>주제</strong> : 시계열 데이터를 분석하기 위한 컨볼루션 기반의 경량 + 노이즈 적응형 네트워크 제안함</li>
<li><strong>배경</strong> : 트랜스포머 기반 모델은 장기 의존성 포착에는 뛰어나지만, 소규모 데이터셋에서는 노이즈 민감도, 계산 효율성, 과적합 문제 등의 한계가 존재함</li>
<li><strong>Adaptive Spectral Block (ASB)</strong> : 푸리에 분석을 활용하여 특성 표현을 향상시키고, 적응형 임계값 처리 (adaptive thresholding)을 통한 고주파 노이즈를 완화함</li>
<li><strong>Interactive Convolution Block (ICB)</strong> : 서로 다른 커널 크기를 가진 병렬 컨볼루션으로, 지역적 특징과 장기 의존성을 모두 포착할 수 있도록 구성함</li>
<li><strong>Self-Supervised Learning</strong> : 복잡한 시간 패턴의 해독 능력 및 다양한 데이터셋에서의 견고성을 향상함</li>
</ol>
<h1 id="배경">배경</h1>
<h3 id="transformer-계열-모델">Transformer 계열 모델</h3>
<ul>
<li>Attention 메커니즘은 시계열 데이터 내의 노이즈와 중복성에 취약함</li>
<li>Self-Attention 메커니즘이 본질적으로 순서에 무관(permutation-invariant)하므로 시간 정보의 보존에 한계가 있음</li>
<li>Position Encoding 으로 보완 가능하지만, 인코딩 방식에 따라 상대적/절대적 위치 정보가 다르게 반영될 수 있음</li>
</ul>
<h3 id="cnn-계열-모델">CNN 계열 모델</h3>
<ul>
<li>CNN은 다양한 크기와 종류의 커널들로 인해 다양한 특징과 패턴을 효과적으로 감지하고, 분류 문제에서 우수한 성능을 보임</li>
<li>간단한 3-layer CNN 네트워크가 최신 Transformer 기반 아키텍처와 비교해 분류에서 더 뛰어난 성능을 보임 (Dataset : UEA)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/51b41be1-18f8-4278-9186-ddd9923e34c5/image.png" alt=""></p>
<ul>
<li>하지만 CNN의 예측 성능은 주기가 긴 데이터의 경우<ul>
<li>10분 단위의 짧은 주기를 갖는 Weather 데이터셋에서 Transformer 계열과 비슷한 성능을 보임</li>
<li>시간 단위의 긴 주기를 갖는 ETTh1 데이터셋에서는 낮은 성능을 보임</li>
</ul>
</li>
</ul>
<p><strong>⇒ &quot;어떻게 하면 CNN의 강인한 성능을 더 다양한 시계열 작업으로 확장할 수 있을까?&quot;</strong> </p>
<h1 id="모델-아키텍처">모델 아키텍처</h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/5bbd27dc-e8a4-431e-8132-909cea8f8422/image.png" alt="overall"></p>
<h2 id="adaptive-spectral-block-asb"><strong>Adaptive Spectral Block (ASB)</strong></h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/59df43bd-889b-4e16-9e25-3216fb7e5311/image.png" alt="ASB"></p>
<ol>
<li><strong>FFT (푸리에 변환)</strong><ul>
<li>1D FFT를 적용하여 주파수 도메인으로 변환함</li>
<li>각 채널은 독립적으로 변환되어, 원래 시계열의 스펙트럼 특성을 담는 데이터 $F$ 를 생성함</li>
</ul>
</li>
<li><strong>고주파 노이즈의 학습 가능한  Threshold</strong><ul>
<li>고주파 성분은 근본적인 변동 추세나 관심 신호에서 벗어난 빠른 변화로, 성능에 악영향을 미침</li>
<li>데이터셋 특성에 따라 필터링 강도를 동적으로 조절할 수 있는 적응형 로컬 필터를 제안함</li>
<li>파워 스펙트럼 $P$는 각 주파수 성분의 크기의 제곱($P=∣F∣^2$)으로 계산함</li>
<li>학습 가능한 임계값 $θ$를 이용해 파워 스펙트럼 $P$의 고주파 성분을 적응형으로 필터링함</li>
<li>파워($P$)가 임계값 $θ$ 이상인 주파수에서 1(유지), 아니면 0(제거)인 바이너리 마스크를 적용함</li>
</ul>
</li>
<li><strong>학습 가능한 필터</strong><ul>
<li>적응적으로 필터링된 주파수 도메인 데이터에 대해, 두 종류의 학습 가능한 필터를 적용함</li>
<li>원본 주파수 데이터 $F$에서 학습하는 전역 필터 $W_G$
필터링된 데이터 $F_{\mathrm{filtered}}$에서 학습하는 로컬 필터 $W_L$
<img src="https://velog.velcdn.com/images/sy_kim/post/a65abe1c-240b-4ff3-8a0a-b49b88099a86/image.png" alt=""></li>
<li>필터링된 특징을 결합하여, 종합적인 스펙트럼 정보를 얻음
$F_{\mathrm{integrated}}=F_G+F_L$   </li>
</ul>
</li>
<li><strong>IFFT (역 푸리에 변환)</strong><ul>
<li>최종적으로 필터링 및 결합된 주파수 도메인 데이터를 다시 시간 도메인으로 변환하기 위해, IFFT를 적용함</li>
<li>IFFT는 특성 추출 후의 특성이 원래 시계열 입력의 데이터 구조와 일치하도록 보장함
  <img src="https://velog.velcdn.com/images/sy_kim/post/a37f235b-d955-46b5-9829-a8eb7b2b7d28/image.png" alt=""></li>
</ul>
</li>
</ol>
<h2 id="interactive-convolution-block-icb"><strong>Interactive Convolution Block (ICB)</strong></h2>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/a6b8eafe-934e-49b3-ba5e-6d3281a41eea/image.png" alt="ICB"></p>
<ul>
<li>서로 다른 커널 크기를 가진 병렬 컨볼루션으로, 지역적(local) 특징과 장기 의존성(long-range dependency)를 모두 포착할 수 있도록 구성함</li>
<li>첫 번째 컨볼루션 레이어는 작은 커널을 사용해 미세하고 국소적인 패턴을 포착하고, 
두 번째 레이어는 더 큰 커널을 활용해 넓은 영역의 장기적 의존성을 식별함</li>
</ul>
<h2 id="self-supervised-pretraining"><strong>Self-Supervised Pretraining</strong></h2>
<ul>
<li>Masked Auto Encoder 방식으로 pretrain 함</li>
<li>단일 시간 스텝 단위의 마스킹 방법을 적용하지 않고, 패치 단위로 마스킹 함</li>
<li>입력 시퀀스 패치의 일부를 마스킹한 뒤, TSLANet을 학습시켜 마스킹된 패치를 복원하도록 함</li>
</ul>
<h1 id="실험-결과"><strong>실험 결과</strong></h1>
<h3 id="classification">Classification</h3>
<p><img src="image%206.png" alt="image.png"></p>
<ul>
<li>Transformer 모델은 장기 시계열 데이터 CNN 모델보다 낮은 성능을 보임</li>
</ul>
<h3 id="forecasting"><strong>Forecasting</strong></h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/e8a9c218-529c-4b2e-8abb-dea8c6b1638c/image.png" alt=""></p>
<ul>
<li><strong>비교 모델</strong> :<ul>
<li>Transformer 기반 모델 : iTransformer, PatchTST, Crossformer, FEDformer, Autoformer</li>
<li>MLP 기반 모델 : RLinear, DLinear</li>
<li>범용 시계열 모델 : TimesNet과 GPT4TS</li>
<li>합성곱 기반 예측 모델 : SCINet</li>
<li>LLM 기반 모델 : Time-LLM (Llama-7B)</li>
</ul>
</li>
<li>Time-LLM이 더 높은 성능을 보이지만, 계산 비용은 TSLANet에 비해 훨씬 높음</li>
</ul>
<h3 id="anomaly-detection"><strong>Anomaly Detection</strong></h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/3077812f-15e5-403b-be64-258733298060/image.png" alt=""></p>
<ul>
<li>Transformer 기반 모델들이 이상 탐지에서는 상대적으로 효율성이 떨어짐</li>
<li>TimesNet이나 FEDformer처럼 주기성을 고려하는 모델은 비정상 패턴 탐지에서 뛰어난 성능을 보임</li>
</ul>
<h1 id="5-모델-분석"><strong>5. 모델 분석</strong></h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/a0e8cce5-ff7c-49a3-bd8d-6f3078bb4247/image.png" alt=""></p>
<ul>
<li>Adaptive Spectral Block(ASB)을 제거하면 성능이 크게 저하됨</li>
<li>특히 ASB-L(적응형 로컬 부분)을 제외하면, 잡음이 많은 데이터셋에서 성능 저하가 더욱 두드러짐</li>
<li>pretraining은 하는게 더 좋음</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[GitLab] pytest 코드 테스트 적용]]></title>
            <link>https://velog.io/@sy_kim/GitLab-pytest-%EC%BD%94%EB%93%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A0%81%EC%9A%A9</link>
            <guid>https://velog.io/@sy_kim/GitLab-pytest-%EC%BD%94%EB%93%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A0%81%EC%9A%A9</guid>
            <pubDate>Thu, 26 Jun 2025 07:07:59 GMT</pubDate>
            <description><![CDATA[<h1 id="ci란"><strong>CI란?</strong></h1>
<ul>
<li><strong>CI(Continuous Integration, 지속적 통합)</strong>는 소프트웨어 개발 과정에서 여러 개발자가 작업한 코드를 자주, 자동으로 통합(merge)하고, 그 과정에서 빌드와 테스트를 자동화해 코드 품질을 높이는 개발 방법론</li>
</ul>
<h3 id="gitlab-ci의-주요-특징과-동작-방식"><strong>GitLab CI의 주요 특징과 동작 방식</strong></h3>
<ul>
<li><p><strong>자동화된 빌드, 테스트, 배포</strong></p>
<p>  새로운 코드를 푸시하거나 머지 리퀘스트를 생성하면, GitLab CI가 자동으로 파이프라인을 실행하여 코드의 빌드, 테스트, 배포 과정을 자동화</p>
</li>
<li><p><strong>구성 파일: .gitlab-ci.yml</strong></p>
<p>  프로젝트의 루트 디렉터리에 <strong><code>.gitlab-ci.yml</code></strong> 파일을 생성해 CI/CD 파이프라인을 정의합니다. 이 파일에는 어떤 작업(Job)을 어떤 순서(Stage)로 실행할지, 어떤 조건에서 실행할지 등을 YAML 형식으로 기술</p>
</li>
<li><p><strong>구성 요소</strong></p>
<ul>
<li><strong>Pipeline</strong>: 전체 자동화 프로세스의 흐름 정의</li>
<li><strong>Stage</strong>: 빌드, 테스트, 배포 등 논리적으로 묶인 작업 단계로, 각 stage를 순차적으로 실행</li>
<li><strong>Job</strong>: 실제로 실행되는 개별 작업(예: 테스트 실행, 빌드 명령 등)으로, 같은 Stage 내의 Job은 병렬 실행 가능</li>
<li><strong>Runner</strong>: ****실제로 Job을 실행하는 에이전트로, GitLab 서버와 별도로 동작하므로 개별 설치 필요</li>
</ul>
</li>
</ul>
<h3 id="ci-도입의-장점"><strong>CI 도입의 장점</strong></h3>
<ul>
<li>코드 변경이 있을 때마다 자동으로 빌드와 테스트가 실행되어, 다양한 문제의 조기 식별 가능</li>
<li>여러 개발자가 동시에 작업해도 통합 과정에서 발생할 수 있는 충돌이나 오류를 신속하게 파악 가능</li>
<li>반복적인 작업(빌드, 테스트, 배포 등)이 자동화되어 개발 효율성 향상</li>
</ul>
<h1 id="코드-테스트란">코드 테스트란?</h1>
<p>코드 테스트는 소프트웨어가 의도한 대로 동작하는지, 오류나 결함이 없는지 확인하기 위해 다양한 방법으로 코드를 검증하는 과정. 테스트는 소프트웨어의 품질을 높이고, 유지보수성을 확보하며, 개발 과정에서 발생할 수 있는 문제를 조기에 발견하는 데 중요한 역할</p>
<h2 id="종류"><strong>종류</strong></h2>
<ol>
<li><strong>단위 테스트(Unit Test)</strong><ul>
<li>가장 작은 코드 단위(함수, 메서드, 클래스 등)를 독립적으로 검증</li>
<li>각 기능이 올바르게 동작하는지 확인하며, 빠르고 반복적으로 실행</li>
<li>예시: add(1, 2)가 3을 반환하는지 확인하는 테스트.</li>
</ul>
</li>
<li><strong>통합 테스트(Integration Test)</strong><ul>
<li>여러 단위(모듈, 클래스 등)를 결합해 상호작용이 정상적으로 이루어지는지 검증</li>
<li>단위별로는 문제없던 코드가, 결합 후 예상치 못한 오류를 내는지 확인</li>
</ul>
</li>
<li><strong>시스템 테스트(System Test)</strong><ul>
<li>전체 시스템이 요구사항대로 동작하는지, 실제 사용 환경에서 검증</li>
<li>사용자의 관점에서 소프트웨어를 테스트하며, 기능 간 상호작용과 전체 흐름 점검</li>
</ul>
</li>
</ol>
<h1 id="unit-test-gitlab-ci-자동화">Unit Test GitLab CI 자동화</h1>
<p>오프라인 환경 기준</p>
<h3 id="1-gitlab-ciyml-생성">1. <strong><code>.gitlab-ci.yml</code> 생성</strong></h3>
<p>프로젝트 루트 디렉토리에 생성</p>
<pre><code class="language-yaml">stages:
  - test

pytest:
  stage: test
  image: pytest:8.1.1
  script:
    - pytest --junitxml=pytest-results.xml
  tags:
      - docker
      - pytest
  artifacts:
    reports:
      junit: pytest-results.xml</code></pre>
<h3 id="2-코드-테스트를-위한-docker-image-생성">2. 코드 테스트를 위한 Docker image 생성</h3>
<pre><code class="language-docker"># Dockerfile
FROM python:3.10.16-slim

# 시스템 패키지 설치
RUN apt-get update &amp;&amp; apt-get install -y \
    gcc \
    g++ \
    build-essential \
    &amp;&amp; rm -rf /var/lib/apt/lists/*

# requirements.txt 설치
COPY requirements.txt .
RUN pip install --upgrade pip &amp;&amp; pip install -r requirements.txt &amp;&amp; \
    pip cache purge</code></pre>
<pre><code># requirements.txt
pandas==2.3.0
numpy==2.2.6
scikit-learn==1.7.0
torch==2.6.0
torchaudio==2.6.0
torchvision==0.21.0
tensorboard==2.19.0
tensorboardX==2.6.4
ray[default]==2.43.0
mlflow==2.20.4
click==8.1.7
pydantic==2.10.6
h5py==3.13.0
pytest==8.1.1</code></pre><pre><code class="language-bash"># Docker image 옮기기
docker save -o pytest.tar pytest:8.1.1
scp -P &lt;PORT&gt; pytest.tar sungyunkim@&lt;IP&gt;:&lt;DIR&gt;
docker load -i pytest.tar</code></pre>
<h3 id="3-gitlab-runner-등록">3. gitlab-runner 등록</h3>
<pre><code class="language-bash">sudo vi mlops/gitlab-runner/config.toml</code></pre>
<pre><code class="language-toml">[[runners]]
  name = &quot;automl_runner&quot;
  url = &quot;http://&lt;IP:PORT&gt;&quot;
  id = ID
  token = &quot;TOKEN&quot;
  token_obtained_at = 2025-06-26T05:57:34Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = &quot;docker&quot;
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = &quot;pytest:8.1.1&quot;
    pull_policy = &quot;never&quot;
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = [&quot;/cache&quot;]
    shm_size = 0
    network_mtu = 0
</code></pre>
<pre><code class="language-bash"># 실행이 잘 안되면
docker exec -it gitlab-runner /bin/bash
gitlab-runner run</code></pre>
<h3 id="mr-성공-예시">MR 성공 예시</h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/6cf7cffa-d011-4922-b1e8-5c0199c43652/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Code Formatter ]]></title>
            <link>https://velog.io/@sy_kim/Git-Code-Formatter</link>
            <guid>https://velog.io/@sy_kim/Git-Code-Formatter</guid>
            <pubDate>Thu, 26 Jun 2025 01:45:57 GMT</pubDate>
            <description><![CDATA[<h1 id="code-formatter-란">Code Formatter 란?</h1>
<ul>
<li><strong>코드 포매터(Code Formatter)</strong>는 개발자가 작성한 소스 코드를 미리 정해진 코딩 스타일(코딩 컨벤션)에 따라 자동으로 정렬하고, 들여쓰기, 공백, 괄호 위치, 줄바꿈 등 형식을 일관되게 맞춰주는 도구</li>
</ul>
<h3 id="코드-포매터의-주요-목적"><strong>코드 포매터의 주요 목적</strong></h3>
<ul>
<li>가독성 향상</li>
<li>코드 스타일 통일</li>
<li>비생산적인 반복작업 감소</li>
<li>코드 리뷰 효율화</li>
</ul>
<h2 id="gitlab-ci에-적용하기">GitLab CI에 적용하기</h2>
<ul>
<li>제한사항 : GitLab CI에서는 직접 Formatter를 적용할 수 없고, Formatter가 적용 되었는지 확인만 가능</li>
<li>따라서 pre-commit hook 을 사용하여 local 환경에서 commit 전에 Formatter를 구축하고자 함</li>
</ul>
<h2 id="pre-commit-을-사용한-코드-포맷터-적용하기">pre-commit 을 사용한 코드 포맷터 적용하기</h2>
<ul>
<li><code>git commit</code> 명령을 입력하면 실제 커밋이 생성하기 전 hook이 먼저 실행하여, 코드에 대한 검사나 자동화 작업을 수행 할 수 있음</li>
<li>주요 특징<ul>
<li>커밋 전에 코드 스타일 검사(lint), 포매팅, 테스트, 파일 검사 등 다양한 작업 자동화</li>
<li>pre-commit hook이 실패(비정상 종료)하면 커밋이 중단되어, 코드 품질이나 규칙 위반 방지</li>
<li><strong><code>git commit --no-verify</code></strong> 옵션을 사용하면 일시적으로 hook 실행을 건너뛸 수 있음</li>
</ul>
</li>
</ul>
<h3 id="pre-commit-hook-사용-방법">pre-commit hook 사용 방법</h3>
<ol>
<li><p><strong><code>pip install pre-commit</code></strong></p>
</li>
<li><p><strong><code>pip install black</code></strong></p>
</li>
<li><p>프로젝트 루트에 <strong><code>.pre-commit-config.yaml</code></strong> 파일을 만들어 어떤 검사/포매터를 적용할지 정의</p>
<pre><code class="language-yaml"> # .pre-commit-config.yaml 예시
 repos:
   - repo: local
     hooks:
       - id: black
         name: black
         entry: black
         language: system
         types: [python]</code></pre>
</li>
<li><p><strong><code>pre-commit install</code></strong> 명령으로 hook을 활성화하면, 이후 커밋 때마다 자동으로 설정된 작업이 실행됨</p>
</li>
<li><p>최초 적용시 수동으로 파일 검사 실시</p>
<pre><code class="language-bash"> pre-commit run --all-files</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Docker] Volume & Network]]></title>
            <link>https://velog.io/@sy_kim/Docker-Volume-Network</link>
            <guid>https://velog.io/@sy_kim/Docker-Volume-Network</guid>
            <pubDate>Fri, 11 Apr 2025 01:25:23 GMT</pubDate>
            <description><![CDATA[<h1 id="volume">Volume</h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/15cba7cc-aa01-4aa4-a6e9-75a3b83481b5/image.webp" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:40px">
    "출처 https://semaphore.io/blog/docker-volumes"
  </figcaption>


<p>도커에서는 호스트 PC의 데이터에 접근하기 위해 Volume과 Bind mount 두 가지 방식을 사용함.</p>
<p>그 외 컨테이너 내부에서 생성한 데이터는 컨테이너 삭제 시 함께 삭제됨</p>
<h2 id="docker-volume">Docker Volume</h2>
<p><strong>볼륨</strong>은 도커가 직접 관리하는 스토리지입니다. 도커 엔진이 <strong><code>/var/lib/docker/volumes/</code></strong> 디렉토리에 데이터를 저장하며, 컨테이너와 독립적으로 데이터를 유지할 수 있습니다.</p>
<ul>
<li><strong>도커 관리</strong>: 볼륨은 도커 CLI 및 API를 통해 생성, 삭제, 관리할 수 있습니다.</li>
<li><strong>운영체제 독립성</strong>: 호스트 OS에 의존하지 않아 백업과 마이그레이션이 용이합니다.</li>
<li><strong>안전한 공유</strong>: 여러 컨테이너 간에 데이터를 안전하게 공유할 수 있습니다.</li>
<li><strong>유연성</strong>: 볼륨 드라이버를 통해 원격 스토리지나 클라우드에 데이터를 저장하거나 암호화 기능을 추가할 수 있습니다.</li>
</ul>
<pre><code class="language-bash"># 볼륨 생성
docker volume create my_volume

# 볼륨 마운트
docker run -d -v my_volume:/app/data nginx</code></pre>
<h2 id="bind-mount">Bind mount</h2>
<p><strong>바인드 마운트</strong>는 호스트 시스템의 특정 디렉토리나 파일을 컨테이너 내부에 연결(mount)하는 방식입니다. 호스트 파일 시스템의 절대 경로를 사용해야 하며, 도커가 아닌 사용자가 직접 관리합니다.</p>
<ul>
<li><strong>호스트 의존성</strong>: 호스트 OS 파일 시스템 구조에 의존적입니다.</li>
<li><strong>직접 접근 가능</strong>: 호스트와 컨테이너 간에 실시간으로 데이터를 동기화할 수 있습니다.</li>
<li><strong>보안 위험</strong>: 컨테이너 내 프로세스가 호스트 파일 시스템을 수정할 수 있어 보안 문제가 발생할 수 있습니다.</li>
<li><strong>개발 환경 적합</strong>: 로컬 개발 환경에서 소스 코드 변경 내용을 즉시 반영하기에 유리합니다.</li>
</ul>
<pre><code class="language-bash"># 바인드 마운트
docker run -d -v /path/on/host:/app/data nginx</code></pre>
<h2 id="비교">비교</h2>
<table>
<thead>
<tr>
<th><strong>특징</strong></th>
<th><strong>볼륨 (Volume)</strong></th>
<th><strong>바인드 마운트 (Bind Mount)</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>관리 주체</strong></td>
<td>도커가 관리</td>
<td>사용자가 직접 관리</td>
</tr>
<tr>
<td><strong>저장 위치</strong></td>
<td><strong><code>/var/lib/docker/volumes/</code></strong></td>
<td>호스트 파일 시스템의 지정된 경로</td>
</tr>
<tr>
<td><strong>운영체제 의존성</strong></td>
<td>운영체제 독립적</td>
<td>운영체제 및 파일 시스템 구조에 의존적</td>
</tr>
<tr>
<td><strong>보안성</strong></td>
<td>상대적으로 안전</td>
<td>보안 위험 존재 (호스트 파일 시스템 수정 가능)</td>
</tr>
<tr>
<td><strong>사용 용도</strong></td>
<td>데이터 영속성 및 여러 컨테이너 간 데이터 공유</td>
<td>로컬 개발 환경에서 코드 동기화 및 테스트</td>
</tr>
<tr>
<td><strong>CLI 지원 여부</strong></td>
<td>도커 CLI로 생성, 삭제, 관리 가능</td>
<td>도커 CLI로 직접적인 관리 불가</td>
</tr>
</tbody></table>
<h1 id="network">Network</h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/65cdf388-17cd-4110-82fc-aca7073cfc11/image.jpg" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:40px">
    "출처 https://blog.octo.com/how-does-it-work-docker-part-2-swarm-networking"
  </figcaption>

<h2 id="local-network"><strong>Local Network</strong></h2>
<p><strong>로컬 네트워크</strong>는 같은 도커 호스트 내에서 실행 중인 컨테이너 간 통신을 가능하게 하는 기본적인 네트워크 유형입니다. 이는 주로 브리지(Bridge) 네트워크 드라이버를 사용합니다.</p>
<ul>
<li><strong>격리된 통신</strong>: 기본적으로 외부에서는 접근할 수 없으며, 같은 네트워크에 연결된 컨테이너들만 통신 가능합니다.</li>
<li><strong>컨테이너 이름 기반 통신</strong>: IP 주소 대신 컨테이너 이름으로 통신할 수 있습니다.</li>
<li><strong>사용 사례</strong>: 단일 호스트 내에서 실행되는 애플리케이션의 여러 컴포넌트 간 통신.</li>
</ul>
<pre><code class="language-bash"># 사용자 정의 브리지 네트워크 생성
docker network create my_bridge

# 컨테이너 실행 시 네트워크 연결
docker run -d --name app1 --network my_bridge nginx
docker run -d --name app2 --network my_bridge redis</code></pre>
<p>위의 경우, <strong><code>app1</code></strong>과 <strong><code>app2</code></strong>는 <strong><code>my_bridge</code></strong> 네트워크를 통해 서로 통신할 수 있습니다.</p>
<h2 id="bind-network"><strong>Bind Network</strong></h2>
<p><strong>바인드 네트워크</strong>는 도커 컨테이너가 호스트의 네트워크 스택을 직접 사용하는 방식입니다. 이는 <strong><code>host</code></strong> 드라이버를 사용하여 설정됩니다.</p>
<ul>
<li><strong>호스트와 동일한 네트워크 환경</strong>: 컨테이너가 호스트 머신의 IP 주소와 포트를 공유합니다.</li>
<li><strong>성능 최적화</strong>: 추가적인 가상화 계층이 없으므로 성능이 뛰어납니다.</li>
<li><strong>보안 제한</strong>: 컨테이너와 호스트 간 격리가 없기 때문에 보안성이 낮습니다.</li>
<li><strong>사용 사례</strong>: 고성능이 중요한 애플리케이션이나 테스트 환경.</li>
</ul>
<pre><code class="language-bash"># 호스트 네트워크를 사용하는 컨테이너 실행
docker run --net=&quot;host&quot; nginx</code></pre>
<p>위 명령어로 실행된 컨테이너는 호스트의 IP 주소와 포트를 그대로 사용합니다.</p>
<h2 id="overlay-network"><strong>Overlay Network</strong></h2>
<p>오버레이 네트워크는 여러 도커 호스트에 걸쳐 있는 컨테이너들 간의 통신을 가능하게 하는 가상 네트워크입니다. 이는 Docker Swarm 또는 Kubernetes와 같은 오케스트레이션 툴과 함께 사용됩니다.</p>
<ul>
<li><strong>멀티 호스트 지원</strong>: 여러 호스트에 분산된 컨테이너를 하나의 논리적 네트워크로 연결합니다.</li>
<li><strong>VXLAN 기반 통신</strong>: VXLAN 기술을 사용해 캡슐화된 패킷을 전송합니다.</li>
<li><strong>확장성</strong>: 대규모 분산 시스템에서 유용합니다.</li>
<li><strong>사용 사례</strong>: 마이크로서비스 아키텍처, 클러스터링 환경.</li>
</ul>
<pre><code class="language-bash"># Docker Swarm 초기화
docker swarm init

# 오버레이 네트워크 생성
docker network create -d overlay my_overlay

# 오버레이 네트워크를 사용하는 서비스 생성
docker service create --name web --network my_overlay nginx</code></pre>
<p>여러 노드에 걸쳐 있는 컨테이너들이 <strong><code>my_overlay</code></strong>를 통해 서로 통신할 수 있습니다.</p>
<h2 id="비교-1"><strong>비교</strong></h2>
<table>
<thead>
<tr>
<th><strong>특징</strong></th>
<th><strong>로컬 네트워크</strong></th>
<th><strong>바인드 네트워크</strong></th>
<th><strong>오버레이 네트워크</strong></th>
</tr>
</thead>
<tbody><tr>
<td><strong>적용 범위</strong></td>
<td>단일 도커 호스트</td>
<td>단일 도커 호스트</td>
<td>여러 도커 호스트</td>
</tr>
<tr>
<td><strong>격리 수준</strong></td>
<td>높은 격리</td>
<td>격리 없음</td>
<td>높은 격리</td>
</tr>
<tr>
<td><strong>성능</strong></td>
<td>일반적</td>
<td>매우 우수</td>
<td>분산 환경에서 우수</td>
</tr>
<tr>
<td><strong>사용 사례</strong></td>
<td>단일 서버 애플리케이션</td>
<td>고성능 애플리케이션</td>
<td>마이크로서비스 및 클러스터링</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] PatchTST]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-PatchTST</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-PatchTST</guid>
            <pubDate>Tue, 08 Apr 2025 11:44:38 GMT</pubDate>
            <description><![CDATA[<h1 id="a-time-series-is-worth-64-words-long-term-forecasting-with-transformers">A TIME SERIES IS WORTH 64 WORDS: LONG-TERM FORECASTING WITH TRANSFORMERS</h1>
<p><a href="https://arxiv.org/pdf/2211.14730">https://arxiv.org/pdf/2211.14730</a>
<a href="https://github.com/yuqinie98/PatchTST">https://github.com/yuqinie98/PatchTST</a></p>
<h1 id="introduction">Introduction</h1>
<h2 id="목표"><strong>목표</strong></h2>
<p>다변량 시계열 예측 및 자기 지도 표현 학습을 위한 Transformer 기반 모델 설계</p>
<h2 id="논문의-제안--patchtst"><strong>논문의 제안 : PatchTST</strong></h2>
<ul>
<li><p><strong>Patching</strong>
시계열 데이터를 패치로 분할하여 Transformer에 입력 토큰으로 제공함
단일 시간 포인트 데이터는 문맥적 의미 정보를 유지하지 못하기 때문에 패치를 통해 지역적 의미 정보를 강화하고 전역적인 의미 정보를 포착함</p>
</li>
<li><p><strong>Channel-independence</strong>
각 채널이 동일한 임베딩과 Transformer 가중치를 공유함
다중 채널을 가지는 다변량 시계열 데이터의 채널 독립성은 각 입력 토큰이 단일 채널의 정보만 가지도록 하는 방식임</p>
</li>
</ul>
<h2 id="pathtst의-장점"><strong>PathTST의 장점</strong></h2>
<ul>
<li><p><strong>시간 및 공간 복잡성 감소:</strong> 기존 Transformer는 입력 토큰 수 N에 대해 복잡도가 $O(N^2)$ 이지만,  패칭을 적용하면 $N≈L/S$ 로 크게 줄일 수 있음.</p>
</li>
<li><p><strong>longer look-back window 학습 능력:</strong> <strong>look-back window 길이</strong> ($L$)을 늘리면 MSE를 0.518에서 0.397로 감소시킬 수 있는데, 패칭을 통해 입력 토큰 길이를 줄이는 방식을 통해 효과적으로 $L$ 길이를 늘릴 수 있음</p>
  <aside>
  💡

<p>  look-back window</p>
<p>  시계열 예측 모델에 입력으로 제공되는 과거 데이터의 길이 </p>
<p>  모델이 미래 값을 예측하기 위해 참고하는 과거 데이터의 범위를 나타냄</p>
  </aside>
</li>
<li><p><strong>표현 학습 능력:</strong> Self-Supervised Learing 활용하여 선형 모델보다 더 높은 표현력을 학습함</p>
</li>
</ul>
<h1 id="related-work">Related Work</h1>
<h2 id="patch-in-transformer"><strong>Patch in Transformer</strong></h2>
<ul>
<li><p>BERT (NLP) : character(문자) 기반 토크나이제이션 대신 subword 기반 토크나이제이션을 적용함</p>
</li>
<li><p>ViT (CV) : 이미지를 16×16 패치로 분할하여 Transformer에 입력함</p>
</li>
<li><p>BEiT, MAE와 같은 최신 작업은 모두 패치를 입력으로 사용함</p>
</li>
</ul>
<h2 id="transformer-based-long-term-time-series-forecasting"><strong>Transformer-based Long-term Time Series Forecasting</strong></h2>
<p>기존 어텐션 메커니즘의 복잡성을 줄여 롱 시퀀스에서 더 좋은 성능을 보였으나, 대부분의 모델에서 point-wise 어텐션을 사용함.</p>
<ul>
<li><p><strong>LogTrans</strong> : 컨볼루션 셀프 어텐션 레이어와 LogSparse 설계를 사용하여 키와 쿼리 간 point-wise 곱셈을 피했지만, 여전히 단일 타임 포인트에 기반한 설계임</p>
</li>
<li><p><strong>Autoformer</strong> : decomposition &amp; auto-correlation 아이디어를 차용하여 전통적인 시계열 분석 방법론을 통합하였음. 패치 수준의 관계 정보를 위해 auto-correlation을 사용하지만, 완전 자동화된 설계를 달성하지 못함</p>
</li>
<li><p><strong>Triformer</strong> : 패치 어텐션을 제안했지만, 이는 패치 내 의미적 중요성을 드러내거나 입력 단위로 취급하지 않고 단순히 pseudo timestamp를 쿼리로 사용하는 방식임</p>
</li>
</ul>
<h1 id="method">Method</h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/7588bce9-b4d9-4a01-8993-347fe92fd33c/image.png" alt=""></p>
<ul>
<li><p><strong>문제 정의:</strong> 다변량 시계열 샘플 집합의 각 샘플 look-back window $L$ $(x_1, ..., x_L)$이 주어졌을 때, 미래 $T$개의 값 $(x_{L+1}, ..., x_{L+T})$을 예측함
($x_t$ : $t$ 시간에서의 $M$ 차원 벡터)</p>
</li>
<li><p>인코더 구조는 vanilla Transformer를 사용함</p>
</li>
</ul>
<h2 id="model-structure">Model Structure</h2>
<h3 id="forward-process"><strong>Forward Process</strong></h3>
<ol>
<li><p>$i$-번째 채널의 길이가 $L$인 단일 변수 시계열을 $x^{(i)}_{1:L} = (x^{(i)}_1, ..., x^{(i)}_L)$ 로 정의함
$(i = 1, ..., M)$</p>
</li>
<li><p>$M$개의 단일 변수 시계열로 분할된 입력 $(x_1, ..., x_L)$은 Transformer 백본에 독립적으로 입력하고, 예측 결과( $\hat{x}^{(i)} = (\hat{x}^{(i)}<em>{L+1}, ..., \hat{x}^{(i)}</em>{L+T}) \in \mathbb{R}^{1\times T}$) 를 얻음.</p>
</li>
</ol>
<h3 id="patching"><strong>Patching</strong></h3>
<p>패치를 사용하면 입력 토큰 수가 $L/S$ 로 줄어들며, 이는 메모리 사용량과 attention 연산의 복잡도를 크게 줄입니다($S$ 비율만큼 감소). 따라서 더 긴 데이터를 처리할 수 있어 예측 성능이 향상됨</p>
<p>각 단일 변수 시계열 $x^{(i)}$는 overlapped 패치 또는 non-overlapped 패치로  나뉨.</p>
<ul>
<li><p>패치 길이를 $P$, 스트라이드를 $S$라고 할때, 패치 개수 $N = \lfloor (L - P)/S + 1\rfloor$인,
패치 시퀀스 생성 : $x_p^{(i)} \in \mathbb{R}^{P\times N}$</p>
</li>
<li><p>패치화 하기 전에 원래 시퀀스의 끝에 마지막 값 $x_L^{(i)} \in \mathbb{R}$ 을 $S$번 반복하여 패딩</p>
</li>
</ul>
<h3 id="transformer-encoder"><strong>Transformer Encoder</strong></h3>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/e8341a72-5eb1-408b-b967-788e52d57eb2/image.png" alt=""></p>
<ul>
<li><p>패치화된 데이터는 learnable linear projection ($W_p \in \mathbb{R}^{D\times P}$) 과 포지션 인코딩($W_{pos} \in \mathbb{R}^{D\times N}$)을 통해  $D$ 차원의 Transformer 잠재 공간으로 매핑됨. 
$x^{(i)}<em>d = W_p x^{(i)}_p + W</em>{pos}$,   $x^{(i)}_d \in \mathbb{R}^{D\times N}$</p>
</li>
<li><p>멀티 헤드 어텐션의 각 헤드($h = 1, ..., H$)는  Query, Key, Value 행렬로 변환됨</p>
<ul>
<li><p>Query : $Q_h^{(i)} = (x^{(i)}_d)^T W^Q_h$,  ($W^Q_h \in \mathbb{R}^{D\times d_k}$)</p>
</li>
<li><p>Key : $K_h^{(i)} = (x^{(i)}_d)^T W^K_h$,  ($W^K_h \in \mathbb{R}^{D\times d_k}$)</p>
</li>
<li><p>Value : $V_h^{(i)} = (x^{(i)}_d)^T W^V_h$,  ($W^V_h \in \mathbb{R}^{D\times D}$)</p>
</li>
</ul>
</li>
<li><p>scaled dot-product 어텐션을 사용하여 최종 출력 $O_h^{(i)} \in \mathbb{R}^{D \times N}$ 계산</p>
</li>
</ul>
<p>$$
(O_h^{(i)})^T = \text{Attention}(Q_h^{(i)}, K_h^{(i)}, V_h^{(i)}) = \text{Softmax}(\frac{Q_h^{(i)}(K_h^{(i)}) ^T}{\sqrt{d_k}}) V_h^{(i)}
$$</p>
<h3 id="loss-function"><strong>Loss Function</strong></h3>
<p>예측과 실제 값 간 차이를 측정하기 위해 평균 제곱 오차(MSE)를 사용함</p>
<p>$$
L = \mathbb{E}<em>x\frac{1}{M}\sum</em>{i=1}^M ||\hat{x}<em>{L+1:L+T}^{(i)} - x</em>{L+1:L+T}^{(i)}||_2^2
$$</p>
<h3 id="instance-normalization">Instance Normalization</h3>
<ul>
<li><p>훈련 데이터와 테스트 데이터 간 분포 이동 문제를 완화하기 위해 인스턴스 정규화를 적용함</p>
</li>
<li><p>각 시계열 인스턴스를 Z-score(평균 0, 표준편차 1) 정규화함</p>
</li>
<li><p>패치화 하기 전에 정규화를 하고, 예측 출력에 다시 평균과 표준편차를 더함</p>
</li>
</ul>
<h2 id="representation-learning">Representation Learning</h2>
<h3 id="단일-시간-포인트-masked-encoder-문제점"><strong>단일 시간 포인트 Masked Encoder 문제점</strong></h3>
<ol>
<li><strong>단일 시간 단계 수준에서의 마스킹</strong><ul>
<li>마스킹된 단일 데이터 포인트 값은 전후 값들의 상관 관계를 통해 쉽게 추론할 수 있음.</li>
<li>전체 시퀀스에 대한 높은 수준의 이해를 학습하지 못함</li>
</ul>
</li>
<li><strong>출력 레이어 설계 문제</strong><ul>
<li>모든 $L$ 시간에 해당하는 표현 벡터 $z_t ∈ \R^D$를 출력 레이어에 매핑하려면,  $M$개의 변수 각각이 예측 길이 $T$를 가지는 linear map은 $(L⋅D)×(M⋅T)$ 크기의 매개변수 행렬 $W$가 필요함</li>
<li>이런 행렬에서는 하나의 요소라도 값이 너무 커지면 과대 설계될 가능성이 있으며, 다운스트림 학습 샘플이 부족할 경우 오버피팅을 초래할 수 있음</li>
</ul>
</li>
</ol>
<h3 id="patchtst"><strong>PatchTST</strong></h3>
<ul>
<li>prediction head는 제거하고, $D×P$ 사이즈의 선형 레이어로 대체 함.</li>
<li>겹치는 부분 없이 패치화 하여 마스킹된 패치 정보가 혼합 되지 않도록 보장함</li>
<li>패치 인덱스를 무작위로 선택하여 0으로 마스킹하고, 모델은 MSE 손실을 사용하여 마스킹된 패치를 복원하도록 훈련함</li>
<li>각 시계열이 공유된 가중치 메커니즘을 통해 상호 학습되는 고유한 잠재 표현(latent representation)을 가지게 됨</li>
</ul>
<h1 id="experiments">Experiments</h1>
<h3 id="hyper-parameters">Hyper-parameters</h3>
<ul>
<li>Patch : 입력 시퀀스 길이는 512, 패치 크기는 12로 세팅해서 총 42개의 non-overlapped 패치 생성</li>
<li>Masking : 패치의 40%를 0값으로 마스킹</li>
<li>100 에포크 동안 SSL 학습</li>
</ul>
<h3 id="fine-tuning">Fine-tuning</h3>
<p>사전 학습된 모델이 준비되면, 학습된 표현을 평가하기 위해 두 가지 방식으로 지도 학습을 진행하였음</p>
<ul>
<li><strong>Linear probing</strong> : 모델에서 헤드를 제외한 나머지 부분은 고정(freeze)하고, 20 에포크 동안 학습</li>
<li><strong>End-to-end fine-tuning</strong>: 모델 헤드를 업데이트하기 위해 먼저 선형 프로빙을 10 에포크 동안 수행한 후, 전체 모델을 20 에포크 동안 학습</li>
</ul>
<h3 id="comparison-with-supervised-methods">Comparison with Supervised Methods</h3>
<ul>
<li><p>아래 표는 PatchTST(fine-tunning, linear probing, 처음부터 지도 학습)와 다른 지도 학습 방법의 성능을 비교함</p>
<p>  <img src="https://velog.velcdn.com/images/sy_kim/post/6b75d14a-315d-4b1a-a79f-e0e3f4aece15/image.png" alt=""></p>
</li>
</ul>
<ul>
<li>대규모 데이터셋에서 사전 학습 절차는 처음부터 지도 학습하는 것보다 더 좋은 성능을 보임</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Bimodal Masked Autoencoders]]></title>
            <link>https://velog.io/@sy_kim/Bimodal-Masked-Autoencoders</link>
            <guid>https://velog.io/@sy_kim/Bimodal-Masked-Autoencoders</guid>
            <pubDate>Tue, 08 Apr 2025 06:05:49 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>ECG 분류를 위한 Bimodal Masked autoencoders with Internal Representation Connection (BMIRC)</p>
<ol>
<li>주파수 스펙트럼을 MAE 사전 학습에 통합하여 ECG에 대한 포괄적인 이해 강화</li>
<li>Internal Representation Connections (IRC)을 설정하여 인코더와 디코더의 표현을 연결하여, 디코더의 수행 능력 향상</li>
</ol>
<h1 id="introduction">Introduction</h1>
<ol>
<li>목표</li>
</ol>
<ul>
<li>ECG 심장 부정맥 감지를 위한 Self-supervised Learning</li>
</ul>
<ol>
<li>Maked Autoencoders<ul>
<li>MAE는 원본 데이터의 잠재적 특성을 탐색하여 모델이 이러한 판별 가능한 세부 사항을 학습하도록 돕습니다.</li>
<li>인코딩 과정에서 점점 더 높은 수준의 정보로 표현하고, 디코딩을 통해 다시 저 수준 정보로 변환함. 그러나 인코더가 재구성에 지나치게 집중하게 되어 고수준 판별 표현을 학습하는 능력을 제한하게 되는 문제점이 있음</li>
</ul>
</li>
<li>BMIRC<ul>
<li>이산 푸리에 변환(DFT)을 사용하여 ECG를 주파수 스펙트럼으로 변환하고, 이를 독립적인 모달리티로 간주하여 타임 도메인 데이터를 보완함</li>
<li>Gated Representation Mixer (GRM)을 도입하여 인코더의 중간 레이어에서 추출한 표현을 디코더의 다양한 레이어에서 융합시킴. 이 과정을 IRC라고 명명함. 이 과정을 통해 디코더에게 다양한 수준의 정보를 제공하여 재구성을 지원하고, 인코더는 고수준의 판별 표현을 획득하도록 장려함</li>
</ul>
</li>
</ol>
<h1 id="related-works">Related Works</h1>
<h2 id="1-contrastive-learning-based-paradigm">1. Contrastive Learning based paradigm</h2>
<p>CL은 불변성 제약 조건(imposition of invariance constraints)을 부여하여 표현 학습에 집중</p>
<ol>
<li>Time-Frequency Consistency(TF-C)<ul>
<li>시간-주파수 도메인 간 일관성을 가정하며, 동일 샘플의 시간-주파수 도메인 표현 간 격차를 줄임으로써 사전 학습을 수행</li>
<li><a href="https://proceedings.neurips.cc/paper_files/paper/2022/file/194b8dac525581c346e30a2cebe9a369-Paper-Conference.pdf">https://proceedings.neurips.cc/paper_files/paper/2022/file/194b8dac525581c346e30a2cebe9a369-Paper-Conference.pdf</a></li>
</ul>
</li>
<li>Contrastive Predictive Coding(CPC)<ul>
<li>시간적 불변성을 강조하며, 후속 시간 단계에서 표현을 예측</li>
<li><a href="https://arxiv.org/pdf/1807.03748">https://arxiv.org/pdf/1807.03748</a></li>
</ul>
</li>
<li>Time-Series Representation Learning Framework via Temporal and Contextual Contrasting(TS-TCC) <ul>
<li>시간적 불변성을 강조하며, 서로 다른 뷰에서 동일 시간 범위의 표현 간 유사성을 극대화하려고 합니다.</li>
<li><a href="https://arxiv.org/pdf/2106.14112">https://arxiv.org/pdf/2106.14112</a></li>
</ul>
</li>
<li>Universal Time Series Representation Learning(TimesURL)<ul>
<li>은 시간-주파수 기반 증강 기법을 도입하여 시간적 속성을 보존하며, 대조 학습과 결합된 최적화 목표를 통해 세그먼트 수준 및 인스턴스 수준 정보를 캡처</li>
<li><a href="https://arxiv.org/pdf/2312.15709">https://arxiv.org/pdf/2312.15709</a></li>
</ul>
</li>
</ol>
<h2 id="2-masked-data-modeling-based-paradigm">2. Masked data modeling based paradigm</h2>
<p>오토인코더를 사용하여 마스킹 되지 않은 데이터를 기반으로 마스킹된 데이터를 재구성하는 학습</p>
<ol>
<li>Patch Time Series Transformer(PatchTST)<ul>
<li>시계열 데이터를 겹치지 않는 패치로 분할하여 학습</li>
<li><a href="https://arxiv.org/pdf/2211.14730">https://arxiv.org/pdf/2211.14730</a></li>
</ul>
</li>
<li>Time Series Masked Autoencoders(TimeMAE)<ul>
<li>시계열 데이터를 겹치지 않는 패치로 분할하여 학습</li>
<li><a href="https://arxiv.org/pdf/2303.00320">https://arxiv.org/pdf/2303.00320</a></li>
</ul>
</li>
</ol>
<h1 id="method">Method</h1>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/11941a49-650a-4693-b419-b433f9ba5c8a/image.png" alt=""></p>
<ol>
<li>데이터셋이 원본 ECG만 제공한다고 가정할 때</li>
<li>ECG와 주파수 스펙트럼의 패치 임베딩(시간-주파수 패치 임베딩) 생성</li>
<li>사전 학습 단계에서는 마스킹 후 시간-주파수 패치 임베딩이 이중 모달 공동 인코더(bimodal joint encoder)에 입력</li>
<li>모달리티별 디코더를 사용하여 내부 표현 연결(IRC)을 통해 마스킹된 데이터를 재구성합니다.</li>
<li>미세 조정 단계에서는 디코더가 global average pooling layer와 linear layer로 구성된 분류기로 대체</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/faaa7a0b-1be2-4d1d-ae07-d4d183071d29/image.png" alt=""></p>
<h2 id="1-time-frequency-patch-embedding">1. Time-Frequency Patch Embedding</h2>
<h3 id="discrete-fourier-transform-dft">Discrete Fourier Transform (DFT)</h3>
<p>$$
f_i(k) = \text{DFT}[t_i] = \sum_{n=0}^{N-1} t_i(n) \cdot e^{-j\frac{2\pi}{N}kn}, \quad k = 0, 1, \dots, N-1
$$</p>
<ul>
<li><p><em>n</em>은 시간 지점의 인덱스를 나타내고, <em>k</em>는 ECG 내 다양한 주파수</p>
</li>
<li><p>안티 앨리어싱(aliasing)을 방지하기 위해 DFT 변환 간격 <em>N</em> 의 길이는 ECG 길이 <em>L</em> 보다 크거나 같음 (<em>N</em>=<em>L</em>)</p>
</li>
<li><p>주파수 스펙트럼의 대칭성을 고려하여 $f_i$의 첫 번째 절반을 선택하여 중복성을 줄임 ($f_i^∗∈R^{L/2}$)</p>
</li>
</ul>
<h3 id="patch-embedding">Patch Embedding</h3>
<ul>
<li><p>대부분의 방법이 시계열 데이터를 점 단위(point-by-point) 방식으로 처리하는 상황에서, 패치를 기반으로 한 모델링의 효과가 입증되었음. 마스킹된 포인트를 추론하는 것보다 마스킹된 영역을 학습하는 것이 더 어려운 태스크이며, 패치 기반 재구성 태스크는은 사전 학습된 모델이 더 많은 잠재적인 정보를 학습하도록 유도함</p>
</li>
<li><p>ECG(심전도)와 주파수 스펙트럼을 중첩되지 않는(non-overlapping) 패치로 나누어 인코딩함
$T=[t_1,t_2,…,t_C]∈\R^{L×C}$ , $F=[f_1^∗,f_2^∗,…,f_C^∗]∈\R^{L/2×C}$<br>(<em>C</em>는 ECG 리드(lead)의 개수)</p>
</li>
<li><p>두 가지 1D 컨볼루션 레이어를 사용하여 두 가지 모달리티에서 패치를 인코딩</p>
</li>
<li><p>컨볼루션 커널 크기는 <em>S</em>×<em>C</em> 이고 stride는 <em>S</em> 로 설정되어, 개별 패치의 독립성 보장
(각 패치의 길이는 <em>S</em> )</p>
</li>
<li><p>MAE(Masked Autoencoder)를 따르며, 패치 임베딩은 토큰으로 표시되며 각 토큰은 특정 패치에 대한 임베딩에 해당합니다. T와 F의 토큰은 각각 다음과 같이 표현됩니다:
$Z_t=[z^t_1,z^t_2,...,z^t_{L/S}]∈\R^{L/S×D},Z_f=[z^f_1,z^f_2,...,z^f_{L/2S}]∈\R^{L/2S×D}$
(<em>D</em>는 컨볼루션 커널의 수. 즉, 각 모달리티의 임베딩 차원)</p>
</li>
<li><p>명확성을 위해 ECG와 주파수 스펙트럼은 이후 섹션에서 각각 $t$ 와 $f$로 표시함
시간 및 주파수 모달리티에서 얻어진 토큰 수는 $N_t=L/S,N_f=L/2S$</p>
</li>
</ul>
<h2 id="2-bimodal-joint-encoder">2. Bimodal joint encoder</h2>
<ul>
<li><p>모든 인코더는 동일한 구조의 Transformer 임.</p>
</li>
<li><p>learnable position embeddings ($PE_m \in \R^{N_m \times D}$)과 패치 임베딩 합연산
$\tilde{I}_m = Z_m + PE_m$</p>
</li>
<li><p>학습 가능한 전역 토큰 ($z^m_g \in \R^D$)이 각 모달리티에 도입되며, 여기서 &quot;g&quot;는 &quot;global&quot;을 나타내며 전역 정보 추출을 용이하게 함. 마지막으로 모달리티 $m∈{t,f}$에 대해 입력 토큰 $I_m∈\R^{N_m×D}$는 다음과 같이 표현됨
$I_m = \text{Concat}(z_g^m, \tilde{I}_m)$t</p>
</li>
</ul>
<h3 id="masking-strategy">Masking strategy</h3>
<ul>
<li><p>각 토큰이 동일한 확률로 랜덤하게 마스킹 되는 랜덤 마스킹 전략 채택하여, 다양한 배치와 에포크에서 수행되는 재구성 작업에 변동성이 생기게 만들었음</p>
</li>
<li><p>시간 및 주파수 모달리티의 데이터 특성이 다르기 때문에, 실험을 통해 ECG에는 50%, 주파수 스펙트럼에는 75%의 마스킹 비율 채택.</p>
</li>
<li><p>ECG가 주파수 스펙트럼보다 더 복잡하다는 점을 고려할 때, 상대적으로 낮은 마스킹 비율을 사용하면 모델 성능이 향상됨</p>
</li>
</ul>
<h3 id="overall-structure">Overall structure</h3>
<ul>
<li><p>모달리티 별 인코더에서는 각 모달리티 내 표현을 모델링하고, 공유 인코더에서 두 모달리키 간 상호작용을 캡처</p>
</li>
<li><p>시간 및 주파수 모달리티의 입력 토큰은 모달리티별 인코더 $E_m$에 입력되어 출력 표현 $O_m$을 생성함
$O_m = E_m(I_m)$, $m∈{t,f}$</p>
</li>
<li><p>공유 인코더에 전달되기 전에, 각 모달리티의 토큰은 레이어 정규화(LN)를 거쳐 초기 융합 수행</p>
</li>
<li><p>시간 및 주파수 모달리티의 전역 토큰(global tokens)이 추가되어 시퀀스의 첫 번째 위치에 삽입되며, 나머지 토큰은 순차적으로 연결(Concat)함</p>
</li>
<li><p>마지막으로 공유 인코더에서 self-attention을 이용해 bimodal 표현 간 심층 융합 수행
$O_m$ : 모달리티별 인코더 최종 레이어의 출력 표현 
$O_S$ : 공유 인코더의 출력 표현
$$
O_0^S = [o_g^t + o_g^f, \tilde{o}<em>1^t, \tilde{o}_2^t, \dots, \tilde{o}</em>{N_t}^t, \tilde{o}<em>1^f, \tilde{o}_2^f, \dots, \tilde{o}</em>{N_f}^f]
$$
$$
O_S = \Theta(O_0^S)
$$</p>
</li>
</ul>
<h2 id="3-internal-representation-connections-irc">3. Internal Representation Connections (IRC)</h2>
<ul>
<li><p>디코더들은 모두 트랜스포머 블록으로 구성되며, 인코더보다 작은 차원과 적은 레이어를 가지는 얕은(shallow) 구조</p>
</li>
<li><p>MAE 에서는 인코더 최종 레이어의 표현만 디코더로 전달되지만, 우리는 디코더가 점진적으로 재구성을 완료할 수 있도록 인코더 중간 레이어에서 더 많은 표현을 제공함 (IRC)</p>
</li>
<li><p>IRC는 디코더의 재구성 부담을 완화하여 인코더가 재구성보다는 판별 표현 학습에 집중할 수 있도록 하며, 결과적으로 이는 고수준 판별 표현 획득 능력을 향상시킴</p>
</li>
<li><p>공유 인코더의 출력 표현 $O_S$는 시간 및 주파수 모달리티에 대해 각각 $O_t$와 $O_f$로 분할됨</p>
</li>
<li><p>$O_t$와 $O_f$는 차원을 줄이기 위해 layer normalization-linear module을 거친 뒤 학습 가능한 위치 임베딩과 함께 마스킹된 토큰과 연결되어 모달리티별 디코더에 입력됨
(첫 번째 디코더 레이어에는 IRC 적용 안함)</p>
</li>
</ul>
<h3 id="gated-representation-mixer-grm">Gated Representation Mixer (GRM)</h3>
<p>디코더의 깊이가 $H$라고 가정할 때, 우리는 인코더에서 $H-1$개의 표현  $[V_1^m, V_2^m, \dots, V_{H-1}^m]$ 을 균일하게 선택하여 GRM으로 융합함</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/31e56927-f577-423b-8615-8a6ee5829e6d/image.png" alt=""></p>
<ul>
<li><p>모달리티 $m$에 대해 디코더의 $h$-번째 레이어에서 나온 표현 $U_h^m$는 게이트 메커니즘을 통해 인코더의 $h$-번째 표현 $V_h$ 와 융합</p>
</li>
<li><p>레이어 정규화-선형 모듈(layernorm-linear module, $P_h$)은 $V_h$ 를 $\tilde{V}_h$ 로 변환하여 융합이 필요한 표현 간 정렬을 용이하게함</p>
</li>
</ul>
<p>$$
\tilde{V}_h = P_h(V_h)
$$</p>
<ul>
<li><p>디코더 출력 $U_h^m$는 학습 가능한 마스킹 토큰을 포함하므로, 일관된 차원을 유지하기 위해 $\tilde{V}_h$의 해당 위치를 0 토큰으로 채움</p>
</li>
<li><p>게이트 유닛 $G_h$ 는 연결(concatenation)과 선형 변환(linear transformation)으로 구성되며, 입력 표현이 출력에 기여하는 비율을 제어함</p>
</li>
<li><p>시그모이드 활성화 함수(σ)는 기여도를 대응하는 가중치 벡터 $w_h \in \mathbb{R}^{N_m}$로 변환하고, 이는 각 토큰이 융합을 위한 가중치를 갖는다는 것을 의미함</p>
</li>
</ul>
<p>$$
w_h = σ(G_h(\tilde{V}_h, U_h^m))
$$</p>
<ul>
<li>토큰 수준에서, $\tilde{V}_h$와 $U_h^m$ 는 각각 가중치 추가(weighted addition)를 통해 $w_h$에 따라 맞춤형 융합 전략을 적용받게됨</li>
</ul>
<p>$$
C_h^m = w_h * \tilde{V}_h + (1 - w_h) * U_h^m
$$</p>
<ul>
<li>마지막으로 융합된 표현 $C_h^m$는 $(h+1)$-번째 트랜스포머 블록 $\Lambda_{h+1}$에 전달되어 $U_{h+1}^m$ 을 생성합니다.</li>
</ul>
<p>$$
U_{h+1}^m = Λ_{h+1}(C_h^m)
$$</p>
<h3 id="bimodal-reconstruction-loss"><strong>Bimodal Reconstruction Loss</strong></h3>
<p>최종 디코더 레이어 출력 $U_H^m$ 를 얻은 후, 이는 레이어 정규화-선형 모듈 $P_m$ 과 리셰이프(reshape) 작업을 통해 시간 또는 주파수 모달리티의 차원($\mathbb{R}^{C\times L}$  또는 $\mathbb{R}^{C\times L/2}$)에 맞게 변환. 
(재구성 손실은 마스킹된 토큰에서만 계산함)</p>
<p>$\tilde{U}_H^m = Reshape(P_m(U_H^m)), m \in {t, f}$</p>
<p>$L_{time} = MSE(U_H^{t}, T_{masked})$</p>
<p>$L_{freq} = MSE(U_H^{f}, F_{masked})$</p>
<p>$L_{recon} = αL_{time} + βL_{freq}$</p>
<p>( $T_{masked}$와 $F_{masked}$는 시간 및 주파수 모달리티에서 마스킹된 토큰의 ground truth, $α$와  $β$는 두 모달리티의 재구성 손실 가중치 )</p>
<h1 id="experimental-design">Experimental design</h1>
<h2 id="datasets-and-metrics">Datasets and metrics</h2>
<ol>
<li><strong>Ningbo</strong><ul>
<li>Ningbo First Hospital</li>
<li>12lead, 500Hz, 10초</li>
<li>34,905개</li>
</ul>
</li>
<li><strong>PTB-XL</strong><ul>
<li>Physikalisch-Technische Bundesanstalt</li>
<li>12lead, 500Hz, 10초</li>
<li>21,837개</li>
</ul>
</li>
<li><strong>Chapman</strong><ul>
<li>Chapman University 및 Shaoxing People&#39;s Hospital</li>
<li>12lead, 500Hz, 10초</li>
<li>10,247개</li>
</ul>
</li>
<li>Extravalidation<ul>
<li>ECG 다중 라벨 데이터셋(Georgia 및 Hefei)</li>
<li>두 데이터셋은 각각 10,344개와 20,335개의 샘플을 포함하며</li>
<li>샘플링 속도는 동일하게 500Hz이고 각 샘플의 길이는 10초</li>
</ul>
</li>
</ol>
<h3 id="data-preprocessing">Data preprocessing</h3>
<ol>
<li><p><strong>노이즈 제거(Denoising)</strong></p>
<p> 원본 ECG에서 흔히 발생하는 노이즈, 기준선 드리프트(baseline drift), 움직임 아티팩트(motion artifacts)는 모델의 분류 성능에 부정적인 영향을 끼침. 이를 완화하기 위해, 컷오프 주파수가 0.05Hz와 75Hz인 Butterworth 대역 통과 필터를 사용함</p>
</li>
<li><p><strong>다운샘플링(Downsampling)</strong></p>
<p> 계산 비용을 줄이기 위해 모든 ECG를 100Hz로 다운샘플링</p>
</li>
<li><p><strong>정규화(Normalization)</strong></p>
<p> 각 ECG 의 모든 리드에 인스턴스 정규화를 적용하여 분포 변화(distribution shift) 효과를 완화</p>
</li>
<li><p><strong>라벨 재구성(Label Reconstruction)</strong></p>
<p> 각 샘플에 할당된 SNOMED-CT 코드는 이산 카테고리 코드로 변환하였음</p>
<ul>
<li><p>Ningbo 데이터셋: 25개</p>
</li>
<li><p>PTB-XL 데이터셋: 22개</p>
</li>
<li><p>Chapman 데이터셋: 19개</p>
</li>
<li><p>Georgia 및 Hefei 데이터셋: 각각 23개와 34개</p>
<p>위 데이터셋은 클래스 불균형(class imbalance) 문제가 있으며, 이를 해결하기 위해 Fine-tuning 단계에서 클래스 가중치 전략을 채택했으며, 샘플 수가 적은 클래스에는 손실 계산 중 더 큰 가중치를 할당함</p>
</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문 리뷰] Self-Supervised Learning for ECG]]></title>
            <link>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MAE-MoCo</link>
            <guid>https://velog.io/@sy_kim/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-MAE-MoCo</guid>
            <pubDate>Thu, 27 Feb 2025 02:16:34 GMT</pubDate>
            <description><![CDATA[<h1 id="mae-moco">MAE-MoCo</h1>
<p><a href="https://openreview.net/pdf?id=iTjqAWYw2K">https://openreview.net/pdf?id=iTjqAWYw2K</a></p>
<h1 id="요약">요약</h1>
<ul>
<li><strong>Goal</strong> : ECG 해석 (심혈관 질환)</li>
<li><strong>Dataset</strong> : ECG 데이터</li>
<li><strong>Architecture</strong> : Hybrid Self-Supervised Learning(SSL) 학습 프레임워크<ol>
<li><strong>MAE-MoCo</strong> : masked autoencoder와 momentum encoder를 결합하여 생성+대조 동시 학습</li>
<li><strong>MAE-Nextclip</strong> : Nextclip + [CLS] 토큰으로 마스킹된 패치뿐만 아니라 전체 구조까지 재구성</li>
</ol>
</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li>12 Lead ECG 신호는 시계열(time series) 및 2차원 의료 이미지로 간주될 수 있음</li>
<li>ECG 분야에서는 SSL의  contrastive learning(CL) 및 generative learning(GL) 프레임워크가 뛰어난 성능을 보여준다.</li>
<li>CL 사전 연구
ISL(Inter-Subject Learning)는 ECG에 특화된 대조적 학습 방법 중 하나는, 이는 다변량 심장 신호(multivariate cardiac signals)에 맞춰 설계되었다. 이 대조적 학습 방법은 피험자 내 학습(intra-subject learning)과 피험자 간 학습(inter-subject learning) 기법을 결합한다. 피험자 내 학습은 동일한 환자의 ECG 신호에서 시간적 종속성(temporal dependency)을 분석하는 반면, 피험자 간 학습은 같은 환자의 증강된 신호를 양성 쌍(positive pairs) 으로, 다른 환자의 신호를 음성 쌍(negative pairs) 으로 취급하여 대조 손실(contrastive loss)을 계산한다.</li>
<li>GL 사전 연구
ECG 분야에서 제안된 모델들이 주로 마스킹된 오토인코딩(masked autoencoding, MAE) 기법을 기반으로 하고 있다. 마스킹된 시간축 오토인코더(MTAE)는 시간 축에서 마스킹된 ECG 패치를 찾도록 사전 학습되며, 마스킹된 리드 축 오토인코더(MLAE)는 리드 축을 따라 마스킹된 패치를 재구성한다. 이러한 모델들은 현재 ECG 분류(classification) 분야에서 최첨단(state-of-the-art) 성능을 기록하고 있다. 추가적으로, MassMIB는 마스킹 기법을 활용한 또 다른 방법으로, 인코더-디코더 쌍을 포함하여 시간축에서 마스킹된 신호를 인코딩하고 해당 마스킹된 패치를 복원하는 방법이다. 또한, Nextclip은 ECG 데이터를 다음 반심장 주기(semi-cardiac cycle)까지 예측하는 방식으로 재구성하는 사전 학습 과제를 수행한다.</li>
<li>최신 연구 경향
Transformer 기반 아키텍처 가 MAE와 결합되면서 GL에서 최첨단 성능을 달성하게 되었다. ViT 가 ECG 관련 사전 학습 작업에서 ResNet을 능가하는 성능을 보이고 있음. ViT의 주요 특징 중 하나는 [CLS] 토큰 을 포함한다는 점이며, ECG 사전 학습 단계에서의 최적화 가능성이 존재한다.</li>
<li>연구 목표
[CLS] 토큰을 포함한 강력한 사전 학습 작업을 설계하여 ECG 신호 표현을 위한 하이브리드 학습 프레임워크 를 구축하는 것. 이를 위해 두 가지 접근법을 탐구하였다.<ol>
<li>MAE-MoCo
1D-ViT 기반 MAE 프레임워크의 [CLS] 토큰 출력에 대조적 투영 헤드를 추가하는 방식.
ECG 신호 재구성과 positive-negative pairs 분류를 동시에 수행하는 인코더 개발.</li>
<li>MAE-Nextclip
Nextclip 디코더를 통합하여 생성적 자기지도 학습 프레임워크를 구성하는 방식.
마스킹된 패치 및 ECG의 다음 반심장 주기(semi-cardiac cycle)를 재구성</li>
</ol>
</li>
</ul>
<h1 id="method">Method</h1>
<p>MAE-MoCo 모델은 생성적(generative) 및 대조적(contrastive) 학습 관점을 통합하며, MAE-Nextclip은 두 가지 독립적인 생성적 학습 과제를 결합한다.</p>
<h2 id="a-model-architecture">A. Model Architecture</h2>
<h3 id="1-mae-moco"><strong>1) MAE-MoCo</strong></h3>
<p>MAE-MoCo 모델은 인코더(encoder), 디코더(decoder), 모멘텀 인코더(momentum encoder) 의 세 가지 주요 블록으로 구성된다. 인코더는 1D-ViT(1D Vision Transformer) 구조를 기반으로 하며, MAE와 MoCo의 두 부분으로 구성된다.</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/5bb1e164-5970-4e67-917a-416e7e69d927/image.png" alt="">
Fig 1. 파란색 : unmasked patches, 회색 : masked patches</p>
<ol>
<li><strong>MAE Encoder</strong><ol>
<li>원본 ECG 데이터 입력 (증강 없이 입력)</li>
<li>Patch Embedding 통과<ul>
<li>이 블록은 1D CNN 커널 및 스트라이드 크기가 패치 크기와 동일하며, ECG 데이터를 지정된 크기의 패치로 나누고 이를 숨겨진(hidden) 크기에 매핑한다.</li>
</ul>
</li>
<li>positional embedding 추가<ul>
<li>기존 연구에서 고정된 사인(sine) 임베딩을 사용하지만 [18], 본 연구에서는 학습 가능한 위치 임베딩(learnable positional embedding) 을 사용하여 MAE 및 MoCo 모두에 적용하였다.</li>
</ul>
</li>
<li>이후, 일부 패치는 랜덤 마스킹(random masking) 되어 숨겨진 상태로 유지되며, 마스킹되지 않은 패치만 디코더에서 사용된다.</li>
<li>최종적으로, 마스킹된 ECG 신호는 여섯 개의 연속적인 transformer 블록과 layer normalization 블록을 통과한다.</li>
</ol>
</li>
<li><strong>MoCo Encoder</strong><ol>
<li>랜덤하게 증강된 데이터 입력</li>
<li>이 신호는 패치 임베딩 및 위치 임베딩 레이어를 거치며, MAE 부분과 달리 마스킹을 적용하지 않는다. 대신, 학습 가능한 [CLS] 토큰 을 추가하여 ECG 신호의 전체 구조를 표현한다.</li>
<li>이후, 신호는 트랜스포머 블록(transformer block) 과 레이어 정규화(layer normalization) 블록을 거친다.</li>
<li>마지막으로, [CLS] 토큰만 추출하여 Linear-Batch Normalization-ReLU 블록을 통과해 최종 MoCo 출력을 얻는다.</li>
</ol>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/76479212-14e1-40d3-862f-ff037005e85b/image.png" alt="">
Fig 2. Encoder Block. X_org : 원본 ECG, X_generative : MAE에 사용된 masked latent representation, X_contrastive : MoCo에 사용된 latent representation.</p>
<ol>
<li><strong>Decoder</strong><ul>
<li>마스킹된 패치 재구성 단계. 마스킹된 패치는 생성적 학습 출력을 기반으로 하여 최소한의 오류로 복원되며, 이 과정에서 새로운 학습 가능한 파라미터가 적용된다.</li>
</ul>
<ol>
<li>디코더는 x_generative 입력을 받아 패치 임베딩 블록을 통과한다.<ul>
<li>이는 인코더의 패치 임베딩 블록과 구조적으로 다르며, 패치를 개별적으로 처리하지 않고 선형 레이어를 사용하여 직접 매핑한다.</li>
</ul>
</li>
<li>이후, 학습 가능한 [mask] 토큰 을 통해 마스킹된 패치를 디코딩한다.</li>
<li>디코더는 트랜스포머 블록과 레이어 정규화 블록을 거쳐 최종적으로 마스킹된 패치를 원래 ECG 신호에 가깝게 복원한다.</li>
</ol>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/f4f8382f-5ded-460b-8aae-02b70a91a4ae/image.png" alt="">
Fig 3. Decoder Block. masked patches를 재구성하기 위한 학습 가능한 [mask] 토큰</p>
<ol>
<li><strong>Momentum Encoder</strong><ul>
<li>MAE-MoCo의 모멘텀 인코더는 X_generative 출력을 무시하면서 동일한 인코더 아키텍처를 사용한다.</li>
<li>데이터 증강 기법은 MoCo와 다르게 설정되며, MoCo에서 사용되는 파라미터와 동일하지만 모멘텀 업데이트가 적용된다.</li>
<li>각 배치마다 새로운 데이터가 추가되고, 가장 오래된 배치는 제거되며, 새로운 배치가 추가되는 방식으로 MoCo 학습 원칙을 따른다.</li>
</ul>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/309e7719-d978-4bf6-9dde-143bc7a27232/image.png" alt="">
Fig 4. MAE-MoCo 프레임워크의 전체적인 흐름</p>
<h3 id="2-mae-nextclip"><strong>2) MAE-Nextclip</strong></h3>
<p>MAE-Nextclip 프레임워크는 공유된 인코더(shared encoder) 와 MAE 및 Nextclip 복원을 위한 두 개의 개별 디코더(separate decoders) 로 구성된다. 아키텍처적으로나 기능적으로 이 모델은 MAE-MoCo 모델과 상당한 유사성을 갖는다.</p>
<ol>
<li><strong>MAE 인코더 구성 요소</strong> :  앞서 섹션 II-A1에서 설명한 내용과 동일하다.</li>
<li><strong>Nextclip Endoer</strong> : 원본 ECG 데이터를 Nextclip 데이터로 변환하는 과정이 포함된다.<ol>
<li>ECG 데이터의 일부 패치 내에서 랜덤한 시작 지점(random starting point) 을 선택한다.</li>
<li>선택된 랜덤 지점을 기준으로 반심장 주기(semi-cardiac cycle) 를 추출하여 정답 데이터(ground truth data) 로 사용한다.</li>
<li>이 랜덤 지점 이후의 ECG 데이터는 인코더에서 모두 0으로 설정된다.</li>
<li>변환된 ECG 데이터는 패치 임베딩(patch embedding) 및 위치 임베딩(positional encoding) 을 적용한 후 Nextclip 디코더로 전달된다.</li>
<li>또한, [CLS] 토큰 도 Nextclip 디코더에서 활용할 수 있도록 추가된다.</li>
<li>최종 신호는 transformer 블록과 layer normalization 블록을 연속적으로 통과하여 변환된다.</li>
</ol>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/60b55183-b480-4cb1-b73a-21456bef4f7d/image.png" alt="">
Fig 5. MAE-Nextclip Encoder.
<strong>Y_Nextclip</strong> : Nextclip 디코더를 거쳐 복원될 ECG 신호의 정답 데이터(ground truth ECG cycle)
<strong>X_generative,Nextclip &amp; X_generative,MAE</strong> : 각각 Nextclip 및 MAE에 대한 인코딩된 신호</p>
<ol>
<li><strong>Nextclip 디코더 구성:</strong><ul>
<li>MAE 디코더는 앞서 제시된 Fig 3과 동일한 구조를 갖는다.</li>
</ul>
<ol>
<li>Nextclip 디코더는 [CLS] 토큰을 먼저 추출한 후, 패치 임베딩 단계를 거친다.</li>
<li>이후, [mask] 토큰을 사용하지 않고, transformer block, layer normalization, linear layer을 순차적으로 통과하면서 Nextclip 신호를 재구성한다.</li>
</ol>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/d57f0053-ff64-4573-b6d1-2b6b902a291b/image.png" alt="">
Fig 6. MAE-Nextclip Decoders</p>
<p><img src="https://velog.velcdn.com/images/sy_kim/post/1fd4ccb2-ad78-4cfa-8c08-34dd3c4f914a/image.png" alt="">
Fig 7. MAE-Nextclip 프레임워크의 전체적인 흐름</p>
<h2 id="b-training-strategies"><strong>B. Training Strategies</strong></h2>
<h3 id="1-pretraining">1) Pretraining</h3>
<ul>
<li><strong>데이터셋</strong><ul>
<li>China Physiological Signal Challenge 2018 (CPSC2018)</li>
<li>Physikalisch-Technische Bundesanstalt XL (PTB-XL)</li>
<li>Chapman dataset</li>
</ul>
</li>
<li><strong>전처리</strong> : Z-score normalization</li>
<li><strong>손실 함수</strong> : 두 가지 손실 함수를 결합하여 사용<ul>
<li><strong>Generative Loss</strong><ul>
<li>원본 데이터와 마스킹된 패치의 복원된 데이터를 비교</li>
<li><strong>MSE Loss</strong> : $\mathcal{L}<em>{MAE} = \frac{1}{n} \sum</em>{i=1}^{n} (x_{\text{org},i} - x_{\text{reconstructed},i})^2$</li>
</ul>
</li>
<li><strong>Contrastive Loss</strong><ul>
<li>동일한 ECG에서 인코딩된 키와 쿼리는 positive pairs 으로 간주되며, 그렇지 않으면 negative pairs 로 처리</li>
<li>positive sample : $\ell_{\text{pos}} = x_{\text{cont},q} * x_{\text{cont},k}$</li>
<li>negative sample : $\ell_{\text{neg}} = x_{\text{cont},q} * \text{queue}$</li>
<li><strong>Cross-Entropy Loss</strong> : $\mathcal{L}<em>{MoCo} = CE([\ell</em>{\text{pos}}, \ell_{\text{neg}}], \text{labels})$</li>
</ul>
</li>
<li><strong>MAE-MoCo</strong><ul>
<li>$\mathcal{L}<em>{MAE-MoCo} = \mathcal{L}</em>{MoCo} + \alpha \mathcal{L}_{MAE}$</li>
</ul>
</li>
<li><strong>MAE-Nextclip</strong><ul>
<li>$\mathcal{L}<em>{Nextclip} = \frac{1}{n} \sum</em>{i=1}^{n} (y_{\text{Nextclip},i} - x_{\text{reconstructed},\text{Nextclip},i})^2$</li>
<li>$\mathcal{L}<em>{MAE-Nextclip} = \mathcal{L}</em>{Nextclip} + \alpha \mathcal{L}_{MAE}$</li>
</ul>
</li>
<li><strong>α 조정</strong><ul>
<li>MAE-MoCo: α = 40(default) , 20, 10</li>
<li>MAE-Nextclip: α = 2(default), 1, 0.5</li>
</ul>
</li>
</ul>
</li>
<li>학습 과정 및 하이퍼파라미터 설정<ul>
<li>모델은 학습 중 배치별 손실을 최소화하도록 가중치를 업데이트함.</li>
<li><strong>warm-up training</strong> : 초반 특정 횟수의 epoch 동안 학습률을 선형적으로 증가시켜 학습 안정성을 높이고 수렴 속도를 가속화함.</li>
<li><strong>학습률 스케줄링</strong> : 학습이 진행될수록 학습률을 점진적으로 감소시킴. validation loss 가  일정 에폭 이후 개선되지 않으면 학습률을 특정 비율로 감소시킴.</li>
</ul>
</li>
</ul>
<h3 id="2-fine-tuning"><strong>2) Fine-tuning</strong></h3>
<ul>
<li><strong>데이터셋</strong> : ****Chapman dataset</li>
<li><strong>모델 구조 변경</strong> : 인코더만 유지, 나머지 구성 요소(모멘텀 인코더 및 디코더)는 제거</li>
<li>MAE-MoCo 모델의 인코더에서 사용된 projection head는 파인튜닝에서 사용되지 않음.</li>
<li><strong>학습 방법론</strong> : 두 가지 방법 사용<ul>
<li>[CLS] 토큰과 연결된 선형 분류기(linear network)를 추가하여 최적의 분류를 수행하도록 설계됨.</li>
</ul>
<ol>
<li><strong>Linear Probe 방식</strong><ul>
<li>사전 학습된 인코더의 모든 학습 가능한 파라미터를 고정(동결) 한다.</li>
<li>[CLS] 토큰과 연결된 새로운 선형 네트워크의 파라미터만 업데이트됨.</li>
<li>이 방법은 인코더를 feature extractor 로 사용하여,<ul>
<li>선형 분류기가 성능을 얼마나 잘 발휘하는지 평가할 수 있도록 함.</li>
<li>즉, 사전 학습의 성공 여부를 더 정확하게 평가할 수 있음.</li>
</ul>
</li>
</ul>
</li>
<li><strong>End-to-End Fine-tuning 방식</strong><ul>
<li>사전 학습된 인코더 파라미터를 초기화한 상태에서 학습을 시작함.</li>
<li>선형 계층과 인코더의 모든 파라미터를 end-to-end 방식으로 함께 학습</li>
</ul>
</li>
</ol>
</li>
<li><strong>목표</strong><ul>
<li>크로스 엔트로피 손실(Cross-Entropy Loss) 최소화</li>
<li>모델이 예측한 클래스 확률과 원-핫 인코딩된 정답 레이블 간의 차이를 줄이는 것.</li>
</ul>
</li>
<li><strong>전략</strong><ul>
<li>사전 학습과 동일하게 웜업 학습 및 학습률 스케줄링을 적용.</li>
<li>조기 종료(Early Stopping) 적용:<ul>
<li>검증 손실(validation loss)이 특정 epoch 동안 개선되지 않으면 학습을 중단.</li>
</ul>
</li>
<li>최적의 성능을 보인 모델을 테스트 단계에서 사용.</li>
<li>미세 조정에 대한 상세한 구성 정보는 표 VII(Table VII)에 제공됨.</li>
</ul>
</li>
</ul>
<h2 id="c-definition-of-the-metrics"><strong>C. Definition of the Metrics</strong></h2>
<ul>
<li>본 연구에서는 다중 레이블(multi-label) 분류기를 사용하기 때문에 &quot;One-vs-One AUC&quot; 방법을 적용함.</li>
<li><strong>One-vs-One AUC</strong>: 모든 가능한 클래스 쌍(class pairs) 간의 AUC 값을 평균 내어 최종 AUC 값을 계산.</li>
</ul>
<h1 id="discussion"><strong>DISCUSSION</strong></h1>
<h2 id="a-limitations"><strong>A. Limitations</strong></h2>
<ul>
<li>주요 한계점:<ol>
<li>높은 계산 비용</li>
<li>최적의 하이퍼파라미터를 찾기 어려움</li>
</ol>
</li>
<li>MAE-MoCo 및 MAE-Nextclip 프레임워크는 두 가지 서로 다른 사전 학습(pretext) 작업을 결합한 구조이므로,<ul>
<li>개별 작업보다 더 높은 계산 비용이 요구됨.</li>
<li>특히, 대조적 학습(contrastive learning) 모델은 생성적 학습(generative learning) 모델보다 계산 비용이 더 많이 소모됨. 이는 이중 순전파(double forward pass) 가 필요하기 때문임.</li>
<li>결과적으로, MAE-MoCo 및 MAE-Nextclip은 다른 모델보다 더 높은 계산 비용을 요구하는 모델로 간주될 수 있음.</li>
</ul>
</li>
<li>또 다른 한계점:<ul>
<li>학습 불가능한(non-trainable) 파라미터 증가</li>
<li>두 가지 다른 모델을 결합하면서 학습되지 않는(non-trainable) 파라미터의 개수가 증가함.</li>
<li>이러한 증가로 인해, 개별 모델보다 최적의 파라미터 세트를 찾는 작업이 더욱 복잡해짐.</li>
</ul>
</li>
</ul>
<h2 id="b-future-work"><strong>B. Future Work</strong></h2>
<ol>
<li>백본 네트워크 개선<ul>
<li>Convolutional Vision Transformer(CvT) 를 도입한 ViT 구조가 ImageNet등 에서 강력한 성능을 보임.</li>
</ul>
</li>
<li>다양한 태스크 조합 실험<ul>
<li>예를 들어, Centerclip 태스크 는 현재 구간이 아닌 랜덤하게 선택된 ECG 세그먼트를 재구성하는 방식으로 작동함.</li>
<li>또한, SimCLR, BYOL, DINO [29]와 같은 대체 태스크를 활용하여 조합 가능함.</li>
<li>또 다른 전략: 자기지도 학습(self-supervised learning) 태스크의 수를 증가시키는 방법.</li>
</ul>
</li>
<li>다양한 생리학적 신호(Physiological Signals) 활용<ul>
<li>ECG와 같은 특성을 가진 다른 생리 신호(Physiological Signals) 모델 실험</li>
<li>예: 시간 시계열(time series) + 2D 이미지 를 결합하여 조합 전략의 효과를 더욱 잘 입증 가능</li>
</ul>
</li>
<li>하이퍼파라미터 튜닝 강화<ul>
<li>MAE-MoCo 및 MAE-Nextclip에는 많은 고정 파라미터(fixed parameters) 가 포함됨.</li>
<li>기존 프레임워크에서 최적의 값으로 설정된 파라미터가 반드시 MAE-MoCo 및 MAE-Nextclip에 최적이라고 보장할 수 없음.</li>
<li>따라서, 제안된 모델들은 더욱 최적화된 파라미터를 가질 가능성이 있음.</li>
</ul>
</li>
</ol>
<h1 id="hyperparameters">Hyperparameters</h1>
<ul>
<li><strong>Encoder</strong><ul>
<li>Data augmentation techniques: Erase, time out, partial noise, drop, and RRC</li>
<li>Type of patch embedding: 1D Convolution</li>
<li>Output channels of patch embedding: 512</li>
<li>Kernel size of patch embedding: 25</li>
<li>Stride of patch embedding: 25</li>
<li>Size of positional embedding: (145, 512)</li>
<li>Size of [CLS] token: (1, 512)</li>
<li>Type of transformer block: Attention and linear</li>
<li>Dimension of transformer: 512</li>
<li>Number of transformer blocks: 6</li>
<li>Number of attention heads: 16</li>
<li>MLP ratio of transformer: 2</li>
<li>Activation of transformer: GELU</li>
<li>Output features of layer normalization: 512</li>
<li>Type of projection head: Linear and 1D BatchNorm</li>
<li>Number of blocks in projection head: 3</li>
<li>Output features of MLP in projection head: 128</li>
<li>Output features of projection head: 128</li>
</ul>
</li>
<li><strong>Decoder</strong><ul>
<li>Type of patch embedding: Linear</li>
<li>Output channels of patch embedding: 256</li>
<li>Size of [mask] token: (1,256)</li>
<li>Size of positional embedding: (144, 256)</li>
<li>Type of transformer block: Attention and linear</li>
<li>Dimension of transformer: 256</li>
<li>Number of transformer blocks: 1</li>
<li>Number of attention heads: 8</li>
<li>MLP ratio of transformer: 2</li>
<li>Activation of transformer: GELU</li>
<li>Output features of layer normalization: 256</li>
<li>Type of size matcher network: Linear</li>
<li>Output channels of size matcher network: 25×1225×12</li>
</ul>
</li>
<li><strong>Momentum Encoder</strong><ul>
<li>Momentum constant: 0.99</li>
<li>Temperature of logits: 0.2</li>
<li>Queue size: 65536</li>
</ul>
</li>
<li>Pre-Training<ul>
<li>Epochs of MAE-MoCo: 710</li>
<li>Batch size: 64</li>
<li>Optimizer: Adam</li>
<li>Learning rate: 2×10−42×10−4</li>
<li>Warm-up epochs: 20</li>
<li>Learning rate scheduler (reduce rate): 0.9</li>
<li>Learning rate scheduler (number of bad epochs): 15</li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>