<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>haemin_jang.log</title>
        <link>https://velog.io/</link>
        <description>트렌디한 AI 개발자로 가는 길</description>
        <lastBuildDate>Mon, 28 Jul 2025 09:48:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>haemin_jang.log</title>
            <url>https://velog.velcdn.com/images/haemin_jang/profile/7bd1ff0b-2bde-48d8-97a5-5644e282d868/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. haemin_jang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/haemin_jang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Binning as a Pretext Task 논문 정리]]></title>
            <link>https://velog.io/@haemin_jang/Binning-as-a-Pretext-Task-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@haemin_jang/Binning-as-a-Pretext-Task-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 28 Jul 2025 09:48:57 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>오늘은 LG AI Research에서 연구한 ICML &#39;24 Binning as a Pretext Task: Improving Self-Supervised Learning in Tabular Domains 를 정리해보고자 한다. 일을 하다보면 도메인 특성상 tabular 데이터들을 대부분 다루게 되는데 이 논문에서 논하는 바와 같이 tabular 데이터는 대부분 딥러닝보다는 boost계열의 traditional ML 기반 모델들에서 좋은 성능을 보이는 것이 사실이다. 석사 시절 계속 딥러닝만을 다뤄왔다보니 비슷한 고민을 계속해왔는데 이런 tabular 데이터들을 딥러닝 기반 모델에서 잘 작동하게 하려는 시도들은 역시 흥미로울 수 밖에 없는 것 같다!</p>
</blockquote>
<h1 id="0-abstract">0. Abstract</h1>
<ul>
<li>LG AI Research 블로그에서 본 논문에 대해 짧게 요약해놓은 글의 일부를 빌리자면, 해당 논문을 이렇게 소개하고 있다.<blockquote>
<p>간략히 설명하자면, 본 논문에서는 Tabular Learning에서의 딥 네트워크의 한계점을 극복하기 위해 Binning Algorithm을 활용하여 수치형(Numerical) 변수를 범주형(Discrete) 변수로 변환하고, Unsupervised Learning에서 Bin Index에 해당하는 범주형 변수를 예측하는 문제(Pretext Task)를 수행하는 방식으로 Representation을 학습합니다. 학습된 Representation은 데이터 별 Downstream Task에 따라 Linear Evaluation 또는 Fine-tuning을 통해 평가됩니다. Workshop 논문에서는 비교적 단순한 인코더(Encoder)인 MLP와 FT-Transformer 구조만 사용되었던 반면, 본 논문에서는 최근 발표된 Tabular Learning 모델 구조 중 하나인 T2G-Former[2] 가 추가로 활용되었습니다. 또한 본 방식의 성능 개선 효과를 설명할 수 있도록 Discussion에서 시각화를 포함한 다양한 실험 결과를 제안합니다.
<em><a href="https://www.lgresearch.ai/blog/view?seq=465">[ICML 2024] Tabular Learning 연구 동향</a> 중 발췌</em></p>
</blockquote>
</li>
</ul>
<h1 id="1-introduction">1. Introduction</h1>
<ul>
<li>DNN이 뛰어난 representation learning 능력을 가진 것은 데이터셋의 본질적 특성을 고려해 적절한 inductive bias를 활용하는 데 달려 있다. 그러나, tabular 데이터의 경우에는 수치형 및 범주형의 heterogeneous한 피처들을 통일된 방식으로 잘 처리하고 구간별 함수(Piecewise function)과 같은 irregular 함수를 파악하는 것이 중요해 XGBoost, CatBoost같은 트리 기반 ML 알고리즘이 꾸준히 강세를 보여왔다. 딥러닝 모델들은 본질적으로 smooth한 함수를 잘 학습하는 구조인 반면에, 트리 기반 모델들은 연속형 수치를 binning하거나, 범주형 피처를 분리된 노드로 잘 나누면서, 실제 데이터가 가지는 piecewise function의 형태, 즉 불연속성과 locality 을 잘 포착하기 때문이다.</li>
<li>이러한 tabular 데이터의 heterogenity를 완화하기 위해 기존 연구들은 feature tokenizer나 abstract layer같은 추가 모듈을 활용해왔으나, 큰 성능 개선을 보이지 못했다고 한다.</li>
<li>저자는 tree-based 근본적으로 적용될 수 없는 unsupervised learning 형식의 딥러닝 task를 다루기 위해, classical <strong>binning</strong> 방법을 autoencoding-based self-supervised learning(SSL)에 제안한다. <p align="center"><img src="https://velog.velcdn.com/images/haemin_jang/post/06a238a7-a97f-4fca-a4da-ac8c97c53c6d/image.png" width=450px;></p>

</li>
</ul>
<h3 id="binning-as-a-pretext-task">Binning as a Pretext Task</h3>
<ul>
<li>제안 방법은 단순한데, raw-values를 복원하는 대신 연속성 수치를 일정한 개수의 구간(bin)으로 나누고, 그 <strong>bin index를 복원하도록 학습</strong>하는 것이다.</li>
<li>예컨대 원래 값이 74.6이면, 전체 분포에서 해당 값이 속하는 bin을 찾아내고, 그 bin index를 예측하는 task를 설정한다. 이건 결국 <strong>continuous → discrete mapping</strong>을 학습하는 구조가 되는데, 바로 이 점이 중요하다. 왜냐하면 트리 기반 모델들도 결국 이렇게 구간 나눔을 통해 학습을 하기 때문에, 이 방식은 딥러닝에 <strong>트리 모델의 inductive bias</strong>를 흉내 내는 효과를 줄 수 있기 때문이다.</li>
<li>논문에서는 bin index를 <strong>순서형 (BinRecon)</strong> 으로 다루거나, <strong>클래스형 (BinXent)</strong> 으로 다루는 두 가지 방식을 모두 소개한다. BinRecon은 regression-style로 학습하며, 순서 정보까지 고려한다. 반면 BinXent는 단순히 클래스 분류 문제처럼 다룬다. 이 두 가지 방식 모두 raw value를 복원하는 기존 방식(ValueRecon)에 비해 훨씬 더 <strong>불연속적인 패턴</strong>, 즉 비선형성이나 경계 정보 등을 더 잘 학습한다는 것이 핵심이다. 또 중요한 건, 이 방식은 모든 피처를 공통된 형태의 목표 (categorical target) 로 바꿔버리기 때문에, tabular 데이터가 가진 <strong>피처 간 heterogenity 문제</strong>도 자연스럽게 해결된다. 결국 모든 피처가 &#39;이 값이 어느 bin에 속하는가?&#39;라는 동일한 pretext task를 공유하게 되는 셈이다.</li>
</ul>
<h1 id="2-background">2. Background</h1>
<p align="center"><img src="https://velog.velcdn.com/images/haemin_jang/post/2b51dfdf-f704-478b-9bbb-e609d88e15dc/image.png" width=450px;></p>

<p>논문에서 제안하는 binning pretext task는 autoencoding 기반의 SSL 구조에서 동작하므로, 입력 데이터를 어떻게 변형하고, 어떤 목적 함수로 학습할 것인지를 서술한다.</p>
<p><strong>Input Transformation</strong></p>
<ul>
<li><p>SSL에서 input을 그대로 쓰게 되면 모델이 너무 쉽게 identity mapping만 학습해버려서 의미 있는 representation을 얻지 못한다. 그래서 일부 정보를 가리고(masking), 이를 복원하게 하는 방식이 자주 사용된다. tabular 데이터에서는 특히 중요한데, 각 값들이 다른 피처에 독립적으로 영향을 주기 때문에 조금만 변경해도 전체 의미가 달라질 수 있기 때문이다.</p>
</li>
<li><p>이 논문에서는 대표적인 두 가지 masking 전략을 쓴다:</p>
<ol>
<li><strong>Constant Replacement</strong>: 마스킹된 값을 각 피처의 평균값으로 교체
e.g. &#39;age&#39; 피처가 마스킹되면 전체 평균 나이로 대체
→ noise는 적지만 단조로운 입력이 될 수 있음</li>
<li><strong>Random In-Batch Replacement</strong>: 같은 배치 내 다른 샘플에서 값을 가져와 교체
e.g. 샘플 A의 &#39;income&#39;을 샘플 B의 값으로 교체
→ 데이터 다양성이 생기고, 더 어려운 복원 문제를 유도</li>
</ol>
</li>
<li><p>실제로 입력은 마스킹 벡터 m_i를 이용해 무작위로 일부 피처만 가리고, 나머지는 유지한 채 학습이 진행된다. 이런 방식은 CNN이나 Transformer처럼 순서를 고려하지 않는 MLP 기반 모델에서도 잘 작동한다.</p>
</li>
</ul>
<p align="center"><img src="https://velog.velcdn.com/images/haemin_jang/post/e247a3a5-40aa-41ee-a3db-c9d2df5a74f0/image.png" width=450px;></p>

