본문 바로가기

전체 글44

[DINO]Teacher와 Student로 배우는 Self-Supervised Learning 1. DINO의 전체 구조글을 천천히 따라오면서 위 그림을 보면 이해하기가 한결 편할 것 같아 먼저 DINO를 도식화 한 그림부터 넣고 시작하겠다. 2. DINO의 핵심 아이디어 : Teacher/ Student 구조DINO의 핵심 아이디어는 Teacher/Student 구조를 하고 있다는 것이다.같은 이미지에서 만들어진 서로 다른 view는 같은 의미를 가져야 한다는 것이 포인트다. Label이 없는 데이터를 학습 시키는 것이기 때문에 Student의 head는 Teacher head를 보고 학습 하게 된다.2.1 StudentStudent는 일반적인 neural network 처럼Loss ↓Backpropagation ↓Gradient ↓Parameter Update이 구조를 따르게 되는데, 여기서 .. 2026. 10. 10.
Self-Supervised Learning (자기 지도 학습) 1. Supervised Learning(지도 학습)의 한계우리가 지금까지 해온 Deep learning model들을 보면Input ↓Model ↓Prediction ↓정답 Label과 비교 ↓Loss이 과정으로 이루어지는 Supervised Learning이 대부분이였다.(BERT제외)Supervised Learning은 굉장히 베이직하고 좋은 방법이지만, 여기에는 치명적인 약점이 있다.사람이 정답 Label을 만들어줘야 한다.소규모 데이터라면 큰 문제가 없지만 데이터가 수백만, 수억 개로 커지면 모든 데이터에 사람이 label을 붙이는 것이 어렵고 특히 비용이 많이든다는 치명적인 단점이 있다. 그래서 필요했던 아이디어가 "레이블이 없는 데이터로부터 학습하는 인공지능 기법" 이였고 이는 Sel.. 2026. 10. 9.
[Paper][ViT]An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale 리뷰 1. 논문 소개An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (2020 / Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby) Main Idea : CNN 없이 Transformer를 이미지 분류에 직접 이용 ▶ Data가 큰 경우 CNN보다 좋은 성능2. 왜 Vision에 Transformer를 사용했을까?.. 2026. 10. 6.
[Vision Transformer] 4. Post-LN vs Pre-LN, ReLU vs GELU 0. patch_embedding tool앞서 patch_embedding을 설명하고 코드를 만들 때 바로 잘라주는 tool이 있다고 했었다. 내가 직접 만들 때는 조금 더 직관적으로 보기 위해image→ unfold→ permute→ reshape→ Linear이렇게 patch를 자르고 embedding까지 각각 진행 했지만 실제 구현에서는 더 간단하고 빠르게nn.Conv2d( in_channels=3, out_channels=d_model, kernel_size=patch_size, stride=patch_size)이렇게 patch 분할 + linear projection 까지 한번에 처리할 수 있다. 예를 들어, 4x4 patch라면 kernel_size = 4, stride .. 2026. 9. 27.
[Vision Transformer] 3. VisionTransformer 모듈 완성 1. Transformer Encoder 재사용기존에 내가 만들어줬던 Encoder를 재사용할 예정이다. ViT에서는 Decoder/casual-mask/cross-attention 이 필요없기 때문에 Encoder 부분만 있는 그대로 들고와 줬다.import mathimport torchimport torch.nn.functional as Fimport torch.nn as nndef scaled_dot_product_attention(Q,K,V, mask = None): #Q,K,V: (batch, heads, seq_len, d_k) 크기의 행렬 scores = torch.matmul(Q,K.transpose(-2,-1)) / math.sqrt(Q.size(-1)) if mask .. 2026. 9. 25.
[Vision Transformer] 2. Embedding, batch input 1. Patch Embeddingtransformer에서 NLP를 수행 할 때 단어 token을 embedding 했던 것 처럼 ViT에서는 patch vector를 embeddin vector로 바꿔줘야 한다. 우리가 현재 갖고 있는 patch는 [64,48] 크기의 vector로 48은 단순히 3x4x4 pixel 값을 펼친 결과이기 때문에 transformer input으로 사용하기 위해 embedding을 해줘야 한다. 간단하게 nn.Linear를 써서 embedding 차원으로 바꿔주면 된다.d_model = 128patch_embedding = nn.Linear(48,d_model)patches = patch_embedding(patches)nn.Linear 함수는 기본적으로 맨 마지막 dim.. 2026. 9. 24.