Convolution filter가 고정되지 않고 알아서 퍼지기에넓은 범위를 볼 수 있다!!
이에 대한 증명으로 ERF를 사용 (ERF 확인 시, 넓게 퍼짐을 통해 증명)
2. ViT & Main Contribution
따라서 이 논문에서는 SOTA ViT에서 MSA 대신,
"DCN(Deformable Convolution)을 잘 끼워 넣는다는 것"이 주요 내용이다.
→ 정확도∙연산량 등 transformer SOTA보다 더 좋다는 것이 main contribution
3. DCN v1 / DCN v2
[등장이유]
크기, 포즈, 시점 등의 이유로 SIFT, Affine transform 등의 전처리가 필요한 경우가 존재.
CNN내에서, 알아서 conv연산이 필요한 경우, conv연산이 이루어지도록 학습해보자!라는 취지
[기존 CNN 연산]
3x3 filter의 경우, 하나의 output feature element를 만들기 위해 다음과 같은 연산을 진행한다.
Feature vector의 3x3크기만큼 conv연산 진행, 그 값을 모두 더함 → 하나의 element로 만드는 작업을 반복
[DCN V1의 주장]
이때, pn을 학습하게 하는 것이 DCN이다!
📌 이때, pn이 3x3상수가 아닌, learnable param인 ∆pn이 된다면?
→ 이상적으로 알아서 학습이 필요한 위치에서 convolution이 진행될 것.
🚩 위치 학습 방법
1. 기존 convolution과 별개로 pn을 학습할 수 있는 convolution(∆pn)을 하나 더 붙임 2. p 를 weight처럼 학습 3. 그 p 를 feature x를 통해 convolution을 진행. 4. 이를 통해 위치정보가 반영된 convolution을 할 수 있게 됨.
[DCN V2의 주장]
위치 + 중요도∙영향력도 고려.
filter의 위치에 따른 영향력, mn(modulation변수)를 고려해보자!
🚩영향력 학습 방법
1. 앞과 같이 단순히 convolution을 하나 추가 2. 같은 방법으로 영향을 받는 정도까지 학습
4. DCN V3
<기존 DCN V1, V2의 문제점>
위의 DCN V2를 그대로 ViT에 넣으려고 하니 다음과 같은 문제가 발생
문제점
Prob 1) ViT SOTA에 끼워넣을 때, Convolution 개수에 따라 linear하게 parameter와 memory복잡성이 증가
Prob 2) DCN V2의 modulation이 불안정
ERF의 경우 ∙ modulation filter의 sigmoid: 어떨 때는 평균이 1에 가깝고 어떨 때는 0에 가까움 ∙ 이는 output에서 어느 것이 중요한지 판단이 안됨 (= 불안정)
<DCN V3의 3가지 Solution>
1. MobileNet에서 사용되는 "Depthwise Convolution"을 도입, weight를 합침 (= 경량화; 최종 결과를 토대로 볼 때, 성능보다는 연산량, 경량화를 우선) weight를 합쳐 경량화를 하기 위해 i) group을 나눠 group별로 하나의 weight만 학습하게 함 ii) 그 group안에서 Depth-Wise Convolution을 진행, position과 modulation 학습 iii) 이때, modulation factor는 softmax로 계산
2. Self-Attention처럼 MHA의 느낌이 나도록"Group Convolution"을 도입
preview Deep Learning은 상당히 강력하고 다목적을 위해 data로부터 학습된다. 또한, 요즘에는 AI와 Machine Learning이라는 용어가 서로 대체되어 사용된다.
꾸준한 발전으로 인해 AGI는 매우 급격한 발전을 이룩했는데, 특히 LLM은 매우 두드러진 능력을 보인다. 즉, LLM은 AGI로 가는 길의 효시라 할 수 있다.
본문 예제 주 내용: "기존 일상의 문제들" → 직접 algorithm을 짜서 풀기에는 문제가 난해하였음. ❗️Deep Learning을 사용함으로써 이를 해결. (by. 많은 양의 training set 확보, 이를 training(=learning)시킴으로써 모델이 문제를 풀게함.)
Linear Models
Linear Model들은 선형적인 unknown parameter라는 중요한 특징이 있을 뿐만 아니라 "중요한 한계점"또한 존재.
Error Function
training data에 다항식을 fitting시켜 error function을 최소화 시킬 수 있다.
Model Complexity 이때, Model의M(다항식 차수)를 고르는 것은 남아있는 중요한 과제이다.
M의 값에 따라 model이 overfitting이 될 수도, underfitting이 될 수도 있기 때문이다. 이때, Overfitting이 보통 주요한 문제이기 때문에 Regularization을 Loss항에 도입한다.
Regularization
위의 Loss function은 L2 Regularize항을 추가한 것으로 가 성립하며, λ계수는 regularize항과 MSE항 간의 상대적 중요성을 결정하는 상관계수(coefficient)로 Loss function에 penalty를 줌으로써 overfitting의 정도를 결정할 수 있다.
Model Selection λ는 w 결정을 위해 J(w)를 최소화하는 동안 고정되는 하이퍼파라미터이지만 단순히 w와 λ에 대해 에러 함수를 최소화해 λ → 0으로 수렴하게 되면, error값이 작은 과적합된 모델이 되어버릴 수 있다. 마찬가지로 단순히 M에 대한 trainingset의 오차를 최적화하면 M의 값이 커지고 과적합 될 수 있다. 따라서 하이퍼파라미터의 적절한 값을 찾기 위한 방법을 찾아야 한다.
위의 결과는 가능한 데이터를 가져와 train-valid-split방법을 제안한다. trainset으로 w를 결정하고 validset에서 가장 낮은 오차를 갖는 모델을 선택한다. 그러나 제한된 크기의 dataset를 사용해 모델을 여러 번 설계하면, validset에 과적합될 수 있기에 마지막으로 선택된 모델의 성능을 평가하기 위해 세 번째 테스트 세트를 유지해야 할 수도 있다.
∙ Cross Validation 일부 응용 프로그램에서는 훈련 및 테스트용 데이터의 제공이 제한될 수 있다. 좋은 모델을 구축하려면 가능한 많은 데이터를 사용하여 훈련해야 하지만 validset이 너무 작으면 예측 성능의 상대적으로 노이즈가 많은 추정치를 제공할 수 있다. 이러한 딜레마의 해결책 중 하나는 아래 그림에서 설명된 교차 검증을 사용하는 것이다. 이를 통해 데이터의 (S - 1)/S의 비율로 훈련에 활용해 모든 데이터를 사용하여 성능을 평가할 수 있다.
∙ 'leave-one-out' 기법 특히나 데이터가 부족한 경우, datapoint의 총 수인 N과 같은 경우인 S = N을 고려하는 것.
교차 검증의 주요 단점: ∙ S의 배수로 학습 실행 횟수가 증가되어, 자체적으로 계산 비용이 많이 드는 모델에서 문제가 될 수 있다는 것. ∙ 단일 모델에 여러 복잡성 하이퍼파라미터가 있을 수 있으며, 이런 하이퍼파라미터들의 설정을 조합하는 것은 지수적으로 많은 학습 실행 횟수를 요구.
3. A Brief History of Machine Learning
Step 1. single neuron은 선형결합(Linear Combination)으로 생성됨 Step 2. 생성된 single neuron에 non-linear function으로 transform.
이를 수학적으로 표현하면 아래와 같다.
이때, a라는 값은 pre-activation이라 불리며, f(.)는 activation funtion이라 불리고 y는 activation이라 불린다.
Backpropagation MLP에서 중간 층의 노드는 hidden unit이라 하는데, 이는 trainset에 나타나지 않는 값이기 때문이다. (trainset은 input과 output값만 제공하기 때문.)
여러 층의 가중치를 가진 신경망을 학습하는 능력은 1980년대 중반쯤부터 다시 관심이 증폭되는 계기가 되었는데, 특히, 확률 이론과 통계학에서의 아이디어가 신경망과 머신 러닝에서 중요한 역할을 한다는 것이 인식되었다. 학습에서의 배경 가정들, 사전 지식이나 귀납적 편향으로 불리기도 하는 것들이 포함될 수 있음을 한 가지 중요한 통찰은 말해준다. 이러한 가정들은 명시적으로 통합될 수 있는데, 예를 들어 피부 병변의 분류가 이미지 내 병변의 위치에 의존하지 않도록 신경망의 구조를 설계할 수 있다. 또는 모델의 수학적 형태나 훈련 방식으로부터 발생하는 암묵적인 가정 형태로 나타날 수 있습니다.
❗️Backpropagation 사용이유? 모델은 수천억개의 파라미터를 가지며, Loss function은 이런 parameter들의 높은 비선형함수일 것이기에 ∙ Loss function을 닫힌 형태(e.g 선형 회귀)로 최소화하는 것이 아니라
∙ 파라미터에 대한 Loss function의 도함수(= ∂J(w) / ∂w)를 기반으로 반복적인 최적화 기술(= Backpropagation Algorithm)을 통해 최소화해야 한다. 이러한 모든 과정은 전문적인 컴퓨팅 하드웨어가 필요하며 상당한 계산 비용이 들 수 있다.
Deep Networks 많은 가중치를 가진 신경망을 '심층 신경망(deep neural networks)'이라고 하며, 이러한 신경망에 중점을 둔 기계 학습의 하위 분야를 '딥 러닝(deep learning)'이라 한다(LeCun, Bengio, and Hinton, 2015).
위 그림은 최첨단 신경망을 훈련하기 위해 필요한 연산 주기의 증가를 나타내며, 연산 주기의 두 가지 구분된 성장 단계를 보여준다. 수직 축은 지수적 스케일을 가지며 (petaflop/s-days) 단위로 표시된다. ∙petaflop: 1015(천 조)개의 부동 소수점 연산 ∙petaflop/s-days: 초당 하나의 피타플롭을 의미. petaflop/s-days은 24시간 동안 피타플롭/초의 속도로 계산되고, 대략 1020개의 부동 소수점 연산을 나타내며, 그래프의 최상단은 인상적인 1024개의 부동 소수점 연산을 나타낸다. 그래프의 직선은 지수적 성장을 나타낸다.
혁신적인 아키텍처 개선이나 더 정교한 형태의 귀납적 편향을 포함하는 경우 즉, 모델이 특정한 가정이나 선행 지식을 사용해 데이터를 해석 --> 성능 향상
∙ 표현 학습(representation learning) 심층 신경망의 숨겨진 레이어 역할 신경망이 입력 데이터를 의미 있는 새로운 표현으로 변환, 마지막층이 해결해야 할 훨씬 더 쉬운 문제를 만들어낸다(Bengio, Courville, and Vincent, 2012). 이러한 내부 표현은 전이 학습을 통해 관련된 문제의 해결을 가능하게 할 수 있다.
∙ Foundation Models 여러 가지 downstream 작업에 적합하게 조정되거나 세부 조정될 수 있는 큰 신경망 넓은 적용 가능성을 갖도록 대규모이고 이질적인 데이터 세트를 활용할 수 있다(Bommasani et al., 2021).
∙ 규모 이외 방법을 이용한 발전. 규모 확장 외에도 딥 러닝의 성공에 도움이 된 다른 발전 사항들이 있었는데, 예를 들어, 단순한 신경망에서 깊은 신경망의 연속적인 층을 통해 역전파될수록 훈련 신호가 약해지는 현상을 해결하기 위해 잔차 연결(residual connections)을 도입(He et al., 2015a).
또 다른 주요 발전방법: by coding: 역전파를 수행하여 오류 함수의 그래디언트를 계산하는 코드 = loss.backward() → 순방향 전파를 지정하는 코드에서 자동으로 생성하는 자동 미분 방법의 도입. = autograd 내장.
🧐 정리
∙ LLM ← AGI로 가는 효시.
∙Deep Learning의 목표: Generalization이 잘 되도록 하는 Universal Approximation이 목표, 이를 위해 적절한 model의 차수 M을 찾는것이 목표. (over/underfitting문제)
∙ 확률론과 통계학이 중요한 이유? 학습에서 prior, posterior, inductive bias 등의 포함가능성으로 인해 모델이 잘 작동하지 못할 수 있음. 물론, 정교한형태의 inductive bias를 포함하면 모델이 특정 가정이나 선행지식으로 데이터 해석을 하여 성능향상도 가능함.
∙ Representation Learning? hidden layer의 역할, 문제해결을 더 쉽게 만드는 것. input을 "유의미한 새로운 표현으로 변환하는 것."
❗️Backpropagation 사용이유? Loss function=수천억개 parameter의 높은 비선형함수일 것이기에 ∙ Loss function을 닫힌 형태(e.g 선형 회귀)로 최소화하는 것이 아니라 ∙ 파라미터에 대한 Loss function의 도함수(= ∂J(w) / ∂w) 기반, 반복적인 최적화 기술(= Backpropagation Algorithm)을 통해 최소화 진행.
- NLP분야에서 transformer가 사실상 standard하였지만, vision에서는 매우 드물게 사용되었다. Vision에서는 attention 사용 시, CNN과 혼합해 사용하거나 전체구조에서 몇개의 구성요소만 대체되는 방식으로 사용되어 왔다. 본 연구는 CNN에 의존하는 것이 불필요하며 오직 transformer만으로 image patch들의 sequence를 적용해 image classification task에 매우 잘 동작함을 실험적으로 증명하였다. 많은 dataset을 pre-train한 후 small~midsize의 이미지 인식 bench mark dataset에 전이학습 시, 여타 CNN보다 ViT가 요구계산량은 적으면서도 S.O.T.A를 보여준다.
1. 서론 (Introduction)
-"Self-Attention"기반 구조 특히나 Transformer[Vaswani2017]는 NLP task에서 널리 사용되며 가장 지배적이고 널리 사용되는 방식은 매우 긴 text에 대한 pre-train 이후 작고 구체적인 task의 dataset에 fine-tuning하는 것이다. transformer의 특징 중 하나인 계산의 효율성과 확장성 덕분에 전례없는 크기(100억개 이상의 parameter)의 model을 학습할 수 있다는 점이다. (model과 dataset 크기의 증가에도 성능이 saturating되지 않음)
- 다만 computer vision에서는 CNN방식이 지배적으로 남아있어서 NLP의 성공에 영감을 얻어 CNN에 "Self-Attention"을 합치려는 실험, Conv.layer를 모두 self-attention으로 대체하는 등이 이루어졌다. 후자의 경우, 이론적으로는 효율적이지만 attention의 독특한 계산메커니즘으로 효율적사용이 어렵다. (∵ image 전체를 한번에 넣는 연산 >>> 단어 vector에 대한 연산) 그렇기에 ResNet같은 모델들이 Large-Scale image에서 S.O.T.A로 남아있다.
- 본 연구는 NLP성공에 영감을 받아 standard transformer architecture의 구조를 조금 수정 후, image에 직접 적용하는 실험을 진행하였다. 이를 위해 image를 patch로 나누고, 이 patch들의 linear embedding의 sequence를 transformer의 input으로 집어 넣는다. (patch는 NLP의 transformer에서 token(word)과 동일하게 다루어 짐을 의미한다.)
- 훈련 시, ImageNet과 같은 중간크기의 dataset에 대해 강한 규제화(regularization)없이는 비슷한 크기의 ResNet과 같은 구조의 모델들에 비해 정확도가 떨어졌다. 이에 대해 CNN은 내재된 inductive biases가 있으나 Transformer는 내재된 inductive biases의 부족으로 충분하지 못한 양의 dataset에 대한 훈련은 모델의 일반화성능이 좋지 않을 것이라 예측 하였다.
- 다만, 14M~300M정도의 대규모의 dataset의 경우, inductive biases를 찍어눌러버릴 수 있음을 연구진은 확인했다. ViT가 충분히 큰 dataset에 pre-train된 후 더 작은 dataset에 대해 transfer learning이 이루어지게 될 때, 기존의 S.O.T.A모델들의 성능과 비슷하거나 더 능가하는 결과를 보여준다. cf) the best model reaches the accuracy of 88.55% on ImageNet, 90.72% on ImageNet-ReaL, 94.55% on CIFAR-100, and 77.63% on the VTAB suite of 19 tasks.
2. Related Work
- Transformer[Vaswani2017]는 NLP분야의 기계번역에서 S.O.T.A방법이 되었으며, Large Transformer기반 모델들은 매우 큰 말뭉치(corpora)에 pre-train한 후 task의 목전에 전이학습(fine-tuning)을 진행한다 : BERT[Devlin2019]는 "Denoising Self-Supervised pre-training task"로 사용하고 GPT[Radford2018, 2019, Brown2020]는 "Language modeling pre-train task"로 활용한다.
- image에 대한 Naive한 "Self-Attention" 적용은 각 pixel이 다른 모든 pixel에 주목(attend)할 것을 요구한다. (= 하나의 pixel을 embedding 시, 다른 pixel도 embedding에 참여할 것이 요구된다는 의미) pixel수에서 2차적인 계산복잡도를 야기하며 이로 인해 다양한 input size로 확장되는 것이 어렵다. 즉, image processing에 transformer를 적용하려면 몇가지 근사(approximation)가 필요하다. ∙ local self-attention ∙ sparse attention ∙ 다양한 크기의 block에 scale attention 적용 이런 specialized attention구조들은 computer vision 분야에서 괜찮은 결과를 보여주지만 효율적 구현을 위해서는 복잡한 engineering이 필요하다.
- self-attention을 이용해 feature map을 augmentation하거나 CNN의 output에 attention을 추가적으로 사용하는 등 CNN과 self-attention을 융합하려는 많은 연구도 이루어 졌다.
- 본 연구와 가장 관련있는 모델은 Cordonnier2020논문에서 소개된 모델로 input image에서 2×2 크기의 patch를 추출하여 top에 full self-attention을 적용한다. ViT와 비슷하지만 ViT는 더 추가적인 증명을 진행하는데, 대규모 pre-training은 평범한 transformer가 S.O.T.A와 경쟁력 있게 한다. 추가적으로 Cordonnier2020논문의 모델은 2×2 piexl이라는 작은 크기의 patch를 사용하는데, 이는 small-resolution image에만 적용가능하다는 단점이 존재한다. (우리는 medium-resolution image를 다루지만...)
- 최근의 또다른 관련있는 모델은 iGPT[Chen2020]로 iGPT는 image의 resolution과 color space를 줄인 후 pixel들에 transformer를 적용한 생성모델로써 "Unsupervised"방식으로 훈련되었고 이를 통해 얻어진 representation은 classification을 위해 전이학습이나 선형적으로 탐색될 수 있으며, 이를 예시로 활용 시 ImageNet에서 최대 정확도 72%로 나타난다.
- 본 연구는 추가적으로 기존 ImageNet보다 더 많은 image를 보유한 인식데이터셋을 활용한 연구의 연장선으로 CNN의 성능이 dataset size에 따라 어떻게 달라지는 지에 대한 연구와 대규모 dataset(ImageNet-21K, JFT-300M)에 대한 CNN의 전이학습에 대해 경험적탐구도 진행한다. (이전 연구와 달리 ResNet이 아닌 Transformer를 사용하여.)
3. Method
- model 설계에서 기존 Transformer[Vaswani2017]를 가능한 근접하게 구성했으며, 이는 쉽게 확장가능한 NLP transformer 구조에 대한 이점과 효율적인 구현이 가능하다는 이점이 되어 별도의 설정없이 바로 사용할 수 있게 된다. 3.1 Vision Transformer (ViT) - 기존의 Transformer는 token embedding의 1D sequence를 input으로 받는다. - BERT의 [CLS]token처럼 embedding된 patch들의 가장 앞에 하나의 learnable한 class token embedding vector를 추가한다. - Position Embedding은 image의 위치정보를 유지하기 위해 patch embedding 시 trainable한 position embeddings가 더해진다. image를 위해 개선된 2D-aware position embedding을 사용해 보았지만 1D Position Embedding과의 유의미한 성능향상이 없어서 "1D Position Embedding"을 사용한다. (Appendix D.4) 이렇게 embedding된 벡터들의 sequence를 encoder의 입력에 넣는다.
- Transformer의 Encoder부분은 Multi-Head Attention(식 2,3)층들과 MLP가 교차로 구성되는데, 이는 하나의 image이더라도 차원을 쪼갠 뒤 multi-head를 관찰하는 현상을 볼 수 있다.
3.2 Fine-tuning. &. Higher Resolution
4. Experiments
연구진들은 ResNet, ViT, 그리고 하이브리드 모델의 representation learning capabilities를 평가했다. 각 모델이 요구하는 데이터의 양상을 파악하기 위해 다양한 사이즈의 데이터셋으로 사전훈련을 진행했고 많은 벤치마크 테스크에 대해 평가 실시했다. ViT가 모델의 사전훈련 연산 대비 성능 부분에서 다른 모델들보다 더 낮은 pre-training 비용으로 가장 높은 성능을 달성했다. 마지막으로 self-supervised를 이용한 작은 실험을 수행해 ViT가 self-supervised에서도 가능성이 있음을 보였다.
4.1 Setup ∙Datasets - 모델 확장성(scalability)을 조사하기 위해 1,000개 class와 1.3M image가 있는 ILSVRC-2012 ImageNet dataset, 21,000 class와 14M image가 있는 superset ImageNet-21k(Deng2009), 18,000 class와 303M의 고해상도 image의 JFT(Sun2017)를 사용.
[Kolesnikov2020]에 이어 downstream task의 testset을 통해 pre-training dataset을 중복 제거. 이 dataset에 대해 훈련된 모델을 다음과 같은 여러 benchmark에 전이학습을 진행한다: 원본 유효성 검사 라벨과 정리된 ReaL 라벨의 ImageNet(Beyer2020), CIFAR-10/100(Krizhevsky2009), Oxford-IIIT Pets(Parkhi2012) 및 Oxford Flowers-102(Nilsback & Ziserman, 2008). 이때, dataset의 전처리과정은 [Kolesnikov2020]를 따른다.
- 또한 19개 작업 VTAB classification suite(Zhai 2019)에 대해서도 평가한다. VTAB는 task당 1,000개의 training example들을 사용해 다양한 task에 대해 낮은 data transfer를 평가한다. task는 3가지로 분류된다: Natural(Pets, CIFAR), Specialized(의료, 위성사진), Structured(localization같은 기하학적 이해가 필요한 작업)
∙Model Variants - 표 1에 요약된 것처럼 BERT(Devlin 2019)에 사용된 ViT 구조를 기반으로 BERT에서 "Base" 및 "Large" 모델을 직접 채택하고 더 큰 "Huge" 모델을 추가한다. 후술에서는 모델의 크기와 입력 patch크기를 나타내기 위해 간략한 표기법을 사용. ex) ViT-L/16은 16 × 16의 input patch size를 갖는 "Large" variant를 의미. Transformer의 시퀀스 길이는 패치 크기의 제곱에 반비례하므로 패치 크기가 작은 모델은 계산 비용이 더 많이 든다. - 기본 CNN의 경우 ResNet을 사용한다. 다만, Batch Normalization(Ioffe & Szegedy, 2015)대신 Group Normalization(Wu & He, 2018)으로 바꾸고 표준화된 Convolution(Qiao 2019)을 사용한다. 이 수정은 transfer를 개선하며[Kolesnikov2020], 이를 "ResNet(BiT)라 부른다.
hybrid 시, 우리는 중간 feature map을 하나의 "pixel"의 patch 크기로 ViT에 전달한다. 다른 시퀀스 길이를 실험하기 위해 (i) 일반 ResNet50의 4단계 output을 가져오거나 (ii) 4단계 제거, 3단계에 동일한 수의 레이어(총 레이어 수 유지)를 배치하고 이 확장된 3단계 출력을 가져온다. 이때, (ii)를 사용하면 sequence 길이가 4배 더 길어지고 ViT 모델의 비용이 더 많아진다.
∙Training. &. Fine-tuning - ResNet을 포함, 모든 모델은 Adam(Kingma & Ba, 2015)을 사용한다. (β1 = 0.9, β2 = 0.999) batch=4096으로 훈련하고 모든 모델의 transfer에 유용한 0.1이라는 높은 weight_decay를 적용한다. (Appendix D.1은 일반적인 관행과 달리 Adam이 ResNets용 SGD보다 약간 더 잘 작동함을 보여준다).
linear Learning rate warmup과 decay를 사용한다. (detail은 Appendix B.1을 참조) 전이학습 시, 운동량이 있는 SGD, batch=512를 모든 모델에 대해 Appendix B.1.1에 소개된 것처럼 사용한다. 표 2의 ImageNet 결과의 경우 ViT-L/16의 경우 512, ViT-H/14의 경우 518로 미세 조정했으며 평균 계수 0.9999999로 [Polyak & Juditsky 1992]를 사용한다(Ramachan 2019, 2020).
∙Metric - few-shot이나 전이학습 정확도를 통해 downstream dataset에 대한 결과에 대해 설명한다. 전이학습 정확도는 각 dataset서 전이학습한 이후 각 모델의 성능을 capture한다. few-shot의 정확도는 train image의 표현을 {-1,1}K 표적 벡터에 매핑한 정규화된 최소 제곱 회귀(MLE) 문제를 해결하여 얻을 수 있다. 이 공식을 사용하면 폐쇄형(closed form)으로 정확한 솔루션을 복구할 수 있습니다. 주로 전이학습의 성능에 중점을 두지만, 전이학습비용이 너무 많이들어서 신속한 평가를 위해 선형 퓨샷 정확도를 사용하기도 한다.
4.2 Comparision to S.O.T.A - 먼저 가장 큰 모델인 ViT-H/14 및 ViT-L/16을 최신 CNN과 비교한다. 첫 번째 비교할 점은 대규모 ResNets로 감독된 전송 학습을 수행하는 Big Transfer(BiT)이다. 두 번째는 Noisy Student(Xie 2020)으로, 레이블이 제거된 상태에서 ImageNet 및 JFT-300M에서 준지도 학습을 사용하여 훈련된 대규모 EfficientNet이다.
- 표 2의 결과는 JFT-300M에서 pre-train된 작은 ViT-L/16 모델은 모든 작업에서 BiT-L을 능가하는 동시에 훈련에 훨씬 적은 계산 리소스를 필요로 함을 보여준다. 대형 모델인 ViT-H/14는 특히 ImageNet, CIFAR-100 및 VTAB suite 등 까다로운 dataset에서 성능을 더욱 향상시킨다.
흥미로운 점은, 이 모델은 이전기술보다 pre-train에 훨씬 적은 시간이 소요되었다. 하지만 pre-train의 효율성은 architecture의 선택뿐만 아니라 training schedule, optimizer, weight_decay 등 같은 다른 parameter에도 영향을 받을 수 있다는 점에 주목한다. Section 4.4에서는 다양한 architecture에 대한 성능과 computing에 대해 제어된 연구를 제공한다.
- 마지막으로, ImageNet-21k dataset으로 pre-train된 ViT-L/16 모델은 대부분의 dataset에서도 우수한 성능을 발휘하면서 pre-train에 필요한 리소스는 더 적습니다. 약 30일 내에 8개의 코어가 있는 표준 클라우드 TPUv3를 사용하여 교육될 수 있다. - 그림 2는 VTAB task를 각 그룹으로 분해하고, 이 benchmark의 이전 S.O.T.A 방법인 BiT, VIVI - ImageNet 및 Youtube에서 공동 교육된 ResNet(Tschannen 2020) 및 S4L - ImageNet에서 supervised 및 semi-supervised 학습(Zhai 2019)과 비교한다. ViT-H/14는 Natural 및 Structure task에서 BiT-R152x4 및 기타 방법을 능가하는데, Specialized에서 상위 두 모델의 성능은 유사하다.
4.3 Pre-training Data Requirements - ViT는 대규모 JFT-300M dataset에서 pre-train 시 성능이 우수하며 ResNet보다 Inductive bias가 적다. 그렇다면 dataset의 크기는 얼마나 중요할까? 에 대해 2가지 실험을 진행한다.
① 크기가 증가하는 dataset에 대해 ViT 모델을 pre-train한다: ImageNet, ImageNet-21k 및 JFT-300M. 소규모 dataset의 성능을 향상시키기 위해 weight_decay, dropout, label-smoothing이라는 3가지 기본적인 Regularization parameter들을 최적화한다. 그림 3은 ImageNet을 pre-train된 결과를 보여준다 cf. (다른 dataset에 대한 결과는 표 5에 나와 있다). ImageNet pre-train모델도 전이학습되어있으나 ImageNet에서는 다시 전이학습이 진행된다. (전이학습 시 해상도가 높아지면 성능이 향상되기 때문). 가장 작은 dataset인 ImageNet에서 pre-train 시, ViT-Large 모델은 (moderate) regularization에도 불구하고 ViT-Base 모델에 비해 성능이 떨어진다. JFT-300M만 있으면 더 큰 모델의 이점을 최대한 누릴 수 있는데, 그림 3은 또한 다양한 크기의 BiT 모델이 차지하는 성능 영역을 보여준다. BiT CNN은 ImageNet에서 ViT를 능가하지만 dataset이 클수록 ViT가 앞서는 것을 알 수 있다.
② 9M, 30M 및 90M의 랜덤 하위 집합과 전체 JFT-300M dataset에 대한 모델을 교육한다. 이때, 더 작은 하위 집합에 대해 추가적인 정규화를 수행하지 않고 모든 설정에 대해 동일한 hyper-parameter를 사용한다. 이 방식으로, regularization의 효과가 아니라 본질적인 모델 특성을 평가합니다. 하지만, Early Stop을 사용하고, training 중 달성한 최고의 validation accuracy를 알려준다. 계산을 절약하기 위해 전체의 전이학습 정확도 대신 few-shot linear accuracy를 알려주며, 이는 그림 4에는 결과가 나와 있다. ViT는 소규모 dataset에서 비슷한 계산 비용으로 ResNet보다 더 적합하다. ex) ViT-B/32는 ResNet50보다 약간 빠르다.
9M 하위 집합에서는 성능이 훨씬 떨어지지만 90M+ 하위 집합에서는 성능이 더 우수한데, ResNet152x2 및 ViT-L/16에 대해서도 마찬가지이다. 이 결과는 Convolution의 Inductive Bias가 작은 dataset에 유용하다는 직관을 강화한다. 하지만, 큰 dataset의 경우 관련 패턴을 데이터에서 직접 학습하는 것만으로도 충분하고, 심지어 유용하다.
4.4. Scaling Study - JFT-300M의 transfer 성능을 평가하여 다양한 모델에 대해 제어된 scaling 연구를 진행한다. 이 설정에서 데이터 크기는 모델의 성능에 병목 현상을 일으키지 않으며, 각 모델의 accuracy/pre-train cost를 평가한다. model set은 다음과 같다. - 7 epochs에 대해 사전훈련된 ResNets(R50x1, R50x2 R101x1, R152x1, R152x2, R152x2) - 7 epochs에 대해 사전 훈련된 R16 및 R1450 - 14 epochs에 대해 사전 훈련된 R152x2 및 R200x3 - 14 epochs에 대해 사전 훈련된 ViT-B/32, B/16, L/32, L/16 - 14 epochs에 대해 사전 훈련된 R50+ViT-L/16 (hybrid의 경우 모델 이름 끝 숫자는 patch size가 아닌, ResNet 백본의 총 downsampling비율을 나타낸다).
- 그림 5에는 총 사전 교육 계산 대비 이전 성능이 나와 있다(compute detail: Appendix D.5 ; model별 detail: Appendix의 표 6). 이에 대해 몇 가지 패턴을 관찰할 수 있다: i) ViT는 accuracy/computing 절충에서 ResNets를 압도한다. ViT는 동일한 성능을 얻기 위해 약 2~4배 적은 컴퓨팅을 사용한다(평균 5개 이상의 dataset). ii) hybrid는 적은 computing으로 ViT를 약간 능가하나, 더 큰 모델에서는 그 차이가 사라진다. 이 결과는 Convolution의 local feature processing이 모든 크기에서 ViT를 지원할 것으로 예상할 수 있기 때문에 다소 놀라운 결과라 할 수 있다. iii) ViT는 시도한 범위 내에서 포화되지 않는 것으로 나타나 향후 확장 노력에 동기를 준다.
4.5. Inspecting Vision Transformer - ViT는 image data처리방법이해를 위해 internal-representation을 분석한다. ViT의 첫층은 flattened patch를 낮은 차원의 공간(Eq.1)으로 linearly project한다. 그림 7(왼쪽)은 학습된 embedding filter의 주요 구성요소를 보여준다. 구성요소는 각 patch내 fine-structure를 낮은 차원으로 표현하기 위한 그럴듯한 기본함수와 유사하다. - 투영한 후, 학습된 position embedding이 patch의 representation에 추가된다. 그림 7(가운데)은 모델이 position embedding의 유사성에서 image내 distance를 encoding하는 방법을 학습하는 것을 보여준다. 즉, 더 가까운 patch는 더 유사한 position embedding을 갖는 경향이 있다.
- 또한 행-열(row-column) 구조가 나타난다. 동일한 행/열에 있는 패치는 유사한 임베딩을 갖는다.
- 마지막으로, sin파의 구조는 때때로 더 큰 grid(Appendix D)에 apparent한데, position embedding이 2D-image topology를 표현하는 방법을 배운다는 것은 직접 설계된 2D-aware embedding이 개선되지 않는 이유를 설명한다.(Appendix D.4)
- Self-Attention을 통해 ViT는 전체적으로 정보를 통합할 수 있는데, 가장 낮은 층에서도 이미지를 생성할 수 있다. 연구자들은 신경망이 이 수용력을 어느정도까지 사용하는지 조사한다. 특히 attention weight를 기반으로 정보가 통합되는 image space의 average distance를 계산한다(그림 7, 오른쪽). 이 "attention distance"는 CNN의 receptive field size와 비슷하다.
- 연구자들은 일부 head가 이미 낮은 층에 있는 대부분의 image에 주목을 하는것을 발견, 정보를 global하게 통합하는 특징이 모델에 실제로 사용되는것을 보여준다. 다른 attention heads는 낮은 층에서 일관되게 attention distance가 작다. 이렇게 고도로 local하게 된 attention은 transformer(그림 7, 오른쪽)이전에 ResNet을 적용하는 hybrid 모델에서 덜 두드러지며, 이는 CNN의 초기 convolution층과 유사한 기능을 수행할 수 있음을 보여준다. 또한 신경망의 깊이에 따라 attention distance가 증가하는데, Global하게 모델이 clasification과 의미론적(semantically)으로 관련이 있는 image의 영역에 주목함을 발견할 수 있다. (그림 6).
4.6. Self-Supervision - Transformer는 NLP 작업에서 인상적인 성능을 보여주지만, 그들의 성공의 대부분은 뛰어난 확장성뿐만 아니라 대규모 self-supervised pretraining(Devlin 2019; Radford 2018)에서 비롯됩니다. 또한 BERT에서 사용되는 masked language modeling task를 모방해 self-supervision을 위한 masked patch prediction에 대한 예비 탐색을 수행한다. "Self-supervised pre-training"을 통해, 우리의 작은 ViT-B/16 모델은 ImageNet에서 79.9%의 정확도를 달성하고, 처음부터 교육에 대해 2%의 상당한 개선을 이루나, 여전히 supervised pre-training에 비해 4% 뒤떨어져 있습니다. Appendix B.1.2에는 추가 detail이 존재한다.
5. Conclusion
- 연구진들은 image 인식에 대한 transformer의 직접적인 적용을 탐구하며 이전의 연구들에서 computer vision에 "self-attention"을 사용한 것과 달리 초기 patch생성을 제외하고 image별 inductive biases를 architecture에 도입하지 않는다. 대신, image를 일련의 patch로 해석해 기본 Transformer의 Encoder로 처리한다. 이는 단순하지만 확장가능하기에 대규모 dataset에 대한 pre-train과 결합하게 되면 매우 잘 작동한다. 따라서 ViT는 많은 S.O.T.A모델과 비슷하거나 능가하지만 pre-train에 상대적으로 cheap하게 작동한다.
- 본 연구의 이런 시초적인 결과는 고무적이라 할 수 있으나 많은 과제가 여전히 남아있는데, ① Detection, Segmentation 등의 Computer Vision에 적용하는 것과 ② "Self-Supervised pre-training"에 대한 방법을 찾는 것이다. 우리의 이 초기실험은 "Self-Supervised pre-training"에 개선을 보여주긴 하지만 대규모 "Supervised pre-training"보다는 여전히 큰 격차가 존재하기에 ViT의 추가적인 확장은 성능향상의 여지를 보여준다.
😶 부록 (Appendix)
[A] Multi-Head Self Attention
[B] Experiment Details
이를 위해, trainingset의 작은 부분을 validation set으로 설정한다. (CIFAR은 2%, ImageNet은 1%)ResNet의 경우, [Kolesnikov2020]을 따르며 모든 fine-tuning 실험은 384resolution에서 실행된다. [Kolesnikov2020]에 따르면, training과 다른 resolution으로fine-tuning을 하는 것이 일반적이다.
[C] Additional Results
논문에 제시된 수치에 해당하는 세부 결과로 표 5는 논문의 그림 3에 해당하며 크기가 증가하는 dataset에서 사전 훈련된 다양한 ViT 모델의 전이학습 성능을 보여준다: ImageNet, ImageNet-21k 및 JFT-300M. 표 6은 논문의 그림 5에 해당하며 다양한 크기의 ViT, ResNet 및 하이브리드 모델의 전송 성능과 사전 교육의 예상 계산 비용을 보여준다.
📌 Long-Term Dependency (장기의존성) - Convolution의 경우, 이웃 pixel과의 정보를 교환한다. - 주로 3×3, 5×5의 작은 kernel을 사용하기에 영상 내 멀리 떨어진 물체간의 상호작용을 하려면 "Deep layer"가 필요하다. 예를 들어, 3×3kernel은 10만큼 떨어진 pixel의 경우, 4개의 층을 거쳐야 비로소 상호작용이 일어날 수 있다.
- Recurrent의 경우, 시간축을 따라 상호작용이 일어난다. Convolution과 Recurrent는 모두 깊은 신경망으로 상호작용이 일어난다. 하지만 층이 깊어지면서 여러 요소간에 발생한 정보가 혼합되어 중요한 정보가 흐릿해진다.
- Transformer는 start-end까지 "Self-Attention"을 이용해 explicit하게 "Long-term dependency"를 처리한다. 즉, CNN과 RNN은 어느 순간의 이웃 요소만 교류하는 "Locality"를 벗어나지 못한다. 하지만 Transformer는 "Global"정보를 명시적으로 표현, 처리함과 동시에 "Locality Extraction"에도 능숙하다. [Cordonnier2020; https://arxiv.org/abs/1911.03584] ViT의 경우, "Self-Attention"을 통해 patch를 주목하게 하여 해결한다. 위의 예시를 보면, 16개의 head를 갖는 6개의 encoder block에 대해 "가운데의 pixel을 query로 사용해 각 head가 어디가 주목하는지" 표시한 그림이다. - 왼쪽의 얕은 층에서는 query근처에 주목해 "Local 정보"를 추출 - 오른쪽(깊은 층)으로 갈수록 먼 곳까지 주목하는 현상을 확인할 수 있다. 특히나 Layer 6에서는 head가 주목하는 곳을 달리해 image전체를 살피는 좋은현상이 나타난다.
📌 Scalability (뛰어난 확장성) - model 및 dataset의 크기면에서 확장성(scalability)가 뛰어나다. [Kaplan2020; https://arxiv.org/abs/2001.08361]의 연구는 큰 모델을 사용하는 것이 유리하다는 근거를 제시한다. 즉, model크기가 작으면 dataset을 확장하거나 학습시간을 늘려도 성능향상에 한계가 존재한다.
- 다만, NLP의 이런 분석이 CV에 그대로 적용되지는 않는다. 컴퓨터비전은 자율지도학습보다는 "지도학습"에 의존하는 경향이 크다. 따라서 사람이 labeling한 dataset에 영향을 더 많이 받는다.
- ViT의 경우, 모델크기를 다음과 같은 방식으로 키울 수 있다. encoder block↑ , patch_size ↓ , head↑, patch_encoding_dimension인 d_model을 늘리는 등의 방식으로 키울 수 있다.
📌 Explainability(뛰어난 설명가능성) - 사람의 의사결정에 대한 이유를 설명해야 할 때, 이를 설명하는 능력이 뛰어나다. transformer는 영상을 구성하는 pixel간의 "Self-Attention"을 명시적으로 표현하기에 설명가능한 능력을 구현하기 매우 유리하다. 예를 들어, Object Detection에 적용가능한 Transformer인 DETR의 경우, 박스를 지정할 때 Object Boundary에 "Attention"을 집중하는 것을 알 수 있다.
- 또한 CUB-200과 같은 미세분류 dataset에 대해 미세분류를 수행하는 TransFG라는 transformer model은 전체적인 모양이 비슷한 미세분류 dataset에 대해 "특정한 곳에 집중해 구별"하는 경우에 매우 잘 수행함을 알 수 있다.
📌 Multi-Modal(뛰어난 확장성) - 모든 기계학습모델은 귀납편향(inductive bias)이 존재한다. 예를들어, CNN의 경우 이웃한 pixel과 비슷한 특성을 갖는다는 "locality"와 물체가 이동하면 이동한 위치에 동일한 특징이 추출된다는 "translation-equivalent" 등이 대표적이다. CNN의 경우 이런 귀납편향이 강한 편으로 이를 만족하지 못하는 자연어와 같은 다른 modality-data에 적용은 부자연스러운 결과가 나온다. (물론, RNN도 시간축과 관련된 강한 귀납편향을 갖는다.) cf) 귀납편향: 기계학습모델이 학습단계에 보지않았던 새로운 sample로 옳게 추론하기 위해 사용하는 가정
- 하지만 transformer의 경우, 귀납편향이 약한 편으로 가장 중요하게 활용되는 "Self-Attention"은 image, text를 포함해 대부분의 signal에서 나타나서 여러 input형태 (multi-modal data)에 적용할 여지가 존재한다. 예를 들어 자연어->그림의 DALL-E 등등 vision과 NLP를 동시에 처리하는 여러 응용에서 backbone으로 활용할 수 있다.
📌Foundation Model(토대 모델) - 귀납편향이 강해 응용이 한정적인 CNN, RNN과 달리 귀납편향이 약한 transformer는 multi-modal dataset에 두루 적용가능하며 확장성과 성능이 뛰어나다는 점으로 토대 모델이 될 수 있었다. 최근에는 Florence라는 computer vision분야의 토대모델이 발표되었다.
[ViT : Vision Transformer]
🧐 Computer Vision with Transformer 오랫동안 Convolution Neural Network는 Computer Vision에서 가장 성공한 model로 군림했다. 2017년, transformer의 공개 이후 이 둘을 접목하려는 시도가 이루어졌었다. - 초기에는 CNN을 backbone으로 두고 transformer로 추출한 self-attention 정보를 보조로 사용하는 방식을 택하였다. ex) Attention augmented convolutional network [Bello2019; https://arxiv.org/abs/1904.09925] 구조는 다음과 같다. 기존 CNN: feature map을 생성, 다음 층으로 전달하는데 이때, self-attention으로 증강시킨 신경망에서는 feature map과 transformer의 MHA로 만든 feature map을 결합해 다음층으로 전달한다.
최근에는 classification, detection, segmentation, tracking문제를 "하나의 모델"로 모두 해결하는 방식으로 진화했는데 Swin Transformer가 대표적이다. [Liu2021a; https://arxiv.org/abs/2103.14030]
앞서 언급한 것들처럼 computer vision에 적용된 transformer model을 통칭해 Vision Transformer라 부른다.
🧐 ViT : Transformer for classification ViT는 [Vaswani2017; https://arxiv.org/abs/1706.03762]에서 소개된 transformer구조를 최대한 그대로 따라 실험한다. 다만, 기존 transformer는 언어 번역 등의 목적을 위해 개발되었기에 문장은 단어가 순서대로 배열된 1차원 구조의 data이다. 따라서 ViT는 image의 pixel이 2차원 구조로 배열된 data이기에 transformer에 조금의 변형을 가미한다.
Classification Task에서는 image를 입력받아 class의 probability vector를 출력하는데, 이는 즉 [Vaswani]의 Transformer구조에서 Encoder부분만 있으면 된다. - Encoder는 Decoder로 tensor를 전달하는 대신, 추출한 feature map을 class probability vector로 변환, output layer를 통해 출력하면 되기 때문이다. - 따라서 전체적인 ViT의 구조는 아래와 같다. 위의 사진에서 알 수 있듯, encoder에 input tensor를 입력시의 과정은 다음과 같다.
<Encoder에 image를 입력하는 과정> ① image를 p×p개의 patch로 나눈다.
② p²개의 patch를 일렬로 배치, 이어붙인다. ex) h×w×3라면 ①과 ②를 통해 p²×(h/p * w/p * 3)으로 변환된다. ③ pixel을 일렬로 이어 붙인 후 embedding진행 ex) 3hw / p²차원의 벡터로 만든다. 또한 이 벡터를 embedding층으로 d_model차원으로 변환한다. 이 벡터(d_model)를 행에 쌓으면 p²×d_model크기의 행렬이 된다.
④ 위치 인코딩(Position Encoding)을 더해, Encoder로 입력한다. ex) X = P+S라는 식을 적용할 수 있는데, 여기서 S는 p²×d_model의 행렬이고 P는 위치 인코딩 행렬이다.
지금까지 설명한 vision transformer는 class probability vector만 출력하면 되기에 가장 단순한 편에 속하며, DETR의 경우, 출력이 가변개수인 box이기에 Encoder와 Decoder를 모두 사용해야 한다. 또한 작은 dataset에 대해서는 transformer가 열등한 경향이 있기에 주의해서 사용해야한다.
😶 실습 _ by tensorflow
import os
import cv2
import math
import wandb
import shutil
import random
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import *
from tensorflow.keras.layers import *
from tensorflow.keras.losses import *
from tensorflow.keras.metrics import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.activations import *
from tensorflow.keras.regularizers import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.preprocessing import *
(x_train,y_train),(x_test,y_test)=keras.datasets.cifar10.load_data()
n_class=10 # 부류 수
img_siz=(32,32,3)
img_expanded_siz=(72,72,3)
patch_siz=6 # 패치 크기
p2=(img_expanded_siz[0]//patch_siz)**2 # 패치 개수
d_model=64 # 임베딩 벡터 차원
h=8 # 헤드 개수
N=6 # 인코더 블록의 개수
위의 논문에서는 Convolution, Recurrent 등의 신경망의 구성요소를 모두 제거하고
"오로지 Attention만으로 신경망을 구현한다."
transformer가 한번에 처리하기에 이로 인해 순환신경망이 갖는 bottleneck문제를 해결할 수 있다.
🧐 기본적인 Architecture
<Encoder> 단어는 embedding을 통해d차원의 embedding벡터로 표현된다. (논문에서는d= 512를 사용) Inputs라는 부분에 입력이 되며, 이때 Sequential 구조가 아님을 알 수 있다. 즉, transformer는 모든 단어를 "한번에 입력"한다. 이렇게 "한번에 입력"받는 방식은 "Self-Attention"을 가능하게 한다.
{Positional Encoding} 단어의 위치정보를 보완하기 위해 positional encoding을 통해 "embedding벡터에 위치정보를 더한다".
{MHA : Multi-head Attention} Encoder에 MHA(Multi-Head Attention)층과 FF(Feed Foward)층이 존재. 이때, MHA층은 "Self-Attention"을 수행한다! - multi-head라는 말처럼 h개 head가 독립적으로 self-attention을 수행, 결과를 결합한다. - MHA층의 출력은 FF층의 입력이 된다. (MHA->FF) - 또한, FF(Feed Forward)층은 FC(Fully-Connected) layer로 이루어진다.
MHA층과 FF층 모두 Add&Norm을 적용한다. - Add는 Shortcut Connection을 - Norm은 layer Normalization을 의미한다. - Nx는 Encoder block이 N개 연결되었다는 것을 의미한다. (논문에서는 N=6을 사용)
<Decoder> Encoder처럼 단어 embedding과 Positional Encoding을 통해 변환된 단어들이"한번에 입력"된다. 예를들어, 한국어문장은 Inputs에, 영어문장은 Outputs에 입력된다.
- Decoder에는②~③에 표시된 2개의MHA층과FF층이 존재하며 출력에Add&Norm을 적용한다. - 이후 출력층은 "softmax"를 통해 확률벡터를 출력하며, 이런 Decoder block이 N개 연결되어 있다. ①~③은 3개의 MHA층으로 Attention을 담당하는 핵심요소이다. - ①은 Encoder에서 입력문장을 구성하는 단어간의 Attention을 처리한다. 같은 문장을 구성하는 단어간의 Attention이기에 이를 "Self-Attention"이라 부른다.
-② Masked MHA의 의미는 다음과 같다. Decoder는 i일 때, 1, 2, ..., i-1까지만 관찰해야한다. 그렇기에 Mask를 사용해 i+1, i+2, ... 등을 감추어야(masked) 한다.
-③은Encoder가 처리한 입력과 Decoder가 처리하고있는 출력사이의 Attention을 다룬다. 따라서 ③은 "Self-Attention이 아니다!!" 이때, Encoder의 state벡터는 key와 value이고 Decoder의 state는 query로 작용하며 Encoder와 Decoder는 ③의 MHA를 통해 정보를 교환한다.
①과 ②로 표시한 MHA(Multi-Head Attention)층의 "Self-Attention"은 transformer의 main idea이다.
이제 전반적인 Transformer의 Architecture를 보았으니 좀 더 세부적으로 Encoder와 Decoder의 동작에 대해 설명하겠다.
[Encoder의 동작과정]
🧐 Input Embedding. &. Positional Encoding
encoder는 입력문장의 단어를 임베딩 후d_model차원의 벡터로 변환한다. (논문에서는 d=512로 설정) 또한, 모든 단어를 "한번에 입력"하기 위해 문장을T×d_model 크기의S행렬로 표현한다. (이때,T는 단어의 개수이다.)
행렬S의 모든 행이 동시에 처리되서순서정보를 신경망이 얻지 못할 가능성을 배제하기 위해위치정보를 표현한 행렬P를S행렬에 더해X행렬을 만들고X를 신경망에 입력한다. 이때, 3가지 행렬 모두 같은 size를 갖는다. 이 과정을 "Positional Encoding"이라 한다. 위치행렬P를 생성하는 여러 방법 중, 아래 식과 같은 sin, cos함수를 사용한다.
🧐Self-Attention
X행렬에 대해①의 MHA로 "Self-Attention"을 수행한다.
"Self-Attention의 본질" 이때, query는 확장이 필요한데, 하나의 벡터q로 표현하는 Bahdanau attention과 달리 Self-Attention에서는 query가T개의 행을 갖는 행렬Q가 되기에 확장된 query행렬은 다음과 같이 나타내며, 이때Q, K, V는 모두T×d_model크기의 행렬이고 이 식의 결과인C도 T×d_model행렬이다. "Self-Attention 구현의 가장 단순한 방법"은 바로Q, K, V를 모두X로 설정하고 위의 식을 적용하는 것이다. 하지만 transformer는 이런 단순한 방법이 아닌 query, key, value를 가중치 행렬 WQ, WK, WV를 이용해 X를 변환해 사용하며, 이때, QKT는 √d_key로 나누어 정규화를 거친다. 이를 식으로 나타내면 아래와 같다. X:T×d_model 행렬 WQ:d_model×d_key 행렬 WV:d_model×d_value 행렬 Q, K:T×d_key 행렬 V:T×d_value 행렬 (보통d_model>d_value,d_key 로 설정한다.)
🧐 Multi-Head Attention
Architecture에서①로 표시한 MHA에는 여러 head가 있으며각 head는고유한 transform matrix WQ, WK, WV를 갖고 softmax식을 이용해"Self-Attention"을 독립적으로 수행해 상호보완한다. 즉, 여러 head로 self-attention을 진행, 결과를 결합해 성능향상을 진행시킨다.
따라서 MHA의 동작을 아래와 같은 식으로 정의한다.
예를 들어보자.
이후 MHA를 통과한C행렬은 Add&Norm층을 통과하는데, Skip connection과 Layer Normalization을 진행한다. - Skip-connection: MHA층의 출력특징맵C와 입력특징맵X를 더하는 연산 - Layer Normalization: mini-batch를 구성하는 sample별로 특징맵의 분포가 N(0,1)이 되게하는 방법이다.
🧐 position-wiseFeedForward layer
MHA에서 사용된 아래 식에 따라 출력한X'을 입력으로 받아X''을 출력한다. 아래 X''을 구하는 식을 보면 MLP를 구하는 방법처럼 linear transformation을 사용하는 것을 알 수 있다. X와X''은 모두 encoder의 최초 입력X와 같이 Txd의 행렬이다. 이는 transformer가신경망을 흐르는 tensor의 모양이 유지시켜 행렬연산이 원활히 이루어짐을 알 수 있다.
position-wise FF라 부르는 이유??
[Decoder의 동작과정]
encoder와 거의 비슷하게 동작하기에 다른 부분에 주안점을 두어 설명을 진행한다.
🧐 Masked Multi-Head Attention 층
Decoder에②로 표시된 Masked MHA층은 행렬일부를 마스크로 가린다는 점을 제외하면①의 MHA층과 같다. i = 1일 때, <SOS>를 입력하면 모델은 'That'을 예측하고 i = 2일 때, 'That'을 보고 'can't'를 예측하는 이런 방식을 재귀적으로 수행하는 자귀회귀방식을 적용해 언어번역을 진행한다.
다만, 학습단계는 추론단계와 상황이 다른데, - 예측단계는 출력문장을 모른채 동작하지만 - 학습단계는 입출력문장이 모두 주어지고 자귀회귀방식을 사용가능하다. (다만 교사강요; teacher forcing방식을 주로 사용한다.) 이는 잘못 예측했을 경우, 이후 단어는 계속 틀릴 가능성이 높기 때문이다. 교사강요에서는 '<SOS> That can't turn red by itself <EOS>'를 decoder에 한꺼번에 입력한다.
transformer도 교사강요로 학습을 수행하는데,예측단계의 자기회귀를 모사한 "Masking"을 사용한다.
Masked MHA층은 이 행렬의 대각윗행렬의 모든 원소를 무한대에 가까운 음수로 설정하면, 이전에 나온 단어들에만 주목할 수 있게 되는데, 예를 들어보면 아래와 같다.
🧐 Encoder와 연결된 Multi-Head Attention 층 (Not Self-Attention)
위의 그림에서③으로 표시된 MHA층은 encoder와 decoder가 상호작용한다. ①:이 MHA층은 입력문장내의 단어간의 Attention을 처리하는 "Self-Attention"이다. ②:이 MHA층은 출력문장내의 단어간의 Attention을 처리하는 "Self-Attention"이다. ③:이 MHA층은 Decoder로 입력된 문장의 단어가 Encoder로 입력된 문장의 단어에 주목할 정보를 처리한다. "Self-Attention"이라는 점만 제외하고 모든 연산은①과②의 MHA층과 동일하다.
①에서의 식은 "Self-Attention"을 처리하기에 같은 문장에서 구한 행렬X만 존재한다. ∴ query와 key, value 계산 시 모두X를 사용한다.
하지만③의 MHA층은 encoder의X와 decoder의X가 존재한다. 이를 구별하기 위해X_enc,X_dec라 할 때, key와 value는X_enc를 사용하고 query는X_dec를 사용한다. 이를 통해 query가 key와 value에 주목하는 정도를 계산할 수 있으며 아래와 같이 나타낼 수 있다. 여기서 MHA층의 출력 행렬은 Architecture에서 볼 수 있듯 Add&Norm층, FC층, Add&Norm층을 거친 후 Linear와 softmax로 구성된 출력층으로 전달된다.
1. Feature Selection - feature selection은 유용한 특징을 남기고 나머지는 제거하는 방법이다. 여기서 유용한 특징이란 예를 들어 분별력이 강한 특징 등을 말한다.
- 즉, feature selection은 분별력이 높은 특징에 "주목(attention)"한다 해석할 수 있다. 매우 원시적인, primitive한 attention이라 생각할 수 있다.
2. Saliency map - 사람이 feature를 설계하는 방식(color, 명암, 방향 등등으로 saliency map 즉, 돌출맵을 설계) - 사람이 눈으로 바라보는 곳을 추적하는 장치를 사용해 saliency map dataset을 구축하고 모델을 학습시켰다.
🧐 Attention Algorithm with Deep Learning
0. Computer Vision에서 Attention의 발전과정
cf. SENet (Squeeze-and-Excite Network) Classification, Detection, Segmentation, Tracking 등의 신경망에 두루두루 적용할 수 있는데, 이는 dataset의 의도에 따라 attention이 적용되어 그에 맞게끔 학습이 되기 때문이다.
SENet은 feature map의 어떤 channel에 주목(Attention)할 지 알아낸다. - Attention이 없는 기존의 신경망은 mxnxk feature map에 convolution을 적용해 X로 표기된 m'xn'xk' feature map을 만들어 다음 층에 전달한다.
- SENet은 Squeeze와 Excite, Scale연산을 추가로 적용해 X를 X'으로 변환해 다음 층에 전달한다. 이때, X'은 더 중요한 channel이 강조된 feature map이다.
<Squeeze> - GAP을 적용해 각 channel의 pixel평균을 계산, z 벡터의 해당 원소에 저장한다. - z는 k'개 원소를 갖는 벡터가 된다.
<Excite> - 2개의 Fully-Connected layer를 이용해 z를 적당한 크기로 줄이고 기존 크기의 s벡터로 복원한다. 이때, 줄이는 층에는 U1, 늘리는 층에는 U2 이라는 "학습으로 알아낸" 가중치를 사용한다.
<Scale> - s를 channel별로 중요한 정도를 나타내는 벡터로 여긴다. 즉, n번원소가 0.2이고 m번원소가 0.4라면 m이 2배 더 중요하다 여긴다.
📌 Self-Attention
- 앞선 attention은 image의 중요부분에 더 큰 weight를 줘서 성능을 개선한다. 즉, convolution층을 흐르는 feature map에 attention weight를 적용해 feature를 강조하거나 약화하는 것이다.
- Self-Attention은 image를 구성하는 element 상호 간의 attention을 결정한다.
위의 그림은 self-attention을 개념적으로 설명한다. - Attention의 경우, a~c는 큰 가중치, d~e는 낮은 가중치로 feature를 강조,약화시켜 성능향상을 하지만 - Self_Attention의 경우, 원반이 다른 위치에 주목하는 정도에 대한 선의 굵기로 표현되어있는데, 이는 원반에 해당하는 영역이 원반을 잡으려하는 개와 사람에 많이 주목하고 하늘이나 땅에는 별로 주목(attention)하지 않는다.
cf. Non-local Network Non-local Network는 self-attention을 computer vision에 처음 도입한 모델이다. [Wang2018;https://arxiv.org/abs/1711.07971]
- 이 신경망은 아래 식으로 self-attention을 계산한다. - output feature mapy은 input feature mapx와 같은 크기이다. -yi는x의 모든 위치의 값인 g(xj)의 가중치의 합이다. - weight f(xi,xj)는xi가xj에 얼마나 주목해야하는지 나타내는 값이다. 즉, 위의 그림에서 빨간색 선의 굵기가 가중치에 해당한다.
- 보통 위의 식은 연산량이 많아서 convolution이 여러번 거친 후 7x7처럼 작아진 feature map에 적용한다.
이후 Transformer의 등장으로 아래와 같이 다양한 transformer model들이 등장한다.
∙Classification을 위한ViT
∙Detection을 위한DETR
∙Segmentation을 위한SETR
∙Tracking을 위한MOTR
📌 같은 구조의 Transformer로 위의 task들을 한번에 푸는Swin
자연어의 경우, 단어가 나타나는 순서가 중요해서 시간개념이 중요하다.
[RNN과 LSTM] _ NLP
🧐 RNN (RecurrentNeuralNetwork)
일반적으로 i의 단어는 그 이전에 발생한 i-1개 단어와 상호작용한다.
🧐 Long Term Dependency과 LSTM(LongShort-Term-Memory)
Long Range Dependency: RNN은 시간을 처리할 수 있는 능력을 갖추지만 길이가 긴 sample에는 한계가 있다. hi는 1, 2, ..., i 순간에 발생하는 단어의 정보가 혼합되기에 오래된 단어의 정보는 희미해진다. 즉, 앞쪽단어와 멀리있는 단어가 밀접하게 상호작용하는 long-range dependency를 제대로 처리하지 못하는 문제가 발생한다.
LSTM: RNN을 개조해 long-term dependency를 처리하는 능력을 강화한다. input과 output을 열거나 막는 gate를 두어 선별적으로 기억하는 기능으로 여닫는 정도를 조절한다. 이때, 여닫는 정도는 학습으로 알아낸 가중치로 결정된다.
ex) 한국어→영어로 번역 시, 둘의 문장길이가 달라 seq2seq model이 필요하다.
- 학습 시 Decoder의 input부분과 output부분이 모두 동작한다. 즉, 정답에 해당하는 출력을 알려주는 교사강요(teacher forcing)방법을 사용한다.
- 예측 시 정답을 모르기 때문에 위의 회색표시한 input 부분을 제외하고 자기회귀(auto-regressive) 방식으로 동작한다. 자기회귀에서 <SOS>가 입력되면 첫 단어 'That'을 출력하고 'That'을 보고 그 다음 둘째 단어 'can't'를 출력한다. 즉, 이전에 출력된 단어를 보고 현재단어를 출력하는 일을 반복하며, 문장끝을 나타내는 <EOS>가 발생하면 멈춘다.
- 한계 : 가장 큰 문제는 encoder의 마지막 hidden state만 decoder에 전달한다는 점이다. 그림에서 보면h5만 decoder로 전달된다. 따라서 encoder는 마지막 hidden state에 모든 정보를 압축해야하는 부담이 존재한다.
[query-key-value로 계산하는 attention] _ NLP
🧐 query-key-value
QKV : attention을 계산하는 방법을 여러가지인데, 최근에는 query가 key와 유사한 정도를 측정하고 유사성 정보를 가중치로 사용해 value를 가중합하는 방법을 주로 사용한다.
query와 key의 유사도 벡터 s는 벡터의 내적으로 계산한다 가정하며 attention 벡터 a는 유사도벡터 s에 softmax를 적용한 벡터이다. 이때, s = (s1, s2, s3, s4)이고 a = (0.1895, 0.1843, 0.4419, 0.1843)이 된다.
이제 a를 가중치로 사용해 value의 가중합을 구하면 context 벡터 c는 c = 0.1895*(1 2 5) + 0.1843*(1 1 5) + 0.4419*(3 2 4) + 0.1843*(6 1 2) = (2.8053 1.6314 4.0052).
벡터의 차원을 d라 하면, q는 1xd행렬이고 K와 V는 nxd행렬이다. 이때, n은 key와 value가 갖는 벡터의 개수이다.
[seq2seq with Attention] _ NLP
seq2seq는 입력문장의 모든 정보를 encoder의 마지막 hidden state h5에 압축해 넣어야하는 부담이 있다. Bahdanau는 아래 식의 attention을 이용해 decoder가 encoder의 모든 state(h1, h2, ... , h5)에 접근할 수 있게 허용하여 성능을 향상한다.[Bahdanau2014; https://arxiv.org/abs/1409.0473]
🧐Bahdanau Attention
위의 seq2seq의 경우, decoder는 i=6일 때, encoder가 i=2일 때, 단어 '저절로'에 주목해야 'itself'라는 단어를 제대로 생성할 수 있다. decoder가 i=6일 때, (.01 .9 .02 .03 .04)처럼 2번째 원소값이 큰 attention vectora를 생성하면 encoder의 두번째 단어 '저절로'에 더 주목할 수 있어 성능이 향상될 수 있다.
- 이에 대해 query, key, value가 무엇이 되어야 위와 같이 될 수 있는지 살펴보자.
Semantic Segmentation을 처음 시도한 성공적인 convolution network이다. FCN은 Fully-Connected Layer를 제거함으로써 conv.layer와 pooling.layer로만 구성된다.
input: m x n x 3의 color image output: m x n x (C+1) tensor - 이때, C는 class개수이고 C+1에서 +1을 해주는 이유는 배경이 포함되기 때문이다. - output tensor의 0번 map은 background를 의미하며 이후는 class에 속한다.
FCN은 m x n x 3크기의 input image를 Downsampling하여 점차 작게 만든다. 이후 m x n으로 다시 키우는 Upsampling (= Deconvolution)과정이 필요하다.
Downsampling을 계속하면 receptive field가 커지므로 detail이 떨어진다. 앞쪽의 feature map의 경우, detail한 정보를 갖지만 전역정보가 부족하다. ∴ FCN은 여러 scale의 feature map을 결합해 segmentation성능을 최고로 유지한다. → by skip connection !!
뒤에서 소개되는 model들은FCN이 성공을 거둔 후 FCN의 성능을 개선하여 다양하게 변형된 model들이다.
[DeConvNet]
DeConvNet은 FCN과 Auto-Encoder를 결합한 구조이다. [Noh2015] FCN의 경우, 사람이 개입해 Upsampling을 설계했기에 구조가 복잡하고 어색하다. DeConvNet의 경우, 대칭구조의 표준 auto-encoder를 사용해서 구조와 학습, 성능이 우월하다.
[U-Net]
의료 영상처리분야에서 가장 권위있는 학술대회 중 하나인 MICCAI(Medical Image Computer Assisted Intervention)에서 발표된 U-net은 의료영상 분할을 목적으로 개발되었다.[Ronneberger2015] (같은 해 ISBI 세포 추적 대회에서 우승 차지는 안비밀)
U-net은 Downsampling과정과 Upsampling과정을 각각 다음과 같이 부른다. - Downsampling = contracting path - Upsampling = expansive path
📌 Down Sampling과정 →: Convolution layer과 ↓: Pooling layer을 통과하면? 여타 모델처럼 feature map의 spatial resolution은 줄어들고 depth(=channel)는 늘어난다. 이 과정을 4번 반복하면 가장 아래의 32X32X512의 feature map이 된다.
📌 Deconvolution (≒ Upsampling)과정 Transpose Convolution (= Deconvolution)을 이용해 원래 image size로 복원한다.
🌟 U-net의 주안점은 →로 표시된 shortcut connection이다!! Downsampling, Upsampling에 대응되는 층에 대해 각각 다음과 같이 연산한다. - 좌측에서 발생한 feature map에 대해 중앙에서 crop을 진행, expansive path로 전달. - 우측은 전달받은 tensor(HxWxC)를 이어붙여 (HxWx2C)의 tensor를 생성한다.
원래 U-net은 Conv2D(filters, (3,3), strides=1, padding='valid')로 사용한다. 따라서 input image가 572x572는 570x570, 568x568로 줄어든다.
풀링층의 경우, 2x2 filter사용으로 feature map의 크기는 반으로 줄어든다. 따라서 568x568맵이 284x284가 된다.
[DeepLabv3+]
Encoder-Decoder구조에 기반한 신경망은 기존의 image를 16~32배까지 축소 후 Upsampling으로 기존 크기로 복원한다. 예를들어 U-net은 572x572 image를 32x32로 축소 => 388x388로 복원한다.
But! 상당히 작게 축소했다 복원하기에 "detail한 feature"를 잃어버릴 가능성이 높다. → DeepLabv3+는 이런 단점을 팽창 컨볼루션(dilated convolution = atrous convolution)으로 완화한다.[Chen2018]
atrous convolution은 팽창계수 r을 가지며, r=1의 경우 좌측사진처럼 보통 convolution과 같다. r=2의 경우, 3x3 filter는 이웃 9개의 pixel을 조사한다.(다만 우측처럼 한 pixel을 건너 진행한다.) 즉, 더 넓은 receptive field를 적용하는 셈이 될 수 있다!
thing: 셀 수 있는 물체 (자동차, 사람) // stuff: 셀 수 없는 물체 (땅, 하늘) - semantic segmentation: 같은 class의 thing의 경우, 구분하지 않고 같은 class로 할당 - instance segmentation: thing에 대해서만 분할, 같은 class라도 고유번호를 할당해 구분한다. - panoptic segmentation: 모든 pixel에 대해 thing과 stuff를 할당,분할을 진행한다.
🧐 Metric
classification은 image에 대한 하나의 class 확률벡터를 출력한다. 하지만 segmentation은 pixel단위로 class를 지정한다. 그렇기에 segmentation을 dense classification이라고도 부른다.
segmentation에 사용되는 정확률을PA: Pixel Accuracy(화소 정확률)이라 하며 아래와 같이 측정한다.
또한 class별로 PA를 계산하고 결과를 평균한 식인 MPA를 metric으로 사용할 수도 있다.
또 다른 metric는 Object Detection에서 사용되는 IoU(Intersection over Union)를 segmentation에 맞게 고쳐 사용하는 방법이다. i. class별 AP(Average Precision)을 계산 ii. AP를 모든 class에 대해 평균해 mAP를 계산 이때, 아래 식에서 A와 B가 객체가 아닌 영역이라는 점만 다르다.
마지막으로 Dice coefficient를 metric으로 이용할 수도 있다.
cf. instance segmentation with Object Detection
instance segmentation은 object detection과 연관성이 많고
semantic segmentation은 object classification과 연관성이 많다.
- semantic segmentation은 개별 객체의 경계를 구분하는 것보다는 image내의 pixel수준에서 class에 대한 classification에 중점을 두기 때문이다. 즉, 개별 객체의 경계식별보다는 이미지 전체에 대한 class분류에 중점을 둔다.
따라서 본 글에서는 semantic segmentation에 집중하며이후 Object Detection 이후 instance segmentation을 소개할 것이다.
본 글에서는 간단하게 instance segmentation을 사용만 해볼 것이다.
[Semantic Segmentation]
Semantic Segmentation => 이미지 내 피사체에서 의미를 갖고 분할을 진행 - 상위버전=> Instance Segmentation: 같은 클래스 피사체여도 다른 물체를 구분. (정보 多)
[방법] pixel by pixel - 클래스 개수만큼 pixel당 channel을 생성
polygon(다면체) - 물체의 특정부분의 점들을 잇는 방법 - 좌표를 이용해 라벨에 대해 적은 비용이 들어감 - 점의 개수가 많아질수록 정확도는 올라감 ,, key point detection 기반
import os
import math
import wandb
import random
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.models import *
from tensorflow.keras.layers import *
from tensorflow.keras.losses import *
from tensorflow.keras.metrics import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.activations import *
from tensorflow.keras.regularizers import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.preprocessing import *
import tensorflow_datasets as tfds
dataset, info = tfds.load('oxford_iiit_pet:3.*.*', with_info=True)
이때, 255로 나누는 이유는 정규화를 위해서인데, X와 y사이의 "Loss map"을 simple하게 유도하여 조금만 변화시켜줘도 되기 때문에 사용한다!!
🤔[Loss Map...?]
Loss map이란??
Loss map은 input image의 각 pixel에 대한 Loss값을 나타내는 map이다. 이를 통해 predict와 target값 간의 차이를 시각화 할 수 있다.
일반적으로는 predict와 target간의 차이를 계산하기 위해 Loss function이 사용된다. Loss function으로 pixel별 Loss를 얻은 후 이를 시각화하면 Loss map을 얻을 수 있다.
이런 Loss map은 아래와 같은 특징을 갖는다.
1. Loss map은 쉽게 쌓을수록 좋다. 2. ReLU는 Loss map을 쉽게 쌓을 수 있다! 3. Layer를 깊게 쌓을수록 Loss map이 복잡해져 X와 y사이의 복잡한 문제를 해결할 수 있다!
[Loss function]
기울기 그래프를 수렴속도 그래프라 생각해보자!
MSE (Mean Squared Error) MAE는 L1 Norm을 사용한 Loss function이다. MAE = (1/n) * ∑|yᵢ - ȳ| 로 표현되며, 쉽게 말하자면 |x|형태이다.
- 절댓값의 합을 평균으로 계산하기에 이상치(outlier)에 더 강인한 성질을 갖는다. 즉, 이상치에 큰 영향을 받지 않고 전체적인 오차를 잘 반영한다. MSE와 달리 local minima 탈출은 쉬우나 과하다는 점...
- 수렴속도의 관점에서, x=1을 기점으로x>1에서는 수렴속도가 너무 느리고x<1에서는 너무 빠르다. 따라서 data 집단이 1~100사이의 값을 다룰 때 사용이 용이하다.
MSE (Mean Squared Error) MSE는 L2 Norm을 사용한 Loss function이다. MSE = (1/n) * ∑(yᵢ - ȳ)² 로 표현되며, 쉽게 말하자면 x²형태이다.
- 예측값과 실제값의 차이를 제곱하여 계산하기에 이상치(outlier)에 민감하게 반응할 수 있다. 또한, 오차값이 커질수록 제곱으로 인해 더 큰 가중치를 부여할 수 있다.
- 수렴속도 관점에서, 2차함수 형태이기에 극점에 가까워질수록 속도가 느려진다. x=1을 기점으로 x>1에서는 속도가 빠르고 x<1에서는 속도가 느리다. 다만, 어느기점(x<1)에서 갖혀버리는, local minima문제가 발생할 수 있다. 즉, local minima에 빠질 가능성이 높다.
RMSE (Root Mean Squared Error) - RMSE는 √(MSE)로 다변량함수이며, MAE와 달리 0에서 미분가능하다는 장점이 존재한다! - 즉, MAE의 대체라는 느낌이라 생각하면 좋을 것 같다.
보통 MSE, MAE의 경우, 기울기기반 최적화와 사용시 일부출력이 포화하면서 기울기가 아주 작아진다.
→ 따라서 보통 Cross Entropy를 많이 사용한다.
Cross Entropy. &. Categorical Cross Entropy - Cross Entropy, CE 및 CCE는 확률값을 평가(loss) 시 사용된다. (0≤y≤1의 값이 분포) CCE = -yᵢ * Σlog(ȳ)) 으로 yᵢ 즉, 참값에 대한 결과를 반영가능하다! => 따라서 softmax와 같은 multi activation function output, multinoulli Distribution과 연관된다. => 쉽게 말하자면, 0~1사이일 때, softmax output일 때 사용가능하다.
Binary Cross Entropy - Binary Cross Entropy, BCE는 이진문제에 적용하는 Cross Entropy 방식이다. BCE = -yᵢ * log(ȳ) - (1-yᵢ) * log(1-ȳ) - yᵢ와 (1-yᵢ)가 곱해짐을 통해 update시 정답과 오답을 모두 사용한다. - 유의할 점은 softmax를 사용하면 편향이 되서 sigmoid output 즉, 독립적인 활성화 함수의 output일 때 사용한다. - 문제점: softmax output을 사용하게 되면, 정답을 맞추기 위해 update되는 것이 아닌, 오답을 피하기 위해서 학습이 되어 버린다.
[Activation function]
cf. Distribution에 따른 Activation function 사용법
1. Gaussian Distribution: affine transform에 기초한 "linear" unit
softmax는 총 클래스의 확률값의 합이 1인 다변량함수로 변수하나가 바뀌면 동시에 나머지도 변하기에
하나라도 모델이 맞히게 된다면 전체적으로 학습의 정확도가 올라갈 가능성이 높다.
만약 MSE와 사용하면 부정확한 예측을 크게 확신해도 출력변경이 불가능하기 때문이다.
→exp는 Maximum Likelihood를 이용해 y출력에 도움을 준다.
→ log(softmax) = z - log∑exp(z)
이를 해석하면,
i) z로 인해 기울기기반알고리즘은 z를 높이는 방향으로 학습하며
ii) log∑exp(z)로 인해 z 전체값이 작아지는 방향으로도 학습된다.
ReLU - hidden layer에서 사용이 용이 - hidden layer의 activation은 0또는 1에 분포할 확률이 높아야 한다.
Sigmoid - 요즘은 거의 output layer에서 특히나 확률분포(Probabiliy)의 문제에서 사용한다. - 특히나, 0과 1의 분포가 많은 확률분포문제에 좋다. (즉, 두개의 군집으로 구분되는 경우.) - 분포가 균등할 때는 linear를 통해 mse를 사용한다.
tanh - 사실상 (0,0)을 지나는 sigmoid식이라 볼 수 있다. - correlation과 같은 경우에서, 2개의 군집같은 문제에서 많이 사용
Leaky ReLU - backpropagation시 음수부분을 살리고자 사용. - 확률적으로 전체적으로 왼쪽(x<0)으로 치우치게 될 가능성이 높다. - 오히려 방해가 되어 ReLU보다 성능이 안나올 가능성이 높다.
ReLU6 - f(x) = clip(x, 0, 6) - 데이터가 많을 수록 좋은 함수 - 기울기가 1인 폭이 좁아서 데이터가 적으면 0으로 모두 죽어버릴 수 있다.
Hard-sigmoid - f(x) = ReLU6 / 6 - 0.5 및 스케일링 - f(x) = max(0, min(1, (x+1)/2)) - 분포가 0~1로 되며, 데이터가 많을 수록 좋은 함수
Swish - x*sigmoid(x) - 1차 미분이 sigmoid와 거의 비슷.(continuous) - 1차미분 = 속도로 생각해보면, 음수부분과 양수부분 모두 속도가 비슷하기에 쉽게 update가능 - 2차미분식이 Gaussian과 비슷 - 2차미분 = 가속도라 생각하면 2차미분의 대칭성으로 인해 살아날 가능성이 높다.
Hard-Swish - x * hard_sigmoid(x) - swish와 거의 비슷하지만 연산속도가 빠르다.
Smooth L1 - x < 1에서 (1/2)*(y-ȳ)² - x ≥ 1에서 |y-ȳ| - (1/2)