<p><strong>SSL Objectives</strong></p>
<ul>
<li><p>변형된 입력을 넣고 나서, decoder가 학습할 목표는 여러 가지가 있다. 이 논문에서는 기존 방식인 두 가지 objective와, 새로운 방식인 binning 기반 두 가지 objective를 모두 비교한다.</p>
</li>
<li><p>기존 방식은 다음과 같다:</p>
<ol>
<li><strong>Value Reconstruction (ValueRecon)</strong>: 마스킹된 값을 정확한 원래 값으로 복원하도록 학습</li>
</ol>
<ul>
<li>L2 loss (평균제곱오차)를 사용</li>
<li>문제는 연속적인 부드러운 값을 학습하려는 경향이 생김 → irregular pattern에 취약</li>
</ul>
<ol start="2">
<li><strong>Mask Detection (MaskXent)</strong>: 어떤 피처가 마스킹됐는지를 맞추는 binary classification</li>
</ol>
<ul>
<li>cross-entropy loss 사용</li>
<li>이상치나 이상한 패턴을 포착하는 데는 유리하지만, 의미 있는 표현을 만드는 데는 한계가 있음</li>
</ul>
</li>
<li><p>저자는 여기에 새로운 pretext task 두 가지를 제안한다:</p>
<ol start="3">
<li><strong>Bin Reconstruction (BinRecon)</strong>: 원래 값이 속한 bin index (순서형) 을 예측</li>
</ol>
<ul>
<li>연속적인 값을 복원하지 않고, 구간에 해당하는 정수 인덱스만 맞춘다</li>
<li>L2 loss 사용 → 순서 정보 반영</li>
</ul>
<ol start="4">
<li><strong>Bin Classification (BinXent)</strong>: bin index를 범주형 class로 간주하여 one-hot classification</li>
</ol>
<ul>
<li>cross-entropy loss 사용 → 순서는 무시되지만 확실한 경계 학습 가능</li>
</ul>
</li>
<li><p>이 두 가지 binning 기반 objective는 기존의 smooth한 값 복원 방식과 다르게, 불연속적 경계(boundary information) 를 중심으로 representation을 학습하게 한다는 점에서 큰 차이가 있다.</p>
</li>
</ul>
<h1 id="3-method">3. Method</h1>
<p>이 논문의 핵심 아이디어는 tabular 데이터를 self-supervised 방식으로 학습할 때, 기존의 값 복원 방식 대신 <strong>binning된 정보를 예측하는 pretext task를 적용하자</strong>는 것이다. 앞에서 설명했듯이 기존의 value reconstruction이나 mask detection 방식은 연속적인 회귀값을 학습하거나 이진적인 마스킹 여부만 예측하기 때문에, 복잡한 경계 구조나 비선형적인 피처 변화를 충분히 학습하기 어렵다는 한계가 있었다. 이에 따라 저자들은 <strong>binning이라는 수단을 통해 “경계 정보(boundary information)”를 학습하는 inductive bias를 주자</strong>는 전략을 취한다. 구체적으로는, 각 피처의 값을 미리 정의된 구간들로 나눈 후 그 bin index를 예측하는 task를 통해, 모델이 해당 피처 값이 어떤 구간에 위치했는지를 예측하도록 설계한 것이다.</p>
<p>논문에서는 이 binning 기반 task를 구현하기 위해 3가지 세부 구성 요소를 정의한다: 
(1) binning scheme, (2) bin prediction objectives, (3) decoder design</p>
<h3 id="31-binning-scheme">3.1 Binning Scheme</h3>
<ol>
<li><strong>Equal Width Binning</strong>: 피처의 최소값과 최대값을 기준으로 같은 폭(width)으로 구간을 나눈다.
e.g. [0, 20), [20, 40), ..., [80, 100]</li>
<li><strong>Quantile Binning</strong>: 데이터를 빈도 기반으로 나누어 각 구간에 데이터가 균등하게 들어가도록 bin을 설정한다.<ul>
<li>특히 tabular 데이터는 분포가 비대칭인 경우가 많기 때문에, 이 방식이 더 안정적인 표현을 얻는 데 유리하다.</li>
</ul>
</li>
</ol>
<ul>
<li>모든 연속형 피처는 위 방식 중 하나로 정해진 개수의 bin으로 변환되고, 모델은 결국 그 bin index를 예측하는 형태로 학습된다. 이 bin index는 연속적인 값이 아니라 불연속적인 순서형 정보로 간주되며, 이로 인해 모델은 연속값보다 경계에 민감하게 반응하게 된다.</li>
</ul>
<h3 id="32-ssl-objectives-with-binning">3.2 SSL Objectives with Binning</h3>
<p>앞에서 Background에서 설명한 네 가지 self-supervised objective 중 이 논문에서 가장 주목하는 것은 바로 BinRecon과 BinXent이다.</p>
<p><strong>BinRecon</strong>: bin index를 숫자값(0, 1, 2, …) 으로 예측하는 회귀적 접근 (L2 loss)
<strong>BinXent</strong>: bin index를 범주형 class로 다루는 분류 접근 (Cross-entropy loss)</p>
<ul>
<li>저자들은 특히 bin을 클래스처럼 다루면 모델이 경계 기반의 명확한 의사결정을 학습할 수 있기 때문에 BinXent를 주요한 objective로 사용한다. 예를 들어, income이 49.9면 bin 2, 50.1이면 bin 3이라면 이 경계를 확실하게 인식해야 하는 상황에서, 회귀보다는 분류 방식이 더 명확한 구분을 유도할 수 있다. 결국 binning을 통해 모델이 feature의 분포를 단순히 기억하는 것이 아니라, 변곡점(threshold)이나 boundary에 민감하게 반응하는 representation을 학습하게 된다.</li>
<li>또한, 이 방식은 일반적인 regression과 달리 <strong>label smoothing이나 순서에 대한 명시적 정보 없이도 의미 있는 표현을 만들어낸다</strong>. 이게 바로 tabular 데이터에서 딥러닝 모델이 기존 tree 기반 모델에 비해 약했던 부분을 보완하는 지점이다.</li>
</ul>
<h3 id="33-decoder-design">3.3 Decoder Design</h3>
<ul>
<li><p>논문에서는 decoder를 간단한 MLP로 구현하며, 각 마스킹된 피처별로 해당 bin index를 예측하게 구성되어 있다. decoder는 다중 피처를 동시에 예측해야 하기 때문에 output 구조는 다음과 같다:</p>
<ul>
<li>전체 입력 피처 수: d</li>
<li>각 피처의 bin 개수: B (피처마다 다를 수 있음)</li>
<li>출력 차원: d × B → 피처별 bin class 확률 분포</li>
</ul>
</li>
<li><p>각 피처별로 예측된 bin 분포는 cross-entropy loss를 기준으로 학습된다. 즉, 모델은 각 피처마다 _이 값은 어느 bin에 속했는가?_를 확률 분포로 예측하고, 정답 bin에 가장 높은 확률을 주도록 최적화된다.</p>
</li>
</ul>
<h1 id="4-experiments">4. Experiments</h1>
<h3 id="41-experimental-setup">4.1 Experimental Setup</h3>
<ul>
<li>전체 실험은 대표적인 tabular benchmark인 <strong>UCI suite, OpenML datasets, SAPS</strong>에서 진행되었다. 특히 OpenML은 45개의 classification 태스크로 구성되어 있고, SAPS는 structured electronic health record 데이터로, 고차원 sparse한 real-world 데이터를 포함하고 있다는 점에서 일반화를 테스트하기에 적합한 환경이었다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/8e180631-b1a5-41bd-ae62-4ac5705a2aa9/image.png" alt=""></p>
<p>실험은 다음과 같은 두 설정으로 나뉜다:</p>
<ul>
<li><strong>Linear Evaluation</strong>: pretraining된 encoder를 freeze하고, linear classifier만 학습</li>
<li><strong>Fine-tuning</strong>: encoder와 classifier를 모두 학습 (end-to-end)</li>
</ul>
<p>또한 baseline 모델로는 다음을 비교 대상으로 삼았다:</p>
<ul>
<li><strong>Supervised (fully-labeled)</strong></li>
<li><strong>Self-supervised baselines</strong>: VIME, SCARF, DAE, TabNet MAE 등</li>
<li><strong>Transformer 기반</strong>: FT-Transformer</li>
</ul>
<h3 id="42-binning-objective-analysis">4.2 Binning Objective Analysis</h3>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/ef527eed-37d6-4aab-8e07-0e53a64cad10/image.png" alt=""></p>
<ul>
<li>먼저 저자들은 binning-based objective가 실제로 도움이 되는지를 살펴보기 위해 다양한 objective 간의 성능을 비교했다. 결과적으로는 BinXent objective가 다른 방식들, 예를 들어 MAE (masked autoencoding)나 BinRecon 방식에 비해 전반적으로 가장 높은 성능을 보였다.</li>
<li>특히, BinXent 방식은 fine-tuning 성능뿐 아니라 linear evaluation 성능에서도 뛰어난 결과를 기록한 반면, 기존 MAE 방식은 linear probing에서는 다소 부진했고, fine-tuning에서도 성능 편차가 컸다.</li>
<li>이는 결국 <strong>boundary information</strong>를 정확하게 인식하는 능력이 downstream task에 큰 영향을 미친다는 걸 보여주는 간접적인 증거라고 할 수 있다.</li>
</ul>
<h3 id="43-benchmarks-results-openml-uci-saps">4.3 Benchmarks Results: OpenML, UCI, SAPS</h3>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/a761381d-4ba1-47ed-8e90-57377218d480/image.png" alt=""></p>
<p><strong>OpenML</strong></p>
<ul>
<li>45개 classification task로 구성된 OpenML에서, binning pretraining은 supervised-only 방식과 거의 대등하거나 그 이상의 성능을 보였다. 특히 BinXent objective로 사전학습한 모델은 FT-Transformer에 비해 약 1.3%p 높은 평균 accuracy를 기록했다.</li>
<li>이는 OpenML은 다양한 데이터 스케일, feature type, imbalance level을 포함하고 있는데, supervised 방식은 full label을 쓰는 반면, SSL은 label 없이 학습되었다는 점에서 인상적인 결과라고 할 수 있다. 즉, label 없이도 더 나은 representation을 만들 수 있다는 걸 입증한 셈이다.</li>
</ul>
<p><strong>UCI Benchmarks</strong></p>
<ul>
<li>UCI 데이터셋은 tabular ML에서 가장 자주 쓰이는 벤치마크 중 하나다. 여기서도 binning 기반 pretraining은 기존 DAE (denoising autoencoder), VIME, SCARF 같은 SSL 방식들보다 지속적으로 높은 accuracy를 보였다. 특히 supervised baseline과의 격차를 줄였다는 점에서 binning objective의 generalizability를 다시 한번 확인할 수 있다.</li>
</ul>
<p><strong>SAPS (Electronic Health Record)</strong></p>
<ul>
<li>가장 challenging한 환경인 SAPS 실험에서는 더욱 인상적인 결과가 나왔다. 이 환경은 고차원 sparse feature와 real-world EHR 데이터 특성상 일반적인 pretraining이 어려운 환경인데도 불구하고, binning pretraining은 supervised baseline 대비 <strong>3.8%p 높은 AUROC</strong>를 기록했다.</li>
<li>이는 특히 linear evaluation setting에서도 관찰되어, encoder가 단순한 linear classifier만으로도 성능을 높일 만큼 유의미한 표현을 학습했다는 걸 보여준다.</li>
</ul>
<h1 id="5-discussion-ablation-study--robustness">5. Discussion: Ablation Study &amp; Robustness</h1>
<ul>
<li><p>저자들은 binning의 경계 개수(B)를 바꾸거나, binning 방법 (equal-width vs quantile)을 바꿨을 때 성능이 어떻게 변화하는지도 분석했다.</p>
<ul>
<li>일반적으로 bin 개수가 너무 작으면 정보가 부족해지고,</li>
<li>반대로 너무 많으면 overfitting되기 쉬웠다.</li>
<li>대체로 B=10~20 수준에서 가장 안정적인 성능을 기록했다.
<img src="https://velog.velcdn.com/images/haemin_jang/post/0c4e404c-ff1f-4f60-91ae-850477bc45a3/image.png" alt=""></li>
</ul>
</li>
<li><p>representation 품질을 PCA로 시각화했을 때도, binning-based encoder는 label 없이도 클래스 간 구조가 자연스럽게 분리된 표현 공간을 형성하고 있었다. 이는 단순한 회귀적 pretext task보다 정보적으로 훨씬 더 구조적인 표현을 만들고 있음을 보여주고 있다.</p>
<br>

</li>
</ul>
<p><strong>References</strong>
원문은 여기에! <a href="https://arxiv.org/abs/2405.07414">Binning as a Pretext Task: Improving Self-Supervised Learning in Tabular Domains</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ModernTCN 논문 정리]]></title>
            <link>https://velog.io/@haemin_jang/ModernTCN-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@haemin_jang/ModernTCN-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 16 Jun 2025 12:14:27 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>오늘은 ICLR &#39;24 Spotlight인 ModernTCN: Pure Convolution for Time Series Analysis 를 정리해보고자 한다. 직전에 리뷰한 PatchTST가 시계열 분야에서 CNN기반 모델들의 실효성에 대해 의문을 제기하면서 Transformer-based 모델을 제시했다면, 한 해가 지나고 ModernTCN이 기존의 TCN을 발전시킨 새로운 순수 Convolution-based 모델을 제시했다!</p>
