1. 입력 벡터 x가 주어진다. 2. 네트워크 레이어 W를 통과하며 hidden feature a를 생성한다. => 최종 hidden feature a[L-1]은 Feature Vector(Embedding Vector)로 사용 3. Feature Vector v는 classifier g()를 통해 모델의 예측값 yhat으로 변환
Feature Embedding Space
- Embedding Vector v: 각 데이터 포인트가 Embedding space에 매핑된 Vector - yij = 1: 두 샘플이 같은 클래스에 속한다. - yij = 0: 두 샘플이 다른 클래스에 속한다. - Easy Sample: 분리가 잘 된 샘플 - Hard Sample: 분리가 어려운 샘플
Contrastive Loss
- 두 벡터가 같은 클래스인지 다른 클래스인지에 따라 거리를 계산하고 조정하는 Loss Function <수식>
<작동 원리>
<Weakness> - 적절한 margin m을 setting하기 어렵다
Triplet Loss
- Anchor, Positive, Negative로 구성된 sample 삼중쌍을 사용해 학습 - Anchor과 Positive는 같은 클래스 / Anchor과 Negative는 다른 클래스 <수식>
<작동 원리>
<Weakness>
- 좋은 triplet을 구성하는 것이 까다롭다.
Center Loss
- 각 클래스의 중심과 데이터 샘플 간의 거리를 최소화하여 Intra-Class Variance를 줄이는 Loss Function - 주로 분류 문제에서 사용되며, Softmax Cross-Entropy Loss와 함께 사용 가능 <수식>
* CE Loss(Cross-Entropy Loss)
<작동 원리>
1. 입력 데이터 x가 Feature Extractor f()를 통과하여 FeatureVector v를 생성 2. WEight Matrix W를 통해 최종 Embedding Vector z로 변환 3. Softmax를 통해 모델 예측 확률 p를 생성
<Weakness>
- Inter class Validation: 같은 클래스 내 샘플들이 서로 얼마나 가까운지를 나타냄 - Intra class Validation: 서로 다른 클래스 간 샘플들이 얼마나 멀리 떨어져 있는지를 나타냄 => Center Loss의 의도 1. Intra class Validation 감소: 같은 클래스의 샘플들이 서로 가까워지도록 유도 2. Inter class Validation 증가: 사로 다른 클래스 간의 거리를 최대한 넓힌다.
EX)
λ 작을 수록 클래스 간 경계가 명확하지 않다.
Proxy-based Loss
- 각 클래스에 대해 하나의 Proxy Vector W를 설정하고, 데이터 샘플의 Embedding Vector v와 Proxy Vector간의 유사도를 최적화하는 Loss Function - 주로 분류 문제에서 사용되며, Embedding Vector가 해당 클래스의 Proxy에 가까워지도록 유도
<수식>
<작동 원리>
1. Embedding Vector v는 Feature Extractor f()를 통해 생성 2. 각 클래스의 Proxy Vextor Wi와의 내적 또는 Cosine Similirity를 통해 점수 zi를 계산 3. Softmax함수를 통해 예측 확률 p를 생성하고 Cross-Entropy Loss를 계산 4. v가 실제 클래스의 proxy Wi에 가까워지도록 조정
<주요 개념>
Generative Adversarial Networks(GANs)
- Generator와 Discriminator가 서로 경쟁하며 학습되도록 설계된 생성 모델
<Generator의 목표> 임의의 분포로 부터 샘플한 z에서 real 같은 fake data를 생성
<Discriminator의 목표> Genrator가 만든 fake data와 training set으로 부터 가져온 real data를 구분함
EX)
Minmax Loss
- GAN의 학습 과정은 Minmax 게임으로 표현된다, <수식> <Discriminator 관점>
- 진짜 데이터 x에 대해서는 D(x)=>1 - 가짜 데이터 G(z)에 대해서는 D(G(z))=>0이 되도록 최대화
<Generator 관점> - Disciminator가 생성한 가짜 데이터 G(z)를 진짜라고 판단하도록 D(G(z)) => 1이 되도록 최소화