<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SON.log</title>
        <link>https://velog.io/</link>
        <description>Like it, and it will be the best.</description>
        <lastBuildDate>Fri, 13 Mar 2026 01:59:25 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>SON.log</title>
            <url>https://velog.velcdn.com/images/greenfield_2100/profile/458e0d41-b8e5-47d9-b465-ce917637d21b/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. SON.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/greenfield_2100" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Hugging Face의 attn_implementation("eager", "sdpa", "flash_attention_2", "flash_attention_3")]]></title>
            <link>https://velog.io/@greenfield_2100/Hugging-Face%EC%9D%98-attnimplementationeager-sdpa-flashattention2-flashattention3</link>
            <guid>https://velog.io/@greenfield_2100/Hugging-Face%EC%9D%98-attnimplementationeager-sdpa-flashattention2-flashattention3</guid>
            <pubDate>Fri, 13 Mar 2026 01:59:25 GMT</pubDate>
            <description><![CDATA[<p>이 4개는 <strong>attention의 수학 자체가 완전히 다른 것</strong>이라기보다, <strong>같은 scaled dot-product attention을 어떤 구현체/backend로 계산하느냐</strong>의 차이에 가깝습니다. Hugging Face는 <code>attn_implementation</code>으로 <code>&quot;eager&quot;</code>, <code>&quot;sdpa&quot;</code>, <code>&quot;flash_attention_2&quot;</code>, <code>&quot;flash_attention_3&quot;</code>를 지원한다고 설명합니다. 기본적으로는 가능하면 <code>sdpa</code>를 사용합니다. (<a href="https://huggingface.co/docs/transformers/model_doc/auto?utm_source=chatgpt.com" title="Auto Classes">Hugging Face</a>)</p>
<hr>
<h1 id="0-먼저-큰-그림">0. 먼저 큰 그림</h1>
<p>Transformer attention의 기본 수식은 거의 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a74a28b7-a824-498c-a74a-a4014ea011b3/image.png" alt=""></p>
<p>PyTorch의 <code>scaled_dot_product_attention</code>도 바로 이 계산을 수행한다고 설명합니다. 차이는 이 수식을 <strong>그대로 순진하게 계산하느냐</strong>, 아니면 <strong>GPU 메모리 접근과 커널 융합을 최적화해서 더 빠르고 메모리 효율적으로 계산하느냐</strong>입니다. (<a href="https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html?utm_source=chatgpt.com" title="torch.nn.functional.scaled_dot_product_attention">PyTorch Documentation</a>)</p>
<hr>
<h1 id="1-eager">1. <code>eager</code></h1>
<h2 id="정의">정의</h2>
<p>Hugging Face 문서 기준으로 <code>&quot;eager&quot;</code>는 <strong>manual implementation of the attention</strong>, 즉 <strong>일반적인 수동 구현 attention</strong>입니다. (<a href="https://huggingface.co/docs/transformers/model_doc/auto?utm_source=chatgpt.com" title="Auto Classes">Hugging Face</a>)</p>
<h2 id="어떤-알고리즘인가">어떤 알고리즘인가?</h2>
<p>가장 전통적인 방식입니다.</p>
<p>대략 흐름은:</p>
<ol>
<li>(QK^T) 계산</li>
<li>scaling</li>
<li>mask 더하기</li>
<li>softmax</li>
<li>(V)와 곱하기</li>
</ol>
<p>즉, attention 행렬을 비교적 “정직하게” 계산하는 방식이라고 보면 됩니다.
PyTorch 블로그에서 말하는 SDPA의 fallback인 <strong>math implementation</strong>과 비슷한 성격의, 가장 일반적이고 하드웨어 중립적인 방식으로 이해하면 됩니다. (<a href="https://pytorch.org/blog/out-of-the-box-acceleration/?utm_source=chatgpt.com" title="Out of the box acceleration and memory savings ...">PyTorch</a>)</p>
<h2 id="특징">특징</h2>
<ul>
<li><strong>호환성 최고</strong></li>
<li>디버깅이 쉬움</li>
<li>보통 <strong>가장 느림</strong></li>
<li>메모리도 더 많이 먹는 편</li>
</ul>
<h2 id="언제-쓰나">언제 쓰나?</h2>
<ul>
<li>FlashAttention 설치가 안 될 때</li>
<li>모델/환경 호환성이 애매할 때</li>
<li>“일단 돌아가기만 하면 된다”가 중요할 때</li>
</ul>
<h2 id="한-줄-느낌">한 줄 느낌</h2>
<p><strong>가장 기본형 / 가장 안전 / 보통 가장 느림</strong></p>
<hr>
<h1 id="2-sdpa">2. <code>sdpa</code></h1>
<h2 id="정의-1">정의</h2>
<p>Hugging Face 문서에서는 <code>&quot;sdpa&quot;</code>를 <strong>PyTorch built-in implementation of scaled dot product attention</strong>이라고 설명합니다. 즉 <code>torch.nn.functional.scaled_dot_product_attention</code>을 사용하는 방식입니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<h2 id="어떤-알고리즘인가-1">어떤 알고리즘인가?</h2>
<p>이름 그대로 <strong>Scaled Dot-Product Attention</strong>입니다.
중요한 점은, <code>sdpa</code>가 단일 구현 하나를 뜻하는 게 아니라, <strong>PyTorch가 내부에서 가장 적절한 backend를 고르는 인터페이스</strong>라는 점입니다.</p>
<p>PyTorch는 SDPA 내부에서 세 가지 계열 backend를 사용할 수 있다고 설명합니다.</p>
<ul>
<li>Flash Attention</li>
<li>Memory-Efficient Attention</li>
<li>Math implementation fallback (<a href="https://pytorch.org/blog/out-of-the-box-acceleration/?utm_source=chatgpt.com" title="Out of the box acceleration and memory savings ...">PyTorch</a>)</li>
</ul>
<p>즉 <code>sdpa</code>는 “이 attention을 계산해줘”라는 <strong>상위 인터페이스</strong>이고, 실제 아래에서는 상황에 따라 최적화된 구현을 탈 수 있습니다. PyTorch 문서도 “automatically select the most optimal implementation”이라고 설명합니다. (<a href="https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html?utm_source=chatgpt.com" title="torch.nn.functional.scaled_dot_product_attention">PyTorch Documentation</a>)</p>
<h2 id="특징-1">특징</h2>
<ul>
<li>별도 <code>flash-attn</code> 패키지 없이도 되는 경우가 많음</li>
<li>보통 <code>eager</code>보다 빠름</li>
<li>PyTorch가 내부 최적 backend를 골라줌</li>
<li>실무적으로 <strong>가장 무난</strong></li>
</ul>
<h2 id="언제-쓰나-1">언제 쓰나?</h2>
<ul>
<li>대부분의 일반적인 추론/학습</li>
<li>설치 스트레스 없이 성능도 어느 정도 챙기고 싶을 때</li>
<li>네 상황처럼 <code>flash_attention_2</code>가 안 될 때</li>
</ul>
<h2 id="한-줄-느낌-1">한 줄 느낌</h2>
<p><strong>가장 밸런스 좋음 / 기본 추천</strong></p>
<hr>
<h1 id="3-flash_attention_2">3. <code>flash_attention_2</code></h1>
<h2 id="정의-2">정의</h2>
<p>Hugging Face 문서 기준으로 <code>&quot;flash_attention_2&quot;</code>는 <strong>Dao-AILab/flash-attention</strong> 구현을 사용합니다. 그리고 설명상 <strong>작은 타일(block) 단위로 계산을 나눠 fast on-chip memory를 활용</strong>합니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<h2 id="어떤-알고리즘인가-2">어떤 알고리즘인가?</h2>
<p>핵심 아이디어는 <strong>attention 행렬 전체를 크게 메모리에 만들지 않고</strong>,
<strong>tile 단위로 잘게 쪼개서 SRAM/shared memory 같은 빠른 on-chip memory를 최대한 활용</strong>하는 것입니다.
그래서 HBM/global memory 왕복을 줄여 <strong>속도와 메모리 효율</strong>을 크게 높입니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<p>쉽게 말하면:</p>
<ul>
<li>일반 방식: 큰 attention matrix를 상대적으로 많이 드나듦</li>
<li>FlashAttention-2: <strong>메모리 traffic을 줄이도록 재구성된 fused kernel</strong></li>
</ul>
<h2 id="특징-2">특징</h2>
<ul>
<li>보통 매우 빠름</li>
<li>메모리 효율 좋음</li>
<li>긴 시퀀스에서 특히 강점</li>
<li>하지만 <strong>설치/빌드 난이도</strong>가 있음</li>
<li>GPU 제약이 있음</li>
</ul>
<p>FlashAttention-2 CUDA 지원은 현재 <strong>Ampere, Ada, Hopper GPU</strong> 중심이며 예시로 A100, RTX 3090, RTX 4090, H100을 듭니다. dtype도 fp16/bf16 중심입니다. (<a href="https://github.com/Dao-AILab/flash-attention?utm_source=chatgpt.com" title="Dao-AILab/flash-attention: Fast and memory-efficient ...">GitHub</a>)</p>
<h2 id="언제-쓰나-2">언제 쓰나?</h2>
<ul>
<li>GPU가 Ampere 이상이고</li>
<li>Linux/CUDA 환경이 맞고</li>
<li>최대 성능이 중요할 때</li>
</ul>
<h2 id="한-줄-느낌-2">한 줄 느낌</h2>
<p><strong>빠르지만 설치와 호환성 조건이 까다로운 고성능 옵션</strong></p>
<hr>
<h1 id="4-flash_attention_3">4. <code>flash_attention_3</code></h1>
<h2 id="정의-3">정의</h2>
<p>Hugging Face 문서에서는 <code>&quot;flash_attention_3&quot;</code>가 <strong>FlashAttention-2를 개선한 버전</strong>이며, 연산 overlap과 더 강한 fusion을 통해 성능을 높인다고 설명합니다. 그리고 Transformers에서는 Dao-AILab의 <code>flash-attention/hopper</code> 구현을 가리킵니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<h2 id="어떤-알고리즘인가-3">어떤 알고리즘인가?</h2>
<p>기본 철학은 FlashAttention-2와 같습니다.
즉:</p>
<ul>
<li>attention을 메모리 효율적으로 tile/block 단위 계산</li>
<li>GPU의 on-chip memory 적극 활용</li>
<li>kernel fusion 극대화</li>
</ul>
<p>여기에 FlashAttention-3는 특히 <strong>Hopper 세대 GPU에서 더 잘 맞도록</strong> 설계된 최적화가 들어간 형태로 이해하면 됩니다. Hugging Face 문서도 FlashAttention-2 대비 overlap/fusion 개선을 명시합니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<h2 id="특징-3">특징</h2>
<ul>
<li>이론상 4개 중 가장 공격적인 고성능 옵션</li>
<li>하지만 지원 환경이 가장 까다로움</li>
<li>Hopper 계열 중심</li>
</ul>
<p>관련 요구사항 자료에서는 <strong>Hopper GPUs</strong>, <strong>CUDA 12.3 이상</strong>, 그리고 <strong>CUDA 12.8 권장</strong>이라고 적혀 있습니다. (<a href="https://github.com/Dao-AILab/grouped-latent-attention?utm_source=chatgpt.com" title="Dao-AILab/grouped-latent-attention">GitHub</a>)</p>
<h2 id="언제-쓰나-3">언제 쓰나?</h2>
<ul>
<li>H100 같은 Hopper GPU가 있고</li>
<li>최신 CUDA 환경을 맞출 수 있고</li>
<li>최고 성능이 필요할 때</li>
</ul>
<h2 id="한-줄-느낌-3">한 줄 느낌</h2>
<p><strong>Hopper 전용에 가까운 초고성능 옵션</strong></p>
<hr>
<h1 id="5-4개를-한-번에-비교">5. 4개를 한 번에 비교</h1>
<table>
<thead>
<tr>
<th>옵션</th>
<th>본질</th>
<th>구현 성격</th>
<th>장점</th>
<th>단점</th>
<th>추천 상황</th>
</tr>
</thead>
<tbody><tr>
<td><code>eager</code></td>
<td>기본 attention 수동 구현</td>
<td>가장 전통적</td>
<td>호환성 최고, 디버깅 쉬움</td>
<td>느리고 메모리 비효율적</td>
<td>일단 안정적으로 돌리고 싶을 때</td>
</tr>
<tr>
<td><code>sdpa</code></td>
<td>PyTorch의 scaled dot-product attention 인터페이스</td>
<td>내부 backend 자동 선택</td>
<td>성능/안정성 균형 좋음</td>
<td>환경 따라 성능 편차 가능</td>
<td>대부분의 사용자에게 기본 추천</td>
</tr>
<tr>
<td><code>flash_attention_2</code></td>
<td>FlashAttention-2 최적화 커널</td>
<td>tile + on-chip memory 활용</td>
<td>빠르고 메모리 효율 좋음</td>
<td>설치/호환성 까다로움</td>
<td>Ampere/Ada/Hopper에서 성능 중요할 때</td>
</tr>
<tr>
<td><code>flash_attention_3</code></td>
<td>FlashAttention-3 최적화 커널</td>
<td>Flash-2보다 더 공격적 최적화</td>
<td>최고 성능 지향</td>
<td>Hopper/CUDA 조건 매우 까다로움</td>
<td>H100급 환경에서만 적극 고려</td>
</tr>
</tbody></table>
<p>이 비교는 Hugging Face의 backend 설명, PyTorch의 SDPA 설명, FlashAttention 저장소의 요구사항을 바탕으로 정리한 것입니다. (<a href="https://huggingface.co/docs/transformers/attention_interface?utm_source=chatgpt.com" title="Attention backends">Hugging Face</a>)</p>
<hr>
<h1 id="6-알고리즘이-다르다는-말이-정확히는-무슨-뜻인가">6. “알고리즘이 다르다”는 말이 정확히는 무슨 뜻인가?</h1>
<p>엄밀히 말하면 <strong>attention의 수학적 정의는 거의 같습니다.</strong>
차이는 주로 다음입니다.</p>
<h3 id="eager"><code>eager</code></h3>
<ul>
<li>수학식을 비교적 직접 구현</li>
<li>중간 텐서를 더 명시적으로 생성하는 경향</li>
</ul>
<h3 id="sdpa"><code>sdpa</code></h3>
<ul>
<li>같은 attention 수식을 <strong>PyTorch의 통합 API</strong>로 계산</li>
<li>내부에서 더 좋은 구현을 선택 가능</li>
</ul>
<h3 id="flash_attention_2-flash_attention_3"><code>flash_attention_2</code>, <code>flash_attention_3</code></h3>
<ul>
<li>같은 attention 결과를 목표로 하지만</li>
<li><strong>GPU 메모리 이동량을 줄이도록 계산 순서와 kernel 구조를 재설계</strong></li>
<li>핵심은 <strong>속도/메모리 최적화</strong></li>
</ul>
<p>즉,
<strong>수학 문제는 비슷하고, 공학적 구현이 다르다</strong>
라고 보면 가장 정확합니다. (<a href="https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html?utm_source=chatgpt.com" title="torch.nn.functional.scaled_dot_product_attention">PyTorch Documentation</a>)</p>
<hr>
<h1 id="7-네-상황에서-뭘-고르면-되냐">7. 네 상황에서 뭘 고르면 되냐</h1>
<p>네가 지금 <code>flash-attn</code> 설치에서 막혔으니까:</p>
<h3 id="1순위">1순위</h3>
<pre><code class="language-python">attn_implementation=&quot;sdpa&quot;</code></pre>
<p>이게 제일 좋습니다.
Transformers도 torch&gt;=2.1.1이면 기본적으로 SDPA를 우선 사용한다고 설명합니다. (<a href="https://huggingface.co/docs/transformers/model_doc/auto?utm_source=chatgpt.com" title="Auto Classes">Hugging Face</a>)</p>
<h3 id="2순위">2순위</h3>
<pre><code class="language-python">attn_implementation=&quot;eager&quot;</code></pre>
<p>이건 속도는 손해 보더라도 제일 안전합니다. (<a href="https://huggingface.co/docs/transformers/model_doc/auto?utm_source=chatgpt.com" title="Auto Classes">Hugging Face</a>)</p>
<h3 id="3순위">3순위</h3>
<p><code>flash_attention_2</code></p>
<ul>
<li>GPU, CUDA, torch, flash-attn 버전이 딱 맞을 때만</li>
</ul>
<h3 id="4순위">4순위</h3>
<p><code>flash_attention_3</code></p>
<ul>
<li>사실상 Hopper급 환경 아니면 보통 우선순위 낮음 (<a href="https://github.com/Dao-AILab/grouped-latent-attention?utm_source=chatgpt.com" title="Dao-AILab/grouped-latent-attention">GitHub</a>)</li>
</ul>
<hr>
<h1 id="8-아주-짧게-비유하면">8. 아주 짧게 비유하면</h1>
<ul>
<li><strong>eager</strong>: 교과서 방식으로 직접 계산</li>
<li><strong>sdpa</strong>: PyTorch가 알아서 최적 구현 선택</li>
<li><strong>flash_attention_2</strong>: 고성능 GPU용 특수 최적화 엔진</li>
<li><strong>flash_attention_3</strong>: 더 최신 GPU(Hopper)용 초고성능 엔진</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[smolVLM Model Architecture]]></title>
            <link>https://velog.io/@greenfield_2100/smolVLM-Model-Architecture</link>
            <guid>https://velog.io/@greenfield_2100/smolVLM-Model-Architecture</guid>
            <pubDate>Thu, 12 Mar 2026 05:27:20 GMT</pubDate>
            <description><![CDATA[<pre><code>from transformers import AutoProcessor, AutoModelForImageTextToText
import torch

model_path = &quot;HuggingFaceTB/SmolVLM2-256M-Video-Instruct&quot;
processor = AutoProcessor.from_pretrained(model_path)


model = AutoModelForImageTextToText.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16,
    #_attn_implementation=&quot;flash_attention_2&quot;
    _attn_implementation=&quot;sdpa&quot;
).to(&quot;cuda&quot;)

print(model)
print(model.config)

&quot;&quot;&quot;
SmolVLMForConditionalGeneration(
  (model): SmolVLMModel(
    (vision_model): SmolVLMVisionTransformer(
      (embeddings): SmolVLMVisionEmbeddings(
        (patch_embedding): Conv2d(3, 768, kernel_size=(16, 16), stride=(16, 16), padding=valid)
        (position_embedding): Embedding(1024, 768)
      )
      (encoder): SmolVLMEncoder(
        (layers): ModuleList(
          (0-11): 12 x SmolVLMEncoderLayer(
            (self_attn): SmolVLMVisionAttention(
              (k_proj): Linear(in_features=768, out_features=768, bias=True)
              (v_proj): Linear(in_features=768, out_features=768, bias=True)
              (q_proj): Linear(in_features=768, out_features=768, bias=True)
              (out_proj): Linear(in_features=768, out_features=768, bias=True)
            )
            (layer_norm1): LayerNorm((768,), eps=1e-06, elementwise_affine=True)
            (mlp): SmolVLMVisionMLP(
              (activation_fn): GELUTanh()
              (fc1): Linear(in_features=768, out_features=3072, bias=True)
              (fc2): Linear(in_features=3072, out_features=768, bias=True)
            )
            (layer_norm2): LayerNorm((768,), eps=1e-06, elementwise_affine=True)
          )
        )
      )
      (post_layernorm): LayerNorm((768,), eps=1e-06, elementwise_affine=True)
      # one patch token dim : 768 
    )
    (connector): SmolVLMConnector(
      (modality_projection): SmolVLMSimpleMLP(
        (proj): Linear(in_features=12288, out_features=576, bias=False)
        # we make 16 patch so 768 x 16 = 12288
      )
    )
    (text_model): LlamaModel(
      (embed_tokens): Embedding(49280, 576, padding_idx=2) 
      # LM 입력 전체 shape를 뜻하는 게 아니고 텍스트 토큰 ID 하나를 몇 차원 벡터로 바꿀 것인가
      # 49280 = vocabulary size = 토큰 종류 수
      # 576 = hidden size = 각 토큰을 표현하는 벡터 길이
      (layers): ModuleList(
        (0-29): 30 x LlamaDecoderLayer(
          (self_attn): LlamaAttention(
            (q_proj): Linear(in_features=576, out_features=576, bias=False)
            (k_proj): Linear(in_features=576, out_features=192, bias=False) # 메모리와 연산량을 아끼는 방식
            (v_proj): Linear(in_features=576, out_features=192, bias=False)
            (o_proj): Linear(in_features=576, out_features=576, bias=False)
            # what os o_proj : 1. input  x 
                               2. q, k, v generation
                               3. caluate attetion_score
                               4. weigth_sum -&gt; attention_output
                               5. 그 결과를 다시 hidden size에 맞게 변환 =====  이 마지막 단계가 바로 o_proj

          )
          (mlp): LlamaMLP(
            (gate_proj): Linear(in_features=576, out_features=1536, bias=False)
            (up_proj): Linear(in_features=576, out_features=1536, bias=False)
            (down_proj): Linear(in_features=1536, out_features=576, bias=False)
            (act_fn): SiLUActivation()
          )
          (input_layernorm): LlamaRMSNorm((576,), eps=1e-05)
          (post_attention_layernorm): LlamaRMSNorm((576,), eps=1e-05)
        )
      )
      (norm): LlamaRMSNorm((576,), eps=1e-05)
      (rotary_emb): LlamaRotaryEmbedding()
    )
  )
  (lm_head): Linear(in_features=576, out_features=49280, bias=False)
)


&quot;&quot;&quot;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Huggingface Doc]]></title>
            <link>https://velog.io/@greenfield_2100/Huggingface-Doc</link>
            <guid>https://velog.io/@greenfield_2100/Huggingface-Doc</guid>
            <pubDate>Wed, 11 Mar 2026 00:56:04 GMT</pubDate>
            <description><![CDATA[<table>
<thead>
<tr>
<th>대분류</th>
<th>키워드</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>Documentation / Hub</td>
<td>Hub</td>
<td>Hugging Face에서 <strong>Git 기반으로 모델, 데이터셋, Spaces</strong>를 호스팅하는 플랫폼</td>
</tr>
<tr>
<td>Documentation / Hub</td>
<td>Hub Python Library</td>
<td>Hugging Face Hub와 상호작용하는 <strong>Python 클라이언트 라이브러리</strong></td>
</tr>
<tr>
<td>Documentation / Hub</td>
<td>Huggingface.js</td>
<td>Hugging Face용 <strong>JavaScript/TypeScript 라이브러리</strong></td>
</tr>
<tr>
<td>Documentation / Hub</td>
<td>Tasks</td>
<td>다양한 <strong>ML 작업별 데모, 모델, 데이터셋</strong>을 탐색하는 기능</td>
</tr>
<tr>
<td>Documentation / Hub</td>
<td>Dataset viewer</td>
<td>HF Hub 데이터셋의 <strong>메타데이터, 통계, 내용</strong>을 보는 API/뷰어</td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Inference Providers</td>
<td>10개 이상 파트너가 호스팅하는 <strong>20만+ 모델 추론 호출 서비스</strong></td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Inference Endpoints (dedicated)</td>
<td>Hugging Face에서 제공하는 <strong>전용/관리형 추론 배포 인프라</strong></td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Deploying on AWS</td>
<td>Hugging Face 모델을 <strong>AWS에서 학습/배포</strong>하는 방법 및 도구</td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Text Generation Inference (TGI)</td>
<td><strong>대형 언어모델 서빙 최적화</strong>를 위한 추론 툴킷</td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Text Embeddings Inference (TEI)</td>
<td><strong>임베딩 모델 서빙 최적화</strong>를 위한 추론 툴킷</td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Microsoft Azure</td>
<td>Hugging Face 모델을 <strong>Azure에서 배포</strong>하는 지원</td>
</tr>
<tr>
<td>Deployment &amp; Inference</td>
<td>Google Cloud</td>
<td>Hugging Face 모델을 <strong>Google Cloud에서 학습/배포</strong>하는 지원</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Transformers</td>
<td>PyTorch 기반의 <strong>최신 SOTA 모델 라이브러리</strong></td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Diffusers</td>
<td>PyTorch 기반의 <strong>확산 모델(Diffusion models)</strong> 라이브러리</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Datasets</td>
<td>다양한 ML 작업용 <strong>데이터셋 접근 및 공유 라이브러리</strong></td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Transformers.js</td>
<td><strong>브라우저에서 직접 실행되는 ML 모델</strong> 라이브러리</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Tokenizers</td>
<td>연구/서비스용으로 최적화된 <strong>빠른 토크나이저 라이브러리</strong></td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Evaluate</td>
<td>모델 성능을 <strong>평가하고 비교</strong>하는 라이브러리</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>timm</td>
<td><strong>비전 모델, 레이어, 옵티마이저, 유틸리티</strong> 제공 라이브러리</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Sentence Transformers</td>
<td><strong>임베딩, 검색(Retrieval), 재정렬(Reranking)</strong> 용 라이브러리</td>
</tr>
<tr>
<td>Core ML Libraries</td>
<td>Kernels</td>
<td>Hugging Face Hub에서 <strong>연산 커널을 로드/실행</strong>하는 기능</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>PEFT</td>
<td>대형 모델의 <strong>파라미터 효율적 파인튜닝</strong> 라이브러리</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Accelerate</td>
<td><strong>멀티 GPU, TPU, mixed precision</strong> 학습 지원 라이브러리</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Optimum</td>
<td>Transformers를 <strong>더 빠르게 학습/추론</strong>하도록 최적화하는 도구</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>AWS Trainium &amp; Inferentia</td>
<td>AWS 전용 칩에서 <strong>학습/배포 최적화</strong> 지원</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Google TPUs</td>
<td>Optimum 기반으로 <strong>TPU에서 학습/배포</strong> 지원</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>TRL</td>
<td><strong>강화학습 기반으로 Transformer LM 학습</strong>하는 라이브러리</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Safetensors</td>
<td><strong>안전한 모델 가중치 저장/배포 포맷</strong></td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Bitsandbytes</td>
<td><strong>양자화 및 메모리 최적화</strong> 라이브러리</td>
</tr>
<tr>
<td>Training &amp; Optimization</td>
<td>Lighteval</td>
<td>여러 백엔드에서 LLM을 <strong>통합 평가</strong>하는 툴킷</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Gradio</td>
<td>몇 줄의 Python으로 <strong>ML 데모/웹앱</strong>을 만드는 도구</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Trackio</td>
<td><strong>가볍고 로컬 중심의 실험 추적</strong> 라이브러리</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>smolagents</td>
<td>Python으로 <strong>에이전트 시스템</strong>을 만들기 위한 경량 라이브러리</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>LeRobot</td>
<td><strong>로보틱스용 end-to-end 학습</strong>을 쉽게 하기 위한 프로젝트</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Reachy Mini</td>
<td>해커와 AI 개발자를 위한 <strong>오픈소스 표현형 로봇 SDK</strong></td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>AutoTrain</td>
<td><strong>모델 학습 자동화 API / UI</strong></td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Chat UI</td>
<td>HuggingChat 기반의 <strong>오픈소스 채팅 프론트엔드</strong></td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Leaderboards</td>
<td><strong>커스텀 리더보드</strong>를 만드는 기능</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Argilla</td>
<td><strong>고품질 데이터셋 협업 구축</strong> 도구</td>
</tr>
<tr>
<td>Collaboration &amp; Extras</td>
<td>Distilabel</td>
<td><strong>합성 데이터 생성 및 AI 피드백</strong> 프레임워크</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[attn_implementation= sdpa vs flash_attention_2]]></title>
            <link>https://velog.io/@greenfield_2100/attnimplementation-sdpa-vs-flashattention2</link>
            <guid>https://velog.io/@greenfield_2100/attnimplementation-sdpa-vs-flashattention2</guid>
            <pubDate>Mon, 09 Mar 2026 04:53:46 GMT</pubDate>
            <description><![CDATA[<p>쉽게 말하면,</p>
<ul>
<li><strong><code>sdpa</code></strong> = PyTorch가 제공하는 <strong>공식 어텐션 API/백엔드 경로</strong></li>
<li><strong><code>flash_attention_2</code></strong> = Dao-AILab의 <strong>외부 FlashAttention-2 커스텀 구현</strong>을 직접 쓰는 방식</li>
</ul>
<p>입니다. Transformers 문서도 <code>attn_implementation</code>으로 <code>&quot;sdpa&quot;</code>는 <code>F.scaled_dot_product_attention</code>를, <code>&quot;flash_attention_2&quot;</code>는 Dao-AILab <code>flash-attention</code> 패키지를 쓴다고 설명합니다. 그리고 <code>torch&gt;=2.1.1</code>에서는 기본적으로 SDPA가 사용될 수 있다고 적혀 있어요. (<a href="https://huggingface.co/docs/transformers/main_classes/model?utm_source=chatgpt.com" title="Models">Hugging Face</a>)</p>
<p>조금 더 풀어서 말하면:</p>
<p><code>sdpa</code>는 <strong>PyTorch 안에 있는 표준 창구</strong>예요.
코드에서는 그냥 <code>scaled_dot_product_attention</code>를 호출하고, 내부적으로 PyTorch가 상황에 따라 어떤 커널을 쓸지 선택할 수 있습니다. PyTorch 문서에도 SDPA는 여러 backend를 가질 수 있고, <code>sdpa_kernel</code>로 backend를 고를 수 있다고 나옵니다. 가능한 backend enum에는 <code>FLASH_ATTENTION</code>, <code>EFFICIENT_ATTENTION</code>, <code>MATH</code>, <code>CUDNN_ATTENTION</code> 등이 있습니다. 즉 <strong><code>sdpa</code>는 하나의 단일 알고리즘 이름이라기보다, PyTorch의 통합 인터페이스</strong>에 가깝습니다. (<a href="https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html?utm_source=chatgpt.com" title="torch.nn.functional.scaled_dot_product_attention">PyTorch Documentation</a>)</p>
<p>반면 <code>flash_attention_2</code>는 <strong>외부 패키지 <code>flash_attn</code>이 반드시 설치되어 있어야 하는 직접 지정 방식</strong>입니다. Transformers가 이 옵션을 받으면 Dao-AILab 구현을 쓰려 하고, 네 로그처럼 패키지가 없으면 바로 ImportError가 납니다. Hugging Face 문서도 FlashAttention-2 사용 시 관련 패키지 설치가 필요하고, <code>fp16</code> 또는 <code>bf16</code> dtype에서 사용해야 한다고 안내합니다. (<a href="https://huggingface.co/docs/transformers/v4.44.2/perf_infer_gpu_one?utm_source=chatgpt.com" title="GPU inference">Hugging Face</a>)</p>
<p>차이를 한 줄로 정리하면:</p>
<ul>
<li><strong><code>sdpa</code></strong>: 설치가 더 쉽고, PyTorch 기본 경로라서 <strong>가장 무난</strong></li>
<li><strong><code>flash_attention_2</code></strong>: 잘 맞으면 더 빠르거나 메모리 효율이 좋을 수 있지만, <strong>설치/호환 조건이 더 까다로움</strong> (<a href="https://docs.pytorch.org/tutorials/intermediate/scaled_dot_product_attention_tutorial.html?utm_source=chatgpt.com" title="(Beta) Implementing High-Performance Transformers with ...">PyTorch Documentation</a>)</li>
</ul>
<p>네 상황에서는 왜 <code>sdpa</code>를 추천했냐면,
지금은 <code>flash_attn</code> 설치가 안 끝난 상태라서 <code>flash_attention_2</code>를 강제로 쓰면 모델이 아예 로드되지 않아요. 반대로 <code>sdpa</code>는 PyTorch 쪽 기능이라 <strong>추가 외부 패키지 없이 바로 돌아갈 가능성이 높습니다</strong>. 이건 네 현재 환경에서 가장 현실적인 우회 방법이에요. (<a href="https://huggingface.co/docs/transformers/main_classes/model?utm_source=chatgpt.com" title="Models">Hugging Face</a>)</p>
<p>체감 차이는 보통 이렇게 이해하면 됩니다.</p>
<ul>
<li><strong>속도/메모리 최적화 최우선</strong> → <code>flash_attention_2</code> 시도</li>
<li><strong>일단 안정적으로 실행</strong> → <code>sdpa</code></li>
</ul>
<p>코드도 차이는 한 줄뿐이에요.</p>
<pre><code class="language-python">attn_implementation=&quot;sdpa&quot;</code></pre>
<p>또는</p>
<pre><code class="language-python">attn_implementation=&quot;flash_attention_2&quot;</code></pre>
<p>네가 원하면 다음 답변에서
<strong>“sdpa가 내부적으로 flash kernel을 쓰는 경우”</strong>까지 포함해서,
<code>eager / sdpa / flash_attention_2</code>를 표처럼 딱 비교해줄게.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[__all__ = ["SiglipProcessor"]]]></title>
            <link>https://velog.io/@greenfield_2100/all-SiglipProcessor</link>
            <guid>https://velog.io/@greenfield_2100/all-SiglipProcessor</guid>
            <pubDate>Fri, 06 Mar 2026 05:20:18 GMT</pubDate>
            <description><![CDATA[<p>“이 파일에서 밖으로 공식적으로 공개할 대상은 <code>SiglipProcessor</code>다.”**</p>
<p>라는 의미</p>
<hr>
<h1 id="1-어디에-쓰이냐">1. 어디에 쓰이냐</h1>
<p>특히 이런 코드에서 영향이 있어:</p>
<pre><code class="language-python">from some_module import *</code></pre>
<p>이때 <code>__all__</code>이 있으면
그 목록에 들어 있는 이름들만 import 돼.</p>
<p>예를 들면:</p>
<pre><code class="language-python">__all__ = [&quot;SiglipProcessor&quot;]</code></pre>
<p>이면</p>
<pre><code class="language-python">from some_module import *</code></pre>
<p>했을 때 <code>SiglipProcessor</code>만 들어오는 거야.</p>
<hr>
<h1 id="2-왜-쓰냐">2. 왜 쓰냐</h1>
<p>이유는 보통 3가지야.</p>
<h3 id="1-이-파일의-공식-공개-api를-표시">(1) 이 파일의 공식 공개 API를 표시</h3>
<p>이 파일 안에 변수, 함수, 클래스가 여러 개 있을 수 있는데
그중에서 “사용자가 써도 되는 공식 대상”을 정해주는 거야.</p>
<p>즉:</p>
<ul>
<li>내부 구현용 이름은 숨기고</li>
<li>외부 사용자에게 보여줄 핵심만 지정</li>
</ul>
<hr>
<h3 id="2-import--제어">(2) <code>import *</code> 제어</h3>
<p>와일드카드 import 시 뭐가 들어올지 통제하기 위해서.</p>
<hr>
<h3 id="3-문서화가독성">(3) 문서화/가독성</h3>
<p>이 파일의 핵심 public object가 뭔지 한눈에 보이게 해.</p>
<p>즉 이 파일에서는
“대표 클래스는 <code>SiglipProcessor</code>입니다”
라고 선언하는 느낌이야.</p>
<hr>
<h1 id="3-지금-코드에서-왜-이게-있냐">3. 지금 코드에서 왜 이게 있냐</h1>
<p>네가 본 파일은 아마 processor 정의 파일이라서
핵심 공개 대상이 <code>SiglipProcessor</code> 하나인 거야.</p>
<p>예를 들어 파일 안에는 내부적으로:</p>
<ul>
<li>import된 것들</li>
<li>helper</li>
<li>decorator</li>
<li>base class 관련 이름</li>
</ul>
<p>이런 게 섞여 있을 수 있는데,
외부에서 이 파일을 사용할 때는 결국 <code>SiglipProcessor</code>가 핵심이잖아.</p>
<p>그래서:</p>
<pre><code class="language-python">__all__ = [&quot;SiglipProcessor&quot;]</code></pre>
<p>라고 적어둔 거야.</p>
<hr>
<h1 id="4-예시로-보면-쉬워">4. 예시로 보면 쉬워</h1>
<pre><code class="language-python">x = 10

class A:
    pass

class B:
    pass

__all__ = [&quot;A&quot;]</code></pre>
<p>이 상태에서:</p>
<pre><code class="language-python">from mymodule import *</code></pre>
<p>하면 <code>A</code>만 들어오고
<code>x</code>, <code>B</code>는 안 들어올 수 있어.</p>
<hr>
<h1 id="5-중요한-점">5. 중요한 점</h1>
<p>이건 <strong>클래스를 만드는 코드가 아니고</strong>,
<strong>모듈이 외부에 어떤 이름을 공개할지 정하는 변수</strong>야.</p>
<p>즉:</p>
<ul>
<li><code>SiglipProcessor</code>를 생성하는 코드도 아니고</li>
<li>return도 아니고</li>
<li>실행 로직도 아님</li>
</ul>
<p>그냥 모듈 수준의 설정이야.</p>
<hr>
<h1 id="6-아주-짧게-정리">6. 아주 짧게 정리</h1>
<pre><code class="language-python">__all__ = [&quot;SiglipProcessor&quot;]</code></pre>
<p>=
<strong>“이 파일에서 공식적으로 export할 이름은 <code>SiglipProcessor</code>다”</strong></p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[__call__ vs __init__ ]]></title>
            <link>https://velog.io/@greenfield_2100/call-vs-init</link>
            <guid>https://velog.io/@greenfield_2100/call-vs-init</guid>
            <pubDate>Fri, 06 Mar 2026 05:17:48 GMT</pubDate>
            <description><![CDATA[<p><a href="https://huggingface.co/docs/transformers/v5.3.0/en/model_doc/siglip#transformers.SiglipTokenizer">https://huggingface.co/docs/transformers/v5.3.0/en/model_doc/siglip#transformers.SiglipTokenizer</a></p>
<pre><code class="language-from">import requests
from transformers import AutoProcessor, AutoModel
import torch

# model = AutoModel.from_pretrained(&quot;google/siglip-base-patch16-224&quot;)
# processor = AutoProcessor.from_pretrained(&quot;google/siglip-base-patch16-224&quot;)


from transformers import SiglipModel, SiglipProcessor

model = SiglipModel.from_pretrained(&quot;google/siglip-base-patch16-224&quot;)
processor = SiglipProcessor.from_pretrained(&quot;google/siglip-base-patch16-224&quot;)


url = &quot;http://images.cocodataset.org/val2017/000000039769.jpg&quot;
image = Image.open(requests.get(url, stream=True).raw)

candidate_labels = [&quot;2 cats&quot;, &quot;2 dogs&quot;]
texts = [f&#39;This is a photo of {label}.&#39; for label in candidate_labels]
inputs = processor(text=texts, images=image, padding=&quot;max_length&quot;, return_tensors=&quot;pt&quot;)

with torch.no_grad():
    outputs = model(**inputs)

logits_per_image = outputs.logits_per_image
probs = torch.sigmoid(logits_per_image) # 시그모이드 활성화 함수를 적용한 확률입니다
print(f&quot;{probs[0][0]:.1%} that image 0 is &#39;{candidate_labels[0]}&#39;&quot;)</code></pre>
<ul>
<li><code>__init__</code> : <strong>객체가 만들어질 때 처음 한 번 실행되는 초기화 함수</strong></li>
<li><code>__call__</code> : <strong>이미 만들어진 객체를 함수처럼 호출할 때 실행되는 함수</strong></li>
</ul>
<p>즉 역할이 완전히 달라.</p>
<hr>
<h2 id="1-__init__">1. <code>__init__</code></h2>
<p>이건 객체를 만들 때 실행돼.</p>
<p>예시:</p>
<pre><code class="language-python">class Dog:
    def __init__(self, name):
        self.name = name
        print(&quot;init 실행&quot;)

d = Dog(&quot;Coco&quot;)</code></pre>
<p>실행 흐름:</p>
<ul>
<li><code>Dog(&quot;Coco&quot;)</code> 호출</li>
<li>객체 생성</li>
<li><code>__init__(self, &quot;Coco&quot;)</code> 실행</li>
<li><code>self.name = &quot;Coco&quot;</code> 저장</li>
</ul>
<p>여기서 <code>__init__</code>는 보통:</p>
<ul>
<li>변수 저장</li>
<li>옵션 설정</li>
<li>초기 상태 만들기</li>
</ul>
<p>를 담당해.</p>
<p>즉 <strong>“객체 세팅 담당”</strong> 이야.</p>
<hr>
<h2 id="2-__call__">2. <code>__call__</code></h2>
<p>이건 객체를 함수처럼 쓸 때 실행돼.</p>
<p>예시:</p>
<pre><code class="language-python">class Dog:
    def __init__(self, name):
        self.name = name

    def __call__(self):
        print(f&quot;{self.name} is barking&quot;)

d = Dog(&quot;Coco&quot;)
d()</code></pre>
<p>여기서:</p>
<ul>
<li><code>d = Dog(&quot;Coco&quot;)</code> → <code>__init__</code> 실행</li>
<li><code>d()</code> → <code>__call__</code> 실행</li>
</ul>
<p>즉 <strong>객체인데 함수처럼 부를 수 있게 해주는 메서드</strong>야.</p>
<hr>
<h2 id="3-차이를-한-번에-보기">3. 차이를 한 번에 보기</h2>
<h3 id="__init__"><code>__init__</code></h3>
<pre><code class="language-python">d = Dog(&quot;Coco&quot;)</code></pre>
<p>이때 실행됨.</p>
<h3 id="__call__"><code>__call__</code></h3>
<pre><code class="language-python">d()</code></pre>
<p>이때 실행됨.</p>
<hr>
<h2 id="4-siglip-예시로-연결하면">4. SigLIP 예시로 연결하면</h2>
<p>예를 들어:</p>
<pre><code class="language-python">processor = SiglipProcessor(image_processor, tokenizer)</code></pre>
<p>이때는 <code>__init__</code>가 실행돼.</p>
<p>무슨 뜻이냐면:</p>
<ul>
<li><code>image_processor</code> 저장</li>
<li><code>tokenizer</code> 저장</li>
<li>processor 객체 세팅</li>
</ul>
<p>이걸 하는 거야.</p>
<p>반면:</p>
<pre><code class="language-python">inputs = processor(text=texts, images=image)</code></pre>
<p>이건 <code>processor(...)</code>처럼 객체를 함수처럼 호출한 거니까
<code>__call__</code>이 실행되는 거야.</p>
<p>즉 여기서는:</p>
<ul>
<li>text를 tokenizer에 넣고</li>
<li>image를 image_processor에 넣고</li>
<li>결과를 묶어서</li>
<li><code>inputs</code>를 반환</li>
</ul>
<p>하는 식으로 동작해.</p>
<hr>
<h2 id="5-비유">5. 비유</h2>
<h3 id="__init__-1"><code>__init__</code></h3>
<p>커피머신 설치</p>
<ul>
<li>전원 연결</li>
<li>물 넣기</li>
<li>원두 넣기</li>
<li>설정 완료</li>
</ul>
<h3 id="__call__-1"><code>__call__</code></h3>
<p>커피 추출 버튼 누르기</p>
<ul>
<li>아메리카노 만들기</li>
<li>결과 반환</li>
</ul>
<p>즉:</p>
<ul>
<li><code>__init__</code> = 준비</li>
<li><code>__call__</code> = 실행</li>
</ul>
<hr>
<h2 id="6-같이-있는-예제">6. 같이 있는 예제</h2>
<pre><code class="language-python">class MyProcessor:
    def __init__(self, x):
        self.x = x
        print(&quot;init 실행&quot;)

    def __call__(self, y):
        print(&quot;call 실행&quot;)
        return self.x + y

p = MyProcessor(10)   # __init__
result = p(5)         # __call__

print(result)</code></pre>
<p>실행 결과:</p>
<pre><code class="language-python">init 실행
call 실행
15</code></pre>
<p>여기서:</p>
<ul>
<li><code>MyProcessor(10)</code> → 객체 만들면서 <code>__init__</code></li>
<li><code>p(5)</code> → 객체를 함수처럼 불러서 <code>__call__</code></li>
</ul>
<hr>
<h2 id="7-정리">7. 정리</h2>
<ul>
<li><code>__init__</code>는 <strong>객체 생성 시 초기화</strong></li>
<li><code>__call__</code>은 <strong>객체 호출 시 실행</strong></li>
<li><code>processor = SiglipProcessor(...)</code> → <code>__init__</code></li>
<li><code>processor(...)</code> → <code>__call__</code></li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[Position Controller vs Velocity Controller]]></title>
            <link>https://velog.io/@greenfield_2100/Position-Controller-vs-Velocity-Controller</link>
            <guid>https://velog.io/@greenfield_2100/Position-Controller-vs-Velocity-Controller</guid>
            <pubDate>Tue, 03 Mar 2026 07:02:39 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/0c1204c3-24cf-47b8-a0b1-3b6f0d905315/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/66691e82-3162-419d-9e37-f0878c957c40/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/515355f8-49d9-4ded-916d-fec1807f7419/image.png" alt=""></p>
<h2 id="4-언제-뭘-선택해">4) 언제 뭘 선택해?</h2>
<blockquote>
</blockquote>
<p>정해진 자세/각도로 정확히 가서 멈추기: Position control
조이스틱/키보드로 부드럽게 움직이기, 베이스 주행(모바일 로봇), 연속 추종: Velocity control
접촉/힘 제어(삽입, 연마, 잡기): 보통 토크/임피던스(힘-위치 혼합) 쪽으로 확장</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[What dose "grounding"mean?? ]]></title>
            <link>https://velog.io/@greenfield_2100/What-dose-groundingmean</link>
            <guid>https://velog.io/@greenfield_2100/What-dose-groundingmean</guid>
            <pubDate>Tue, 24 Feb 2026 01:31:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>접지(grounding)란 인공 지능 시스템이 추상적 개념(일반적으로 자연어에서 파생됨)을 시각 데이터나 감각 입력과 같은 물리적 세계의 구체적 표현과 연결하는 능력을 의미한다.</p>
</blockquote>
<blockquote>
<p>컴퓨터 비전 분야에서 이는 모델이 단순히 텍스트를 처리하는 것이 아니라 &quot;개를 산책시키는 사람&quot;과 같은 구문을 분석하여 이미지나 영상 피드 내에서 해당 개체를 정확히 위치 파악할 수 있음을 뜻합니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[koch1.1 connect (2)]]></title>
            <link>https://velog.io/@greenfield_2100/koch1.1-connect-2</link>
            <guid>https://velog.io/@greenfield_2100/koch1.1-connect-2</guid>
            <pubDate>Mon, 23 Feb 2026 07:14:34 GMT</pubDate>
            <description><![CDATA[<h2 id="d--data-통신-신호">D = DATA (통신 신호)</h2>
<h2 id="v--5v-전원-">V = 5V (전원 +)</h2>
<h2 id="g--gnd-접지">G = GND (접지)</h2>
<blockquote>
</blockquote>
<h3 id="컴퓨터와-직접-연결하는-것이-아닌-보드를-통해서-연결한다">컴퓨터와 직접 연결하는 것이 아닌 보드를 통해서 연결한다.</h3>
<h2 id="리눅스에서-usb-시리얼-장치-권한을-임시로-풀어주는-명령어">리눅스에서 USB 시리얼 장치 권한을 임시로 풀어주는 명령어</h2>
<p>&#39;&#39;&#39;
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1
&#39;&#39;&#39;</p>
<h2 id="devttyacm0-devttyacm1-는-뭐야">/dev/ttyACM0, /dev/ttyACM1 는 뭐야?</h2>
<blockquote>
<p>아두이노 서보 드라이버 보드 USB-시리얼 장치 마이크로컨트롤러(예: STM32, ESP 계열 일부) 로봇 컨트롤러를 USB로 연결했을 때 생기는 시리얼 통신 포트예요.</p>
</blockquote>
<h3 id="임시해결이여서-장치를-다시-뽑았다가-꽂으면-권한이-변경될-수-있음">임시해결이여서 장치를 다시 뽑았다가 꽂으면 권한이 변경될 수 있음</h3>
<h3 id="motorbus가-연결된-usb-포트가-어떤-것인지-자동으로-찾는절차">MotorBus가 연결된 USB 포트가 어떤 것인지 자동으로 찾는절차</h3>
<h3 id="아래-사진과-같이-배선을-뽑고-모터-1개만-연결하고-앤터치고-하는-방식을-하는-이유">아래 사진과 같이 배선을 뽑고 모터 1개만 연결하고 앤터치고 하는 방식을 하는 이유?</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/fc64bfe5-ae0a-4554-a052-cb940be60135/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/98f5fc25-b7bf-4333-a647-8c28156ad8c6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/c28134ff-f521-43cc-aea2-6607fe5b7a11/image.png" alt=""></p>
<blockquote>
<h3 id="각-모터의-id를-개별적으로안-꼬이게-설정확인">각 모터의 ID를 개별적으로(안 꼬이게) 설정/확인</h3>
</blockquote>
<h2 id="calibrate를-진행하는-이유">Calibrate를 진행하는 이유</h2>
<blockquote>
<h3 id="모터가-같은-숫자-명령을-받아도-실제-관절-각도는-서로-다를-수-있기-때문에-기준점을-맞추기-위함">모터가 같은 숫자 명령을 받아도, 실제 관절 각도는 서로 다를 수 있기 때문에 기준점을 맞추기 위함</h3>
</blockquote>
<h2 id="공식-레포-follow-링크">공식 레포 follow 링크</h2>
<ul>
<li><p><a href="https://huggingface.co/docs/lerobot/koch?example=Linux&amp;setup_motors=API+example&amp;calibrate_follower=API+example&amp;calibrate_leader=API+example">koch1.1 setting</a></p>
</li>
<li><p><a href="https://huggingface.co/docs/lerobot/il_robots?teleoperate_so101=API+example">koch1.1 teleoperate</a></p>
</li>
<li><p><a href="https://huggingface.co/docs/lerobot/cameras?shell_restart=Intel+Realsense+Camera#setup-cameras">cameras setting</a></p>
</li>
</ul>
<ul>
<li><a href="https://github.com/huggingface/lerobot/blob/main/src/lerobot/scripts/lerobot_train.py">train.py github code</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[코사인 유사도 (Cosine Similarity)]]></title>
            <link>https://velog.io/@greenfield_2100/%EC%BD%94%EC%82%AC%EC%9D%B8-%EC%9C%A0%EC%82%AC%EB%8F%84-Cosine-Similarity</link>
            <guid>https://velog.io/@greenfield_2100/%EC%BD%94%EC%82%AC%EC%9D%B8-%EC%9C%A0%EC%82%AC%EB%8F%84-Cosine-Similarity</guid>
            <pubDate>Mon, 23 Feb 2026 01:04:52 GMT</pubDate>
            <description><![CDATA[<h3 id="해당-내용을-적게된-이유--몇몇-인공지능-모델을-이용해서-해당-데이터를-임베딩-벡터로-만드는데-해당-임베딩-백터간의-유사도를-계산하는-것에-직접해보고자-함">해당 내용을 적게된 이유 : 몇몇 인공지능 모델을 이용해서 해당 데이터를 임베딩 벡터로 만드는데 해당 임베딩 백터간의 유사도를 계산하는 것에 직접해보고자 함</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/39266f48-ab67-440e-94f3-9c67177b8ef0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/11f72b73-0351-46cd-a824-652d58dd1693/image.png" alt=""></p>
<h3 id="dot-prodoct">dot prodoct</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/e042d9f1-01b3-4abd-990d-cf1986e9ac82/image.png" alt=""></p>
<h3 id="vector-norm">vector norm</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/fdf148f2-62ad-4b00-8225-79cd29e501b9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/1cd303ea-5c1d-4210-91c3-38862dda0b7a/image.png" alt=""></p>
<h3 id="결과-">결과 :</h3>
<p>값이 1에 가깝다면 유사하고, 0이라면 거의 무관한다.(직교함), -1이라면 반대방향이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[반복 정밀도 & 도달 범위]]></title>
            <link>https://velog.io/@greenfield_2100/%EB%B0%98%EB%B3%B5-%EC%A0%95%EB%B0%80%EB%8F%84-%EB%8F%84%EB%8B%AC-%EB%B2%94%EC%9C%84</link>
            <guid>https://velog.io/@greenfield_2100/%EB%B0%98%EB%B3%B5-%EC%A0%95%EB%B0%80%EB%8F%84-%EB%8F%84%EB%8B%AC-%EB%B2%94%EC%9C%84</guid>
            <pubDate>Fri, 20 Feb 2026 07:08:11 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/4db76c8f-20ef-4b54-9e06-6f4dafb2525e/image.png" alt=""></p>
<blockquote>
<h3 id="로봇의-스팩을-보면서-반복정밀도-및-도발-범위의-정의가-궁금해서-정리겸-적어봄">로봇의 스팩을 보면서 반복정밀도 및 도발 범위의 정의가 궁금해서 정리겸 적어봄...</h3>
</blockquote>
<h2 id="1-반복-정밀도repeatability-반복-위치정밀도">1) 반복 정밀도(Repeatability, 반복 위치정밀도)</h2>
<ul>
<li><p>뜻: <strong>같은 목표 위치로 여러 번 이동했을 때, 그 위치에 “얼마나 비슷하게” 다시 도착하느냐</strong></p>
</li>
<li><p>쉽게 말해: “매번 찍는 점이 얼마나 한곳에 모이냐”</p>
</li>
<li><p>보통 표기: <strong>±0.02 mm</strong> 같은 형태</p>
</li>
<li><p>중요한 포인트:</p>
<ul>
<li>“절대적으로 정확한 위치”가 아니라 <strong>‘재현성’</strong>이 핵심</li>
<li>예: 목표점이 실제로는 0.5mm 옆에 찍혀도, 매번 그 0.5mm 옆에 똑같이 찍히면 <strong>반복정밀도는 좋다</strong></li>
</ul>
</li>
</ul>
<h2 id="2-도달-범위reach--작업-범위working-range-envelope">2) 도달 범위(Reach) / 작업 범위(Working Range, Envelope)</h2>
<ul>
<li><p>뜻: 로봇이 <strong>팔을 뻗어서 도달할 수 있는 최대 거리</strong>, 혹은 <strong>움직일 수 있는 공간(3D 영역)</strong></p>
</li>
<li><p>쉽게 말해: “로봇이 <strong>어디까지 손이 닿나</strong>”</p>
</li>
<li><p>보통 표기:</p>
<ul>
<li>Reach: <strong>900 mm</strong> 같은 “거리”</li>
<li>Working envelope: “반경/높이/각도 제한” 포함한 <strong>가능 작업 공간</strong></li>
</ul>
</li>
</ul>
<h2 id="3-차이점-한-줄-요약">3) 차이점 한 줄 요약</h2>
<ul>
<li><strong>반복 정밀도 = 같은 곳을 얼마나 똑같이 다시 찍나 (품질/정밀)</strong></li>
<li><strong>도달 범위 = 어디까지 갈 수 있나 (작업 가능 영역/크기)</strong></li>
</ul>
<h2 id="4-현장-감각-예시">4) 현장 감각 예시</h2>
<ul>
<li>Reach 900mm: “작업대 끝까지 팔이 닿는다”</li>
<li>Repeatability ±0.02mm: “그 위치를 100번 찍어도 흔들림이 매우 작다 → 조립/삽입(끼워넣기) 같은 정밀 작업에 유리”</li>
</ul>
<p>원하면 너가 보는 로봇 스펙 표(예: Doosan, Dobot 등)에서 <strong>반복정밀도 수치랑 Reach 수치</strong>를 같이 적어주면, 그 수치가 실제 작업(픽앤플레이스/조립/나사/접촉작업)에서 어떤 의미인지 바로 해석해줄게.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[koch1.1 connect (1)]]></title>
            <link>https://velog.io/@greenfield_2100/koch1.1-connect-1</link>
            <guid>https://velog.io/@greenfield_2100/koch1.1-connect-1</guid>
            <pubDate>Thu, 19 Feb 2026 08:30:57 GMT</pubDate>
            <description><![CDATA[<h2 id="github-link">github link</h2>
<blockquote>
<p><a href="https://github.com/jess-moss/koch-v1-1?tab=readme-ov-file">https://github.com/jess-moss/koch-v1-1?tab=readme-ov-file</a></p>
</blockquote>
<h2 id="look-video">Look video</h2>
<blockquote>
<p><a href="https://www.youtube.com/watch?v=U78QQ9wCdpY&amp;list=PLo2EIpI_JMQu5zrDHe4NchRyumF2ynaUN&amp;index=3">https://www.youtube.com/watch?v=U78QQ9wCdpY&amp;list=PLo2EIpI_JMQu5zrDHe4NchRyumF2ynaUN&amp;index=3</a></p>
</blockquote>
<h3 id="follower-arm-connection-cable">follower arm connection cable</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/d00ff384-49f8-418b-ab58-b82a9fe63955/image.png" alt=""></p>
<h3 id="leader-arm-connection-cable">leader arm connection cable</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/83acd8cb-fd4a-4834-aaf9-786bee4ffbdd/image.png" alt=""></p>
<h2 id="env-setting">env setting</h2>
<blockquote>
<p><a href="https://huggingface.co/docs/lerobot/koch">https://huggingface.co/docs/lerobot/koch</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Moveit2 install & Start]]></title>
            <link>https://velog.io/@greenfield_2100/Moveit2-install</link>
            <guid>https://velog.io/@greenfield_2100/Moveit2-install</guid>
            <pubDate>Thu, 19 Feb 2026 05:51:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><a href="https://moveit.ai/install-moveit2/binary/">https://moveit.ai/install-moveit2/binary/</a></p>
</blockquote>
<pre><code>cd ws_moveit
ros2 launch moveit2_tutorials demo.launch.py</code></pre><blockquote>
<p><a href="https://moveit.picknik.ai/main/doc/tutorials/pick_and_place_with_moveit_task_constructor/pick_and_place_with_moveit_task_constructor.html">https://moveit.picknik.ai/main/doc/tutorials/pick_and_place_with_moveit_task_constructor/pick_and_place_with_moveit_task_constructor.html</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[if you can't connect wifi]]></title>
            <link>https://velog.io/@greenfield_2100/if-you-cant-connect-wifi</link>
            <guid>https://velog.io/@greenfield_2100/if-you-cant-connect-wifi</guid>
            <pubDate>Fri, 13 Feb 2026 10:33:02 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>sudo apt update
sudo apt install --reinstall linux-firmware
sudo update-initramfs -u
sudo reboot</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[tmux 사용법]]></title>
            <link>https://velog.io/@greenfield_2100/tmux-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
            <guid>https://velog.io/@greenfield_2100/tmux-%EC%82%AC%EC%9A%A9%EB%B2%95</guid>
            <pubDate>Fri, 06 Feb 2026 07:45:59 GMT</pubDate>
            <description><![CDATA[<p>좋아. <strong>tmux + conda + 서버 접속</strong> 흐름을 “처음부터 끝까지” 한 번에 정리해줄게. (GPU 서버에서 학습 돌리는 상황 기준)</p>
<hr>
<h2 id="0-개념-한-줄-요약">0) 개념 한 줄 요약</h2>
<ul>
<li><strong>tmux</strong>: SSH 끊겨도 작업(학습/스크립트) 계속 돌게 “터미널 세션”을 서버에 붙여두는 도구</li>
<li><strong>conda env</strong>: 파이썬/라이브러리 버전 충돌 막는 “개인/프로젝트 환경”</li>
</ul>
<hr>
<h2 id="1-서버-접속">1) 서버 접속</h2>
<pre><code class="language-bash">ssh user@서버IP</code></pre>
<hr>
<h2 id="2-tmux-세션-만들기-작업방-만들기">2) tmux 세션 만들기 (작업방 만들기)</h2>
<p>세션 이름을 정해서 생성:</p>
<pre><code class="language-bash">tmux new -s exp1</code></pre>
<p>이미 만들어둔 세션이 있으면 목록 확인:</p>
<pre><code class="language-bash">tmux ls</code></pre>
<hr>
<h2 id="3-conda-환경-준비활성화">3) conda 환경 준비/활성화</h2>
<h3 id="1-환경-생성처음-한-번만">(1) 환경 생성(처음 한 번만)</h3>
<pre><code class="language-bash">conda create -n kunhee_env python=3.10 -y</code></pre>
<h3 id="2-환경-활성화매번-작업-시작-시">(2) 환경 활성화(매번 작업 시작 시)</h3>
<pre><code class="language-bash">conda activate kunhee_env</code></pre>
<h3 id="3-지금-파이썬이-env-맞는지-확인실수-방지">(3) 지금 파이썬이 env 맞는지 확인(실수 방지)</h3>
<pre><code class="language-bash">which python
python -V</code></pre>
<hr>
<h2 id="4-학습작업-실행">4) 학습/작업 실행</h2>
<p>예시:</p>
<pre><code class="language-bash">python train.py</code></pre>
<p>로그를 파일로 남기고 싶으면(강추):</p>
<pre><code class="language-bash">python train.py &gt; train.log 2&gt;&amp;1</code></pre>
<p>실시간으로 로그 보기:</p>
<pre><code class="language-bash">tail -f train.log</code></pre>
<hr>
<h2 id="5-tmux-분리detach-해서-나가기-작업은-계속-돌아감">5) tmux “분리(detach)” 해서 나가기 (작업은 계속 돌아감)</h2>
<p>✅ 기본 키:</p>
<ul>
<li><code>Ctrl + b</code> 누르고 (prefix)</li>
<li>손 떼고 <code>d</code></li>
</ul>
<p>즉: <strong><code>Ctrl+b</code> → <code>d</code></strong></p>
<p>SSH를 끊어도(창 닫아도) tmux 안에서 실행 중인 학습은 계속 돌아요.</p>
<hr>
<h2 id="6-나중에-다시-들어와서-이어보기붙기">6) 나중에 다시 들어와서 이어보기(붙기)</h2>
<p>다시 서버 접속 후:</p>
<p>세션 목록:</p>
<pre><code class="language-bash">tmux ls</code></pre>
<p>세션 붙기:</p>
<pre><code class="language-bash">tmux attach -t exp1</code></pre>
<hr>
<h2 id="7-conda-deactivate-관련-핵심">7) conda deactivate 관련 핵심</h2>
<ul>
<li><code>conda deactivate</code>는 <strong>현재 터미널의 환경만 바꾸는 것</strong></li>
<li>이미 돌고 있는 <code>python train.py</code> 같은 프로세스는 <strong>실행 시작 당시 환경을 물고 계속 실행</strong>됨</li>
<li>다만, 같은 tmux 창에서 <strong>새로 명령 실행할 땐</strong> base로 실행될 수 있으니 주의</li>
</ul>
<hr>
<h2 id="8-자주-쓰는-tmux-단축키기본-prefix--ctrlb">8) 자주 쓰는 tmux 단축키(기본 prefix = Ctrl+b)</h2>
<ul>
<li>분리(detach): <code>Ctrl+b</code> → <code>d</code></li>
<li>창(윈도우) 새로 만들기: <code>Ctrl+b</code> → <code>c</code></li>
<li>창 이동: <code>Ctrl+b</code> → <code>n</code> (다음), <code>Ctrl+b</code> → <code>p</code> (이전)</li>
<li>창 목록: <code>Ctrl+b</code> → <code>w</code></li>
<li>현재 창 종료(프로세스 끝내기): <code>exit</code> 또는 <code>Ctrl+d</code></li>
</ul>
<hr>
<h2 id="9-안-끊기게-돌리기-추천-패턴정석">9) “안 끊기게 돌리기” 추천 패턴(정석)</h2>
<ol>
<li><code>ssh 접속</code></li>
<li><code>tmux new -s exp1</code></li>
<li><code>conda activate kunhee_env</code></li>
<li><code>python train.py &gt; train.log 2&gt;&amp;1</code></li>
<li><code>Ctrl+b</code> → <code>d</code> 로 빠져나오기</li>
<li>나중에 <code>tmux attach -t exp1</code> 로 확인</li>
</ol>
<hr>
<p>원하면 너 서버 상황에 맞춰 “가장 안전한 세팅”도 바로 잡아줄게.</p>
<ul>
<li>tmux 세션을 여러 개로 나눌지(실험별)</li>
<li>로그/체크포인트 폴더 구조를 어떻게 할지</li>
<li>GPU 점유 확인(<code>nvidia-smi</code>)까지 한 번에 루틴으로 만들어줄까?</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Transfomer 모델 구조 ]]></title>
            <link>https://velog.io/@greenfield_2100/Transfomer-%EB%AA%A8%EB%8D%B8-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@greenfield_2100/Transfomer-%EB%AA%A8%EB%8D%B8-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Fri, 06 Feb 2026 06:26:33 GMT</pubDate>
            <description><![CDATA[<ul>
<li>작성이유 : Transfomer 논문을 이해하는 과정에서 x N 이라고 있는데 이 부분에서 레이어가 인인코더와 디코더 레이어가 어떻게 훈련되어가는지 모르겠음</li>
</ul>
<blockquote>
<p><a href="https://github.com/hyunwoongko/transformer/tree/master">https://github.com/hyunwoongko/transformer/tree/master</a></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/f8cd1d84-b4e6-47a9-b49b-5afdc3ac9de3/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/62a937ff-b7f1-4c92-8b17-f9c51b0a16fa/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/8a0feb4f-5bb6-49fe-ac77-26d4ae8ca2d8/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/f1adb44e-c766-4203-b747-54f753f76214/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/5c93b723-4b0b-451f-8550-7c47cdbd90e3/image.png" alt=""></p>
<h3 id="질문--2번째로-들어갈때도-동일하게-input-embeding부터">질문 : 2번째로 들어갈때도 동일하게 input embeding부터???</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a6bfc088-ed3d-47ae-ad7e-f4ea86d0a36d/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/1cc72e0e-6665-4895-90b2-14e9dfa523db/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/093b9d3f-f3f5-4354-85b2-4183f6151a8a/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/fb124243-5573-4223-8851-78421aa648fd/image.png" alt=""></p>
<h3 id="질문--디코더에-처음은-출력이-없으니까-임의의-값을-그리고-훈련시-평가시-달라지는-것">질문 : 디코더에 처음은 출력이 없으니까 임의의 값을??? 그리고 훈련시 평가시 달라지는 것?</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/c1fe1d2d-44f0-4fad-8480-f8aa8bc60243/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/e3416ed1-5f5c-45c0-b14f-bb42c6addf7f/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/8cb354ec-c556-45b9-b8c8-a3884619e00e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Residual Neural Network, ResNet]]></title>
            <link>https://velog.io/@greenfield_2100/Residual-Neural-Network-ResNet</link>
            <guid>https://velog.io/@greenfield_2100/Residual-Neural-Network-ResNet</guid>
            <pubDate>Fri, 06 Feb 2026 05:22:01 GMT</pubDate>
            <description><![CDATA[<p><strong>작성 이유</strong> : transfomer 모델을 설명해주기 위해서 작성하는 과정에서 attention 부분이 3가지정도 있었는데 encoder - decoder attention / multi-head-self-attention /masked multi-head-attention 이있었고 그 부분에서 화살표로 잔차학습이 존재해서 설명하려는 도중에 막혀서 작성하게 되었음</p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/2fbb5f38-8efd-4f66-8c14-28030a66d177/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/43d1c04f-a9b1-4c81-b2c0-54d14760e6d5/image.png" alt=""></p>
<ul>
<li>why 이것을 사용했는가??</li>
</ul>
<h3 id="1-문제점">1) 문제점</h3>
<blockquote>
<h4 id="과거의-문제점-층을-깊에-쌓을-수록-gradiant-vinishing-problem미분을-하면서-미분값이-0으로-가서-결국-더-이상-네트워크가-업데이트-되지-않는-현상이-존재">과거의 문제점 층을 깊에 쌓을 수록 gradiant vinishing problem(미분을 하면서 미분값이 0으로 가서 결국 더 이상 네트워크가 업데이트 되지 않는 현상)이 존재</h4>
</blockquote>
<h4 id="residual-block의-수식-가장-기본형">Residual block의 수식 (가장 기본형)</h4>
<ul>
<li><p>우리가 원래 원하던 함수: <strong>H(X)</strong></p>
</li>
<li><p>ResNet은 이를 직접 학습하지 않고, 잔차(residual), F(x)= H(x)−x 를 학습하게 변경</p>
</li>
<li><p>y = x = F(x)</p>
</li>
<li><p>즉 이렇게 되면 “아무것도 안 하는(identity)” 해답이 필요할 때, F(x)=0만 만들면 되니까 최적화가 훨씬 쉬워진다는 게 핵심 주장입니다</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/ead530b0-ddad-434b-a686-1dc0f2b7ac07/image.png" alt=""></p>
<h3 id="2-왜-skip-connection이-학습을-쉽게-하나-직관">2) 왜 skip connection이 학습을 쉽게 하나? (직관)</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/bd7d9e02-64cd-4e0a-8684-94a6621d1f02/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/5328ed28-b0cd-4113-9f62-4893f15841a8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/2c3ba68b-8377-47a9-acf2-3144ff5116e2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/087d6af2-3620-4957-8de3-4b5f88836ec7/image.png" alt=""></p>
<h4 id="1-쉬운-길이-생겨서-그라디언트가-덜-죽는다">(1) “쉬운 길”이 생겨서 그라디언트가 덜 죽는다</h4>
<h4 id="2-필요한-변화만-추가로-학습하게-만든다">(2) “필요한 변화만 추가로 학습”하게 만든다</h4>
<blockquote>
<h3 id="질문--필요있고-없고는-역전파할때를-말하는-건지-순전파를-말하는-건지">질문 : 필요있고 없고는 역전파할때를 말하는 건지 순전파를 말하는 건지??</h3>
</blockquote>
<ul>
<li>실제로는 순전파/역전파 둘 다에서 의미가 있어.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/d322ee6c-aa95-4d9c-8bc7-34a5a98b1c95/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a79f1e03-56e8-4ae4-9fc5-8df2c0fb582a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/86884a48-4698-4947-9881-558cfbb0e079/image.png" alt=""></p>
<blockquote>
<h3 id="3-통과-경로가-생겨서-학습이-쉬워진다-보충-설명">3) 통과 경로”가 생겨서 학습이 쉬워진다 보충 설명</h3>
</blockquote>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/b0464be9-c2d2-440b-84c1-6b7cbf61d320/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a22d2ebc-4a87-4bf4-82ed-1a1d80dfa301/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/c725fb1b-09dc-4967-8db2-ce8b0d90cd76/image.png" alt=""></p>
<blockquote>
<h2 id="부족한-개념--역전파-직접해보면서-0이되는지에-대한-부분을-이해가-필요할-듯--곱하기로">부족한 개념 : 역전파 직접해보면서 0이되는지에 대한 부분을 이해가 필요할 듯 + 곱하기로</h2>
<p>미분값이 적용되는지도 해볼 필요 있음</p>
</blockquote>
<h2 id="4-1-2-layer-sigmoid">4-1) 2 layer (Sigmoid)</h2>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/335223b0-6dff-4c0c-89b0-143dc204fac3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/28497eb2-c2b4-497a-8fd6-36b7c50d5b02/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/4fb86326-8d3c-456c-b1f1-1eb21323ce3f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/cb3e8df8-67d7-4ff9-8499-415cc4b665e7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/96e1bb7b-d81c-40a9-bd3a-06f41d6bbaa6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/6d494ba6-27fc-4471-9d1b-3b560a649b17/image.png" alt=""></p>
<h2 id="4-2-2-layer-resnet-sigmoid">4-2) 2 layer ResNet (Sigmoid)</h2>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a0b3af86-e8ab-42a9-a5fe-53288f637fe6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/5c06af07-8081-4c87-8bc3-d7842e2262cf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/320f0774-3af6-457a-8291-fcda84e4cd0f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/20700d28-36f1-42fa-a21f-1fa69663eafa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/4ff16670-a30d-4fce-91e7-9bfe31cb3c6f/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/392d9e8c-8c3d-490a-a3d5-15cadf0ea562/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/a5eddd25-347d-4578-8fb5-a5be749be859/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/b7d38f6a-ba7d-4b4e-a57b-77d9dfa42c18/image.png" alt=""></p>
<h2 id="4-3-2-layer-resnet-relu">4-3) 2 layer ResNet (RELU)</h2>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/8fc4ccd2-46eb-4ed1-8708-b592825ff86e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/18c1f1aa-f403-4fa0-a5de-76c2749bca9b/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/c10205f2-d944-43ad-878f-0ba6243800c9/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/fe375a38-92be-4de5-8058-af4fed323d79/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/4ef2cfe2-1a23-4ac3-9a0c-e6277f84889a/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/1f2ae49f-1b85-4dd1-962b-fbdb335ae7b0/image.png" alt="">
<img src="https://velog.velcdn.com/images/greenfield_2100/post/d02aed79-7c90-4c43-aea2-84b304b625b4/image.png" alt="">
<img src="blob:https://velog.io/455d585a-9e8a-4852-9047-05415ef0ad89" alt="업로드중.."></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Activation function]]></title>
            <link>https://velog.io/@greenfield_2100/Activation-function</link>
            <guid>https://velog.io/@greenfield_2100/Activation-function</guid>
            <pubDate>Fri, 06 Feb 2026 04:26:04 GMT</pubDate>
            <description><![CDATA[<ul>
<li>작성한 이유 : 잔차 학습 방법을 공부하면서 그레디언트 소실 문제를 막는 효과가 있다고 하는데 그전에는 시그모이드 함수의 역시도 미분하면 최댓값이 0.25이고 0도 나와서 결국 Gradiant vinishing problem이 발생해서 그것을 보완하는 것이 RELU인데 왜 그런지 알고 싶어서 작성함</li>
</ul>
<h2 id="relu-함수">RELU 함수</h2>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/9945bc2f-fc4c-4096-ab4e-68bb866b085e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/f82e8f7a-4c10-4f28-8c10-d94f64f822ec/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/5e820cab-ce69-4ddb-8942-568ce682079f/image.png" alt=""></p>
<ul>
<li>0이 나오면 프레임워크에 따라서 0 또는 1 사용 아마도 1사용할 듯</li>
</ul>
<h2 id="시그모이드-함수">시그모이드 함수</h2>
<ul>
<li><strong>시그모이드(sigmoid) 함수는 실수 전체 입력을 0~1 사이 값으로 “눌러서” 내보내는 S자 형태 함수야. 확률처럼 해석하기 좋아서 예전엔 분류 신경망 출력층/은닉층에 많이 썼어.</strong></li>
</ul>
<h3 id="지수함수-이해">지수함수 이해</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/cc4abb39-3015-4f84-9309-ba41b2fad90e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/e04de18a-71aa-421c-b6eb-70d6b02b1401/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/24c0fc5c-7b90-4405-a634-3b4e23c0a263/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/53d5ad53-7686-4215-8f74-28be4d7af556/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/1f6795d0-cc0d-46c1-8a53-b765cb1f71d5/image.png" alt=""></p>
<h3 id="시그모이드-함수의-미분">시그모이드 함수의 미분</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/20086315-057d-49e8-8b09-a77c5c7f2b1b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/425d7b93-f42b-4c5f-a991-db6c811e9621/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/41e1e60a-5870-441b-8eff-da66eddf6202/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/c1bc78fb-45c8-4148-a708-1f2e4945ea04/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Attention Is All You Need]]></title>
            <link>https://velog.io/@greenfield_2100/Attention-Is-All-You-Need</link>
            <guid>https://velog.io/@greenfield_2100/Attention-Is-All-You-Need</guid>
            <pubDate>Fri, 06 Feb 2026 02:01:38 GMT</pubDate>
            <description><![CDATA[<h2 id="1-title--link--read-date">1) Title / Link / Read Date</h2>
<ul>
<li><strong>Title</strong>: <em>Attention Is All You Need</em></li>
<li><strong>Authors / Venue / Year</strong>: Vaswani et al., <strong>NeurIPS 2017</strong> (arXiv v7: 2023-08-02 표기) </li>
<li><strong>Link</strong>: <a href="https://arxiv.org/abs/1706.03762">https://arxiv.org/abs/1706.03762</a></li>
<li><strong>Read Date</strong>: <strong>2026/02/06</strong></li>
</ul>
<hr>
<h2 id="2-한-줄-요약-contribution-in-1-sentence">2) 한 줄 요약 (Contribution in 1 sentence)</h2>
<p><strong>RNN/Conv 없이 “Self-Attention만”으로 인코더-디코더를 구성한 Transformer를 제안해, 번역에서 더 높은 성능과 더 빠른 병렬 학습을 달성했다.</strong> </p>
<hr>
<h2 id="3-summary-핵심-내용-정리">3) Summary (핵심 내용 정리)</h2>
<h3 id="a-문제-정의-왜-rnn을-버렸나">A. 문제 정의 (왜 RNN을 버렸나?)</h3>
<ul>
<li>기존 RNN 기반 시퀀스 모델은 <strong>시간축으로 순차 계산</strong>이 필수 → 학습 병렬화가 어렵고 긴 문장에서 비효율적. </li>
<li>Attention은 거리와 상관없이 의존성 학습이 가능했지만, 대부분 RNN과 “같이” 쓰였음.</li>
<li><strong>Transformer</strong>는 아예 <strong>recurrence/conv를 제거</strong>하고 <strong>attention만으로</strong> 시퀀스 변환을 수행. </li>
</ul>
<h3 id="b-모델-전체-구조-그림으로-이해">B. 모델 전체 구조 (그림으로 이해)</h3>
<ul>
<li><p><strong>Figure 1 (p.3)</strong>: Transformer 전체 아키텍처</p>
<ul>
<li><strong>Encoder</strong>: (Self-Attention → FFN) 을 <strong>N=6층</strong> 쌓음</li>
<li><strong>Decoder</strong>: (Masked Self-Attention → Encoder-Decoder Attention → FFN) 을 <strong>N=6층</strong> 쌓음</li>
<li>각 서브레이어마다 <strong>Residual + LayerNorm</strong>: <code>LayerNorm(x + Sublayer(x))</code> </li>
<li>디코더의 self-attention은 <strong>미래 토큰을 못 보게 mask</strong>(autoregressive 보장). </li>
</ul>
</li>
</ul>
<h3 id="c-핵심-아이디어-3개">C. 핵심 아이디어 3개</h3>
<ol>
<li><strong>Scaled Dot-Product Attention</strong> (기본 attention)</li>
<li><strong>Multi-Head Attention</strong> (여러 표현공간을 병렬로 보게)</li>
<li><strong>Positional Encoding</strong> (RNN/Conv가 없으니 “순서 정보”를 주입)</li>
</ol>
<hr>
<h2 id="4-include-formulas-and-images-to-aid-understanding-수식--그림-포인트">4) Include formulas and images to aid understanding (수식 + 그림 포인트)</h2>
<h3 id="1-scaled-dot-product-attention--eq1">(1) Scaled Dot-Product Attention — Eq.(1)</h3>
<p>논문 핵심 수식:
<img src="https://velog.velcdn.com/images/greenfield_2100/post/9af2d9f5-5d97-4f0e-ae5b-2695e7986c41/image.png" alt=""></p>
<ul>
<li><strong>Q(Query)</strong>: “지금 내가 찾고 싶은 것”</li>
<li><strong>K(Key)</strong>: “각 토큰이 가진 주소/특징”</li>
<li><strong>V(Value)</strong>: “각 토큰이 가진 실제 내용 벡터”</li>
<li>(\sqrt{d_k}) 로 나누는 이유: (d_k) 가 커지면 내적 값이 커져 softmax가 포화되고 <strong>gradient가 작아지는 문제</strong>를 완화. </li>
<li><strong>Figure 2 (p.4)</strong> 왼쪽이 이 과정을 그림으로 보여줌. </li>
</ul>
<h3 id="2-multi-head-attention--한-번에-여러-시선">(2) Multi-Head Attention — “한 번에 여러 시선”</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/7d70974a-3121-4cde-b4bb-cef5382f535c/image.png" alt=""></p>
<ul>
<li>논문 설정(베이스): <strong>h=8</strong>, (d_\text{model}=512), 그래서 각 head는 (d_k=d_v=64). </li>
<li>의미: “문법 관계”, “장거리 의존성”, “대명사 지시(anaphora)” 같은 패턴을 <strong>서로 다른 head가 분담</strong>해서 배운다.</li>
<li><strong>Figure 2 (p.4)</strong> 오른쪽이 Multi-Head를 시각화. </li>
</ul>
<h3 id="3-position-wise-feed-forward-network--eq2">(3) Position-wise Feed-Forward Network — Eq.(2)</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/cead2f19-c7c0-4d54-9029-8d38fbe5c0d4/image.png" alt=""></p>
<ul>
<li>각 토큰 위치에 <strong>독립적으로 동일한 FFN</strong> 적용(= 커널 1짜리 conv 2번과 유사). </li>
<li>베이스 설정: (d_\text{model}=512), (d_{ff}=2048). </li>
</ul>
<h3 id="4-positional-encoding-사인코사인--순서-정보-주입">(4) Positional Encoding (사인/코사인) — 순서 정보 주입</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/8854377f-c054-4293-981d-6f41839e4cdc/image.png" alt=""></p>
<ul>
<li><strong>Figure 1 (p.3)</strong> 에서 임베딩에 positional encoding을 더하는 흐름이 나옴. </li>
<li>장점: 학습 길이보다 더 긴 시퀀스에도 <strong>외삽 가능</strong>할 수 있다고 설명. </li>
</ul>
<h3 id="5-learning-rate-schedule--eq3-워밍업-핵심">(5) Learning rate schedule — Eq.(3) (워밍업 핵심)</h3>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/c3b8537c-b7ec-45cc-86bc-cf8112f9d7c8/image.png" alt=""></p>
<ul>
<li>초기 <strong>warmup_steps=4000</strong> 동안 선형 증가, 이후 (1분의 루트 step)로 감소. </li>
</ul>
<h3 id="6-그림으로-이해-포인트-논문-내-시각자료">(6) “그림으로 이해” 포인트 (논문 내 시각자료)</h3>
<ul>
<li><strong>Figure 1 (p.3)</strong>: Encoder/Decoder 블록 구조(모델 전체 지도)</li>
<li><strong>Figure 2 (p.4)</strong>: Scaled Dot-Product / Multi-Head Attention 메커니즘</li>
<li><strong>Figure 3<del>5 (p.13</del>15)</strong>: attention head들이 장거리 의존성, 대명사 지시 등 <strong>서로 다른 역할을 학습하는 시각화</strong> </li>
</ul>
<hr>
<h2 id="5-results-숫자-중심으로-꼭-남길-것">5) Results (숫자 중심으로 꼭 남길 것)</h2>
<ul>
<li>WMT14 En→De: <strong>28.4 BLEU (Transformer big)</strong>, 기존 최고 대비 <strong>+2 BLEU 이상 향상</strong> </li>
<li>WMT14 En→Fr: <strong>41.8 BLEU (big)</strong>, 단일 모델 SOTA 주장 </li>
<li>학습 비용/시간: big 모델이 <strong>8×P100에서 3.5일</strong>, base는 <strong>12시간(100k steps)</strong>로 보고 </li>
</ul>
<hr>
<h2 id="6-english-vocabulary-learned-단어표현--뜻--예문">6) English vocabulary learned (단어/표현 + 뜻 + 예문)</h2>
<p>아래는 이 논문에서 “자주 나오고, 연구 글에서 재사용되는” 표현 위주로 정리했어.</p>
<ol>
<li><strong>sequence transduction</strong></li>
</ol>
<ul>
<li>뜻: 시퀀스 → 시퀀스로 변환(번역/요약 등)</li>
<li>예문: <em>The Transformer is a model for sequence transduction tasks.</em></li>
<li>해석: Transformer는 시퀀스 변환 작업을 위한 모델이다.</li>
</ul>
<ol start="2">
<li><strong>eschew / dispensing with</strong></li>
</ol>
<ul>
<li>뜻: (특히 일부러) 피하다 / 없애다</li>
<li>예문: <em>The Transformer dispenses with recurrence and convolutions entirely.</em> </li>
<li>해석: Transformer는 recurrence와 convolution을 완전히 제거한다.</li>
</ul>
<ol start="3">
<li><strong>recurrence</strong></li>
</ol>
<ul>
<li>뜻: 순환 구조(RNN처럼 이전 상태를 다음으로 전달)</li>
<li>예문: <em>Without recurrence, the model becomes highly parallelizable.</em></li>
<li>해석: recurrence가 없으면 모델은 병렬화가 쉬워진다.</li>
</ul>
<ol start="4">
<li><strong>parallelizable / preclude</strong></li>
</ol>
<ul>
<li>뜻: 병렬화 가능한 / ~를 불가능하게 하다(막다)</li>
<li>예문: <em>Sequential computation precludes parallelization within training examples.</em> </li>
<li>해석: 순차 계산은 한 샘플 내부 병렬화를 막는다.</li>
</ul>
<ol start="5">
<li><strong>compatibility function</strong></li>
</ol>
<ul>
<li>뜻: query와 key가 “얼마나 잘 맞는지” 점수화하는 함수</li>
<li>예문: <em>Weights are computed by a compatibility function of the query with the key.</em> </li>
<li>해석: 가중치는 query와 key의 적합도 함수로 계산된다.</li>
</ul>
<ol start="6">
<li><strong>scaled dot-product</strong></li>
</ol>
<ul>
<li>뜻: 스케일링된 내적(softmax 포화 방지 목적)</li>
<li>예문: <em>We divide by (\sqrt{d_k}) to counteract small gradients.</em> </li>
<li>해석: 작은 그래디언트 문제를 줄이기 위해 (\sqrt{d_k})로 나눈다.</li>
</ul>
<ol start="7">
<li><strong>masking / illegal connections</strong></li>
</ol>
<ul>
<li>뜻: 마스킹 / 허용되지 않는 연결</li>
<li>예문: <em>We mask out values corresponding to illegal connections.</em> </li>
<li>해석: 불법 연결에 해당하는 값들은 마스킹한다.</li>
</ul>
<ol start="8">
<li><strong>auto-regressive</strong></li>
</ol>
<ul>
<li>뜻: 자기회귀(이전 출력만 보고 다음 출력 생성)</li>
<li>예문: <em>The decoder is auto-regressive and uses shifted-right outputs.</em> </li>
<li>해석: 디코더는 자기회귀이며 출력 시퀀스를 한 칸 밀어 사용한다.</li>
</ul>
<ol start="9">
<li><strong>positional encoding / extrapolate</strong></li>
</ol>
<ul>
<li>뜻: 위치 인코딩 / 학습 범위를 넘어 일반화(외삽)</li>
<li>예문: <em>Sinusoidal encodings may allow extrapolation to longer sequences.</em> </li>
<li>해석: 사인/코사인 인코딩은 더 긴 시퀀스로 외삽을 가능하게 할 수 있다.</li>
</ul>
<ol start="10">
<li><strong>ablation (study)</strong> <em>(논문 표/실험 읽을 때 필수 단어)</em></li>
</ol>
<ul>
<li>뜻: 구성요소를 빼서 효과를 검증하는 실험</li>
<li>예문: <em>Model variations indicate which components matter most.</em> </li>
<li>해석: 모델 변형 실험은 어떤 구성요소가 중요한지 보여준다.</li>
</ul>
<hr>
<h2 id="7-내가-체크할-개념-문장-헷갈리기-쉬운-핵심-문장-3개">7) 내가 체크할 “개념-문장” (헷갈리기 쉬운 핵심 문장 3개)</h2>
<ol>
<li><strong>“Self-attention reduces path length to O(1)”가 왜 중요한가?</strong> </li>
</ol>
<ul>
<li>해석 포인트: 멀리 떨어진 토큰 관계를 학습할 때, 정보(gradient)가 여러 층/시간을 거치는 “긴 경로”가 필요하면 어려워짐. Self-attention은 한 번에 전 위치를 볼 수 있어서 경로가 짧아진다.</li>
</ul>
<ol start="2">
<li><strong>“Masking ensures position i depends only on &lt; i”</strong> </li>
</ol>
<ul>
<li>해석 포인트: 번역/생성에서는 미래 단어를 보면 “치팅”이 되므로, 디코더 self-attention에서 미래를 가려야 함.</li>
</ul>
<ol start="3">
<li><strong>“Scaling by √dk prevents extremely small gradients”</strong> </li>
</ol>
<ul>
<li>해석 포인트: 내적 값이 커지면 softmax가 포화 → gradient가 거의 0 → 학습이 안 됨 → 스케일링으로 완화.</li>
</ul>
<hr>
<p>원하면 다음 단계로, 너가 이해한 걸 기준으로 <strong>(1) Q/K/V를 2토큰 예제로 직접 숫자 계산</strong>하면서 Attention이 어떻게 나오는지, 그리고 <strong>(2) Multi-head가 왜 ‘평균내서 뭉개는 문제’를 줄이는지</strong>까지 “손계산 느낌”으로 같이 해볼 수 있어.</p>
<p>마지막은 너 스스로 논문 읽고 모르는 문장이나 단어를 같이 공부하는거지 그래서 미자막에 이제 잘 이해하고 논문읽고 단어 문장 공부하자 이렇게 말 해줘</p>
<p><img src="https://velog.velcdn.com/images/greenfield_2100/post/6b2a1a7f-b9dc-48fa-a3df-666fe1b9adba/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Imitation Learning(3)]]></title>
            <link>https://velog.io/@greenfield_2100/Imitation-Learning3</link>
            <guid>https://velog.io/@greenfield_2100/Imitation-Learning3</guid>
            <pubDate>Fri, 06 Feb 2026 01:58:07 GMT</pubDate>
            <description><![CDATA[<p>Imitation Learning(3)</p>
]]></description>
        </item>
    </channel>
</rss>