</blockquote>
<h1 id="1-introduction--related-work">1. Introduction &amp; Related Work</h1>
<ul>
<li>최근 트랜스포머 및 MLP 기반 모델들이 시계열 분야에서 강세를 보이면서 Convolution 기반 모델들이 성능 저하로 주목받지 못하고 있는 상황에서, 이 논문은 시계열 분석에서 convolution을 더 효과적으로 활용하는 방법을 탐구하고 traditional TCN을 modernize하여 modernTCN을 제안했다.</li>
<li>합성곱 기반 모델들이 타 모델들에 비해 가장 부족한 점은 바로 제한된 Effective Receptive Field (ERF) 때문인데, 트랜스포머와 MLP 기반 모델들의 경우 큰 ERF를 가지고 있어 long-term temporal dependency를 훨씬 잘 포착할 수 있다.</li>
<li>이전 합성곱 기반 모델인 MICN, SCINet도 합성곱을 다시 시계열에 도입하려 했으나, 주로 기존의 전통적인 합성곱에 복잡한 추가 구조를 설계하는 데에 집중하고 convolution architecture 자체를 업데이트 하려는 시도를 하지 않아 성능 향상이 제한적이었다.</li>
<li>따라서 ModernTCN은 컴퓨터 비전 분야의 <strong>합성곱 자체 최적화</strong>에서 영감을 받아 1D convolution을 현대화하고 이전 합성곱 기반 모델들보다 훨씬 더 큰 커널 사이즈를 활용해 ERF를 증가시켜 5가지 주요 시계열 테스크에서 SOTA 성능을 달성하였다. <img src="https://velog.velcdn.com/images/haemin_jang/post/b6d3048b-7536-403b-bfa6-d78da46c8a02/image.png" alt=""> 또한 convolution은 cross-variable dependency를 잘 포착할 수 있다는 이점이 있기에 이러한 이점은 살렸다는 데에도 그 contribution이 있다.<ul>
<li>ConvNets이 한 때 지배적인 백본 구조였는데, Vision Transformers(ViTs)가 등장하여 이를 능가하자 ConvNeXt가 트랜스포머의 아키텍처 디자인에서 영감을 받아 컨볼루션 블록을 재설계함. (Group Convolution, Depthwise Convolution, Larger Kernel Size)</li>
</ul>
</li>
</ul>
<details>
<summary>Receptive Field란?</summary>
<div>

<p><strong>Receptive Field</strong>: CNN에서 특정 output 뉴런이 input 데이터에서 영향을 받는 영역을 의미함. 하나의 출력이 입력의 어디를 보고 만들어졌는지를 나타내는 범위. 하단 그림과 같이 kernel사이즈를 키울 경우 RF가 커지게 됨. 트랜스포머 기반 모델은 Self-attention mechanism을 사용하기 때문에 입력 시퀀스의 모든 위치가 출력 시퀀스의 모든 위치에 영향을 끼침. 따라서 RF가 크다. <img src="https://velog.velcdn.com/images/haemin_jang/post/41aa2ec6-5795-42ea-95be-0089a7e3856a/image.png" alt=""></p>
<pre><code>e.g. 
1. input image가 28x28이고 kernel이 3x3, stride가 1x1이라면 RF는 3x3이 됨. 
2. kernel이 5x5, stride가 2x2라면 RF는 9x9가 됨.</code></pre></div>
</details>



<h1 id="2-moderntcn">2. ModernTCN</h1>
<h2 id="21-1d-convolution-block의-현대화">2.1 1D Convolution Block의 현대화</h2>
<ul>
<li>앞서 언급한 ConvNeXt 논문의 아이디어를 따라서 1D Convolution Block 자체를 재설계했다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/4d5662ca-ec59-4e64-a3cd-ac4b48cfd6c6/image.png" alt=""></p>
<ol>
<li><p><strong>DWConv (Depth-wise Convolution)</strong>: 토큰 간의 시간 정보를 <strong>피처별로</strong> 학습하는 역할을 한다. 이는 결국 Transformer의 Self-attention 모듈과 동일한 역할을 하게 된다.</p>
</li>
<li><p><strong>ConvFFN (Convolutional Feed-Forward Network)</strong>: Transformer의 FFN과 유사한 형태를 띈다. 두 개의 <strong>PWConv (Point-wise Convolution)</strong>으로 구성되며, <strong>Inverted Bottleneck</strong>구조를 채택하여 히든 채널이 인풋 채널보다 r배 넓고, 이 모듈은 각 토큰의 새로운 Feature representation을 독립적으로 학습! </p>
</li>
</ol>
<ul>
<li>이러한 설계를 통해서 시간 정보의 혼합과 피처 정보의 혼합을 분리하여, 기존에 두차원에서 동시에 정보를 혼합하는 traditional convolution 구조와 차별화를 뒀다. 이 decoupling 설계는 학습 테스크를 보다 쉽게 만들고, 계산 복잡도를 줄이는 핵심이다. 그럼에도 불구하고 CV 분야와 동일한 방식으로는 시계열 작업에서 큰 성능 향상을 거두기 힘들기 때문에 시계열에 적합한 추가 수정을 거쳐야 했다. 특히, 시계열은 피처 차원과 시간 차원 외에 변수 차원(variable dimension)을 가지고 있기 때문에 Multivariate 시계열에서 변수 간 의존성(cross-variable dependency)이 중요한 점을 고려하였다.</li>
</ul>
<h2 id="22-시계열-관련-수정">2.2 시계열 관련 수정</h2>
<ol>
<li><p><strong>Patchify variable-independent embedding</strong>
CV에서 흔히 사용하는 변수 혼합 임베딩(variable-mixing embedding) (예: 여러 변수를 단일 D차원 벡터로 임베딩)은 시계열에 적합하지 않다. 시계열 변수 간의 차이는 RGB 채널보다 훨씬 크며, 이러한 임베딩은 복잡한 변수 의존성을 학습하지 못하고, 변수 차원을 버려 개별 변수의 특성을 잃게 만든다. 이를 해결하기 위해 <strong>Patchify variable-independent embedding</strong>이 제안되었으며 채널 개수 M, 시간 길이 L, Stride S (얼마나 오버래핑하는가를 결정) 활용해 $M<em>L$차원으로 패치화 및 패딩 과정을 거쳐 1D 컨볼루션 스템 레이어를 통해 D차원 임베딩 벡터(패치 개수 N)로 변환된다. *</em>이 때 각 univariate time series는 독립적으로 임베딩되기 때문에 차원 변수를 유지할 수 있다.** 즉, 모든 변수는 같은 Convolution filter를 공유하지만, 변수 간 정보는 혼합되지 않는다.</p>
</li>
<li><p><strong>DWConv 수정</strong> -&gt; 여기서는 그룹의 수가 ** M x D ** (하나의 변수 내 특정 피처 따로 학습)
이 레이어는 원래 시간 정보를 학습하기 위해 설계했음으로 변수간의 cross-variable dependency를 동시에 학습하기 어렵다고 판단. 따라서 각 Patch마다 다른 kernel을 적용시켜 피처 독립적인 동시에 변수 독립적으로 수정하여, 각 univariate time series의 <strong>temporal dependency</strong>만 학습하는 것으로 하였다 (셀프 어텐션처럼). 이 때 ERF를 늘리기 위해 큰 커널을 채택. </p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/aa86f519-fef1-4904-afb5-8559937ceba5/image.png" alt=""></p>
<ol start="3">
<li><strong>ConvFFN1 and ConvFFN2 - Decoupling ConvFFN</strong>:
DWConv가 피처 및 변수 독립적이기 때문에, ConvFFN은 피처 및 변수 차원 전반에 걸쳐 <strong>정보를 혼합</strong>해야 하는데, 단일 ConvFFN을 쓸 경우 계산 복잡성이 높고 성능이 저하될 수 있다. 따라서 저자는 ConvFFN을 ConvFFN1과 ConvFFN2로 디커플링. PWConv를 그룹 컨볼루션(<strong>group PWConv</strong>)으로 대체하고 그룹 수를 다르게 설정하였다.</li>
</ol>
<ul>
<li><p><strong>ConvFFN1 --&gt; 여기서는 그룹의 수가 M (하나의 변수 내 D개 피처 상호작용)</strong>
M (변수 수)을 그룹 수로 설정하여 변수별로 새로운 피처 표현을 학습. 즉, 동일한 변수 내의 피처들만 상호작용하게 된다. 각 패치 별로 혼합. PWConv로 차원을 늘렸다가 줄이는 Inverted Bottleneck 구조.</p>
</li>
<li><p><strong>ConvFFN2: --&gt; 여기서는 그룹의 수가 D (하나의 피처 내 M개 변수 상호작용)</strong>
D (피처 차원)을 그룹 수로 설정하여 피처별로 교차 변수 의존성을 학습. 이는 동일한 피처 내의 여러 변수들이 상호작용하도록 한다. 각 변수 별로 혼합. PWConv로 차원을 늘렸다가 줄이는 Inverted Bottleneck 구조.</p>
</li>
</ul>
<p>이러한 수정 후, 최종 ModernTCN 블록은 DWConv, ConvFFN1, ConvFFN2 각각 시간, 피처, 변수 차원 중 하나에서만 정보를 혼합하여 디커플링 원칙을 따르게 된다. </p>
<h1 id="3-experiments">3. Experiments</h1>
<blockquote>
<p>참 잘하더라... + 효율적이기까지 !💡</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/9963fb48-1bd0-4a38-9412-5f66a09d35a0/image.png" alt=""></p>
<ul>
<li>Long and Short term Forecasting, Imputation, Classification and Anomaly Detection의 5가지 주요 분석 테스크에 대해 실험을 진행했고, 일관되게 좋은 성능과 높은 효율성을 보였다. 특히 Transformer 기반(PatchTST, Crossformer, FEDformer), MLP 기반(MTS-Mixer, LightTS, DLinear, RLinear, RMLP), 컨볼루션 기반(TimesNet, MICN, SCINet) 모델들을 모두 포함하여 실험을 진행.</li>
<li>Long-term Forecasting의 경우, 성능 면에서 최고인 PatchTST와 대등하면서도 더 빠른 속도와 적응 메모리 사용량을 보여 효율성-성능 균형이 우수했고, 기존 컨볼루션 모델들은 크게 앞질렀다.</li>
<li>Short-term Forecasting의 경우, 일관되게 성능이 좋았다.</li>
<li>Imputation (결측치 보간)에서 역시 기존의 PatchTST와 DLinear같은 모델들이 변수-독립적 방법이라 cross-variable dependency를 고려하지 못해 성능이 저조한 한 편, ModernTCN은 이러한 점을 고려한 설계로 뛰어난 성능을 달성했다.</li>
<li>Classification에서는 최고 성능을 달성했고, Anomaly Detection에서도 최신 모델인 TimesNet과 Comparable한 성능을 달성. Classification에서는 Epoch당 평균 55.1% (3.19s vs 7.10s), 이상 감지 작업에서는 57.3% (132.65s vs 310.62s)의 학습 시간을 절약하여 두 작업 모두에서 효율성과 성능의 더 나은 균형을 보였다.</li>
</ul>
<p><br><br></p>
<p><strong>References</strong>
원문은 여기에! <a href="https://openreview.net/forum?id=vpJMJerXHU">ModernTCN: A Modern Pure Convolution Structure for General Time Series Analysis</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PatchTST 논문 정리]]></title>
            <link>https://velog.io/@haemin_jang/PatchTST-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@haemin_jang/PatchTST-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 07 May 2025 12:00:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Time Series 개념정리를 하고 한달이 지난 지금.. 뒤늦게 갑자기 PatchTST 논문 정리를 시작해보려한다. ICLR &#39;23에 발표된 &lt;A TIME SERIES IS WORTH 64 WORDS:
LONG-TERM FORECASTING WITH TRANSFORMERS&gt;는 PatchTST라는 모델을 소개함으로써 Time Series Forecasting에서 가장 유명한 SOTA중 하나로 자리매김하게 된다!</p>
</blockquote>
<h1 id="1-introduction">1. Introduction</h1>
<ul>
<li><p>Transformer 모델이 자연어 처리, 컴퓨터 비전, 음성 등 다양한 분야에서의 성공을 거두면서 Informer, Autoformer, FEDformer와 같은 Transformer 기반 변형 모델들이 시계열 데이터 분석 및 예측 작업에도 활발히 사용되기 시작하였다.</p>
</li>
<li><p>2022년, Zeng et al.의 연구에서 단순한 선형 모델(e.g. DLinear)이 복잡한 Transformer 기반 모델들보다 여러 벤치마크 데이터셋에서 더 나은 성능을 보이는 결과가 제시되었다. 또한 일부 시계열 데이터, 특히 금융 데이터의 경우 효율적 시장 가설(efficient market hypothesis)에 따라 이전 시점 값이 최적의 예측이 될 수 있으며, 단순 반복 모델도 특정 데이터셋(Exchange-rate)에서 경쟁력 있는 성능을 보이며 시계열 예측에서 Transformer의 유용성에 대해 의문이 제기되었다.</p>
</li>
<li><p>이러한 상황에서 PatchTST는 Time Series의 Long-term Forecasting과 Self-supervised Representation Learning을 위한 효율적인 Transformer 기반 모델을 제시하였다.</p>
</li>
</ul>
<p><strong>PatchTST의 두가지 핵심 설계</strong></p>
<ol>
<li><p><strong>Patching</strong>: Input 시계열 데이터를 더 낮은 시계열 수준의 패치로 분할하고, 이 패치들을 Transformer의 input token으로 활용한다. 따라서 Locality와 Semantic information을 자연스럽게 임베딩에 담을 수 있다.</p>
</li>
<li><p><strong>Channel-independence</strong>: multivatriate time series의 각 채널은 동일한 임베딩 및 weight를 공유하지만, 독립적으로 처리된다. 각 univariate time series는 자신만의 어텐션 패턴을 학습하며, 기존의 channel-mixing 방식의 한계점을 극복하며 서로 다른 패턴을 가진 시계열에 대해 더 잘 적응할 수 있고, 이에 따라 overfitting의 위험성이 줄어든다.</p>
</li>
</ol>
<p><strong>PatchTST의 두가지 핵심 설계의 이점</strong></p>
<ol>
<li><p><strong>계산 복잡성 감소</strong> : 입력 토큰 수(N)가 전체 시퀀스 길이(L)에서 패치 스트라이드(S)에 비례하여 L/S로 줄어들어, 어텐션 맵의 메모리 사용량 및 계산 복잡성이 제곱에 비례하여 감소한다. (O(N²) → O((L/S)²)). 실질적인 학습 속도도 이에 따라 줄어든다.</p>
</li>
<li><p><strong>Longer look-back window로부터 학습이 가능해짐</strong>: 계산 효율성이 높아지면서 모델이 GPU 메모리나 학습 시간 제약 하에서도 더 긴 과거 시퀀스를 효율적으로 활용하여 예측 성능을 향상시킬 수 있다. 예컨대, 연속적인 N=96개의 시계열 데이터를 학습시켰을 때보다 4개의 time step마다 데이터를 샘플링하여 총 L=390의 긴 과거 시퀀스를 보았을 때 MSE가 훨씬 감소한 것을 관찰할 수 있었다. 같은 개수의 input tokens를 활용하더라도 긴 look-back window를 가지는 것이 더욱 중요한 정보를 전달하고 있음을 알 수 있다.</p>
</li>
<li><p><strong>Representation Learning에서의 강점</strong>: Simple한 Linear 모델들은 제한된 표현력을 가지고 있는 반면, non-linear layers of abstraction을 활용하여 transfer learning과 self-supervised representation learning에서 우수한 성능을 보인다. 우수한 fine-tuning 성능을 달성하며, 특히 대규모 데이터셋에서는 supervised learning으로 학습하는 것보다 더 뛰어난 성능을 보이며 transfer learning에서도 장기 예측 SOTA를 달성하였다.</p>
</li>
</ol>
<h1 id="2-related-work">2. Related Work</h1>
<p><strong>Transformer-based Long-term Time Series Forecasting</strong></p>
<ul>
<li><p>최근 몇 년간 Transformer 모델을 장기 시계열 예측에 적용하려는 연구가 활발히 이루어졌고, LogTrans, Informer, Autoformer, FEDformer, Pyraformer 등이 대표적인 SOTA Transformer 기반 시계열 예측 모델로 언급돼왔다.</p>
</li>
<li><p>이 모델들은 주로 원래 트랜스포머의 어텐션 메커니즘 복잡성을 줄이기 위한 새로운 메커니즘 설계에 초점을 맞춰왔다. 예를 들어, LogTrans는 LogSparse 어텐션, Informer는 ProbSparse 어텐션, Autoformer는 분해 및 자기 상관(auto-correlation), FEDformer는 푸리에 강화 구조, Pyraformer는 피라미드형 어텐션을 사용했다.</p>
</li>
<li><p>하지만 대부분의 이 모델들은 시계열의 시간 스텝을 개별적인 포인트 단위로 취급하는 어텐션(point-wise attention)을 사용하여 패치의 중요성을 간과했다는데 한계점이 있다. LogTrans는 포인트 단위 연산을 피했지만 여전히 단일 시간 스텝에 기반하며, Autoformer는 자기 상관을 사용하지만 수작업 방식이며 패치 내 모든 의미 정보를 포함하지 못하고 있다. 또한, Triformer는 패치 어텐션을 제안했지만 입력 단위로 패치를 사용하거나 의미적 중요성을 드러내는 목적은 아니었다.</p>
</li>
<li><p>PatchTST는 이러한 기존 Transformer 모델들이 패칭을 제대로 활용하지 못했다는 점을 지적하며, 시계열에 특화된 패칭 설계를 통해 성능을 향상시켰다.</p>
</li>
</ul>
<h1 id="3-proposed-method">3. Proposed Method</h1>
<h2 id="31-model-structure">3.1. Model Structure</h2>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/a7d63cae-5670-4009-9d22-acad2cd8258f/image.png" alt="">
<strong>Patching</strong></p>
<ul>
<li>Input Time Series를 하위 시계열 수준의 &#39;패치&#39;로 분할한다. 이 패치화 과정은 각 채널에 대해 독립적으로 수행된다. 시계열 $$x(i)$$는 총 길이 L을 가지게 된다.</li>
<li><strong>패치 길이 (P)</strong>는  각 패치가 포함하는 타임 스텝의 개수를 정의한다. 즉, 각 패치는 길이가 P인 하위 시계열이다.</li>
<li><strong>스트라이드 (S)</strong>는 연속적인 두 패치 사이의 시작 시점 간격으로, 이는 다음 패치가 시작하기 전에 건너뛰는 타임 스텝 수를 의미한다. 예컨대, 스트라이드 S가 패치  길이 P    보다 작으면 패치들이 서로 overlapped되며 S와 P가 같은 경우, 패치들이 non-overlapped된다. 논문에서는 이 두가지 방식이 모두 가능하다고 언급되지만, self-supervised learning에서는 마스킹의 편의를 위해 주로 S=P를 사용한다고 한다.</li>
<li>입력 시계열 길이 L, 패치 길이 P, 스트라이드 S가 주어지면, 패치화 과정은 총 N개의 패치 시퀀스를 생성하게 된다. 패치 수는 <strong>$$N = [(L − P) / S] + 2$$</strong> 로 계산된다. 만약 시계열 길이 L이 P와 S의 조합으로 딱 떨어지지 않아 마지막 패치를 만들기에 길이가 부족한 경우, 원본 시퀀스의 마지막 값 $$x(i)L$$ 을 <strong>S번 반복하여 추가하는 패딩(padding)</strong>을 수행하며, 이 패딩을 통해 마지막 패치도 스트라이드 S 간격으로 생성될 수 있도록 한다.</li>
<li>전통적인 Transformer 모델들이 point-wise (개별 시점)을 input token으로 사용하였기 때문에, 이 경우 input token의 수 N은 시퀀스 길이 L과 같아지게 되지만, PatchTST의 경우 <strong>패치 하나하나</strong>를 입력 토큰으로 사용하여 위에 언급한 복잡도 측면에서 큰 이점을 가지게 된다. 패치화된 각 토큰은 입력되기 전 linear projection을 거쳐 임베딩 공간으로 매핑되며 시간적 순서의 반영을 위해 positional encoding이 추가된다.</li>
</ul>
<p><strong>Transformer Encoder</strong></p>
<ul>
<li>이렇게 생성된 패치들은 Transformer의 <strong>latent space</strong>으로 매핑된다. 패치는 차원 D를 갖는 latent space으로 이동하게 되고, 이는 trainable linear projection $$Wp ∈ RD×P$$를 통해 이루어집니다.</li>
<li>패치들의 <strong>시간적 순서</strong>를 모델이 인지하도록 하기 위해, learnable additive position encoding $$Wpos ∈ RD×N$$이 추가됩니다.</li>
<li>이 과정을 거친 후, Transformer Encoder에 입력되는 최종 데이터는 $$x(i)d ∈ RD×N$$ 형태가 된다.</li>
<li>Transformer Encoder의 핵심인 <strong>Multi-head attention</strong>을 거치며, 각 어텐션 헤드 h는 입력 $$x(i)d$$를 사용하여 Query (Q), Key (K), Value (V) 행렬을 생성한다. 어텐션 출력은 Scaled dot-product attention 방식으로 계산된다: $$Attention(Q, K, V) = Softmax(Q KT / √dk)V$$</li>
</ul>
<p><strong>Loss Function</strong></p>
<ul>
<li>Mean Squared Error (MSE) 손실 함수를 사용하며, 이는 먼저 각 채널에 대해서 계산된다. 이후 모든 M개의 univariate time series에 걸쳐 이 손실값을 평균하여 overall objective loss L을 구한다. </li>
</ul>
<p><strong>Instance Normalization</strong></p>
<ul>
<li><p>Instance Normalization은 PatchTST 모델의 데이터 전처리 단계에서 중요한 역할을 수행하며, 학습 데이터와 테스트 데이터 사이의 distribution shift를 완화하는 데 도움을 주기 위해 사용된다.</p>
</li>
<li><p>각 <strong>time series instance $$x(i)$$</strong>를 평균이 0이고 표준편차가 1이 되도록 정규화한다. 이 정규화는 Patching을 수행하기 전에 이루어지며, 정규화 시 계산된 평균과 표준편차 값은 저장해 두었다가, 모델의 최종 출력에 다시 더해져 원래의 스케일로 되돌린다.</p>
</li>
<li><p>Instance Normalization은 예측 성능을 약간 향상시킨다는 것이 실험을 통해 확인되었으나, 저자는 실험결과를 통해 PatchTST의 주요 성능 향상이 Patching 및 Channel-independence에서 이뤄졌음을 강조하였다.</p>
<h2 id="32-representation-learning">3.2. Representation Learning</h2>
</li>
<li><p><em>Masked Autencoder*</em></p>
</li>
<li><p>supervised learning과 동일한 transformer encoder에서 prediction head를 제거하고 $$D*P$$차원의 선형 레이어를 부착한다. 앞서 언급하였듯이, S=P를 활용하여 패치들이 non-overlapped하도록 나눠 마스크된 패치의 정보가 observed된 패치에 포함되지 않도록 설계하였다. 이어 패치 인덱스의 부분집합을 랜덤하게 uniformly 선택하여 해당 패치들을 0값으로 마스킹하였으며, 논문 실험에서는 40%의 높은 마스킹 비율을 활용했다.</p>
</li>
<li><p>이는 기존의 time series에서 single 타임 스텝을 정해놓고 마스킹하던 방식과 비교했을 때 두가지 차별점을 가진다. 우선, 단일 타임 스텝 마스킹은 바로 이전 또는 이후 타임 스텝 값의 간단한 interpolation으로 쉽게 추론될 수 있어, 전체 시퀀스에 대한 high quality abstract representation learning의 목표와 충돌했는데, PatchTST는 패치 단위의 마스킹을 통해 이를 재구성하려면 단순 interpolation이상의 고차원적 이해가 필요하도록 모델을 학습하게 하였다. 또한, 모든 타임 스텝에 해당하는 representation vector를 예측 결과로 매핑할 경우 예측 시퀀스 길이나 채널 수가 많을 때 파라미터 수가 급격히 커져 overfitting을 유발할 수 있는데 이 문제에서 비교적 자유로워졌다.</p>
</li>
</ul>
<h1 id="4-experiments">4. Experiments</h1>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/c8549248-6ce7-41ad-866e-85f810fbbd59/image.png" alt=""> <img src="https://velog.velcdn.com/images/haemin_jang/post/16283cb7-fc09-496a-a6cc-ba0b1fb5a119/image.png" alt=""><img src="https://velog.velcdn.com/images/haemin_jang/post/2c412364-f1f2-44e4-85eb-c87f0e2d2f3d/image.png" alt=""></p>
<ul>
<li>Weather, Traffic, Electricity, ILI 및 4개의 ETT 데이터셋(ETTh1, ETTh2, ETTm1, ETTm2)을 포함한 8개의 공개 데이터셋을 활용하였으며, Baseline 모델로는 FEDformer, Autoformer, Informer, Pyraformer, LogTrans와 같은 기존 SOTA Transformer 기반 모델들과, Transformer의 유용성에 의문을 제기하며 우수한 성능을 보였던 선형 모델인 DLinear가 사용되었다.</li>
<li>다양한 예측 길이 T와 Look-back Window (L)에 대해 실험을 진행하였다.</li>
<li>전반적으로 상당히 우수한 예측 성능을 보이면서, supervised learning 뿐만 아니라, self-supervised learning에서 뛰어난 성능이 보였다. linear probing에서도 성능이 우수했지만, 특히 모델 전체를 fine-tuning할 때 가장 우수한 결과를 얻었고, 다른 SOTA (BTSF, TS2Vec, TNC, TS-TCC 등)과 비교해도 더 좋은 퍼포먼스를 보였다.</li>
<li>Ablation했을 때도 패칭과 Channel-independence가 둘다 들어갈 때 제일 성능이 좋은 모습을 보였다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Time Series 개념 정리]]></title>
            <link>https://velog.io/@haemin_jang/Time-Series-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@haemin_jang/Time-Series-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 31 Mar 2025 10:29:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>석사 졸업 논문을 ECG 데이터로 쓰면서 Time Series Classification을 하기도 했고 요즘 업무에서도 Time Series를 계속 보다보니 오늘은 시계열 데이터의 개념 및 특성을 정리하고 머신러닝 기반의 시계열 예측 모델들에 대해서 중점적으로 다뤄보고자 한다!📈🔎 였는데 시계열 데이터의 개념 및 특성 정리가 엄청 길어진 관계로 끊어가는 것으로 하겠다...😇</p>
</blockquote>
<h1 id="time-series란">Time Series란?</h1>
<ul>
<li><p>시계열 데이터란, 시간의 순서에 따라 나열된 데이터로, <strong>주가, 날씨, 수요량, 교통량, 센서 데이터</strong>등과 같이 시간의 흐름에 따라 변화하는 데이터를 말한다.</p>
</li>
<li><p>일반적인 데이터와 달리 시계열 데이터는 <strong>시간의 흐름에 따른 패턴</strong>이 존재하며, 과거 데이터가 미래에 영향을 미친다는 점에서 예측 분석에서 매우 중요한 역할을 수행한다. 이런 특성 때문에 시계열 데이터는 <strong>Trend(추세 변동), Cycle (순환, 주기 변동),  Seasonal variation(계절 변동), Random fluctuation(우연 변동)</strong>과 같은 주요 구성요소를 가진다.</p>
</li>
</ul>
<h2 id="시계열-데이터의-주요-구성요소">시계열 데이터의 주요 구성요소</h2>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/ee6b55f9-2a6d-4b3c-9028-95a9fa43f9d4/image.png" alt=""></p>
<ul>
<li><strong>Trend(추세 변동)</strong>: 시간이 경과함에 따라 관측값이 지속적으로 증가하거나 감소하는 추세를 가지는 경우의 변동. 일정한 방향성을 보이며, 계절적 영향과 무관하게 주로 사회, 경제적 변화 등 구조적인 요인과 관련된다. 경제와 관련된 데이터에서 자주 발생한다. 
e.g. 인구 증가에 따른 도시 교통량 증가, 기술 발전에 따른 스마트폰 보급률 상승</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/21ae636c-fb91-4df4-96e7-452e766c9459/image.png" alt=""></p>
<ul>
<li><strong>Cycle (순환, 주기 변동)</strong>: 주기적인 변화를 가지나 특정 계절에 의한 것이 아니고 주기가 긴 경우의 변동. 일정한 주기를 두고 반복되지만, <strong>그 주기가 고정되지 않은</strong> 장기적인 변동 패턴을 말한다. 반복 주기는 수 년에서 수십 년까지 다양하며, 정기적이지 않을 수도 있음. 
e.g. 경제 침체 및 회복 사이클, 부동산 가격의 상승과 하락 사이클</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/39ef2260-49f2-4cd2-aa7f-4039c9dae850/image.png" alt=""></p>
<ul>
<li><strong>Seasonal variation(계절 변동)</strong>: <strong>일정한 시간 간격(주기)</strong>으로 반복되는 패턴으로, 주, 월, 계절에 따라 발생하는 규칙적인 변화를 말한다.
e.g. 주말과 평일 간의 소비 패턴 차이, 연말 쇼핑 시즌 트래픽 증가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/a4d8f820-153c-47d9-829c-c21917a61461/image.png" alt=""></p>
<ul>
<li><strong>Random fluctuation(우연 변동)</strong>: 시간에 따른 규칙적인 움직임과는 무관하게 발생하는 불규칙하고 예측 불가능한 노이즈 요소를 말한다. 
e.g. 갑작스러운 자연재해로 인한 매출 급감, 예기치 못한 서버 다운으로 인한 트래픽 변화<ul>
<li><strong>White Noise(백색 잡음)</strong>: Random fluctuation 중 제일 대표적인 예시. 시계열에서 <strong>완전히 예측 불가능</strong>하고, <strong>특정한 패턴이 없는 순수한 랜덤 신호</strong>를 말한다. 평균이 0이고, 분산이 일정한 시계열 데이터 (모든 시점 간 Auto-correlation이 없음)
e.g. 동전을 던져서 계속 앞, 뒤를 시간 순서대로 기록한 경우<ul>
<li><strong>White Noise 왜 중요한가?</strong></li>
</ul>
<ol>
<li>모델의 잔차가 white noise인지 확인: 예측 모델을 만들고 나서 잔차(= 실제값 - 예측값)이 백색 잡음이라면 예측 불가능한 부분만 남겨놨다는 뜻으로 좋은 모델(=최적화된 모델)임.</li>
<li>시계열 데이터 자체가 백색잡음일 경우, 예측 불가능하므로 모델을 만들 필요가 없음.</li>
</ol>
</li>
</ul>
</li>
</ul>
<h2 id="decomposition--additive-model-vs-multiplicative-model">Decomposition:  Additive Model vs Multiplicative Model</h2>
<p>앞서 정리한 시계열 데이터의 구성요소를 어떻게 결합하여 해석할 것인지에 따라 시계열 모델은 크게 두가지 형태로 구분된다. </p>
<ul>
<li><p><strong>Additive Model (가법 모형)</strong>: $Y(t) = T(t) + C(t) + S(t) + I(t)$</p>
</li>
<li><p><strong>Multiplicative Model (승법 모형)</strong>: $Y(t) = T(t) \times C(t) \times S(t) \times I(t)$</p>
</li>
<li><p>$Y(t)$: 시계열의 실제 값, $T(t)$: 추세, $C(t)$:순환 변동, $S(t)$: 계절 변동, $I(t)$: 불규칙 성분 Irregular</p>
</li>
<li><p>가법 모형은 각 구성요소가 <strong>서로 독립적이고, 선형적으로 합쳐지는 경우</strong>에 사용하며 승법 모형은 이들이 <strong>비율 관계로 곱해지는</strong> 구조라고 볼 수 있다.</p>
</li>
<li><p>그러나 현실에서는 변동성의 크기가 추세에 따라 달라지는 등 완전한 독립성을 가정하기가 힘들기 때문에, 보통 승법 모델을 활용하며 여기에 로그를 취하여 선형 관계를 가진 가법 모형처럼 활용한다.</p>
</li>
</ul>
<h2 id="auto-correlation-자기상관">Auto-Correlation (자기상관)</h2>
<ul>
<li><strong>Auto-Correlation (자기상관)</strong>이란, <strong>시계열 데이터의 과거 값과 현재 값 간의 상관관계</strong>를 의미한다. </li>
<li>$\rho_k = \frac{\text{Cov}(y_t, y_{t-k})}{\sigma^2}$</li>
<li>$\rho_k$: 시차 k에 대한 자기상관 계수, $y_t$: 현재 시점의 값, $y_{t-k}$: 과거 시점의 값, $\sigma^2$: 분산</li>
<li>자기상관은 <strong>과거 값이 현재 값에 얼마나 영향을 주는지</strong>를 보여주기 때문에, <strong>시계열의 예측 가능성</strong>을 판단하는 기준이 된다. 일정한 시차(lag)에서 상관이 높다는 것은 그 시차 정보를 활용해 미래를 예측할 수 있다는 뜻이다. 잘 알려진 ARIMA, SARIMA, GARCH 등이 <strong>자기상관 구조를 모델링</strong>하는 방식이다.</li>
<li>이러한 자기상관은 <strong>ACF (Auto-Correlation Function), PACF (Partial ACF)</strong>를 통해 시각화할 수 있는데, ACF가 다양한 시차에 대해 자기상관 계수를 시각화한 그래프라면, PACF는 특정 시차에 대해 중간 시차들의 영향을 제외하고 순수한 자기상관을 계산하여 시각화한다고 할 수 있다. ($\phi_{kk} = \text{Corr}(y_t, y_{t-k} \mid y_{t-1}, …, y_{t-k+1}$) </li>
<li>데이터가 정상성을 만족한다고 가정했을 때, ACF, PACF의 형태에 따라 AR, MA, ARIMA 중 어떤 모델을 활용하면 적절할지를 추정하는 방법 중 하나로 쓰인다.</li>
</ul>
<table>
<thead>
<tr>
<th>Model</th>
<th align="center">ACF</th>
<th align="center">PACF</th>
</tr>
</thead>
<tbody><tr>
<td><strong>MA(q)</strong></td>
<td align="center"><code>Cut off after lag q</code></td>
<td align="center"><code>Die out</code></td>
</tr>
<tr>
<td></td>
<td align="center">(q 시차 이후 0으로 절단)</td>
<td align="center">(지수적으로 감소, 소멸하는 sine 함수 형태)</td>
</tr>
<tr>
<td><strong>AR(p)</strong></td>
<td align="center"><code>Die out</code></td>
<td align="center"><code>Cut off after lag p</code></td>
</tr>
<tr>
<td></td>
<td align="center">(지수적으로 감소, 소멸하는 sine 함수 형태)</td>
<td align="center">(p 시차 이후 0으로 절단)</td>
</tr>
<tr>
<td><strong>ARMA(p, q)</strong></td>
<td align="center"><code>Die out</code></td>
<td align="center"><code>Die out</code></td>
</tr>
<tr>
<td></td>
<td align="center">(시차 q-p 이후부터 소멸)</td>
<td align="center">(시차 q-p 이후부터 소멸)</td>
</tr>
</tbody></table>
<h2 id="stationarity-정상성">Stationarity (정상성)</h2>
<ul>
<li>데이터가 <strong>정상성</strong>을 띈다는 것은 시간의 흐름에 따라 <strong>데이터의 통계적 특성이 일정하게 유지</strong>되는 것을 말한다. 즉, 다음과 같은 세 가지 조건을 만족해야 한다.<ol>
<li><strong>특정한 트렌드</strong>가 없어야 한다. (일정하게 줄어들거나 늘어나지 않는다.)</li>
<li><strong>평균 (Mean), 분산 (Variance)</strong>이 시간에 따라 변하지 않는다. (시간과 무관하게 분포가 같다.)</li>
<li>자기상관이 일정하다.</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/ffaaae4f-aa45-47ba-a131-cb393e6760d5/image.png" alt=""></p>
<p>이 중 정상성을 띄는 데이터를 고르면, d, h, i는 계절성이 보이기에 제외하고, a, c, e, f, i는 추세와 변화폭이 보이기 때문에 제외해야 한다. 또 i는 분산이 증가하는 것 역시 보인다. 이런 식으로 소거해나가다보면 결국 정상성을 띄는 데이터는 b, g만 남게 되는 것이다.</p>
<h3 id="그렇다면-이런-정상성은-왜-중요할까">그렇다면 이런 정상성은 왜 중요할까?</h3>
<ul>
<li>일단, 비정상 시계열은 시간에 따라 데이터 분포가 바뀌므로, 미래 값이 과거와 다른 규칙을 따를 수 있어 과거 데이터를 학습해도 미래 <strong>예측 성능이 낮아지게 된다</strong>. </li>
<li>AR, MA, ARIMA와 같은 모델들은 <strong>선형 회귀 기반</strong>의 구조로, 회귀 계수들은 고정된 평균과 분산을 갖는 데이터를 전제로 해야 안정적으로 추정된다. 비정상 시계열에서는 회귀 계수 자체가 시간에 따라 변할 수 있어 모델이 불안정하게 작동하게 된다.</li>
<li><strong>자기상관 해석이 왜곡된다.</strong> 앞서 설명한 ACF, PACF는 데이터가 정상성을 띌 때 의미 있는 결과를 준다. 정상 시계열에서는 시차가 커질수록 자기상관이 점점 0에 가까워지는 반면, 비정상 시계열에서는 시차가 커져도 천천히 감소하거나 거의 유지되는 것처럼 보여 마치 과거 값이 계속 현재값에 영향을 주는 것처럼 보이게 된다. </li>
</ul>
<h3 id="비정상-시계열의-정상화">비정상 시계열의 정상화</h3>
<table>
<thead>
<tr>
<th>방법</th>
<th>목적</th>
<th>적용 상황</th>
<th>참고</th>
</tr>
</thead>
<tbody><tr>
<td><strong>차분</strong></td>
<td>추세 제거</td>
<td>우상향/우하향 데이터</td>
<td>1차로 안 되면 2차 차분 시도</td>
</tr>
<tr>
<td><strong>로그 변환</strong></td>
<td>분산 안정화</td>
<td>진폭이 점점 커지는 시계열</td>
<td>0 이하 값에서는 사용 불가</td>
</tr>
<tr>
<td><strong>계절 차분</strong></td>
<td>계절성 제거</td>
<td>월별, 주간 등 주기 반복 패턴</td>
<td>주기(lag)를 정확히 설정해야 함</td>
</tr>
<tr>
<td><strong>ADF Test</strong></td>
<td>정상성 검정</td>
<td>전처리 후 데이터 평가</td>
<td>p-value &lt; 0.05면 정상성 있다고 판단</td>
</tr>
</tbody></table>
<p>위 표에 명시된 방법으로 시계열을 정상화할 수 있고, 보통 
<strong><em>데이터를 시각화 -&gt; 추세 및 계절성을 확인 -&gt; 필요에 따라 로그 변환 / 차분 / 계절 차분 수행 -&gt; ADF Test로 정상성 확인</em></strong>
의 순서로 진행하게 된다.</p>
<ul>
<li><strong>차분 (Differencing)</strong>: 시계열 데이터에서 바로 이전 시점의 값을 빼서 변화량만 보는 방식. 추세를 제거하여 평균을 일정하게 만든다. ($y{\prime}t = y_t - y{t-1}$)</li>
<li><strong>로그 변환 (Log Transform)</strong>: 데이터에 로그를 취해 값의 범위를 축소. 변동성(분산)이 클 때 안정화시키는 데 효과적이다. ($y{\prime}_t = \log(y_t)$)</li>
<li><strong>계절 차분 (Seasonal Differencing)</strong>: 이전 해 혹은 이전 시즌의 값과 비교하여 차분. ($y{\prime}t = y_t - y{t-s}$, $s$는 계절 주기로 월별 데이터일 경우 12가 된다.)</li>
<li><strong>ADF (Augmented Dickey-Fuller Test)</strong>: 시계열이 단위근 (Unit Root)를 가지는지 검사하여 <strong>정상성 여부를 판단</strong>하는 통계적 시험. 이때 귀무가설($H_0$)은 <em>이 시계열은 비정상이다</em> (단위근 존재) 이며 대립가설($H_1$)은 <em>이 시계열은 정상이다</em> (단위근 없음)이다.</li>
</ul>
<h2 id="evaluation-metrics">Evaluation Metrics</h2>
<table>
<thead>
<tr>
<th>지표명</th>
<th>설명</th>
<th>특징</th>
</tr>
</thead>
<tbody><tr>
<td><strong>MAE</strong><br>(Mean Absolute Error)</td>
<td>오차 절댓값의 평균</td>
<td>직관적이며 이상치에 덜 민감</td>
</tr>
<tr>
<td><strong>MSE</strong><br>(Mean Squared Error)</td>
<td>오차 제곲의 평균</td>
<td>큰 오차에 더 큰 패널티 부여</td>
</tr>
<tr>
<td><strong>RMSE</strong><br>(Root Mean Squared Error)</td>
<td>MSE의 제곱근</td>
<td>실제 단위와 동일, 해석 용이</td>
</tr>
<tr>
<td><strong>MAPE</strong><br>(Mean Absolute Percentage Error)</td>
<td>오차를 실제값 기준으로 백분율로 환산</td>
<td>직관적이나, 실제값이 0에 가까울 때 문제 발생</td>
</tr>
</tbody></table>
<ul>
<li>시계열 예측 성능을 평가할 때는 일반적으로 <code>K-fold</code> 대신 <code>TimeSeriesSplit(Sickit-learn)</code>을 사용한다.</li>
</ul>
<p><strong>References</strong>
<a href="https://medium.com/@pillai.aravinds/time-series-forecasting-101-a-beginners-guide-344d08667b10">Time Series Forecasting 101: A Beginner’s Guide</a>
<a href="https://www.youtube.com/watch?v=7Do_hixXCpc&amp;t=47s">고려대 산업경영공학부 김성범 교수님 유튜브</a>
<a href="https://otexts.com/fpp2/stationarity.html">https://otexts.com/fpp2/stationarity.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쏟아져 나오는 LLM 기반의 AI Chatbots🤖 정리]]></title>
            <link>https://velog.io/@haemin_jang/%EC%8F%9F%EC%95%84%EC%A0%B8-%EB%82%98%EC%98%A4%EB%8A%94-LLM-%EA%B8%B0%EB%B0%98%EC%9D%98-AI-Chatbots-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@haemin_jang/%EC%8F%9F%EC%95%84%EC%A0%B8-%EB%82%98%EC%98%A4%EB%8A%94-LLM-%EA%B8%B0%EB%B0%98%EC%9D%98-AI-Chatbots-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 17 Mar 2025 10:59:10 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>벨로그를 시작하게 된 이유라고 봐도 무방한 LLM을 첫번째 주제로 정해보았다!
챗 지피티의 등장 이후 LLM-based AI Chatbots가 매우 핫해진 것은 물론 이제는 그 종류를 다 알기도 힘든 새로운 챗봇들이 시장에 쏟아지는데 하나하나 따라가기가 힘들어서 한번은 정리해야지 늘 생각했었는데 벨로그를 핑계로 처음 실행에 옮겨본다.
감사하게도 좋은 Survey 논문들이 많아서 열심히 참고해보았으나 그래도 부족할 수 있다는 점🥹
<img src="https://velog.velcdn.com/images/haemin_jang/post/7c91a040-9e6b-4a8f-9ed8-06b54b4a3f17/image.png" alt=""><em><del>ChatGPT가 만들어준 썸네일... 약간 소름끼친다</del></em></p>
</blockquote>
<h1 id="1-pre-llm-chatbots">1. Pre-LLM Chatbots</h1>
<ul>
<li><p>1950년대 튜링 테스트 <em>Can Machines think?</em> 로 챗봇 연구가 시작되었으나, 초기 챗봇은 제한적인 맥락 이해 능력과 특정 분야에 국한된 지식으로 부정확한 응답을 제공하는 경우가 많았다.</p>
</li>
<li><p>대표적인 초기 예시로는 </p>
<ul>
<li>1966년** ELIZA**: MIT에서 개발된 심리 상담 챗봇
키워드 매칭을 사용해 사용자의 문장을 분석하고 단순한 응답을 생성하는 방식을 사용했으나, 실제 의미는 이해하지 못했다고 한다.</li>
<li>1972년 <strong>PARRY</strong>: 편집증 환자의 언어 패턴을 모방한 챗봇
ELIZA보다는 좀 더 정교한 구조와 감정이 섞인 답변을 보였다고 한다.</li>
</ul>
</li>
<li><p>그리고 1980년대부터 2000년대 초반까지 <strong>Ractor, Jabberwacky, Dr. Sbaitso, A.L.I.C.E (Alicebot), SmarterChild, Cleverbot</strong> 등 다양한 챗봇이 등장하였는데, 이들은 간단한 <em>Rule-based 혹은 키워드 매칭</em> 방식을 사용하여 극초기 모델들 보다는 발전한 성능을 보였다고 한다.</p>
<ul>
<li><strong>A.L.I.C.E</strong>: AIML이라는 언어를 사용하여 지식 기반을 확장하고 대화 가이드라인을 설정<ul>
<li><strong>Cleverbot</strong>: 미리 프로그래밍된 응답 대신 인간의 입력으로부터 학습하는 전략을 활용
그럼에도 불구하고, 이 시기의 챗봇들은 여전히 인간과 같은 자연스러운 대화 능력이 부족해 사용자 경험이 단절되는 경우가 많았다고 한다.</li>
</ul>
</li>
</ul>
</li>
<li><p>2010년대부터 주목해볼만한 발전은 답변의 퀄리티 역시 큰 진보를 이뤄냈지만 무엇보다, messaging apps들을 비롯한 다양한 플랫폼에 search agents로서 결합되거나 voice를 활용하여 우리의 일상적인 테스크에 챗봇이 깊이 관여하게 되었다는 점이다.</p>
<ul>
<li>e.g. <strong>Apple의 Siri, Amazon의 Alexa, Google의 Google Assistant등</strong>
그러나 현재와 비교했을 때는 비교적 제한된 문맥 이해력(Long-term Context)과 유연한 응답 생성 능력이 부족했다.</li>
</ul>
</li>
</ul>
<h1 id="2-llm의-등장과-llm-based-chatbots의-발전">2. LLM의 등장과 LLM-based Chatbots의 발전</h1>
<ul>
<li><p>2020년부터 LLM이 등장하면서 챗봇 분야가 혁신을 이뤄냈는데, 이 때부터 우리가 아는 _인간과 같은 미묘한 뉘앙스를 이해하는 응답들_이 등장하기 시작한다. 방대한 양의 텍스트 데이터로 사전 학습된 LLM은 챗봇이 더욱 상세하고 &#39;human-like&#39;한 답변들을 제공할 수 있도록 하였다.</p>
</li>
<li><p>특히, 2022년 11월, OpenAI의 ChatGPT 3.5 출시 이후  LLM 기반 챗봇에 대한 관심이 폭발적으로 증가했다. <del><em>이때쯤 나도 석사과정 중 처음으로 GPT를 써보고 감탄과 경악을 금치 못했던 기억이 있다. 그리고 2년여가 지난 지금 GPT는 결국 내 코딩 버디로 자리 잡아버렸다.</em></del></p>
</li>
<li><p>이 중에서도 가장 유명한 GPT, BERT, PaLM, LLaMA에 대해 좀 더 자세히 살펴보고자 한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/haemin_jang/post/4f1afd47-ffe5-4ce8-99c6-f18c03c5aeb7/image.png" alt=""></p>
<details>
<summary>Token과 Context Window가 뭔지 궁금하다면?</summary>
<div>

<p> <strong>Token</strong></p>
<ul>
<li>언어 모델이 텍스트를 처리하는 기본적인 단위라고 볼 수 있다. 일반적으로 Word, Subword, 문장 부호 등이 하나의 토큰이 될 수 있다. Large Language Models의 경우, &quot;Large&quot;, &quot;Language&quot;, &quot;Models&quot;라는 세 개의 토큰으로 나뉠 수도 있고, &quot;Language&quot;가 &quot;lang&quot;, &quot;uage&quot;로 더 작게 나뉠 수도 있는 것이다.</li>
<li>긴 텍스트를 작은 단위로 나누기 때문에 처리 효율성이 증가하고, 각 토큰에 대한 Word Embedding을 학습하여 단어의 의미와 컨텍스트상의 관계를 잘 파악할 수 있게 된다. (비슷한 단어들은 Vector Space 상에서 가까운 위치에 클러스터링 되기 때문에)</li>
</ul>
<p><strong>Context Window</strong></p>
<ul>
<li>모델이 한번에 처리할 수 있는 토큰의 최대 개수를 의미한다. 여기서 모델이 특정 시점에서 얼마나 많은 이전 정보를 기억하고 활용할지가 결정된다. 즉, 컨텍스트 윈도우의 크기 = 모델의 Input 및 Output 텍스트의 길이 이다.</li>
<li>큰 컨텍스트 윈도우를 가진 모델은 장기적인 의존성을 파악하고 유지하는 데 유리하고, 넓은 컨텍스트를 이해할 수 있게 되어 긴 문서를 요약한다거나 여러 단계를 거치는 추론과 같은 더 많은 정보를 고려해야하는 작업에서 더 양질의 답변을 생성해내게 된다.</li>
</ul>
<p>이 두 요소가 모델의 기억력과 이해 범위, 처리할 수 있는 텍스트 길이를 결정하는 중요한 요소인 것이다.</p>
</div>
</details>

<h2 id="gpt-generative-pre-trained-transformer-시리즈">GPT (Generative Pre-trained Transformer) 시리즈</h2>
<ul>
<li>2018년 OpenAI에서 발표한 최초의 주목할 만한 LLM으로, Generative Pre-training 방식을 통해 언어 이해 능력을 대폭 향상시켰다. GPT-1의 경우, <strong>BooksCorpus (4.5GB)</strong> 데이터셋으로 트레인됐고, 1억 1,700만개의 파라미터와 512 토큰의 컨텍스트 윈도우를 가진다. </li>
<li>이후 GPT-2가 후속 모델로 2019년에 발표되었는데 <strong>Webtext (40GB)</strong> 라는 더 큰 데이터셋을 활용해 트레인되었으며 15억개의 파라미터와 1024 토큰의 컨텍스트 윈도우를 가지며 더 긴 텍스트와 복잡한 언어 패턴을 처리할 수 있게 되었다.</li>
<li>2020년에 발표된 GPT-3는 <strong>Common Crawl (45TB)</strong>을 포함한 거대한 데이터셋으로 훈련되었으며, 1,750억 개의 파라미터와 2048 토큰의 컨텍스트 윈도우를 가진다. <strong>In-context learning (ICL)</strong>이라는 중요한 기능을 도입하여, 추가적인 Fine Tuning 없이도 주어진 프롬프트의 지시에 따라 다양한 작업을 수행할 수 있는 것이 특징.</li>
<li>GPT-3.5: GPT-3의 개선 버전으로, 구체적인 데이터셋이나 파라미터 수는 명시되어 있지 않지만, 2048 토큰의 컨텍스트 윈도우를 가지며 OpenAI의 AI 챗봇인 ChatGPT의 기반 모델로 사용되어 2022년 11월에 처음 공개된 이후 인간과 유사한 자연스러운 대화 능력으로 엄청난 인기를 얻게 됐다.</li>
<li>이후로도 multi-modal이 지원되는 GPT-4, 연산비용이 낮아져 무료로 사용할 수 있는 GPT-4o등 다양한 모델이 출시되고 있다.</li>
</ul>
<h2 id="bert-bidirectional-enconder-representations-from-transformers">BERT (Bidirectional Enconder Representations from Transformers)</h2>
<ul>
<li>2018년에 Google에서 발표한 모델로, 양방향 트랜스포머 인코더 아키텍처를 기반으로 한다. BERT는 <strong>BooksCorpus</strong>와 <strong>English Wikipedia</strong> 데이터셋으로 사전 훈련되었으며 (정확한 크기는 미공개), BERT-Base는 1억 1,000만 개, BERT-Large는 3억 4,000만 개의 파라미터를 가진다고 한다. BERT는 512 토큰의 컨텍스트 윈도우를 가지며, 주로 텍스트 이해 작업에 뛰어난 성능을 보인다. </li>
<li>GPT 시리즈와 달리, BERT는 문맥의 <strong>양방향 정보</strong>를 모두 활용하여 단어의 의미를 더 정확하게 파악하는 데 중점을 둔 모델이다. 비교적 작은 모델이지만, 텍스트 이해에 그 강점을 두고 있는 만큼 검색 및 NLP 태스크에서 강하다고 알려져 있다. 실제로 Google 검색 엔진에 적용되어 있다고 알려져 있다.</li>
</ul>
<h2 id="palm-pathways-language-model">PaLM (Pathways Language Model)</h2>
<ul>
<li>PaLM은 Google에서 개발한 모델로, 2022년 PaLM-1이 처음 공개되었으며 5,400억 개의 파라미터를 가지는 매우 거대한 모델이다. 훈련 데이터로는 <strong>웹페이지, 도서, 뉴스, 소셜 미디어 대화, 위키피디아, Github 등 다양한 대규모 텍스트 데이터</strong>를 사용한 것으로 알려져 있으며, 매우 큰 규모 덕분에 복잡한 추론 능력과 다양한 언어에 대한 이해 능력을 보여준다고 한다. PaLM의 파생 모델은 Google의 LLM 기반 챗봇이었던 <strong>BARD (현재의 Gemini)</strong>의 기반이 되었다. PaLM-2는 3,400억 개의 파라미터를 가지며, 20개 이상의 프로그래밍 언어, 100개 이상의 구어체 언어, 수학 및 과학 텍스트로 훈련되었고, 8000 토큰의 컨텍스트 윈도우를 가지는 모델이다. </li>
<li>PaLM의 경우 <strong>Multi-task Learning</strong>을 도입하여 다양한 작업을 동시에 수행할 수 있으며 GPT와 함께 가장 강력한 Generative Model로 알려져 있다. 실제로 체감상 ChatGPT와 Gemini가 제일 많이 활용되고 있는 것 같고, 대화, 텍스트 생성, 코드 작성 등에서 확실히 뛰어난 성능을 체험할 수 있다. 또한 아무래도 Google에서 개발한 모델이다 보니 초기 ChatGPT가 최신 정보에 대한 접근이 불가능했을 때 (<del><em>지금보다 훨씬 outdated했음 아무래도 웹 검색 기능이 도입된지 얼마 안됐기 때문에</em></del>) 유저 입장에서는 큰 장점이 있었다.</li>
</ul>
<h2 id="llama-large-language-model-meta-ai">LLaMA (Large Language Model Meta AI)</h2>
<ul>
<li>Meta AI에서 개발한 Open Source 모델. 다양한 크기의 모델이 존재하며, 표에서 볼 수 있듯이 따르면 67억, 130억, 325억, 652억 개의 파라미터를 가진 모델들이 있다. <strong>Common Crawl, C4, Books, Github, Wikipedia, ArXiv, Stack Exchange 등 다양한 공개된 온라인 소스</strong>로 트레인되었으며 2048 토큰의 컨텍스트 윈도우를 가진다. LLaMA는 비교적 작은 모델 크기에도 불구하고 강력한 성능을 보여주고 있다. 실제로 경량화된 모델에 오픈소스라는 장점 때문에 대형 모델들에 비해 성능이 강력하지 않더라도 다양한 연구 및 개발 커뮤니티에서 활발하게 사용되고 있다.</li>
</ul>
<h2 id="bing-chat-claude-deepseek">Bing Chat, Claude, DeepSeek</h2>
<p><strong>Bing Chat</strong></p>
<ul>
<li>Google이 <strong>BARD</strong>를 공개한 직후 Microsoft에서 공개한 검색 엔진 기능으로 GPT-4에 의해 구동되며, 사용자들이 검색어를 직접 입력하는 대신 챗봇과 대화할 수 있도록 하였다. 실시간 인터넷에 접근이 가능하고 출처가 명시된 답변을 제공한다는 장점이 있다. 또 사용자의 질문에 따라 <strong>&#39;창의적인&#39;, &#39;균형 잡힌&#39;, &#39;정확한&#39;</strong> 등과 같이 다양한 응답 스타일을 선택할 수 있도록 하는 사용자 맞춤형 상호작용을 제공한 것이 특징이다.</li>
</ul>
<p><strong>Claude</strong></p>
<ul>
<li>Anthropic에서 개발한 챗봇으로 특히 Claude2는 포괄적인 추론 능력과 <strong>Constitutional AI</strong>라는 파인튜닝 과정을 통해 더 안전한 응답을 제공하는 것으로 알려져 있다. 이 방식은 AI가 스스로 <strong>Constitution(헌법)</strong>에 따라 자신의 응답을 평가하고 개선하도록 학습시키는 방식이다. 전통적인 강화 학습에서 인간의 피드백을 통해 모델을 튜닝한 것과는 달리 모델이 스스로 더 안전한 응답을 제공하도록 하는 것이 그 특징이다.</li>
</ul>
<p><strong>DeepSeek</strong></p>
<ul>
<li>최근 가장 화제의 중심이 되었던 DeepSeek는 중국 기반의 연구팀이 개발한 모델로 특히 Meta의 LLaMA 시리즈와 같은 유사한 경량화된 구조를 가지면서도 강력한 성능을 보여 주목을 받았다. 공개된 벤치마크 데이터에 따르면, 오픈 소스 모델인데 훨씬 경량화된 크기로 GPT-4o와 비슷한 성능을 보여준다고 한다. 비용 자체도 V3를 개발하는 데 80억 원 수준의 적은 비용이 들었다고 보고 되어 수천억원의 비용을 들이며 엄청난 Computational Cost를 요구하는 LLM 시장에 충격을 주었다. <del>_안타깝게도 DeepSeek는 출시와 동시에 보안과 신뢰성 논란으로 주가가 폭락하고 있지만 ... 생각해볼 계기가 되는 것은 분명할지도...?
_</del></li>
</ul>
<h1 id="3-llm-핵심-기술">3. LLM 핵심 기술</h1>
<h2 id="1-transformer-architecture">1. Transformer Architecture</h2>
<p>트랜스포머 모델의 등장이 자연어 처리 분야에서 혁명을 일으켰고, 이를 통해 챗봇 시장이 크게 성장한 것이기 때문에 해당 모델을 언급하지 않을 수 없다.
<img src="https://velog.velcdn.com/images/haemin_jang/post/bf432016-8dc3-4e27-afce-1f8576923685/image.png" alt=""></p>
<p><strong>Encoder-Decoder Structure</strong></p>
<ul>
<li>Transformer 모델은 인코더와 디코더 아키텍쳐를 기반으로 한다. 인코더는 input 데이터의 abstract representations를 생성하고, <strong>Multi-Head Self-Attention</strong>을 통해 input sequence의 여러 부분에 집중하게 된다. 그러면 디코더가 이러한 representations를 활용하여 autoregressive한 방식으로 output sequence를 생성하며, 인코더의 representations에 대해서 cross-attention을 수행하는 것이다.</li>
</ul>
<p><strong>Causal and Bidirectional Decoder</strong></p>
<ul>
<li>LLM기반의 챗봇들은 주로 두가지의 디코더 방식을 활용하는데, 사실 위에 소개된 모델들 중 BERT를 제외하고는 모두 <strong>Autoregressive</strong> 즉, Causal Decoder를 활용하고 있다. 이는 하나 방향으로 작동하는 구조로 현재 단어를 생성할 때 미래 단어를 참고하지 않기 때문에 자기회귀 모델이라 불리는 것이다. </li>
<li>Bidirectional Decoder같은 경우에는 문장의 앞뒤 문맥을 모두 고려하여 학습하는 방식으로 <strong>Masked Language Model</strong>이라고도 불리는데 문장에서 일부 단어를 마스킹한 다음 주변 단어를 보고 예측하는 식으로 (&#39;빈칸 채우기&#39;) 학습을 진행하게 된다.</li>
<li>이러한 두가지 방식의 차이 때문에 이전에 언급하였듯이 GPT를 비롯한 다른 모델들은 텍스트 생성에 좀 더 강점을 가지게 되는 것이고 - &#39;텍스트 생성&#39;에 그 초점을 둔다, BERT와 같은 모델들은 문맥 이해력이 뛰어나 검색, 번역, 요약 등에 강점을 가지게 되는 것이다 - &#39;문장 이해&#39;에 그 초점을 둔다.</li>
</ul>
<p><strong>Self-Attention Mechanism</strong></p>
<ul>
<li>셀프 어텐션은 트랜스포머 모델의 핵심 요소로 문장에서 각 단어가 다른 단어들과 어떤 관계를 가지는지를 학습하는 방식이다. 이 특별한 매커니즘이 기존의 RNN, LSTM 모델들과 비교했을 때, 가장 이슈가 됐던 <strong>장기 의존성 문제 (Long-Term Dependency Issue)</strong>를 해결하고, 병렬 연산이 가능하게 만들어 자연어 처리 분야에 혁신을 일으켰다고 할 수 있다.<blockquote>
<p>Self-Attention은 입력 문장을 벡터로 변환한 후, 각 단어가 다른 단어들과 얼마나 연관성이 있는지를 수치화하는 과정이다. 동작 원리는 크게 3단계로 나눌 수 있는데</p>
</blockquote>
<ol>
<li>Query (Q), Key (K), Value (V) 벡터 생성
 •    입력된 각 단어를 세 개의 벡터(Query, Key, Value)로 변환.
 •    Query(Q): “현재 단어가 다른 단어들과 얼마나 관련이 있는지” 질문.
 •    Key(K): “각 단어가 얼마나 중요한지” 나타냄.
 •    Value(V): “각 단어의 실제 값(정보)“을 담고 있음.</li>
<li>각 단어 간의 유사도 계산 (Dot Product Attention Score)
 •    Query와 Key의 내적(Dot Product)을 통해 각 단어가 다른 단어와 얼마나 관련이 있는지 스코어 계산.
 •    결과 값에 Softmax 함수를 적용하여 가중치를 정규화. (0~1 사이로 아웃풋 나오게 됨)</li>
<li>가중치를 반영한 최종 출력 계산
 •    Softmax로 정규화된 가중치를 Value 벡터에 곱해 최종 출력 벡터 생성.
$$\text{Attention}(Q, K, V) = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) V
$$</li>
</ol>
</li>
</ul>
<ul>
<li>또한 트랜스포머에서는 하나의 Self-Attention을 여러 개 병렬로 실행하여 다양한 시각에서 문맥을 이해할 수 있도록 하는데, 이를 바로 <strong>Multi-Head Self-Attention</strong>이라고 부른다. </li>
</ul>
<h2 id="2-llm-based-chatbots의-주요-기능">2. LLM-based Chatbots의 주요 기능</h2>
<p><strong>In-Context Learning (ICL)</strong></p>
<ul>
<li>GPT-3에서 도입된 핵심 기술로, LLM이 추가적인 훈련 없이도 대화 맥락을 이해하고 적절하게 응답할 수 있도록 한다. 모델은 입력된 텍스트의 지침을 따르며, 주어진 예제나 맥락을 기반으로 새로운 패턴을 학습할 수 있다. 이를 더욱 향상시키는 방법이 <strong>Instruction Tuning(명령 튜닝)</strong>으로, 이는 다양한 멀티태스킹 데이터셋을 활용한 미세 조정 기법이라고 한다. 이 과정에서 모델은 자연어 명령을 학습하여, 익숙하지 않은 작업도 유사한 명령을 활용해 처리할 수 있는 일반화 능력을 갖추게 된다.</li>
</ul>
<p><strong>Chain-of-Thought (CoT) 프롬프팅</strong></p>
<ul>
<li>LLM이 복잡한 문제를 논리적으로 해결할 수 있도록 돕는 기법이다. 기존의 작은 언어 모델들은 단순한 질의응답에는 강하지만, 다단계 추론이 필요한 문제 해결에는 한계가 있었다. CoT 프롬프팅은 한 번에 최종 답을 생성하는 대신, 해결 과정을 단계별로 나누어 설명하도록 유도한다. 이를 통해 LLM이 논리적 사고를 강화하고, 수학 문제 해결, 논리 퍼즐, 프로그래밍 문제 등 복잡한 작업을 더 잘 수행할 수 있도록 한다고 알려져 있다.</li>
</ul>
<p><strong>Reinforcement Learning from Human Feedback (RLHF)</strong></p>
<ul>
<li>LLM이 사람과의 상호작용을 통해 지속적으로 성능을 개선하도록 하는 중요한 학습 기법으로, 모델이 보다 인간 친화적인 응답을 생성하도록 하기 위해, 실제 사용자 피드백을 기반으로 보상을 제공하는 강화 학습 기법을 적용한다. RLHF를 활용하면 사용자 선호도와 윤리적 기준에 부합하는 답변을 생성하는 능력이 향상된다고 알려져 있으며 유해하거나 부적절한 콘텐츠를 줄이고, 보다 신뢰할 수 있는 AI 시스템을 구축할 수 있다고 한다.</li>
</ul>
<p><br><br></p>
<p><strong>References</strong>
다양한 논문을 읽었지만 <a href="https://arxiv.org/pdf/2406.16937">Dam, S.K., Hong, C.S., Qiao, Y. and Zhang, C., 2024. A complete survey on llm-based ai chatbots. arXiv preprint arXiv:2406.16937.</a>가 매우 구조화가 잘되어있어 메인으로 참고하였다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[벨로그를 열며...]]></title>
            <link>https://velog.io/@haemin_jang/%EB%B2%A8%EB%A1%9C%EA%B7%B8%EB%A5%BC-%EC%97%B4%EB%A9%B0</link>
            <guid>https://velog.io/@haemin_jang/%EB%B2%A8%EB%A1%9C%EA%B7%B8%EB%A5%BC-%EC%97%B4%EB%A9%B0</guid>
            <pubDate>Sun, 09 Mar 2025 13:05:47 GMT</pubDate>
            <description><![CDATA[<p>AI 세상에 입문한지도 어언 3년이 꽉 채워 지나고 4년차를 맞이했다.
대학원에 있을 때는 원치 않아도 트렌디한 AI 개발자가 되고자 타의적 (+자의적...) 노력을 이어왔다면 오히려 현업에서 트렌드에 뒤쳐지지 않기란 쉽지 않은 일인 것 같다🥲
이런 생각이 든 순간! 이미 도태되고 있는 것 같아 전환점을 맞이하기 위해 나의 대학원 생활을 동고동락하던 연구실 동기들과 스터디를 시작한다.
작은 조각 같은 글들이라도 꾸준히 해나가다보면 조금씩 성장할 것이라는 생각을 해보며...🚀</p>
<p><del>아직 벨로그 감성을 잘 모르겠어서 이 글은 빠른 시일 내 삭제될 수도..?</del></p>
]]></description>
        </item>
    </channel>
</rss>