🏢 ETRI (2024.01.15)

📌 01.12-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ 논문 정리
∙ 논문 review
∙ PPT만들기


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
AAAI에 넣을 내용으로 정리 및 Exercise 풀기

3. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 3 읽고 공부하기
3.1. Discrete Variables
3.2. The Multivariate Gaussian
3.3. Periodic Variables
3.4. The Exponential Family
3.5. Nonparametric Methods
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

 
 


 
 

 
 

🚍 출근! (8:10 - 8:25)

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 
 

 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일:
∙ 논문 review:
     논문 정리
     논문 review
     PPT만들기

∙ Deep Learning(Bishop 2024): Chapter 3 이다.
3.1. Discrete Variables
3.2. The Multivariate Gaussian
3.3. Periodic Variables
3.4. The Exponential Family
3.5. Nonparametric Methods
 
아 그리고 너무 뒷골 땡기고 목아프고 머리아파서
짜잔- 옛날에 다이소에서 산 목 마사지 기구를 들고왔는데 겨우 살만했다.
그래도 나름 효과가 준수하다?
 
아...할거 드~~~릅게 많다 진짜ㅋㅋ😱
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식):개노맛...
 
 

 
 
 
 

 
 

📖 논문발표! (14:30-18:00)

많이 배우긴 배웠는데 그만큼 힘든시간...
그래프하나하나, 식 하나하나 저자의 의도파악 및 비판적사고? 코드구현가능성 이런걸 잘 봐야한다는걸 깨달았다
 

 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동! (19:00 -)

어제 3대 400 (S:150 , B: 92.5, D:157.5) 깔쌈하게 찍어서 그런지 기분이 좋구만!!😤

400 찍었으니? 이제 3대 운동보단 좀 더 세분화해서 A,B루틴 안하는 날에는 가슴,삼두, 등,이두, 어께 위주로 해봐야겠다.
 
 

🏋🏻 운동 월간 계획:

A→(벤치,삼두)→B→(데드+등,이두)→A→(벤치,삼두)→B→
(데드+등,이두)→A→(벤치,삼두)→B→(데드+등,이두)→A→(벤치,삼두)→
B→(데드+등,이두)→A→(벤치,삼두)→B→(데드+등,이두)→A→
(벤치,삼두)→B→(데드+등,이두)→A→(벤치,삼두)→B→(데드+등,이두)→
 

🏋🏻 이번주:

(데드+등,이두)→A→(벤치,삼두)→B→(데드+등,이두)→A→(벤치,삼두)
 

🏋🏻 오늘: (데드+등,이두)

데드: 80,90,100  (7,5,3)
바벨로우: 40,50,60  (10,10,10)
와이드바벨컬: 30씩 5세트
클로즈바벨컬: 25씩 5세트

데드: 120 1회
 

 
 

📌 TODO List:

1. 논문저자에게 메일보내기!




2. 주중에 할 것: Deep Learning 2024(Bishop)
- Chapter 2: Exercise 풀기.

- Chapter 3 읽고 공부하기
3.1. Discrete Variables
3.2. The Multivariate Gaussian
3.3. Periodic Variables
3.4. The Exponential Family
3.5. Nonparametric Methods

3. Student t분포 및 가설검정 다시 공부하기.


 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.17  (0) 2024.01.17
[ETRI]2024.01.16  (0) 2024.01.16
[ETRI]2024.01.12  (2) 2024.01.12
[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.10  (4) 2024.01.10

📌 목차

1. The Rules of Probability
2. Probability Densities

3. The Gaussian Distribution
4. Transformation of Densities
5. Information Theory
6. Bayesian Probabilities

 

🧐  preview: uncertainty

ML의 적용은 "불확실성을 다루는 것"이 필수적:
uncertainty에는 다음 2가지 종류가 있음.

Epistemic uncertainty

= systematic uncertainty
인식론적 불확실성은 다음 특성을 갖는다.
  - 유한한 dataset size
  - 즉, 무한한 large data에 대해 우연적인 불확실성이 존재
  → model이 data를 충분히 해결❌

Aleotoric uncertainty

= intrinsic uncertainty
= stochastic uncertainty
= noise
이런 우연성(aleotoric)은 data에 포함된 고유 noise로 인해 발생한다.

  → noise는 세상정보의 일부만 관찰하기에 발생하는 것.
  → 이 불확실성을 줄이려면 다른 종류의 data수집이 필요.


이런 불확실성을 다루기 위한 Tool로써 "확률론"을 사용함.
이 확률론에는 단순하지만 강력한 2가지 법칙이 존재.
∙ 합의 법칙
∙ 곱의 법칙

합∙곱법칙 + 결정이론(decision theory)를 이용하면,
정보가 모호 = uncertainty가 있더라도 optimal prediction에 도달할 수 있다.


 How to deal with uncertainty?

i) 빈도주의적 관점에서의 확률 사용:
많이 해보면(= frequency↑), 확률은 특정 값에 수렴한다.
즉, 불확실성의 양적평가로써 확률을 사용할 수 있음.

ii) Bayesian 관점에서의 확률 사용.
빈도주의 확률을 포함하는 보다 일반적인 Bayesian 관점.
불확실성의 양적 평가로써의 확률 사용.
즉, 관측된 결과가 많아질수록 해당 확률에 대한 불확실성은 낮아진다.

 

 

 

 

 

 

 

 


1. The Rules of Probability

1.1  의학적 선별검사 예제

[문제]: 암 조기 발견을 위한 인구 스크리닝
[가정]: 가정컨대 인구의 1%가 실제로 암에 걸려 있다
[이상적 상황]: 암이 있는 사람에게 양성, 암이 없는 사람에게 음성.
[실제적 가정]: 암이 없는 사람에게 3%가 양성이라 나올 것 (= FP)
                      암이 있는 사람에게 10%가 음성이라 나올 것(= FN)
위 예시에 대한 그림설명.
🤔 [질문]
1) '인구를 스크리닝하면 누군가가 양성일 확률은?
2) '누군가가 양성 결과를 받았을 때, 실제로 암에 걸려 있을 확률은?

이러한 질문에 일반적인 확률 법칙, 즉 합의 법칙과 곱의 법칙을 유도해보자.

1.2  합곱의 법칙

확률 법칙 유도를 위해 아래 예제를 살펴보자.
이 예제에서는 두 변수 X와 Y가 관련되어 있습니다.
이 변수는 바뀔 수 있기에 이를 "random variable"이나 "stochastic variable"이라 한다.

[가정]: X가 i = 1, ..., L 값을 갖고 Y가 j = 1, ..., M 값을 갖을 수 있으며, X와 Y를 모두 샘플링하는 N번의 시도할 때,
∙ nij : X = xi 및 Y = yj인 경우의 시도 수
∙ ci : X가 값을 xi로 취하는 시도 수(Y가 어떤 값을 취하든지 상관없이)
∙ rj: Y가 값을 yj로 취하는 시도 수
p(X = xi, Y = yj): X가 값 xi를 취하고 Y가 값 yj를 취할 확률
         이를 X = xi 와 Y = yj의 결합확률(joint probability)라한다.
이는 셀 i,j에 속하는 점의 수를 전체 점의 수로 나눈 비율로 주어진다:
(2.1)
이때, 암시적으로 lim N → ∞ 고려한다;
비슷하게 Y의 값과는 무관하게 X가 값을 xi로 취할 확률은 p(X = xi)로 표시된다.
이는 열 i에 속하는 전체 점의 수로 주어진다:
(2.2)
이때, ∑i ci = N이므로
(2.3)

🤔 Sum Rule

따라서 확률은 요구사항에 따라 합이 1이 됩니다.
Figure 2.4의 i 열에 대한 인스턴스 수는 해당 열의 각 셀의 인스턴스 수의 합일 뿐이며,
따라서 ci = ∑j nij이므로 (2.1)과 (2.2)에 의해 아래 식이 성립한다:

(2.4)

이것이 바로 확률의 합의 법칙이다.

🤔 조건부 확률

∙ p(X = xi) : marginal probability, 이는 다른 변수들(여기서는 Y)을 주변화하거나 sum out하여 얻는다.
∙ p(Y = yj | X = xi) : 만약 X = xi인 경우만을 고려한다면, 그 중 Y = yj일 확률이다.
이를 X에 대한 Y의 조건부 확률이라 한다.

이는 열 i에 속하는 그 점 중 셀 i,j에 속하는 점의 비율을 찾아 얻을 수 있으며, 따라서 다음과 같이 주어진다:
(2.5)
양변을 j에 대해 모두 합하고, ∑j nij = c를 사용하면 아래와 같다:
(2.6)
이로써 조건부 확률이 올바르게 정규화되었음을 보여준다.

 

🤔 Product Rule

 

이제 (2.1), (2.2), (2.5)에서 아래를 유도할 수 있는데, 이를 확률의 곱의 법칙이라 한다:






🤔 Sum & Product Rule

다만, X가 xi값을 취할 확률을 p(X=xi)로 표기하기는 다소 번거롭기에
p(X)로 random variable X에 대한 분포를 나타낼 것이며,
문맥 상 명확하게 특정값 xi에 대한 분포를 p(xi)로 표기하자.

이제, 이렇게 간단한 표기법을 이용하면 합과 곱의 법칙은 아래와 같이 표현가능하다:
∙ p(X,Y): 결합확률(joint probability), 'X와 Y의 확률'.
∙ p(Y|X): 조건부 확률(conditional probability),'X가 주어진 상황에서 Y의 확률'.
∙ p(X): 주변 확률(marginal probability), 단순히 'X의 확률'

1.3  Bayes' theorem

곱의 법칙과 결합확률의 대칭성 성질을 이용해 조건부 확률로부터 아래 수식을 얻을 수 있는데, 이를 베이즈 정리(Bayes' Theorem)이라 한다.

좌변의 조건부분포 P(Y|X)와 우변의 p(X | Y)간의 관계를 나타낸다는 것에 주목할 때, 합의 법칙을 사용, 베이즈 정리의 분모를 분자에 나타난 양으로 표현할 수 있다:

즉, 베이즈 정리의 분모는 p(Y|X)에서 모든 Y의 값에 대한 조건부 확률 분포의 합이 1이 되도록 보장하기 위해 필요한 정규화 상수로 볼 수 있다.
주변 및 조건부 분포의 개념을 설명하기 위해 두 변수에 대한 결합 분포를 사용한 간단한 예제
좌상단) N = 60의 유한한 data point sample이 결합분포에서 추출
우상단) 각각의 두 값 중 하나를 가지는 data point비율 historgram.
하단) p(X)와 p(X|Y=1)의 해당 histogram 추정치.
확률의 정의에 따라 N → ∞일 때, data point 비율=
해당 확률 p(Y)

1.4 의학적 선별검사 재방문

1.1 예제에 대한 조건부 확률합과 곱의 법칙 적용

∙ 변수 C: 암의 존재 여부 (C = 0은 '암이 없음', C = 1은 '암이 있음')
이때, p(C = 0) + p(C = 1) = 1가 만족함에 유의.

[가정]: 가정컨대 인구의 1%가 실제로 암에 걸려 있다
[이상적 상황]: 암이 있는 사람에게 양성, 암이 없는 사람에게 음성.


∙ 변수 T: 검진 테스트 결과.

 T = 1: 암을 나타내는 양성 결과,
 T = 0: 암의 부재를 나타내는 음성 결과

[실제적 가정]: 암이 없는 사람에게 3%가 양성이라 나올 것 (= FP)
                      암이 있는 사람에게 10%가 음성이라 나올 것(= FN)
 따라서 우측처럼 네 가지 조건부 확률을 모두 쓸 수 있다:


다시 한 번, 이런 확률은 정규화되어 아래를 만족한다:



이에 대한 합과 곱의 확률법칙 적용

첫 번째 질문에 답하고 임의로 테스트 받은 사람이 양성 테스트 결과를 가질 전체적인 확률:


random test시, 실제 암확률=1%, test가 양성일 확률=4%이므로
이데 합의 법칙을 사용하면 
p(T = 0) = 1 387/10, 000 = 9613/10, 000 = 0.9613

가 되고, 따라서 암이 없을 확률은 대략 96%이다.


이제 test=positive일 때, TP일 확률은?
이는 테스트 결과에 조건을 걸은 상황에서 암에 걸릴 확률을 평가해야 한다.
p(T=1|C=1)~p(T=0|C=0)까지의 확률은 해당 사람이 암에 걸렸을 때 테스트 결과의 확률 분포를 제공한다.
하지만, 우리가 원하는 것은 테스트 결과에 따른 암에 걸릴 확률이므로 이런 조건부확률을 반전시키는 문제에 대해 Bayes' Theorem을 적용시켜 아래 식을 얻을 수 있다.

 

따라서 임의로 검사를 받아 양성이 나온 경우, 실제로 암에 걸린 확률은 23%이다.
합의 법칙을 이용하면, p(C = 0|T = 1) = 1 - 90/387 = 297/387 ≈ 0.77이 되어, 암이 없다는 확률은 77%가 된다.

1.5 Prior와 Posterior 확률

Bayes' Theorem의 중요해석

① prior(사전확률):
어떤 사람이 테스트를 받기 전에 해당 사람이 암에 걸릴 가능성을 묻는다면,
우리가 가지고 있는 가장 완전한 정보는 확률 p(C)를 사전확률이라 한다.
즉, 테스트 결과를 관찰하기 전에 사용할 수 있는 확률이다.

② posterior(사후확률):
이 사람의 test결과로 Bayes' Theorem으로 (p(C|T)를 계산할 수 있는데, 
이를 사후 확률(posterior probability)이라고 한다.
즉, 테스트 결과 T를 관찰한 후에 얻은 확률이다.

1.1 예제를 살펴보자.
∙ 암에 걸릴 prior = 1%. 
∙ 양성결과를 관찰 후, 암에 걸릴 posterior = 23%
상당히 높아진 것을 확인가능한데, 이는 직관적으로 예상할 수 있는 암의 높은 확률이다. 

But❗️Figure 2.3에서 보이듯, 테스트가 상당히 '정확'해 보일지라도
양성 테스트를 받은 사람은 여전히 실제로 암에 걸릴 확률이 23%이다.
이는 보편적인 시각에서 직관에 어긋나 보일 수 있다. (∵ prior가 낮기 때문)

비록 테스트가 암에 강력한 증거를 제공하더라도, Bayes' Theorem으로 사전 확률과 결합되어 올바른 사후 확률에 도달해야 한다.

1.6 독립 변수

[독립(independent)]:
두 변수의 결합 분포가 주변의 곱으로 나타날 때 독립이라 한다.

즉, 좌측 식에 대해 X와 Y는 독립이라 한다.

ex-1) 동전을 연속으로 던질 때, 
곱의 법칙에 따라 (p(Y|X) = p(Y)이므로 X의 값에 독립적인 Y의 조건부 분포를 갖는다.

ex-2) 1.1 예제에서 양성 테스트의 확률이 해당 사람이 암에 걸렸는지에 독립이라면?
(p(T|C) = p(T)가 성립
→ Bayes' Theorem에 따라 p(C|T) = p(C)
즉, 테스트 결과를 관찰해도 암의 확률이 변하지 않음을 의미. (= test결과가 쓸모 없음.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2. Probability Densities

preview

이제, discrete말고 continuous변수에 대한 확률을 알아보자.

ex) 환자에게 어떤 약물을 투여해야 할지 예측하고자 한다면?
→ 이 예측에는 불확실성이 존재, 이를 양적화하려면 확률이 필요.
이 확률개념을 직접적으로 적용하는 방법은 다루지 않았기에 "확률밀도함수"개념을 소개.

[확률 밀도 함수(probability density)]:
연속 변수 x에 대해,
p(x)δx = 확률 밀도 함수 p(x)를 x가 (x, x + δx) 구간에 속할 확률 (이때, δx → 0).
(위 그림 참고) 구간 (a, b)에 속할 확률:
확률은 비음수이며, x의 값은 어딘가에 실수 축 상에 위치해 있기 때문에,
확률 밀도 함수 p(x)는 아래 두 가지 조건을 만족해야 한다:


x가 구간 (-∞, z)에 속할 확률은
누적 분포 함수(cumulative distribution function, CDF)에 의해 정의되는데,
이는 Figure 2.6에 나와 있는 것처럼 P′(x) = p(x)를 만족하는 누적 분포 함수이다:

x1, ..., xD의 여러 연속 변수에 대해, 이들을 모두 포함하는 벡터 x로 나타낼 수 있고,
이 벡터에 대한 결합 확률 밀도 함수를 p(x) = p(x1, ..., xD)로 정의할 수 있다.
p(x)δx: x가 속한 δx에 대한 확률 (δx: 무한소 체적; infinitesimal volume)

이 다변량 확률 밀도는 아래 조건을 만족한다:
적분은 x 공간 전체에 걸쳐 이뤄짐.
cf) 이때, 적분값이 발산하면 정규화될 수 없는데, 이 정규화될 수 없는 분포를 부적절한(improper) 분포라 한다.

더 일반적으로, 이산 및 연속 변수의 조합에 대한 결합 확률 분포도 고려할 수 있다:
합과 곱의 법칙, 베이즈 정리이산∙연속 변수의 조합, 확률 밀도에도 적용가능하기에
만약 x와 y가 두 실수 변수라면, 합과 곱의 법칙은 다음과 같은 형태를 갖는다.
마찬가지로, 베이즈 정리는 다음과 같은 형태로 쓸 수 있다.
분모는 다음과 같이 주어집니다.
연속 변수에 대한 합과 곱의 법칙의 형식적인 근거는 측도론(measure theory)이라는 수학 분야를 필요로 하며, 이는 본 책의 범위를 벗어나지만, 이의 유효성은 각 실수 변수를 폭이 ∆인 구간으로 나누어 이들 간의 이산 확률 분포를 고려함으로써 비형식적으로 확인할 수 있으며 이 구간의 폭을 ∆로 한계를 취하면 합이 적분으로 변하고 원하는 결과를 얻을 수 있습니다.

 

2.1  분포 예시

[Laplace Distribution]

지수 분포의 변형으로, 정점을 위치 μ로 이동시킬 수 있다.
상수, 지수 및 라플라스 분포는 Figure 2.7에서 설명되어 있다. 

[Dirac delta function]

디랙 델타 함수는 x = μ에서만 0이 아닌 값을 가지며
p(x)적분 시, 1이 되도록 정의된다. (면적이 1인 특성)

직관에 의거, 이를 x = μ에서 무한히 좁고 무한히 높은 스파이크로 생각할 수 있으며 만약 D = {x1, ..., xN}로 주어진 x의 유한한 관측값 집합이 있다면,
델타 함수를 사용하여 다음과 같은 경험적 분포를 구성할 수 있다.
위 식에 정의된 경험적 분포는 각각 데이터 포인트를 중심으로 하는 디랙 델타 함수로 구성되며,
이를 통해 정의된 확률 밀도는 필요에 의해 적분 시 1이다.

 


2.2  기댓값과 공분산

Expectation

확률과 관련된 가장 중요한 작업 중 하나는 함수의 가중 평균을 찾는 것이다.
E[f] : 기대값(expectation), 이때, x의 다른 값들의 상대적 확률에 따라 "가중"된다.
  = 확률 분포 p(x) 하에서 함수 f(x)의 가중 평균
두 경우 모두 확률 분포나 확률 밀도로부터 뽑힌 유한 개수의 N개의 점이 주어진 경우, 
기대값은 이러한 점들을 이용한 유한 합으로 근사화될 수 있다.
이때, 위의 근사식은 N → ∞로 수렴할 때 더 정확해진다.
(즉, sample이 많아질수록 근사값이 실제 함수의 가중평균값에 더 수렴한다는 의미.)

때로는 여러 변수의 함수에 대한 기대값을 고려할 것이며, 이 경우 어떤 변수에 대한 평균을 나타내기 위해 우측처럼 하위 첨자를 사용할 수 있습니다:

이는 x의 분포에 대한 함수 f(x, y)의 평균을 나타내는데 여기서 Ex[f(x, y)]는 y의 함수이다.


또한 조건부 분포에 대한 조건부 기대값은 아래와 같으며 이 역시 y에 대한 함수이다.
이때, 함수 f(x)의 분산은 아래와 같이 정의된다:
이는 f(x)가 그 평균값 E[f(x)]주변에서 얼마나 변하는지를 측정하는 지표를 제공한다. 
제곱을 풀어서 표현하면 분산은 f(x)와 f(x)2의 기대값으로도 나타낼 수 있다.
특히 변수 x 자체의 분산을 고려하면 아래와 같다:

Covariance

두 확률 변수 x와 y에 대해, 공분산은 두 변수가 함께 얼마나 변하는지를 측정한다:


만약 x와 y가 독립이라면: Cov[x,y]=0



두 벡터 x와 y에 대해, 그들의 공분산은 다음과 같은 행렬이다:


만약 벡터 x의 구성 요소들 간의 공분산을 고려한다면,
더 간단한 표기법으로 cov[x] ≡ cov[x, x]를 사용한다.

 

 

 

 

 

 

 

 

 

 


3.  The Gaussian Distribution 🌟

prev.

연속변수분포예시들 중, 가장 중요한 분포를 꼽으라면 단연 Gaussian Distribution(= 정규분포)이다:
정규분포는 평균(μ)과 분산(σ²)에 의해 지배되는 x에 대한 확률 밀도이다.
이때, 표준편차(σ)를 이용해 precision을 구할 수 있다.
∙ precision(β) = 1/σ² = 분산의 역수
정규분포 그래프 개형.

Gaussian 분포는 최대 엔트로피의 개념중심 극한 정리의 관점에서 자연스럽게 나타난다.
Gaussian 분포는 아래조건을 만족하며, 정규화되어있음을 증명할 수 있다.
따라서 Gaussian분포 식이 유효함을 증명가능하다:

 

3.1 평균과 분산

Gaussian분포 하에서 x에 대한 함수의 기댓값:

이때, 분포의 평균값(μ)을 나타내서
매개 변수 μ를 평균이라고 한다.

위 식의 적분은 분포의 x를 1승으로 제곱한 것의 기대값이라고 알려진 제1순 적률(first-order moment)로 비슷하게 2차 moment에 대해 평가를 할 수 있다:

위 식들을 이용해 구해진 분산값은 다음과 같다:

따라서 σ2는 분산 매개 변수로 알려져 있으며,
분포의 최댓값을 최빈값이라고 한다. (Gaussian의 경우, mode=mean)

 


3.2  Likelihood 함수

[가정]: μ와  σ2이 알려지지 않은 정규분포에서 독립적으로 추출된 N개의 관측 dataset에 대해 μ와  σ값을 결정하고자 한다.
이때,
관측치 집합에서 확률 분포를 추정하는 문제는 밀도 추정(density estimation)으로 알려져 있으며 밀도 추정의 문제는 기본적으로 잘 정의되지 않는다. (∵ 관측된 유한한 Dataset에서 발생가능한 무한한 확률분포가 존재해서.)

[방법]:
사실, x1,...,xN 각각의 데이터 포인트에서 0이 아닌 모든 p(x)는 잠재적인 후보.
여기서는 가능한 후보들을 가우시안으로 제한하면, 명확하게 정의된 해결책에 도달한다.

i.i.d (independent & identically distributed)

data point가 동일분포에서 독립적으로 추출된 것.
이때, Joint probability는 두 event간의 곱으로 표현.
x가 i.i.d이고 μ와 σ2가 주어진 경우, Dataset의 확률은 우측과 같다:


Likelihood Function

Gaussian에 대한 Likelihood함수: 그림 2.9처럼만약 μ와 σ2의 함수로 볼 때의 Gaussian function

Maximum Likelihood:
이때 관찰된 Dataset으로 확률분포의 매개변수를 결정하는 방법.
Likelihood Function을 최대화하는 parameter를 찾는 방법.

Step 1. Gaussian에서 Gaussian Likelihood함수를 최대화하여 알려지지 않은 매개 변수 μ와 σ2의 값을 결정.
(실제로 Likelihood함수의 log를 최대화 하는 것이 편리.)
(실용적으로도, 큰 수의 작은 확률의 곱은 컴퓨터의 숫자 정밀도를 손상시킬 수 있기에, 이는 로그 확률의 합을 계산함으로써 해결가능.)

이에 따라서 로그 가능도 함수는 다음과 같다:



위 식을 μ에 대해 최대화하면 다음과 같은 Maximum Likelihood 해를 얻을 수 있다.
이를 sample mean, 표본평균이라 하며, 이는 관측된 값 {xn}들의 평균을 의미한다.
비슷하게 σ2에 대해 최대화 시, 분산에 대한 최대 우도해를 얻을 수 있다.

이를 표본 평균 μML에 대한 sample variance, 표본 분산이라 한다.

주의할 점은 우리가 μ와 σ2에 대해 (2.56)을 동시에 최대화하지만,
Gaussian분포는 μ에 대한 해가 σ2에 대한 해에서 독립되어 계산될 수 있기에
따라서 먼저 μML을 평가하고 이 결과를 사용하여 나중에 σML2을 평가할 수 있다.

3.3  Maximum Likelihood의 Bias

Maximum Likelihood, 본 Section에서는 ML이라 부르겠다.
ML은 딥러닝에서 널리사용되어 기계학습알고리즘의 근간이 되지만, 몇가지 제한사항이 있는데, 이를 단일 변수 가우시안을 사용한 예제를 통해 알아보자.

Maximum Likelihood의 제한사항(feat. bias)

[가정]:
μML과 σ2은 Dataset(x1, ..., xN)의 함수로 이 값들이
실제로 μ와 σ2μML σML2로 추정된 정규분포에서 i.i.d로 생성됨.

이 Dataset에 대한 μML σ2의 기대값을 고려해 보자:

[결과]:
이러한 결과는 아래 2가지를 보여준다.
μML   =  μ의 불편 추정량
σML2 ≠  σ2의 불편 추정량. (N-1 / N)
∴ ML방법은 따라서 최대 우도 방법은 모집단 추정에 완벽하지 않다.

이것은 바이어스(bias)라고 불리는 현상의 예시이다.

[Bias]:
random한 추정량이 실제값과 체계적으로 다른 것.

[Bias발생원인]:
분산데이터에 맞게 조정된 MLE기준으로 측정되기 때문
아래 그림을 통해 직관적인 이해가 가능하다.

대신 실제 평균 μ에 접근하여 아래처럼 분산을 결정하는데 사용했다 가정하자:
이렇게 되면 unbiased된 분산 추정치 값을 찾을 수 있는데, 이는 실제 분산과 같아진다:
물론 우리는 실제 평균에 접근할 수 없고 관측된 데이터 값에만 접근할 수 있기에 실제 분산과 같아지긴 어렵다.

다만, ML분산의 평균에 따라 Gaussian분포에 대한 분산의 다음 추정치의 경우, 편향이 없어진다:

다만, 신경망처럼 복잡한 모델에서는 ML의 bias보정이 쉽지 않다.
또한, MLE의 bias는 Data point N이 많아지면, 덜 중요해지진다.(lim N → ∞,  σML2 = σ2)

Gaussian의 경우, 너무 N이 적지 않은 이상 이 bias가 큰 문제가 되진 않지만
본 저서는 Deep Learning 즉, 많은 parameter를 갖는 모델에 초점을 두었기에
ML과 관련된 bias문제는 보다 심각하다.(Overfitting문제와 밀접한 관련성을 가짐.)

3.4 Linear Regression

Linear Regression에서 Error function과 Regularization에 대해 알아보자.

Regression의 목표:
input x에 대한 target t의 예측을 가능케 하는 것.       

[가정]:

training data=  input x = (x1, ..., xN) & target t = (t1, ..., tN)
x가 주어질 때, t의 불확실성을 확률분포로 나타내고자 함.
이때, data는 i.i.d
이를 위해 주어진 x에 대한 t의 값이 y(x, w) 값과 동일한 평균 μ와 분산 σ2을 갖는 Gaussian 분포를 가짐:

평균은 다항식함수 y로 주어지고, 분산은 p의 분산으로 주어진다.
train data {x, t}를 사용해 ML로 알 수 없는 매개변수 w와 σ2의 값을 결정하자. 
i.i.d이므로 ML방법을 통해 w를 결정할 수 있다.
위 도식의 분포와 i.i.d로 data추출되었다 가정시 likelihood함수:

가우시안 분포식으로 ML을 수행시 Log-Likelihood함수:
wML: 다항식 계수에 대한 MLE값으로 이 값은 w에 대해 위의 식을 최대화하여 결정되므로 다음과 같은 trick을 사용해보자.

위의 식의 우변에서 마지막 두 항을 생략할 수 있다. (∵ w에 의존하지 않기 때문)

Log-Likelihood를 양의 상수계수로 스케일링  
(∵
w에 대한 최대값의 위치를 변경하지 않으므로
1/2σ2 대신 1/2로 계수를 대체)


③ MLE → NLL 최소화 (= w 결정 시 MSE와 동일하게 됨)
∴ Gaussian Noise Distribution을 가정, MLE의 결과가 MSE로 바뀌어 버린 것!

또한, MLE를 이용해 σ2를 결정할 수도 있는데, σ2에 대한 최대화는 아래의 식과 같다:
평균을 지배하는 매개변수 벡터 wML를 먼저 결정하고, 간단한 가우시안 분포의 경우와 마찬가지로 이를 사용해 σML2을 찾을 수 있다.

w와 σ2 결정 이후, 에는 새로운  x값에 대한 예측도 가능한데,

probabilistic모델이 있기에 이런 예측은 단순한 point 추정이 아닌,

t에 대한 확률 분포로 표현되며, 최대 우도 매개변수를 우측 위쪽식에 대입하면 우측 아래식을 얻는다:

 

 

 

 

 

 

 


4.  Transformation of Densities

변수간의 비선형변환

변수의 비선형변환에 대해 확률밀도가 어떻게 변할까?
Chapter 18. Normalizing flow라는 생성모델클래스를 다룰때 중요한 역할.
x→y로 변환한 함수식
위 식에 대한 확률밀도 px(x)를 생각해보자.
또한, x=g(y)를 이용해 새로운 변수 y에 대한 밀도 py(y)를 생성하자.

매우 작은값 δx에 대해 (x, x+δx)범위안에 있는 x=g(y)에 대해 (y, y+δy)범위로 변환될 수 있다.
따라서 px(x)δx ≃ py(y)δy가 성립한다.
또한, δx→0일 때, 아래 식을 얻는다.
이때, 절댓값의 이유는 도함수가 음수되는 것을 방지. (밀도는 항상 양수이기 때문.)


즉, f라는 비선형함수, x→y로 변환된 변수의 확률밀도가 어떻게 변하는지에 대해 설명하고 있음.


위에서 설명한 밀도변환방법은 매우 강력할 수 있다.

모든 밀도 p(y)는 모든곳에서 0이아닌 고정된 밀도 q(x)를 얻을 수 있기 때문.
이때, q(x)는 x=f(y)인 비선형변수변환으로 얻어진 값.

ˆx이 극값인 f(x)함수에 대해 위 식에서의 절댓값으로 인해 f'( ˆx)=0이 되어버린다.
즉, 아래식이 성립한다.
극값에서 g'( ˆy)≠0이라면 f'(g'( ˆy)) = 0이다. (합성함수 성질.)
즉, 이는 x와 y에 대한 극값의 위치가 ˆx = g(ˆy)로 관련되어 있음을 의미.
그렇기에 서로간의 mode(극값)찾기는 서로에게 의존하게 된 것.

(다만, 아래 예제를 보면 완전히 완벽하게 서로간의 mode를 찾을 수 있는 느낌은 아닌듯.)

Ex) 아래 그림으로 설명을 추가해보자.
빨간곡선: x에 대한 정규분포 px(x)
이 분포에서 N=5만개 점 추출, histogram을 그림.
→ px(x)와 거의 일치할 것.

x→y로의 비선형변수변환을 고려해보자.
x = g(y) = ln(y)-ln(1-y)+5

이 함수의 역함수는 Sigmoid함수로 파란곡선이다.

px(g(y)): 만약 단순히 px(x)를 x의 함수로 변환한다면 얻는 분포, 곡선의 mode가 변환된 것을 확인가능.


다만, y에 대한 밀도는 좌측 식에 의해 변형되기에

좌측의 핑크 곡선(right-skewed)으로 나타난다.
이에 대한 정확한 측정은 5만개의 sample을 이용해 변환 후 histogram으로 확인가능한데, 초록색곡선과는 일치하지 않음을 알 수 있다.


4.1  다변량 분포 with Jacobian Matrix


좌측 식의 결과를 D차원 변수에 대해 정의된 밀도에 확장해보자.
즉, 단변량의 비선형변수변환→다변량에 적용


[가정]
D차원 변수 x = (x1, . . . , xD)T에 대한 밀도 p(x)를 새로운 변수 y = (y1,...,yD)T로 변환한다 가정.
이때, x와 y는 동일한 차원을 가진다고 가정.

변환된 밀도는 위 식처럼 일반화된 형태로 표현: py(y) = px(x) |det J|
(J는 쟈코비안 행렬(Jacobian matrix)이며, 그 요소들은 Jij = ∂gi/∂yj처럼 편미분으로 주어진다.)
J공간의 일부를 확장하고 다른 부분을 압축하는 것으로 직관적으로 이해가능하다. 
x 주변의 무한소 영역 ∆x가 점 x를 중심으로 y = g(x) 주변의 영역 ∆y로 변환된다 볼 수 있다.

J행렬식은 영역 ∆x의 확률 질량이 영역 ∆y의 확률 질량과 동일하다는 사실로부터 도출된다.
x의 2차원 가우시안 분포에 변수 변환을 적용, y로 변환한 그림.
이때, x→y로의 변환은 아래 식에 의해 주어진다.

x, y가 다변량분포일 때, 비선형변환을 적용하려면
Jacobian Matrix를 사용 (
py(y) = px(x) |det J|).
추가적으로 무한소영역 어쩌구 저쩌구 말이 많은데 단변량과 유사하다 보여짐.

 


해당 그래프를 보면 y의 주변분포로 떨어지는데 이를 공간상으로 확장한것이나 진배없음.
즉, 주변 "영역"으로 변환 된다는 것을 의미. (
완전히 변환되는 것을 의미하지 않음을 위 사진에서 y의 분포가 정확하게 원형이 아닌 마치 혜성처럼 주변에 분포가 존재하는 것으로 알 수 있음)

cf) J의 역할:
공간의 일부를 확장하고 다른 부분을 압축하는 것
(= 해당 변수의 변화량이 다른 변수에 얼마나 영향을 주는지를 의미;
이를 모든 영역에 대해 고려하면 전체 공간이 어떻게 변화하는지 알 수 있음)

cf) 사실 단변량일때도 미분 후 함수의 mode를 봤던 것을 보면, 편미분의 집합체를 행렬식으로 만든 Jacobian의 경우, 그냥 차원을 늘렸다라고 생각하면 편할 것 같다.

 

 

 

 

 


5. Information Theory: Dataset에 포함된 정보를 측정

5.1  Entropy

먼저 discrete random변수 x에 대해 이 변수의 특정값을 관찰 시 얻는 정보량을 알아보자.
정보량 = x값을 알았을 때의 '놀람의 정도'
만약 우리에게 매우 드물게 발생한 사건이 발생했다고 알려진다면, 매우 가능성이 높은 어떤 사건이 발생했다고 알려진 것보다 더 많은 정보를 받게 될 것이며, 그 사건이 반드시 일어날 것이라고 알고 있다면 우리는 어떠한 정보도 받지 않을 것이기 때문.
정보내용의 측정은 확률 분포 p(x)에 의존, 따라서 h(x)를 찾는것이 목표.
h(x)
:
p(x)의 단조 함수인 정보 내용을 나타내는 양

🤔 h(x, y) = h(x) + h(y)인 이유

h(·)의 형태: 두 독립사건 x,y에 대해 아래 성질을 만족.
함께 관찰함으로써 얻는 정보 = 각각 따로 관찰한 정보의 합
또한, p(x, y) = p(x)p(y)를 만족한다.

[정리]: 두 독립사건 x,y에 대해 아래가 성립.
  ∙ h(x,y) = h(x) + h(y)
  ∙ p(x,y) = p(x)p(y)
h p의 정보량이기에 위 식이 만족하려면 hlog로 주어져야한다.
h(x) = -log2p(x)로 주어진다. (이때, - 는 정보가 양수or0이 되도록 보장.)
낮은확률의 사건 x = 높은정보이며, 이때 log 밑은 임의로 선택가능.

정보론: log2가 관례적,
이는 곧 h(x)의 단위가 bit('binary digits')임을 의미.


🤔 H[x] : x의 entropy (평균정보량 즉, p(x)의 기댓값)

이제 발신자가 랜덤 변수 값을 수신자에게 전송한다 가정하자.
이 과정에서 전송되는 평균 정보의 양 = 분포 p(x)에 대한 기대값.
이를 H[x]로 나타내며, 이 중요한 양을 random 변수 x의 "entropy"라 한다.
H[x]는 x의 entropy로 평균정보량 즉, p(x)의 기댓값을 의미
H[x]는 random variable x의 Entropy
= state x의 평균정보량
= p(x)의 기댓값
을 의미.


cf) limε→0(ε ln ε) = 0이므로,  p(x) = 0인 어떤 x의 값에 대해 p(x)lnp(x) = 0 이 성립한다.

Example)

8가지 가능한 상태를 갖는 random변수 x에 대해 이 변수의 entropy가 아래와 같을 때,
(이때, 각 상태는 동일한 확률로 발생.)

이제 8개의 상태를 갖는 변수: {a, b, c, d, e, f, g, h}에 대해
각 확률이 (1/2, 1/4, ,1/8, 1/16, 1/64, 1/64, 1/64, 1/64)로 주어진다 하자.
이 경우의 entropy는 다음과 같이 주어진다:


비균일분포는 균일분포보다 더 작은 entropy를 갖는 것을 볼 수 있다.
(물리의 평형열역학의 맥락에서 entropy는에 대한 무질서도 관점이기 때문.)
먼저, 변수상태를 수신자에게 전송하는 예제에 대해 생각해보자. 전처럼 3-bits숫자를 사용해 이를 할 수 있다.

불균일한 분포를 활용해 더 가능성이 높은 사건에 대해 더 짧은 코드를 사용하고,
그에 따른 적은 가능성의 사건에 대해 더 긴 코드를 사용해 평균 코드 길이를 줄이려고 할 때,
(약간 JPEG느낌인듯?)

이를 위해 {a, b, c, d, e, f, g, h} 상태를 다음과 같은 코드 문자열 집합을 사용하여 나타낼 수 있다:
0, 10, 110, 1110, 111100, 111101, 111110, 111111.
이에 대해 전송해야 하는 코드의 평균 길이는 아래와 같은데, 이는 random 변수의 entropy와 동일하다.
더 짧은 코드 문자열을 사용할 수 없는 이유: 이런 문자열의 연결을 해당 구성 요소로 명확히 구분할 수 있어야 하기 때문.

ex) 11001110은 c, a, d 상태 순열로 고유하게 해석됨. entropy와 가장 짧은 인코딩 길이 간의 관계는 일반적인 것.

noiseless coding theorem(Shannon, 1948)은 entropy가 random변수의 상태를 전송하는 데 필요한 비트 수의 하한값임을 명시.


cf) 본 책의 다른 곳의 아이디어와 더 편리하게 연결되도록 entropy정의 시 자연로그 ln을 사용. 
이 경우, 엔트로피는 비트 대신 네이트(nats, '자연로그') 단위로 측정.
이 두 단위는 단순히 ln 2의 배수로 차이가 있습니다.

5.2 물리학관점 예시

ex) entropy에 대한 추가적인 시각확보를 위한 예시
i번째 바구니마다 서로 같은 ni개의 물체가 각각 들어있는 서로다른 총 N개의 바구니에 대해
"물체를 바구니에 할당하는 방법의 경우의 수를 고려해보자."

N개의 물체를 바구니에 할당하는 방법의 총 수는 N!이다.
즉, i번째 바구니에는 ni!의 방법으로 물체를 재배치할 수 있다.
(바구니 내의 구별X)
∴ N개의 물체를 바구니에 할당하는 방법의 총 수: 이를 multiplicity라 부른다.
이때, Entropy(H)는 다양성(W)의 로그에 1/N(정규화 상수)를 곱한것으로 정의된다:
이제 N → ∞의 한계를 고려하며 ni/N의 분수를 고정시키고 스털링 근사를 적용해 보면,
이며, 이를 엔트로피 방정식에 대입하면 아래와 같다.
N이 무한대로 접근함에 따라 lnN항이 우세해지고, 한계값은 -∞이 된다.
따라서 물체의 수가 증가함
= 물체에 대한 무질서도 증가
= 물체에 대한 구체적인 배열에 대한 정보 부족이 증가.

이때, pi = limN→∞(ni/N)는 i번째 바구니에 물체가 할당될 확률이다.

[Macro와 Micro] - in physics
물체를 바구니에 할당하는 특정 방법은 미크로상태(micro state)라고 하며,
ni/N의 비율을 통해 표현된 전체적인 배치는 매크로상태(macro state)라고 한다.
매크로상태에서의 미크로상태의 수를 나타내는 다양성 W은 macro의 가중치(weight)로도 알려져 있다.

바구니를 이산형 확률 변수 X의 상태 xi로 해석해보면, p(X = xi) = pi이다.
이때, 확률 변수 X의 entropy는 아래와 같다.
두 확률 분포를 나타내는 30개의 바구니에 대한 히스토그램으로 엔트로피 H의 더 높은 값을 보여주는데, 가장 큰 엔트로피는 균일한 분포에서 나타날 것이며, 이는 H=−ln⁡(1/30)=3.40H=−ln(1/30)=3.40 이 될 것이다.

위 그림에서 알 수 있듯, 몇 개의 값 주변에 날카롭게 피크한 분포 p(xi)는 상대적으로 낮은 엔트로피를 가질 것이고,
여러 값에 고르게 퍼져 있는 분포는 높은 엔트로피를 가질 것이다.

0 ≤ pi ≤ 1이므로 entropy는 음이 아니며, pi = 1이고 p
j≠i = 0인 경우에 최소값, 0이 된다.

[Lagrange승수로 최대화: 이산형 분포]
Maximum Entropy는 확률에 대한 정규화 제약을 강제하기 위해 Lagrange승수를 사용하여 H를 최대화함으로써 찾을 수 있는데, 이는 아래와 같이 최대화한다.
이때, 모든 p(xi)는 동일하고 p(xi) = 1/M이며, 여기서 M은 상태 xi의 총 수이고 entropy의 해당 값은 H = ln M이다.
이 결과는 추후 짧게 논의되는 Jensen 부등식에서도 유도될 수 있다.
도함수가 0이 되는 지점이 실제로 최대값인지 확인하기 위해 엔트로피의 이계도함수를 구하면,
여기서 Iij는 항등 행렬의 원소로 이 값들이 모두 음수이므로
도함수가 0이 되는 지점은 실제로도 최댓값임을 알 수 있다.

5.3  Differential Entropy

entropy의 정의를 점점 확장하는 방향으로 나아가고 있다.
정의를 확장시켜 continuous변수 x에 대한 확률분포 p(x)를 포함시켜보자.

먼저 x를 폭이 ∆인 구간으로 나눈 후, p(x)가 연속적일 때 평균값정리에 따라 
각 구간 i xi (i+1)∆ 범위에서
 xi가 존재해야 한다.
이제 연속변수 x를 양자화하여 x가 i번째 구간에 속할 때 어떤 값 x를 값 xi에 할당한다 하자.
이를 통해 값 xi를 관측할 확률은 p(xi)∆이므로 entropy는 아래와 같은 이산형 분포를 얻는다:
여기서 ∑ip(xi)∆ = 1는 평균값정리와 확률밀도함수의 AUC=1에서 도출된 것이다.
위 식의 두 번째 항인 - ln ∆를 생략 (∵이 항은 p(x)와 독립적)
이제 lim∆ → 0을 고려해 보면 위 식의 첫항은 이 lim에서 p(x) ln p(x)의 적분에 근접한다.
이 때 우측 항에 있는 양 미분 엔트로피(Differential Entropy)라 한다.

🤔 이산∙연속형 entropy차이가 발생이유?

이산형과 연속형 엔트로피 형태의 차이는 ln ∆라는 양에 의해 발생
이는 lim∆ → 0에서 발산하는데, 이는 연속 변수를 매우 정밀하게 지정하는 데는 많은 bit가 필요함을 대변한다.
여러 연속 변수에 대한 밀도를 정의하는 경우, 이를 벡터 x로 표기하면 미분 엔트로피는 아래와 같다.


5.4 Maximum Entropy

[Lagrange승수로 최대화: 연속형 분포]
최대 엔트로피가 명확하게 정의되기 위해서는 p(x)의 1,2번째 모멘트, 즉 평균과 분산값을 제한하고 정규화 제약을 유지해야 하므로
아래 3가지 제약조건으로 Differential Entropy를 최대화한다.

Lagrange 승수를 사용해 아래 함수를 p(x)에 대해 제한된 최대화를 수행:
이제 변분법으로 이 함수의 도함수를 0으로 설정하면:
(변분법: 범함수의 최대/최소를 다루는 방법.)
이 때 Lagrange 승수는 이 결과를 세 제약 조건 방정식에 역대입하여 찾을 수 있으며, 최종 결과는 아래와 같다:
즉, 미분 엔트로피를 최대화하는 연속확률변수분포는 Guassian Distribution임을 알 수 있다.
만약 가우시안의 미분 엔트로피를 평가하면 위와 같은데, 이는 분포 폭이 증가하면,  entropy 또한 증가함을 볼 수 있따.
또한, 이는 이산 entropy와 달리 미분 entropy값이 음수일 수 있음을 보여준다.
(∵ σ2 < 1/(2πe) 일 때, H[x] < 0 )


5.5 KL Divergence🌟

앞서 말한 entropy의 핵심 개념들을 기계 학습과 연관지어보자!
모르는 분포 p(x)근사분포 q(x)에 대해 q(x)를 사용하여 x의 값을 수신자에게 전송하기 위한 코딩 체계를 구축한다 가정하자.
q(x)를 사용하면 실제 분포 p(x) 대신 x의 값을 지정하는 데 필요한 평균 추가 정보량(단위: nats)은 아래와 같다:

[KL-Divergence]:
분포 p(x)와 q(x) 간의 상대 엔트로피(relative entropy)
(단, 양방향적인 양이 아니기에, KL(p∥q) ≠ KL(q∥p)임에 주의)
KL(p∥q) ≥ 0 를 만족한다. (단, 등호는 p(x) = q(x)일 때 성립.)



[KL(p∥q) ≥ 0 증명]

① 볼록함수(convex)의 개념:
아래 그림처럼 함수 f(x)는 모든 chord가 함수 위에 있거나 일치할 때, 이를 convex라 한다.

(a,b)사이 임의의 x값을 λa + (1 − λ)b 형태로 사용하자.
chord상의 해당 지점은 λf(a) + (1 − λ)f(b)로 주어지며
함수의 해당 값은 f(λa + (1 − λ)b)이다.

이는 f(λa + (1 − λ)b) ≤ λf(a) + (1 − λ)f(b)임을 의미하므로
함수의 이계도함수가 항상 양수임을 의미한다.


[Jensen's Inequality]

만약 λi 0이고 ∑iλi=1 일 때, 모든 점 {xi}에 대해 convex f(x)는
 증명에 의해  아래를 부등식을 만족함을 수학적 귀납법(induction)으로 증명가능하다:
이때, 위의 결과를 Jensen's inequality, Jensen부등식이라 한다.


cf) [Jensen's inequality의 확률분포]


∙ λi
는 {xi}를 값으로 갖는 
이산 변수 x에 대한 확률 분포:
∙ 연속 변수 x에 대한 확률분포:

Jensen's inequality의 연속확률분포에 KL-Divergence를 적용하면 아래의 같다:
(이때, -lnx는 convex이므로 정규화 조건 ∫q(x) dx = 1를 함께 사용.)
(또한, 등호는 x에 대해 q(x)=p(x)일때만 성립.)


KL-Divergence는 두 분포 p(x)와 q(x)간의 비유사성의 측정


Data compression과 Density Estimation(알려지지 않은 확률 분포를 모델링하는 문제) 간에 밀접한 관련이 있음을 알 수 있는데, 가장 효율적인 압축은 실제 분포를 알 때 얻을 수 있다.

실제 분포와 다른 분포를 사용하면 반드시 덜 효율적인 코딩이 필수적이 되어비려
평균적으로 추가 전송해야 할 정보는 최소한 두 분포 간의 KL-Divergence와 동일하다. 

[Negative Log-Likelihood]

6.4.2 Binary classification절에서 Softmax와 NLL의 관계에 대해 상세히 다룸.

Data:
알려지지 않은 분포 p(x)에서 생성
목표: 이 분포를 모델링

방법: 몇 개의 매개변수 θ로 제어되는 근사 분포 q(x|θ)를 사용.
(이때, θ는 p(x)와 q(x|θ) 간의 KL-Divergence을 θ에 대해 최소화하여 결정.)
(∵  p(x)를 모르기에 직접적으로 이 작업을 수행할 수는 없기 때문.)


ex) p(x)에서 뽑은 한정된 양의 training point xn을 관찰
이후 p(x)에 대한 기대값은 xn을 사용한 유한한 합으로 근사될 수 있음:
🔍 위 식 우측을 살펴보자.
1번 항: trainset을 사용해 평가된 q(x|θ)의 분포에 대한 Negative Log-Likelihood함수.(보통 이를 NLLLoss라 함)
2번 항: θ에 독립적.
∴ 이 KL-Divergence를 최소화하는 것 = NLL 최대화

cf) Log-Likelihood



[cross-entropy와 NLL-Loss의 관계]

target변수 t가 있을 때, (이때 t = 1은 클래스 C1을 나타내고 t = 0은 클래스 C2를 나타내는 이진 분류이다.)
canonical link함수(자연 파라미터의 함수의 분포 평균의 함수:
가우시안족에 대한 canonical response function identify 함수,
베르누이 분포에 대한 canonical response function은 logistic함수
)
정의에 따라 sigmoid activation function을 갖는 단일출력신경망을 고려할 때, 0 ≤ y(x, w) ≤ 1 이다.
이때, y(x, w)를 조건부 확률 p(C1|x)로 해석할 수 있으며, p(C2|x) = 1 - y(x, w)가 성립한다.
input에 대한 조건부 분포는 아래와 같은 Bernoulli Distribution이다.

식 1.

독립적으로 관찰한 trainset에 대해 오차함수는 NLL로 주어진 Cross-Entropy 형태이다:
이때, yn은 y(xn, w)이다.

(Simard 2003)는 Classification에서 MSE대신 Cross-Entropy Loss가 빠른 훈련과 향상된 일반화를 이끌어낸다 하였다.


식 1.의 Noise 분산 σ2는 불연속적이기에 (∵ target은 label이 지정되어 불변값)
그러나 모델은 t가 잘못된 값으로 뒤집힌 확률 ε를 도입, 라벨링 오류를 허용하도록 쉽게 확장될 수 있다(Opper and Winther, 2000).


K 개의 별도 이진 분류를 수행해야 하는 경우 각각에 logistic sigmoid activation function이 있는 K 개의 출력을 가진 신경망에 대해 각 출력에는 k = 1, ..., K에 해당하는 이진클래스 라벨 tk가 있다하자.
클래스 라벨이 입력 벡터가 주어진 경우, 독립가정시, 대상의 조건부 분포:


해당 Likelihood함수에 Negative Log를 씌우면 아래와 같다.

 

 이때, ynk는 yk(xn,w)로
즉, 특정 output에 대한 오차함수의 pre-activation에 대한 도함수는
Regression처럼 좌측 형태를 갖기 때문이다.

 


5.6 Conditional Entropy🌟

이제 변수 x와 y의 두 집합 간의 결합 분포 p(x,y)를 고려해보자. (두 변수는 )
만약 x의 값을 알고 있다면, 해당하는 y값을 지정하기 위한 추가정보량은 -lnp(y|x)이다.
따라서 y지정 시, 필요한 평균추가정보는 아래와 같다:
이때, 주어진 y주어진 x의 조건부 엔트로피(conditional entropy)라 한다.
곱의 법칙을 사용하면 조건부 entropy는 아래관계를 만족한다:

H[x, y] : p(x,y)의 미분 entropy   ,   H[x] : 주변 분포 p(x)의 미분 entropy.

∴ x와 y를 설명하는 데 필요한 정보 = 주어진 조건에서 y를 지정하는 데 필요한 추가 정보 + x만을 설명하는 데 필요한 정보

 

5.7 Mutual Information

독립변수 x, y에 대한 결합분포(joint distribution) p(x, y)는 주변분포의 곱으로 나누어진다: p(x,y) = p(x)p(y)

종속변수 x, y에 대해 결합분포와 주변분포의 곱 사이의 KL-Divergence를 고려하면, 
근사적으로 독립인지 or 얼마나 가까운지를 평가할 수 있다:

이때, 이를 변수 x와 y 간의 상호 정보(mutual information)라 한다.

KL-Divergence의 성질에 의해, x와 y가 독립인 경우에만 I[x,y]≥0이 성립. (단, 등호는 독립일 때 성립.)
확률의 합과 곱의 법칙을 사용하면 상호정보가 조건부 entropy와 관련있음을 알 수 있다.

즉, 상호정보새로운 관측 y로 인한 주어진 x에 대한 불확실성감소를 의미 (반대도 성립.)

🤔 Bayesian 관점:
p(x) : x에 대한 prior 분포
p(x|y) : 새로운 데이터 y를 관찰한 후의 posterior

 

 

 

 

 


6. Bayesian Probabilities

Bayesian 확률: 불확실성의 양적표현

∙ [고전적(= 빈도론적) 확률]:
휜 동전의 경우 동전이 오목한 면으로 떨어질 확률처럼
무작위, 반복 가능한 사건의 빈도에 대한 확률 개념.

∙ [Bayesian 확률]:
불확실성의 양적표현, prior가 자연스레 발생하여 포함된다.
"불확실성 표현을 위해 확률을 사용하지 않으면, 이성적이고 일관된 추론을 할 수 없다."

ex) 불확실성 = 동전의 오목한 면이 앞면 or 뒷면인지 파악하는 것
예를 들어, 동전이 뒷면으로 더 많이 떨어지는 횟수가 많다면?
동전이 오목한 면이 뒷면일 가능성이 더 높다는 증거를 제시하고,
실제로 이런 직관은 맞기에 이를 확률규칙으로 사용해 양적으로 표현가능하다

Bayes정리에 의해
동전 던지기로 제공된 데이터를 통합하여 오목한 면이 앞면일 사전 확률을 사후 확률로 변환할 수 있다.
과정이 반복가능하기에, 새로운 동전 던지기에서의 데이터를 통합하는 데에는 이전의 사후 확률이 사전으로 사용된다.

 

6.1 Model parameters

[Machine Learning 예제]: sine Regression예제.

D : train dataset
(이때, Linear Regression맥락에서 parameter는 maximum likelihood를 사용해 선택가능)
(이때, w는 우도 함수 p(D|w)를 최대화하는 값을 설정하며, 이는 관측된 dataset을 최대화하는 w값을 선택한다.)

PRML에서 Likelihood함수의 Negative log를 Error function이라 한다.
(즉, NLL-Loss)
NLL은 단조감소함수이기에 Likelihood 최대화 = 오류최소화 이다.

따라서 wML라는 특정선택된 매개변수 값이 생성되며,
이 값은 새로운 데이터에 대한 예측을 수행하는 데 사용된다.

다양한 traindataset 선택의(ex. data point 수가 다른)경우,
wML에 대해 다른 해가 생성된다.

Bayesian관점에서 model parameter에 대해 불확실성설명을 위해 확률론 사용이 가능하다.

data관측 전, w에 대해 우리의 가정을 prior p(w)의 형태로 나타낼 수 있다. 
관측된 D의 영향은 likelihood함수 p(D|w)를 통해 표현되며,
Bayes' theorem은 아래와 같다:
p(D|w) : Likelihood ; 주어진 parameter에서 관측된 data가 발생할 확률
p(w) : prior ; 선험적 지식이나 믿음.
p(w|D)
 : posterior ; 제공되는 update된 parameter확률분포
p(D) : Marginal Likelihood ; p(D|w)∙p(w)의 적분값 ; 모델전체의 적합도.

이를 통해 train data에 대한 우리의 불확실성을 반영
이를 기반으로 new data에 대한 예측 수행이 가능하다.

이렇게 Bayesian접근은 model parameter에 대한 불확실성을 고려한 확률적 추론을 제거, 불확실성 update를 통한 model개선이 가능하다.

posterior likelihood × prior
에서 분모는 정규화 상수이기에,
좌측의 posterior는 유효확률밀도이기에 1로 적분되는 것이 보장된다.

사실, 식 p(w|D)
양쪽을 w에 대해 적분함으로써 Bayes' Theorem의 분모를 사전 분포와 likelihood 함수의 관점에서 표현할 수 있다:


[Bayesian vs Frequentist paradigms]:
모두에서 p(D|w)는 중요한 역할이지만 두 접근방식은 근본적으로 다르다.

 ∙ Frequentist
   w'estimator'의 일종에 의해 결정되는 고정된 매개변수로 간주

 ∙ Bayesian
  하나의 dataset D만 존재하며 (즉, 실제로 관측된 데이터),
  매개변수에 대한 불확실성은 w에 대한 확률 분포를 통해 표현됩니다.

6.2 Regularization

이 Bayesian 관점을 사용하여 위의 sine regression의 overfitting감소를 위해 사용된 정규화 기술에 대해 알아보자.

[MAP: Most A Posteriori]

w에 대한 우도 함수를 최대화하여 모델 매개변수를 선택하는 대신, p(w|D)을 최대화할 수 있다.
이를 최대 사후 확률 추정치(MAP)라 한다.

또한, 사후확률의 NLL최소화가 가능한데,
p(w|D)의 양쪽에 음의 로그를 취하면 다음과 같다:
위 식의 오른쪽 식에 대해 알아보자.
1항: 일반적인 log likelihood.
3항: w에 의존하지 않으므로 생략가능.
2항: w의 함수 형태를 가지며, 이는 1항에 추가되어 정규화형태로 인식된다.

이를 더 명확하게 만들기 위해 w의 각 요소에 대해 동일한 분산 s2를 갖는 독립적인 평균이 0인 가우시안 분포의 곱으로 사전 분포 p(w)를 선택한다고 가정하자.


만약 log likelihood가 (2.66)에서으로 주어진 것처럼 Linear Regression모델이 특별한 경우,

posterior 최대화는 아래 함수로 최소화 가능하다. (MSE형태임을 알 수 있다.)

 


6.3 Bayesian Machine Learning

다만, Bayes정리의 단순적용은 machine learning에 진정한 Bayesian 처리가 이루어지지 않는다

[Bayes의 정리를 사용하는 전통적인 방법]:
종종 w에 대한 단일 지점 추정치를 찾는 결과로 이어져서 w의 불확실성을 무시한다.

앞선 시나리오를 고려해 보자. 
train dataset D, input 값 x에 대해 target변수 t를 예측할 때,
(즉, Bayesian 용어로는 x와 관찰된 데이터 D 모두를 고려한 t의 분포를 이해하려는 것)
확률의 합과 곱의 법칙의 적용으로 우리는 아래 식을 얻는다:
p(t | x, D) : train data x와 D가 주어질 때의 t의 posterior. (이 분포를 얻긴 어려움.)
(∵ w의 모든 가능한 값들에 대한 적분이 필요하며, 이는 많은 경우에 계산적으로 매우 비용이 들거나 해석적으로 어렵기 때문)

→ 일반적으로 사용되는 방법 중 하나는 w에 대한 불확실성을 고려하는 것으로
이를 위해 Bayesian 모델 평균화 또는 Bayesian 신경망과 같은 기술을 사용한다.
이는 w의 모든 가능한 값에 대한 사후 확률 분포 p(w|D)로 가중 평균을 취하여 얻는다.
Bayesian 방법을 특징 짓는 주요 차이점매개변수 공간에서의 이 적분입니다.


[Frequentist를 사용하는 전통적인 방법]:
정규화된 MSE같은 Loss function을 최적화해 얻은 parameter지점의 추정치를 사용


[Maximum Likelihood와 bayesian machine learning]

데이터의 확률이 가장 높은 모델을 선택 → 더 복잡한 모델을 선호 → Overfitting

완전한 Bayesian 처리는 가능한 모든 모델에 대한 평균을 계산, 각 모델의 기여치는 해당 posterior에 따라 가중된다.
또한 이 확률은 중간복잡성의 모델에 대해 일반적으로 가장 높다 (= Overfitting 덜 발생)
(낮은 차수의 다항식과 같은)매우 간단한 모델: 데이터를 잘 표현할 수 없어 낮은 확률을 가짐.
(매우 높은 차수의 다항식과 같은)매우 복잡한 모델 역시 Bayesian 매개변수의 통합에서 자동으로 복잡성에 대한 패널티를 부여받아 낮은 확률을 가짐.

다만, Bayesian방식에는 주요 단점이 있는데, parameter space를 통합해야한다는 점.
현대 Deep Learning은 수십억개의 parameter로 인해 일반적
∴ 대규모 신경망에 Maximum Likelihood기법 적용 > 훨씬 작은 모델에 Bayesian 처리를 적용 
또한 이 경우에는 일반적으로 정규화 중 하나 이상이 적용되어야 함.

 

 

 

 

 

 

 

🧐 정리

Uncertainty: 양적표현으로 다루기 위해 "확률론"등장

 ∙ Epistemic(인식론적)

= systematic
→ 유한한 dataset에 적절

 ∙ Aleotoric(우연성)

= intrinsic = stochastic = noise
→ 세상 일부만 관찰하기에 noise가 발생
→ 다른종류의 data수집으로 noise 완화가능


 ∙ 합과 곱의 법칙

합∙곱법칙 + 결정이론(decision theory)를 이용하면,
모호한 정보( = uncertainty)더라도 optimal prediction에 도달가능

p(X,Y) : X와 Y의 결합확률(joint probability)

p(Y|X) : X에 대한 Y의 조건부확률 (X만 고려시, Y일 확률)
p(X) : 주변확률(marginal probability), 단순 X확률
p(X,Y) = p(X)p(Y) : 독립




Expectation & Covariance

 ∙ Expectation: 확률분포 하 함수의 가중평균

E[f] : 다른 x값들이 상대적 확률에 따라 "가중"되는데, 이는 곧 "확률분포 p(x)하에서 함수 f(x)의 가중평균"을 의미.

이산변수의 기댓값의 경우, sample이 많아질수록 실제함수의 가중평균에 더욱 수렴하게 된다.
cf) 분산: Var[f] = E[f(x)2] - E[f(x)]2. (feat. 제평평제)


 ∙ Covariance: 두 변수가 함께 얼마나 변하는지를 측정.


만약 x와 y가 독립이라면: Cov[x,y]=0


두 벡터 x와 y에 대해, 그들의 공분산은 다음과 같은 행렬이다:

만약 벡터 x의 구성 요소들 간의 공분산을 고려한다면,
더 간단한 표기법으로 cov[x] ≡ cov[x, x]를 사용한다.




Gaussian Distribution

 ∙ Gaussian 분포 (최대entropy와 CLT)

Maximum Entropy중심 극한 정리(CLT)의 관점에서 자연스레 나타난다.
cf) 최댓값=최빈값이며, precision = 1/σ2

 ∙ Likelihood 함수


우측 그래프는 Gaussian의 Likelihood함수:
회색점: Gaussian분포에서 i.i.d인 Dataset
파란점: 각 dataset에 대한 관측값, p(x)
Likelihood함수: p(x)와 PDF의 곱으로 "특정 data관찰 확률을 의미"

 

 ∙ Maximum Likelihood 

이때 관찰된 Dataset으로 Likelihood Function을 최대화하는 확률분포의 매개변수를 결정하는 방법.

좌측 값은 평균과 분산에 대해 위 likelihood함수를 최대화 시,
각각에 대한 Maximum Likelihood 해를 얻을 수 있다.

Maximum Likelihood의 제한사항이 존재한다:
(MLE는 모집단 추정에 완벽하지 않은데, 이는 bias로 인해 발생한다)
μML   =  μ의 불편 추정량  ,  σML2 ≠  σ2의 불편 추정량. (N-1 / N)

[Bias발생원인]:
분산 데이터에 맞게 조정된 MLE기준으로 측정되기 때문.
아래 그림은 MLE로 Gaussian의 평균과 분산을 결정할 때,
bias가 어떻게 발생하는지에 대한 직관적인 이해가 가능하다.

빨간곡선: Gaussian분포
파란곡선: 2개의 녹색 data point로 이뤄진 3개의 dataset에 ML로 얻은 Gaussian분포.


위 그림을 통해 다음 사실을 알 수 있다.
3개의 dataset을 평균화하면 평균을 동일하다.
하지만, 분산은 실제 평균과 비교❌  , 표본평균과 비교 → 다소 과소평가(N-1/N)된다.

다만, 신경망처럼 복잡한 모델에서는 ML의 bias보정이 쉽지 않다.
또한, MLE의 bias는 Data point N이 많아지면, 덜 중요해지진다.(lim N → ∞)

Gaussian의 경우, 너무 N이 적지 않은 이상 이 bias가 큰 문제가 되진 않지만
본 저서는 Deep Learning 즉, 많은 parameter를 갖는 모델에 초점을 두었기에
ML과 관련된 bias문제는 보다 심각하다.(Overfitting문제와 밀접한 관련성을 가짐.)

변수간 비선형변환: 

 ∙ Density 변환방법:

모든 밀도 p(y)는 모든곳에서 0이아닌 고정된 밀도 q(x)를 얻을 수 있기 때문.
이때, q(x)는 x=f(y)인 비선형변수변환으로 얻어진 값.

빨간곡선
: x에 대한 정규분포 p(x)
이 분포에서 N=5만개 점 추출, histogram을 그림.
→ p(x)와 거의 일치할 것.


x→y로의 비선형변수변환을 고려해보면:
x = g(y) = ln(y)-ln(1-y)+5
이 함수의 역함수는 Sigmoid함수로 파란곡선이다.

px(g(y)): 만약 단순히 px(x)를 x의 함수로 변환한다면 얻는 분포, 곡선의 mode가 변환된 것을 확인가능.
y에 대한 밀도는 좌측 식에 의해 변형되기에

좌측의 핑크 곡선(right-skewed)으로 나타난다.

이 식을 다변량에 대해 적용하려면 Jacobian Matrix를 이용하면 된다.

x, y가 다변량분포일 때, 비선형변환을 적용하려면Jacobian Matrix를 사용 (py(y) = px(x) |det J|).


해당 그래프를 보면 y의 주변분포로 떨어지는데 이를 공간상으로 확장한 것.
즉, "주변 영역"으로 변환 된다는 것을 의미.


cf) J의 역할: 
공간의 일부를 확장하고 다른 부분을 압축하는 것
(= 해당 변수의 변화량이 다른 변수에 얼마나 영향을 주는지를 의미;
이를 모든 영역에 대해 고려하면 전체 공간이 어떻게 변화하는지 알 수 있음)



정보이론: Entropy

 ∙ Entropy: 특정값 관찰 시 얻는 정보량

물리학에서의 entropy보단, 정보이론 중심의 "정보량"기준으로 살펴보자.

정보내용의 측정은 확률 분포 p(x)에 의존, 따라서 h(x)를 찾는것이 목표.
h(x)
: 
p(x)의 단조 함수인 정보 내용을 나타내는 양

[정리]: 두 독립사건 x,y에 대해 아래가 성립.
  ∙ h(x,y) = h(x) + h(y)
  ∙ p(x,y) = p(x)p(y)
h p의 정보량이기에 위 식이 만족하려면 h log로 주어진다.
 h(x) = -log₂p(x)로 주어진다.

정보론: log가 관례적, 이는 곧 h(x)의 단위가 bit('binary digits')임을 의미.

이때, entropy를 좀 더 정보론적으로 접근해보자.
먼저 log 사용이유이다. 
정보 전달 시, encoding을 하여 압축을 시켜야 하는데, log는 자릿수를 쉽게 표현가능하다.
ex) log100 = 2, log1000 = 3

즉, Entropy는 random변수의 상태를 전송 시,
전송 가능한 가장 짧은, encoding길이 최솟값을 의미한다.

추가적으로 전송내용은 필히 손실이 발생하는데, 우리가 갖는 data는 이산형이기 때문이다.
즉, 매우 정밀하게 지정하려면 많은 bit가 필요함을 의미한다.


 ∙ H[x] : x의 entropy (= p(x)의 기댓값 = 평균정보량)

H[x]는 x의 entropy로 평균정보량 즉, p(x)의 기댓값을 의미

cf) H[x, y] = H[y|x] + H[x]를 만족.
즉, x와 y를 설명하는데 필요한 정보 = 주어진 조건에서 y를 지정하는데 필요한 추가정보 + x만을 설명하는데 필요한 정보.


∙ KL Divergence : 두 분포간의 비유사도 측정.

모르는 분포 p(x)와 근사분포 q(x)에 대해 q(x)를 이용해 x값을 수신자에게 전송한다.
이때, q(x)는 실제분포 p(x)대신 x값 지정 시 필요한 "평균추가정보량"을 의미한다.
(즉, 추가로 전송해야할 정보 = 두 분포간의 KL-Divergence)
쉽게 설명하자면, Cross Entropy - Entropy가 바로 KL Divergence식이다.

cf) Deep Learning에서 Loss function으로 KL Divergence를 사용해야하는 것 아닌가요?
왜 KL Divergence가 아닌 Cross Entropy를 사용하는지 의문이 들 수 있다.
KL-Divergence는 cross entropy에서 최소량인 entropy를 빼니까 이 오차값,
즉, cross entropy가 optimal(= entropy)해지도록 평균추가정보량을 줄이는 방향으로 학습하는 것이 맞다는 생각이 들 것이다.

하지만 오차함수 미분 시, Entropy가 상수가 되어버리기 때문에 
결국 KL-Divergence = Cross Entropy가 되어버린다.
결국 Cross Entropy를 편의상 사용하지만, 실상은 KL-Divergence를 사용하는 것과 마찬가지라 생각하면 된다.

Bayes' Theorem: 불확실성의 양적표현

 ∙ Frequentist 확률:

휜 동전의 경우 동전이 오목한 면으로 떨어질 확률처럼 무작위, 반복 가능한 사건의 빈도에 대한 확률.
[p(D|w)에 대한 접근방식]:
w'estimator'의 일종에 의해 결정되는고정된 매개변수로 간주
[기계학습에 대한 적용방식]: 정규화된 MSE같은 Loss function을 최적화해 얻은 parameter지점의 추정치를 사용


 ∙ Bayesian 확률

[p(D|w)에 대한 접근방식]: 하나의 dataset D만 존재하며 (즉, 실제로 관측된 데이터), 매개변수에 대한 불확실성은 w에 대한 확률 분포를 통해 표현
[기계학습에 대한 적용방식]: 데이터의 확률이 가장 높은 모델을 선택 → 더 복잡한 모델을 선호 → Overfitting
그렇기에 Bayesian기반 기계학습 모델은 적은 dataset일수록 더 좋은 성능을 낸다.


불확실성의 양적표현, prior가 자연스레 발생하여 포함된다.
"불확실성 표현을 위해 확률을 사용하지 않으면, 이성적이고 일관된 추론을 할 수 없다."

ex) 불확실성 = 동전의 오목한 면이 어느면인지 파악하는 것
예를 들어, 동전이 뒷면으로 더 많이 떨어지는 횟수가 많다면?
동전이 오목한 면이 뒷면일 가능성이 더 높다는 증거를 제시하고,
실제로 이런 직관은 맞기에 이를 확률규칙으로 사용해 양적으로 표현가능하다
 Bayes정리에 의해 동전 던지기로 제공된 데이터를 통합하여 오목한 면이 앞면일 사전 확률을 사후 확률로 변환할 수 있다.
과정이 반복가능하기에, 새로운 동전 던지기에서의 데이터를 통합하는 데에는 이전의 사후 확률이 사전으로 사용된다.


D
: train dataset

p(D|w) : Likelihood ; 주어진 parameter에서 관측된 data가 발생할 확률
p(w) : prior ; 선험적 지식이나 믿음.
p(w|D) : posterior ; 제공되는 update된 parameter확률분포
p(D) : Marginal Likelihood ; p(D|w)∙p(w)의 적분값 ; 모델전체의 적합도.



이를 통해 train data에 대한 우리의 불확실성을 반영이를 기반으로 new data에 대한 예측 수행이 가능하다.
이렇게 Bayesian접근은 model parameter에 대한 불확실성을 고려한 확률적 추론을 제거, 불확실성 update를 통한 model개선이 가능하다.

🏢 ETRI (2024.01.12)

📌 01.11-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ 논문 정리
∙ 논문 review
∙ PPT만들기


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
∙ Exercises
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

 
 



 
 

 
 

🚍 출근! (8:10 - 8:25)

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 

 


 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일:
∙ 논문 review:

     논문 정리
     논문 review
     PPT만들기
 Deep Learning(Bishop 2024): Chapter 2 이다.

    2.1  The Rule of Probability

∙ 2.2  Probability Densities
 이제...단원 2개 남았다...

문제(Exercise)도 풀어야되고 정리 및 요약도 해야되지만...
 

아 그리고 너무 뒷골 땡기고 목아프고 머리아파서

짜잔- 옛날에 다이소에서 산 목 마사지 기구를 들고왔는데 겨우 살만했다.

그래도 나름 효과가 준수하다?

 

아...할거 드~~~릅게 많다 진짜ㅋㅋ😱
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식): 난 이제 돼~~지다 🐷ㅋㅋㅋㅋ 많이도 먹는다 진짜ㅋㅋ

레몬치킨(🍋🍗) 나왔는데 맛있었다! (2번 배식받아버렸...다 ㅋㅋㅋㅋ)
 

식후에 블루베리↗️스무디↗️ 덜달게 한잔 묵었다

3500원으로 아담한? 가격(사실 요즘 카페나 학교카페도 4000원 넘어가서 되게 착한 가격같았다.)


 
 
 
 

 
 

📖 공부! (13:30-18:00)

Deep Learning by Christopher Bishop 2024.

∙ 2.3  The Gaussian Distribution

∙ 2.6. Bayesian Probabilites

 

어, 맞아맞아. 놀랍지만 Chapter 2 다 끝낸건 사실이야~

어 그래 형이야~ 😤

 


 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동!안할래 (19:00 -)

오늘은 5X5 Strength A루틴 하는날.
카페인 시원하게 마시고 바로 Squat→Bench Press→Barbell Row하러 갔다.

드디어 주말이 왔다.

그냥 좀 푹 자고 싶다. 알람 울리는거 세상에서 제일 싫다ㅠ.ㅠ


 
 
 

 
 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ 논문 정리
∙ 논문 review
∙ PPT만들기


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
AAAI에 넣을 내용으로 정리 및 Exercise 풀기
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

 
 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.16  (0) 2024.01.16
[ETRI]2024.01.15  (0) 2024.01.15
[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.09  (2) 2024.01.09

No Free Lunch from Deep Learning이라는 말이 있을만큼 No Free Lunch라는 말은 유명한데...

이를 정면으로 반박하고 Free Lunch라고 표현한걸 봐서는 매우 자신이 있다는 말로 해석해서

이 논문을 첫번째 논문 review발표 논문으로 선택하였다


[사전조사 배경지식 정리]

1. 용어정리

DAOD: Domain Adaptation Object Detection

leverage: 영향, 활용

Cross Domain:
2개간의 Domain간의 연결 or 관련성, 결합 등을 의미

Domain Discrepancy: domain간의 distribution이 불일치하는 것, 이로인해 일반화가 쉽지 않음.

Domain Shift: Cross Domain에서 발생하는 문제점.
Imbalance와 Consistency없는 Domain shift의 경우, Tgt이 적으면 DA가 어려움.
이를 해결하기 위해 여러가지 방법들을 다양한 level에서 활용.
ex) img-level, instance-level, pixel-level, category-level, ...

Domain Invariance: Domain불변성을 결과적으로 학습하는것이 목표인 논문들이 많음.

Domain Alignment: 두 Domain에 대해 일치(정렬)시키는 것.
이때, 보통 두 Domain간의 feature distribution alignment를 통해 이루어진다.

Unsupervised Learning Object Detection: Label 혹은 Annotation이 없는 Target Domain문제에 대한 학습
Semi-supervised Learning Object Detection: Label을 teacher모델이 생성(이를 pseudo labeling이라 함), 이를 이용.

 

 

2. 발전현황:

[2018]:

∙ Supervised Learning기반. Domain Shift에 초점, Domain discrepancy(불일치)감소에 초점.

특히 DANN 이후로 Adversarial Training방식이 주를 이룸.

 

[2020]:

중간에 도메인을 하나 더 넣거나 등의 Tgt Imbalance 문제해결방법.

Domain의 Class Imbalance문제 완화를 위한 방법

특히 이때부터 Unsupervised DAOD가 각광받음❗️

Domain-Invariance 학습을 위해 다양한 시도들이 이루어짐.

SSD를 이용, 단지 하나의 Tgt Sample만 필요한 one-shot기법도 나옴.

 

[2021]:

Domin불변성 + 식별력 유지 둘을 동시에 잡기위해 Faster R-CNN에 다른 기능들을 추가시킴.

또한, 저차원의 Src, Tgt feature Domain을 맞추는 것에 대한 중대성강조로 저/고차원 특징을 결합하는 등의 시도도 발생.

semi-supervised learning에서 pseudo-label noise극복을 하려함.

Src, Tgt모두 없이도 DAOD를 가능하게하려고 여러방법들을 도입한 논문발표(이번 review논문)

또한, Data Augmentation방법들도 여럿 도입됨.

 

[2022]:

 Domain Adversarial Training, Data Augmentation은 약간 국룰화?처럼 되는 뉘앙스

∙ pseudo label을 다루기 위해 여러 시도들 발생

 

 


 

 

 

Abstract

🧐 저자의 제안:

UnLabeled Src Data →Tgt에 최적화가 주목
이를 위해 저자는 SFOD프레임워크를 제안

[SFOD] (Source Data-Free Domain Adaptive Object Detection):
Src Data없이도 DA탐지를 가능하게 하며,
이는 Noise있는 Label로 학습하는 것으로 모델링한다.

일반적으로 Src에서 pretrained모델을 활용, Tgt의 가짜라벨생성을 한다.
하지만 Tgt Domain라벨이 없으면, 이런 가짜라벨생성에 대한 평가가 어렵다.

→ SED(Self-Entropy Descent)라는 평가지표 도입!
SED: 가짜라벨에 대해 적절한 신뢰임계값결정을 위해 도입한 metric



다만, 완전히 깨끗한 라벨을 얻는 것은 여전히 어려움을 겪고 있는데, 실험결과 생성된 노이즈가 있는 라벨에서 FN이 지배적임을 발견.
개선을 위해 FN mining이 도움이 되며, Mosaic와 같은 데이터 증강을 통해 FN시뮬레이션을 용이하게 한다.


🧐 개인 생각 정리:

핵심:

Src Domain에서 pretrained만 사용, supervision signal을 제공
→ 즉, Tgt으로 pseudo labeling되어 noise가 발생할 수 밖에 없는 구조.


문제점 1:
Src, Tgt에 대한 label이 모두 없기에 pseudo label에 대한 평가가 어려움
SED라는 평가지표 도입❗️

문제점 2:
다만, clean label얻기는 어려움---noise에서 FN, FP가 지배적
 FN Mining, Data Augmentation(e.g. Mosaic)으로 이를 개선❗️

 


Introduction & Main contribution

제안된 SFOD pipeline, 주어지는 supervision신호는 Src Domain의 adapt를 위해 pre-trained model에만 제공됨.


Object Detection의 발전은 단지 수동라벨링된 Train data에 의존해서 향상되어 왔다.
이는 새로운 환경이나 Data 분포가 다른 경우(e.g. 물체외관, 배경타입, 날씨 등 다양한 요인) 일반화가 쉽지 않다는 한계점이 존재.


그렇다면, 어떻게 pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain...?
이 UDA를 위해 많은 방법들이 고안됨
 ∙ Domain-invariant features를 alignment 하는 방식
 ∙ Domain distribution 근접화 방식
 ∙ 두 domain간 similarity를 측정해 pseudo labeling 하는 방식
이는 두 Domain이 관련되었지만 다름을 의미
→ 따라서 두 Domain간 접근이 자유로울 필요성이 존재하지만 challegeable함.


이미 Classification에서는 Src-data free한 방식이 좋았으나 Detection에서는 여전히 시도되지 않았었음.
본 논문에서는 전술한 문제 해결을 위해 SFOD(Source data-Free domain adaptive Object Detection)라는 간단하지만 효과적인 접근방법을 소개함.

SFOD : pre-trained Src모델을 활용, DA과정을 분리.

🔑  Idea :

신뢰가능한 pseudo label을 활용해 Tgt모델을 self-learning방법으로 training.

❓ 자연스러운 의문점:

이제 남은 자연스러운 질문은 2가지이다.
 ∙ 어떻게 pseudo label의 품질을 평가할 것인가
 ∙ 어떻게 Noisy Label로 학습할 것인가?

 


Classification의 경우, 고정된 sample수였지만
Detection의 경우, Negative sample이 무수하기에 매우 도전적인 과업이다.
(많은 positive가 box로 둘러쌓여있어서 negative와 섞여있기 때문.)


그렇기에 신뢰가능한 소수의 sample로는 좋은성능을 달성할 수 없음
(
One-Shot Unsupervised Domain Adaptation for Object Detection (IEEE 2020))에 정면으로 반박하는 느낌.

Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것이다.
물론, Detection에서는 FP,FN같은 noisy labels는 무조건 존재하고, Tgt모델은 여전히 "집단지성의 원칙"을 따라 최적화 가능하다.
("집단지성의 원칙": 여러 모델이나 다수의 예측을 종합하거나, 다수의 샘플의 정보를 활용하여 모델을 최적화할 수 있다는 것을 의미)

하지만 supervision metric이 없어 적절한 신뢰도임계값 찾기란 어렵다.
noisy label로 신뢰도임계값이 너무 높거나 낮을 수 있기때문에 적절한 신뢰도임계값 탐색이 필요하다.

 

SED :Search Confidence threshold

이를 위해 등장한 Self-Entropy Descent는 전술한 신뢰도임계값을 찾기위해 제안된다.

Self-Entropy

예측 불확실성은 Self-Entropy로 계산된다.
이 문장은 다음과 같이 해석될 수 있다: "자가 엔트로피가 낮을수록 더 예측이 확실하다."
신뢰도 임계값을 탐색함과 동시에, 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고
그 후 훈련 이후 데이터셋의 Self-Entropy를 평가한다.

"라벨이 더 지저분할수록 더욱 라벨을 맞추기가 어려워진다." (사실 당연한 소리다.)
∴ 신뢰도임계값↓  평균 Self-Entropy↓ → 첫 local-minimum에 도달 시, 
이를 신뢰가능한 pseudo label생성을 위한 적절한 신뢰도임계값으로 선택.

이 솔루션의 타당성을 입증하기 위해 장난감 실험을 설계.
구체적으로, 생성된 pseudo label은 FP와 FN.
실험 분석을 통해 FN이 작고 가려진 객체와 같은 noisy label에서 주를 이루는 것을 발견.

 

FN Mining & Mosaic :FN의 영향 완화

또한 Mosaic(Bochkovskiy, Wang, and Liao 2020)와 같은 데이터 증강을 통해
거짓 음성을 시뮬레이션할 수 있도록 이 솔루션을 FN시뮬레이션으로 완화.


🧐 Main Contribution

i) Src data-free인 UDA-OD의 첫번째 시도.
ii) Src data-free인 UDA를 noisy label학습을 통해 혁신적으로 모델링, 해결.
iii) Src data사용을 안하고도 매우 좋은 성능, 다른 Src data based를 능가.


🧐 개인 생각 정리:

핵심: SFOD,  SED,  FN Mining

SFOD 배경: pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain
SFOD 역할:
pre-trained Src모델을 활용, DA과정을 분리.

 


SED배경:
적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering해야하고,
이를 위해 신뢰도 임계값 평가를 위한 supervision metric이 필요.
SED역할:
예측 불확실성을 Self-Entropy로 계산, 신뢰도임계값 탐색 및 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고 훈련 이후 데이터셋의 Self-Entropy를 평가



FN Mining배경:
생성된 pseudo label은 FP와 FN이 noisy label이 주를 이룸.
FN Mining역할:
Mosaic와 같은 데이터 증강으로 FN완화.


[요약]:
Step 1. pseudo Label 생성
신뢰도가 높은 소수의 sample(= Tgt)으로는 좋은 성능을 달성할 수 없다. 
Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것

이를 위해 적절한 supervision metric이 필요 → SED: Self-Entropy Descent❗️
이렇게 평가된 예측불확실성으로 신뢰도임계값 탐색 → pseudo label 생성에 도입.

Labeled Src Data로 Faster R-CNN을 pre-train시킨 이후
이를 Unlabeled Tgt Data에 fine-tuning시켜 pseudo label생성에 동시에 도입.

Step 2. 생성된 pseudo Label의 FN완화
생성된 pseudo label은 FP, FN등이 noisy label이 주를 이룬다.
이를 해결하기위해 FN Mining, Mosaic Augmentation을 이용.

 

 


 

Related Works

∙ DAOD

DA-Faster(Chen et al. 2018)이라는 논문이 UDA Object Detection 진보를 이끌어낸 효시가 되는 논문.

생성된 노이즈가 있는 라벨에서 FN이 지배적임을 발견.

그 이후 초록색표시한 방법들이 많이 나왔음:
 - Labeled Src Data
 - Unlabeled Tgt Data 
2개가 필히 필요함.

우리는 Src data 없어도 되서 실제적용에 실용적.


∙ DA without Src Data


Classification을 위한 Src data-free DA방법은 이미 제안되었음(Li et al. 2020; Kim, hong, and Cho 2020)
Detection분야에 대한 적용은 여전히 공백인 상황.




∙ Learning with Noisy Labels


noisy label학습을 위해 많은 방법들이 classification에서 이루어져 왔었다.
∙ 초기: instance-독립의 Noise model 사용: 각 클래스가 다른 클래스와 혼동되는 문제 발생
∙ 최근: Label noise 예측에 초점

하지만 위 연구들의 noisy label 설정방식은 이상적:
noisy label과 true label을 수동 설정.

추가적으로 noisy label학습을 위해 여러 방식들이 제시됨:
object경계지정이 명확하지 않은경우, 문제해결이 불가능

 

 

 

 

 


Source free Domain Adaptive Object Detection


[UDA-OD가정]
Src와 Tgt이 training과정에서 자유롭게 사용되어 Src-Tgt, 두 Domain간의 차이(discrepancy)를 최소화 하는것.


[Src data-free UDA의 목표]
신경망 최적화를 위해 Dt만 사용하는 것
이때, 유일한 supervision 신호Ds data를 직접사용하는 대신,
Ds에서 pre-trained model θs에서 제공된다.


∙ Pseudo Lables Optimization via SED

🤔 A toy example: How to evaluate the quality of pseudo labels?

Toy example이란?
MNIST를 2개의 범주(positive, negative)로 구분; 이를 MNIST-2라 지칭함.
이를 기반으로 다양한 Dataset을 구축.
ex) positive sample을 negative에 서로다른비율로 섞거나
negative sample을 positive에 서로다른비율로 섞어 이를 LeNet에 훈련.
즉, 혼합 비율 = 노이즈 정도.

훈련 후 전체 데이터셋의 예측 불확실성을 잡기 위해 'mean self-entropy'개념을 도입:

nc : class 수
pc(xti): class c의 예측확률



위 그림에서 보이듯, noise정도는 mean self-entropy와 양의 상관관계를 가짐은 자명하다.

∙ 위 그림) 더 noisy label → label 맞추기가 어려움 = mean self-entropy⇧
 이상적 상황) 가장 깨끗한 라벨 할당 → 가장 낮은 mean self-entropy

즉, 두 상황을 고려해보면?
❗️mean self-entropy가 감소→ local-minima에 도달 = reliable한 label할당.


🤔 SED: how to generate reliable pseudo labels in Object Detection

Detection에서 Negative samples는 진~~짜 많다.(진짜 강조 많이한 말.)
앞단의 설명처럼, training을 위해 P/N sample분리가 필요
이는 저점~고점까지 적절한 confidence threshold를 찾아야함을 의미.

[SED: Self Entropy Descent]

❗️mean self-entropy가 감소해 첫 local-minimum에 도달할 때, 훈련을 멈춘다.
( 가장 낮은 entropy값=가장 깨끗한 = 신뢰할만한 라벨할당 가능.)

Dt Ds에서 pre-train된 model θs는 자유롭게 활용가능하므로 
pseudo label y(xt)와 그에 해당하는 신뢰도 p(xt)는 아래와 같이 유도된다.

즉, pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.

h: pseudo label생성을 위한 confidence threshold
F: Faster R-CNN Detector: 
Faster R-CNN:
  - Anchor기반의 효시
  - Detector가 feature extractor로써의 encoder를 갖고있음.
  - encoder에는 RPN, RoI classifier를 갖고있음.


confidence p(xt): classification분기에서 softmax output.
pseudo label y(xt): foreground클래스 확률의 argmax값.

if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 



📌 Loss function: pseudo label을 사용해 tgt data train

각각 region proposal loss, region classification loss, Bbox regression loss를 의미.


Region Proposal Bbox Regression: 
Src domain에서 pretrained model training으로 예측된 Bbox를 ground_truth로 바로 사용가능.
Detection오류는 Classification오류보다 훨씬 약하다 (Borji and Iranmanesh 2019).


이 Fine-Tuning작업 이후, pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가한다.

SED전략: 저점~고점까지 탐색, Self-Entropy가 첫 극솟값만나면 멈춤

 


∙ False Negative Simulation

적절한 confidence threshold값을 SED를 통해서 찾았지만, 여전히 문제점 존재: pseudo labels는 여전히 noisy
Detection에서의 noisy label: FP, FN

여러 공개된 데이터셋에서 각 confidence구간에서 TP와 FP를 계산.
아래 그림처럼 FP는 비교적 작은 비율만을 차지합니다.

놀랍게도, 저자가 신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다.
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!



그렇기에 본 논문에서는 Label Denoising을 위한 FN mining에 초점을 맞춘다.
아래 시각화된 자료에서 알 수 있듯, 대부분의 FN은 작고 가려진 객체로
TN과 섞여서 positive로 다시 mining하기가 어렵다.
Domain discrepancy가 심화되는 이유.


Solution) TP를 이용한 FN Simulation: Data Augmentation
detect된 positive를 어렵게 만듬 → detect하기 힘든 작고 가려지는 객체를 모방, 이를 simulate함.
추가적으로 FN의 악영향을 억제

이를 위해 저자는 Mosaic Augmentation(YOLOv4)을 FN Simulation에 선택.
TP를 활용해 작거나 가려진 객체생성 시, TN에 영향을 주지 않기 때문.

CutMix(2019)를 개선한 방식, 4개의 train_img를 혼합, 일반상식내의 객체도 감지가능.


[Mosaic의 Main 2-step]
Step 1: Random Scaling
  - Tgt Domain에서 detect된 단순객체를 사용→다양한 크기의 어려운 객체 모방

Step 2: Random Cutting
  - 일부 구조만 보이는 객체를 어느수준까지 모방가능


Mosaic data: {(x ̃, y ̃)}는 아래 식에 따라
Tgt domain data {(xA,yA),(xB,yB),(xC,yC),(xD,yD)}로 구성될 수 있다:

train_img: H×W.
(u, v): 2차원 이동.
{MA,MB,MC,MD} ∈ {0,1}s(Ws(H): binary mask그룹
s(·)와 λ: Random Scaling & Cutting 인자.

일부 Mosaic img. 더 효과적인 거짓 음성 마이닝 또는 거짓 음성 시뮬레이션 방법이 더 많은 성능 향상을 가져올 수 있다고 저자는 생각.



FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는과정을 위의 SFOD의 전체 파이프라인에서 볼 수 있다.


🧐 개인 생각 정리:

핵심:
∙ How to evaluate the quality of pseudo labels?

noisy label = label맞추기 어려움 = mean self-entropy⇧
→ 깨끗한(= 신뢰할만한) 라벨을 얻으려면 entropy값이 낮아야함.
즉, mean self entropy-noise degree그래프상에서 극솟값에 도달하면 라벨할당!


∙ How to generatethe quality of pseudo labels?
training을 위해 P/N sample분리가 필요한데, 이를 위해 적절한 threshold값이 필요.

pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.
if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 

pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가


∙ False Negatives Simulation
신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다. (작거나 가려지는 물체때문!)
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!
 Label Denoising을 위한 FN mining에 초점

FN Mining은 FN Simulation으로 이루어지며, FN Simulation에 Mosaic방식을 선택
FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는다.


요약: 아무래도 과정이 제법 복잡하여 한번 요약을 해야할 것 같았다.

1. 기존과 달리 Src data-free를 위해서는 Labeled Src Data로 Faster R-CNN을 pre-trained시킴.

2. Src의 data를 직접 사용하는 대신, Src로 pre-train된 model에서 유일한 supervision signal을 학습 시 제공
(for. 신경망 최적화를 위해 Tgt Domain만 사용.)

3. FN Simulation과 SED를 같이 사용해 pseudo labeling 생성을 위한 적절한 confidence threshold, h를 찾는다.
(SED: training을 위해 P/N분리가 필요하고, 이를 위해서는 신뢰할만한 pseudo label이 생성되어야하고,
이를 위해 신뢰할만한confidence threshold가 필요 = 낮은 entropy,
따라서 mean self-entropy를 이용, 저점~고점을 탐색하다
Self-Entropy가 첫 극솟값을 만나면 멈춘다. 이 전략을 SED라 부른다.
즉, confidence threshold로 생성된 pseudo label들을 update된 pretrained모델로
Tgt Dataset의 mean self-entropy를 평가한다: hopt = argmin H(Dt)이다.)


(FN Simulation: SED로 찾은 pseudo label은 여전히 noisy(FP, FN)label인데, 특히나 positive가 작거나 가려지는 물체로 인해 FN으로 작용하는 현상이 발생하여 이를 방지하기 위함이다.)


4. h와 pre-trained model parameter를 이용해 Faster R-CNN은 아래 두 값을 출력한다.
cf) pseudo label y(x)= foreground클래스확률의 argmax값
cf) confidence p(x)= classification분기에서의 softmax값

 

 

 


Experiments

∙ Experimental Setup

   ‣ Datasets

5개의 open dataset이 사용됨:


   ‣ Implementation Details

공정한 비교를 위해 [Xu 2020]과 동일한 실험적 setting.
[img pixel]: train-test모두 600 pixel로 resize
 [batch_size]: 1
 [Model]:
       - (pre-trained): VGG16 with ImageNet & Src. Domain data 여기서만 사용.
       - (backbone): Faster R-CNN

         - (Detector): SGD(lr=0.001)


∙ Comaparison Results

그림 7.mean self-entropy와 해당하는 AP, mAP의 곡선은 4가지 Adaptation task에서 confidence threshold에 따라 변하는데, SED를 통해 최적의 mAP값에 근접할 수 있다.

[그림 7]:
저자의 실험은 4가지 Adaptation task에 대해 진행된다.
위 그림은 다양한 confidence threshold값 하에
Detection precision과 mean self-entropy의 곡선을 보여준다.

 "Source only"와 "Oracle"은 각각 Labeled Src, Tgt Domain trainset으로 훈련되었지만,
Target Domain validation set에서 test되었다.


    ‣ Adaptation to A New Sense

Real World는 다양한 현상이 존재: 각도, 해상도, 품질 및 유형 등
→ Domain Shift 유발가능; 본실험에서는 두 real dataset 간의 새로운 Detection task Adaptation을 고려.
  ∙ [Src Domain]: KITTI
  ∙ [Tgt Domain]: Cityscapes 

[Model 비교군]:
SFOD(본논문), DA-Faster, SW-Faster, Noise Labeling ,
DA-Detection, AT-Faster

[표 1]: 유일한 공통 객체: 자동차 카테고리, 이에 대한 AP를 비교진행.
only SED:  labeled Tgt validation set에서 찾은 이상적인 confidence threshold값이 없음에도 AP가 매우 이상적인 값에 근접.
자동차 Detection Acc측면에서도 많은 기존방법보다 좋음.
SED+Mosaic: AP: 43.6% →44.6% (DA-Detection을 0.7%만큼 넘어섬)
FN Simulation이 FN noise label에 의한 악영향 완화.


   ‣ Adaptation from Synthetic to Real Images

자율 주행을 위한 annotating train data부족으로 synthetic dataset을 사용.
  ∙[Src Domain]: Sim10k
  ∙[Tgt Domain]: Cityscapes 

여기선 Sim10k와 Cityscapes 양쪽에서 유일한 객체 카테고리인 주석이 달린 자동차의 성능만을 평가.

[표 2]:  DA-Faster, Noise Labeling, AT-Faster과 비교,
SFOD방법이 우수, 기존을 능가.
(다만, 저자방식은 기존의 Src based보다 어려운 도전이 될 것.)


   ‣ Adaptation to Large-Scale Dataset

∙[smaller Src Domain]: Cityscapes 
∙[large unlabeled Tgt Domain]:  BDD100k

Cityscapes: only daytime
BDD100k: 3개의 시간대의 labeled daytime data를 tgt domain으로 함.

두 데이터셋에서 7개 카테고리에 대한 detection결과의 mAP를 평가

[표 3]: 
Baseline과 Oracle에서 보이듯, Src과 Tgt간의 Domain divergence해결은 매우 복잡.

특히 더 많은 Src Data가 필요하지 않은 경우, DA-Faste, SW-Faster, CR-DA-DET 같은
소수의 접근 방식만이 이 적응 작업에 도전한다는 점에서 더욱 어렵다.

Domain Gap이 넓음에도 도메인 갭의 이렇게 넓은 범위에도 불구하고, 그림 7(그래프 그림)에서 볼 수 있듯,
SOTA들이 다양한 confidence threshold에서 개선되는데, 특히
 SED 또는 SED+Mosaic을 사용할 때 CR-DA-DET의 26.9%에서 mAP를 27.6% 및 29.0%로 개선할 수 있다.


   ‣ Adaptation from Normal to Foggy Weather

Real-World적용에서 Detector는 다양한 날씨조건에서 사용될 수 있지만, 일일히 날씨조건에 맞는 많은 양의 data를 수집하고 label로 지정하는 것은 매우 어려운 일이다.
  ∙[Src Domain]: Cityscapes
  ∙[Tgt Domain]: Foggy Cityscapes

[표 4]:
SFOD와 다른 UDA-OD방법들(DA-Faster, SW-Faster, DA-Detection, CR-DA-DET, AT-Faster) 간의 비교
기준인(Src only) 22.3%의 mAP에 비해, label noise로 훈련된 SED+Mosaic는 pseudo label이더라도 33.5%로 향상될 수 있다.

더 나아가 DA-Detection과 같은 Defogging방법을 사용으로 Tgt Domain img품질개선 후,
여기서 SFOD성능열 연구했는데, 아래 표에서 볼 수 있듯, 안개 제거 후에 SFOD 약 3%정도 성능향상이 이뤄졌다..
즉, 안개가 가짜 라벨의 라벨 노이즈를 악화시켜 감지 성능에 영향을 미침을 알 수 있다.

Cityscapes dataset에서 Foggy Cityscapes로의 Adaptation결과

   ‣ Discussion and Annalysis

SFOD에서는 Src Domain의 pre-trained model로 얻은 Tgt Domain pseudo label로
training과정 중 noisy label로 인해 방해받을 수 있는데, 아래 그림을 보자.

SED를 직접 사용해 pseudo label 생성을 위한 confidence threshold를 찾거나
추가적으로 FN-Simulation에 결합 시, noisy label로 인한 악효과억제로 더 많은 객체탐지가 가능하다.


🧐 개인 생각 정리:

핵심:
5개의 Dataset이 활용됨:
KITTI, Sim10k, Cityscapes, BDD100k, Foggy Cityscapes

        [Src → Tgt]
 ①       KITTI     → Cityscapes : for 새로운 Domain 
 ②     Sim10k   → Cityscapes: for train data부족상황 가정.
 ③ Cityscapes→ BDD10k: for data양의 차이(매우적음 to 매우많음)
 ④ Cityscapes→ FoggyCityscapes: for noisy Tgt Domain


Conclusion

UDA-OD를 위한 새로운 학습 패러다임인 SFOD를 제안.
이는 Src Data를 직접사용하는 대신,
Src Domain에서 사전훈련된 모델만을 활용,
Supervision signal을 제공
하는 것이 핵심이다.

이는 noise가 있는 Label로 학습하는 관점에서 해결가능하다 보는데, 많은 Src data기반방법을 넘기도 하지만
Noise Label(FP,FN)을 완전히 제거하는 것에 대해 Unsupervised 방식이 매우 어렵다는점을 인정해야한다.

 



[논문 정리]

Abstract:

핵심:

Src Domain에서 pretrained만 사용, supervision signal을 제공
→ 즉, Tgt으로 pseudo labeling되어 noise가 발생할 수 밖에 없는 구조.


문제점 1:
Src, Tgt에 대한 label이 모두 없기에 pseudo label에 대한 평가가 어려움
 SED라는 평가지표 도입❗️

문제점 2:
다만, clean label얻기는 어려움---noise에서 FN, FP가 지배적
 FN Mining, Data Augmentation(e.g. Mosaic)으로 이를 개선❗️


Introduction

핵심: SFOD,  SED,  FN Mining

SFOD 배경: pre-trained model을 supervision 없이 label-rich Src Domain → unlabeled Tgt Domain
SFOD 역할: 
pre-trained Src모델을 활용, DA과정을 분리.

 


SED배경: 
적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering해야하고,
이를 위해 신뢰도 임계값 평가를 위한 supervision metric이 필요.
SED역할: 
예측 불확실성을 Self-Entropy로 계산, 신뢰도임계값 탐색 및 생성된 가상 라벨을 사용해
pre-trained model을 fine-tuning하고 훈련 이후 데이터셋의 Self-Entropy를 평가



FN Mining배경: 
생성된 pseudo label은 FP와 FN이 noisy label이 주를 이룸.
FN Mining역할: 
Mosaic와 같은 데이터 증강으로 FN완화.


[요약]:
Step 1. pseudo Label 생성
신뢰도가 높은 소수의 sample(= Tgt)으로는 좋은 성능을 달성할 수 없다. 
Sol) 적절한 신뢰도임계값으로 Bbox를 직접 P/N을 부분 filtering하는 것

이를 위해 적절한 supervision metric이 필요 → SED: Self-Entropy Descent❗️
이렇게 평가된 예측불확실성으로 신뢰도임계값 탐색 → pseudo label 생성에 도입.

Labeled Src Data로 Faster R-CNN을 pre-train시킨 이후
이를 Unlabeled Tgt Data에 fine-tuning시켜 pseudo label생성에 동시에 도입.

Step 2. 생성된 pseudo Label의 FN완화
생성된 pseudo label은 FP, FN등이 noisy label이 주를 이룬다.
이를 해결하기위해 FN Mining, Mosaic Augmentation을 이용.

 


Source Free Domain Adaptive Object Detection

핵심:
∙ How to evaluate the quality of pseudo labels?

noisy label = label맞추기 어려움 = mean self-entropy⇧
→ 깨끗한(= 신뢰할만한) 라벨을 얻으려면 entropy값이 낮아야함.
 즉, mean self entropy-noise degree그래프상에서 극솟값에 도달하면 라벨할당!


∙ How to generatethe quality of pseudo labels?
training을 위해 P/N sample분리가 필요한데, 이를 위해 적절한 threshold값이 필요.

pretrained model parameter와 confidence threshold를 기반으로 하는 Faster R-CNN을 이용해 input x에 대해 pseudo label y와 신뢰도값 p를 출력으로 함을 의미.
if p(x_t) > h:    
    box = y(x_t)  # 일치하는 박스에 클래스라벨 max_score 할당
else:
    box = background

 

pre-trained과 confidence threshold로 생성된 pseudo label들은
update된 모델 θt
를 사용해 Tgt Dataset의 평균 self-entropy, H(Dt)로 평가


∙ False Negatives Simulation
신뢰 임계값을 거의 0에 가깝게 설정해도 반이상의 positive sample은 box하기를 어려워한다. (작거나 가려지는 물체때문!)
결과적으로 training 중 positive sample이 FN으로 작용하게 된다!
  Label Denoising을 위한 FN mining에 초점

FN Mining은 FN Simulation으로 이루어지며, FN Simulation에 Mosaic방식을 선택
FN Simulation이 SED와 함께 pseudo labeling생성을 위한 적절한 신뢰 임계값을 찾는다.


요약: 아무래도 과정이 제법 복잡하여 한번 요약을 해야할 것 같았다.

1. 기존과 달리 Src data-free를 위해서는 Labeled Src Data로 Faster R-CNN을 pre-trained시킴.

2. Src의 data를 직접 사용하는 대신, Src로 pre-train된 model에서 유일한 supervision signal을 학습 시 제공
(for. 신경망 최적화를 위해 Tgt Domain만 사용.)

3. FN Simulation과 SED를 같이 사용해 pseudo labeling 생성을 위한 적절한 confidence threshold, h를 찾는다.
(SED: training을 위해 P/N분리가 필요하고, 이를 위해서는 신뢰할만한 pseudo label이 생성되어야하고,
이를 위해 신뢰할만한confidence threshold가 필요 = 낮은 entropy,
따라서 mean self-entropy를 이용, 저점~고점을 탐색하다
Self-Entropy가 첫 극솟값을 만나면 멈춘다. 이 전략을 SED라 부른다.
즉, confidence threshold로 생성된 pseudo label들을 update된 pretrained모델로
Tgt Dataset의 mean self-entropy를 평가한다: hopt = argmin H(Dt)이다.)


(FN Simulation: SED로 찾은 pseudo label은 여전히 noisy(FP, FN)label인데, 특히나 positive가 작거나 가려지는 물체로 인해 FN으로 작용하는 현상이 발생하여 이를 방지하기 위함이다.)


4. h와 pre-trained model parameter를 이용해 Faster R-CNN은 아래 두 값을 출력한다.
cf) pseudo label y(x)= foreground클래스확률의 argmax값
cf) confidence p(x)= classification분기에서의 softmax값


Experiments

핵심:
5개의 Dataset이 활용됨:
KITTI, Sim10k, Cityscapes, BDD100k, Foggy Cityscapes

        [Src → Tgt]
 ①       KITTI     → Cityscapes : for 새로운 Domain 
 ②     Sim10k   → Cityscapes: for train data부족상황 가정.
 ③ Cityscapes→ BDD10k: for data양의 차이(매우적음 to 매우많음)
 ④ Cityscapes→ FoggyCityscapes: for noisy Tgt Domain

 

 

논문 review

🤔 내 생각

👍 장점:

Unlabeled Domain Adaptation을 classification에만 적용하던 것을 Detection에도 적용했다는 점.

 발생하는 2가지 문제점을 잘 파악하고 이에 적절한 해결책인 SED와 FN mining을 도입.

Src data free하다는 점에서 data에 의한 영향도 줄어들고, real world에 대한 generalization이 좀 더 좋아보임.



👎 단점 + 🔍 개선할 점:

 아무래도 Unsupervised방식이기에 근본적인 한계(pseudo label의 noise완전제거)는 매우 어렵다는 단점.

confidence threshold search 시, mean self-entropy 기준 탐색을 하는 것 같고, 이에 대한 설명으로 낮은 값부터 높은 값까지 탐색한다 하였으니 greedy나 순차탐색이라는 느낌이 들었음. 순차탐색은 O(n)으로 다소 빠른편에 속함.
다만 BST같은 O(log n)을 활용한다면 Real World에서 더 탐지를 빨리 할 수 있지 않을까?



💻 코드구현가능성:

pre-trained model은 VGG16이기에 쉽게 구현가능 + Loss function도 마찬가지.(⭐️)

∙SED의 경우, mean self-entropy정도는 괜찮을 것 같고 Search도 Greedy-Search알고리즘을 사용하면 될 것 같으나 이를 Confidence score를 받아온다는 개념이 될 지는 모르겠음.(Faster R-CNN 코드를 뜯어봐야 좀 더 알 것 같다.)(⭐️⭐️⭐️)

FN Simulation의 경우, Mosic Augmentation은 이미 많은 github소스가 존재.(⭐️⭐️⭐️)

Faster R-CNN의 경우, 구현도 처음이고 아무래도 Detection model자체가 구현난이도가 존재하기에 다소 어려울 것 같음.(⭐️⭐️⭐️~⭐️⭐️⭐️⭐️)

이런 부분부분의 구현은 사실 이미 선행된 오픈소스 코드들이 많이 존재, 딱히 문제는 없어보이나 전반적인 main idea기반의 전체 모델 파이프라인 구현의 경우, 좀 어려워보인다. (⭐️⭐️⭐️⭐️⭐️⭐️)

 

 

 

'2024 winter > ETRI(공부)' 카테고리의 다른 글

[DA]: Relative Research paper Brief.  (2) 2024.01.09
[DA]: Visual Domain Adaptation  (6) 2024.01.04

🏢 ETRI (2024.01.11)

📌 01.10-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Source free Domain Adaptive Object Detection (정리는 완료, 톺아보기 필요❗️)
아 그리고 pseudo labeling in FN Simulation에서 Detection에서 TN얘기가 나왔다.
Detection에서는 TN이 안쓰인다고 알고있어서 이에 대해서도 좀 알아봐야한다.

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory 
∙ 2.6. Bayesian Probabilites

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

ojs.aaai.org

 

 
 

 
 

🚍 출근! (8:10 - 8:25)

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일:
∙ 논문 review: Experiments
Deep Learning(Bishop 2024): Chapter 2 이다.
    2.5  Information Theory 
 
 
 
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식): 데리야끼 닭 --> 덩어리 커서 좋았다.

 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

논문 review 계속 진행. 오늘은 Experiments파트를 읽었다.
Experiments라 그런지 그냥 실험 방법내용들만 나와서 쉽게쉽게 읽은 것 같다.
역시 Main Idea부분 빼고는 나머지는 그렇게 머리쓸 일 없는 느낌이다.
 
Abstract -> 여기 내용은 무조건 숙지해야됨
Introduction -> Abstract 조금 구체화 + Main Idea preview
Main Idea: 힘 빡주고 읽어야함 ㄹㅇ...
etc.ㅋㅋㅋ

 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동!안할래 (19:00 -)

오늘은 Benchpress랑 DeadLift만 깔쌈하게 안했다ㄲㅋㅋㅋㅋ
오늘 넘힘들어서 걍 포기!

 
 
 
 

 
 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ 논문 정리
∙ 논문 review
∙ PPT만들기


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

ojs.aaai.org

 

 
 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.15  (0) 2024.01.15
[ETRI]2024.01.12  (2) 2024.01.12
[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.09  (2) 2024.01.09
[ETRI]2024.01.08  (4) 2024.01.08

🏢 ETRI (2024.01.10)

📌 01.09-TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 


 
 

🚍 출근! (8:10 - 8:25)

6시 알람이 지독하게도 날 깨웠던 과거였기에...

그냥 7시에 알람 맞춰버렸다 ㅋㅋㅋ
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)

어제 폭설❄️이 와서 그런지 버스가 생각보다 일찍? 왔고 생각보다 늦게 도착했다. 
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 타고 오는게 일찍공부할 수 있어서 이득인거 같다.
이제 남은 할일은 논문 review와 Deep Learning: Chapter 2 이다.

먼저 Chapter 2.4먼저 다 읽었는데 생각보다 흥미로웠던 내용이었다.

변수에는 그에 맞는 Distribution이 있고,
한 변수에서 다른 변수로 비선형변환함수를 이용해 어떻게 변환을 어떻게 하는지, (합성함수방식)
이때, 변환은 각 변수의 mode가 서로 정확하게 맞지는 않는다는점.


단변량 분포를 다변량분포에 어떻게 적용할 것인가?
→ 분포에 절댓값을 씌운 det J를 곱해주는 방법.

J; Jacobian Matrix 역할: 공간의 일부를 확장하고 다른 부분을 압축하는 것
(= 해당 변수의 변화량이 다른 변수에 얼마나 영향을 주는지를 의미;
이를 모든 영역에 대해 고려하면 전체 공간이 어떻게 변화하는지 알 수 있음)

 

대충 요약하면 이런 뉘앙스다.

 

이번 DA의 핵심이 서로 다른 Distribution간의 적용에 대한 내용이고

책 내용에서도 나왔지만 Chapter 18. 즉, Image Generation Model에서

Normalizing flow라는 생성모델클래스를 다룰때 중요한 역할을 한다 적혀있었다는 점에서 

대단히 도움이 많이 되었던 내용이라 생각한다.

 

 

밥먹을 때 까지 1시간이나 남았기에 짧은 Related Works를 모두 다 읽었다.

Abstraction과 Introduction에서 조금씩 소개된 간단한 내용이었다.

 

 

 

 

 

 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식)

불향🔥제육?이 나왔는데 사진 지금보니 진짜 많이도 담았다ㅋㅋㅋ


(살뺀다고 식이조절하고 있는데 이거땜시 바로 돼지🐷될듯ㅋㅋㅋ

아니 그리고 불향이라면서... 불향 왜 냄새만 남...??)


 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

논문 review 계속 진행. 오늘은 Relative Works파트와 SFOD파트를 읽었다.

3장정도의 분량이라 보면 된다.

 

[논문 review]: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data

No Free Lunch from Deep Learning이라는 말이 있을만큼 No Free Lunch라는 말은 유명한데... 이를 정면으로 반박하고 Free Lunch라고 표현한걸 봐서는 매우 자신이 있다는 말로 해석해서 이 논문을 첫번째 논문

chan4im.tistory.com

일단 요약하자면...

이게 진짜 필요한 설명 넣으면서 최대한으로 꾹꾹 풀압축펀치로 요약한거다ㅋㅋㅋ

아직 이해가 완벽하게 되지는 않았기 때문에 내일 Experiments를 다 읽은 후든, 읽기 전이든 한번은 다시 흐름을 되짚어 봐야겠다.
 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동! (19:00 -)

오늘은 5X5 Strength B루틴 하는날.
카페인 시원하게 마시고 바로 Squat→Military Press→Dead Lift 하러 갔다.
 역시 Deadlift가 제일 맛깔난👅 운동이다. (근데 하고나면 진짜 세상세상 이렇게 피곤할 수가 없다ㅋㅋㅋ)
 

 

 

 


 

 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Source free Domain Adaptive Object Detection (정리는 완료, 톺아보기 필요❗️)
아 그리고 pseudo labeling in FN Simulation에서 Detection에서 TN얘기가 나왔다.
Detection에서는 TN이 안쓰인다고 알고있어서 이에 대해서도 좀 알아봐야한다.

∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 


 
 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.12  (2) 2024.01.12
[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.09  (2) 2024.01.09
[ETRI]2024.01.08  (4) 2024.01.08
[ETRI]2024.01.05  (4) 2024.01.05

📊 다양한 시각화 방법

대표적으로 WandB는 학습log 시각화를 주로 사용한다.

대표적으로 다음과 같다.

  • Loss, Accuracy 그래프
  • Model parameter(gradient) 그래프
  • pred_img 시각화
  • sweep 그래프
  • Confusion Matrix
  • ROC, PR Curve

 

 

 

 

1.  Loss, Accuracy 그래프

💻 코드

wandb.log({'loss':loss}, step=epoch)
wandb.log({'val_loss': val_loss,
           'val_acc': val_accuracy })

 

📊 시각화


 

 

2.  Model parameter(gradient) 그래프

💻 코드

wandb.watch(model, criterion, log="all", log_freq=10)

log="all"을 주면 gradient와 parameter, bias를 모두 기록할 수 있다.

 

📊 시각화

 

 


3.  Pred_Img 시각화

💻 코드

ex_images.append(wandb.Image(data[0], 
                                  caption="Pred:{} Truth:{}".format(pred[0].item(), target[0])
                                  ))
  
 wandb.log({"Image": ex_images})

 

📊 시각화

cf) index바를 조절해 학습진행경과확인이 가능하다.

 


4.  sweep 그래프

💻 코드

sweep_id = wandb.sweep(sweep_config, project="mnist", entity='v2llain')
wandb.agent(sweep_id, run_sweeep, count=6)

 

📊 시각화

X축: configuration된 parameter이름

y축: 변경된 값

맨 우측: 성능측정값

 


5.  Confusion Matrix

💻 코드

sweep실행❌)

wandb.sklearn.plot_confusion_matrix(y_test, y_pred, 
                                    labels=classes_name)

 

sweep실행⭕️)

wandb.log({
      "Confusion Matrix":
      wandb.plot.confusion_matrix(preds=best_all_preds,
                                  y_true=best_all_labels,
                                  class_names=classes_name
                                  )})

 

📊 시각화

좌) sweep X.   우) sweep진행 시, 색별로 sweep구분가능.

 


6. ROC, PR Curve

💻 코드

wandb.log({'roc': wandb.plots.ROC(y_test, y_prob_pred, cnb.classes_)})
wandb.log({'pr': wandb.plots.precision_recall(y_test, y_prob_pred, cnb.classes_)})

 

📊 시각화

두 그래프 모두 상단에 위치할수록 좋은 그래프 (∵AUC가 클수록 좋기 때문.)

 

 

🧹 Sweep이란?

0. Overview

단 1%라도 성능을 올리기위해 많은 사람들이 부단한 노력을 한다. (ex. paperswithcode)

결국, 모델의 성능을 최대로 끌어올리기 위해서는 Hyper-parameter를 변경하며 최적의 값을 찾기위해 이에 대해서도 부단히 노력을 기울여야 하지만, 이는 매우 피곤하고 Cost를 많이 들게 만든다.

이를 위해 등장한 것이 바로 W&B의 Sweep이다!

 

 

 

1. Sweep이란?

기본적으로 Hyper-parameter를 자동으로 최적화주는 Tool

Hyper-parameter Seach방식으로 다음 3가지가 존재한다.

  • Grid 방식
  • Random 방식
  • Bayes 방식

선택한 search 방식으로 하이퍼 파라미터 튜닝이 완료 되면 WandB의 웹에서 제공되는 dashboard로 시각화된 모습을 볼 수 있다.

이렇게 시각화된 모습은 위의 그림과 같다. Sweep은 자동으로 tuning해주는 기능 뿐만 아니라,

각각의 hyper parameter들이 metric(accuracy, loss 등)에 얼마나 중요한 지 알려주고 상관관계를 보여주기에 필수적이라 할 수 있다.

(대시보드)

 

 

 

 

 

🧹 Sweep 사용법❗️

 

Tune Hyperparameters | Weights & Biases Documentation

Hyperparameter search and model optimization with W&B Sweeps

docs.wandb.ai

Sweep은 필히 2개의 단계(Initialize the Sweep, Run the Sweep Agent)가 필요하다.

 

 

1. Initialize the Sweep 

 ∙ Sweep Configuration를 정의

Sweep Initialize를 위해 먼저 구성요소(configuration)를 정의해야한다.

이를 위해 required와 option으로 나뉜다.

 program(어디에서) method(무엇을) parameters(어떻게)
최적화를 할 것인지 정의해야한다.

이때, 최적화 방법으로 3가지가 존재한다.
  • Grid 방식 : 가능한 모든 조합 탐색 (= Cost↑)
  • Random 방식 : random하게 선택 (= Cost↓, opt찾을확률↓)
  • Bayes 방식 : 이전에 시도한 hyper-parameter조합의 결과를 사용, 다음시도조합 추론시 사용 
    → 모델성능을 최대로 향상시킬 수 있는 hyper-parameter조합을 찾는다. (= 초기탐색이 느림)

 


이때, 특히나 parameters 파트가 중요하기에 좀 더 살펴보자.


values  value
Hyper-parameter에 대해 특정 값을 설정해서 우리가 원하는 값만 선택하게 해줌.
(value는 1가지 값을 설정해줄 때 사용)


distribution
values와 대조되는 방식.
특정 값을 설정하는 대신 원하는 분포 안에서 값을 선택.
Sweep에서는 uniform, normal, q_log_uniform과 같이 다양한 분포를 제공.
또한 선택된 분포를 min, max와 mu, sigma, q를 통해 자유롭게 변형가능.

min, max
분포의 최소∙최대값을 설정.

mu
  sigma

평균과 표준편차를 나타내는 값, 정규분포(normal)의 모양을 결정.

q

Quantization의 약자로 distribution에서 나온 값 X를 양자화.
ex) q를 2로 설정한다면 X는 2의 배수로 바뀜.
(ex. 식 round(X / q) *q를 적용하면, -2.96은 -2로 13.27은 14로 8.43은 8로 바뀜.)=

 ∙ project에 사용하기위해 Sweep API로 초기화

Sweep의 config가 제대로 정의가 됐다면 이제 프로젝트에 적용을 해줘야한다.

 

sweep 초기화 코드:

sweep_id = wandb.sweep(config.sweep_config)


위에서 정의된 config 변수를 입력으로 받고 sweep id를 출력해준다.

이 id는 다음 step에서 sweep을 실행시킬 때 고유한 identifier로 사용된다.

 

 

 

 

 

 

2. Run the Sweep Agent

  • 함수나 프로그램을 W&B서버에서 실행.

이제 본격적인 실행만이 남았다.

위에서 정의해준 configuration을 사용해 sweep을 진행하자.

 

sweep 진행코드:

wandb.agent(sweep_id, function=train, count=count)

이때, 위에서 출력된 sweep_id를 입력으로 넣어준다.

또한, function에 우리가 정의한 train함수를 넣어주고

sweep을 몇번 진행할 지 숫자를 count에 입력해준다.

성공적으로 Sweep 실행시 출력되는 화면.

 

 

 

 

 

cf). yaml 파일로 실행하는 방법.

project와 entity를 기입 가능한 곳

  • config 설정 하는 파일 (config.py 혹은 config.yaml)
  • wandb.sweep()
  • wandb.init()
  • wandb.agent()

config를 .py파일로 정의하는 방식과 .yaml파일로 정의하는 방식이 존재.yaml파일로 실행하는 방법에 대해 알아보자.


1. config.yaml 파일 생성

 

 

 

 

2. . yaml 파일, Sweep에 입력

wandb sweep config.yaml

 

 

3. Sweep id를 Agent에 입력

wandb agent SWEEP_ID

 

 

 

cf) wandb terminal에서 명령어로 지정하기.

∙ sweep 횟수 제한

wandb agent --count [LIMIT_NUM] [SWEEPID]

 

 

∙ Multi-GPU sweep 사용

CUDA_VISIBLE_DEVICES=0 wandb agent sweep_id
CUDA_VISIBLE_DEVICES=1 wandb agent sweep_id

 

 

 

 


 

 

 

🧹 W&B Sweep 실행을 위한 예시코드

from dataset import SweepDataset
from model import ConvNet
from optimize import build_optimizer
from utils import train_epoch

import wandb
import config

parser = argparse.ArgumentParser()
parser.add_argument('--batch-size', type=int, default=8, metavar='N')
parser.add_arguemnt('--epochs', type=int, default=10)                     
args = parser.parse_args()                   

wandb.config.update(args)

def train():
    wandb.init(config=config.hyperparameter_defaults)
    w_config = wandb.config

    loader = SweepDataset(w_config.batch_size, config.train_transform)
    model = ConvNet(w_config.fc_layer_size, w_config.dropout).to(config.DEVICE)
    optimizer = build_optimizer(model, w_config.optimizer, w_config.learning_rate)

    wandb.watch(model, log='all')

    for epoch in range(w_config.epochs):
        avg_loss = train_epoch(model, loader, optimizer, wandb)
        print(f"TRAIN: EPOCH {epoch + 1:04d} / {w_config.epochs:04d} | Epoch LOSS {avg_loss:.4f}")
        wandb.log({'Epoch': epoch, "loss": avg_loss, "epoch": epoch})     
        
sweep_id = wandb.sweep(config.sweep_config)
wandb.agent(sweep_id, train, count=2)

sweep을 위한 config 파일은 config.py에 구현되어 있습니다. 코드를 순서대로 설명하면 다음과 같습니다.

1. hyper parameter의 초기값을 wandb.init에 입력으로 넣어줍니다.
2. w_config는 sweep을 할 대상 hyper parameter입니다.
3. loader, model, optimizer 함수에 w_config를 매개변수로 전달해줍니다.
4. model을 정의하면 wandb.watch 함수로 gradient를 추적합니다.
5. epoch 별로 나오는 log를 wandb.log에 저장합니다.
6. config 파일에 정의해둔 구성 요소를 wandb.sweep에 입력합니다.
7. wandb.sweep에서 나온 id와 위에 구현된 train 함수, 그리고 횟수를 wandb.agent에 입력하고 sweep을 실행시킵니다.

 

참고) https://pebpung.github.io/wandb/2021/10/10/WandB-2.html

 

 

 


🧹 Sweep 시각화

WandB실행 이후, 시각화된 결과를 분석해보자. (대시보드)

이를 위해서는 Sweep workspace의 구성방식에 대해 알아봐야한다.

 

좌측 그래프: y축은 metric, X축은 생성된 날짜를 의미.

우측 표: hyper parameter가 metric(accuracy, loss 등)에 얼마나 중요한 지와 상관관계가 어느정도 인지도 알려줌.

 


 

위 그림은 hyper-parameter선택과정을 시각적으로 보여준 그림이다.

 ∙ X축: config에서 설정한 hyper-parameter의 종류

 ∙ y축: config에서 설정한 hyper-parameter의 범위

 

추가적으로 마우스를 가져다 놓으면 해당 그래프에서의 값을 알 수 있다.

📌 WandB가 왜 필요할까?

1. Model Experiment Pipeline

https://ml-ops.org/content/mlops-principles

위 그림을 보면 알 수 있듯, MLOps과정은 크게 3단계로 나뉜다.

 ∙ Project Design

 ∙ Experiment & Development

 ∙ 배포 및 운영

 

이중, 2단계인 "실험에 도움을 주는 Tool"중 하나가 바로 WandB이다.

(cf. TensorBoard도 존재.)

 

 

 

2. Configuration

ML구축을 위한 필수구성요소로 대표적인 예시는 다음과 같다.
∙ Dataset
∙ Metric
∙ Model
∙ Hyper-parameter

 

Training과정에서, 이 Configuration값을 적절하게 선택해줘야한다.

🧐 Batch size에 대하여
Data나 Model의 종류에 따라 적절한 Batch_size가 존재하기에
batch_size를 너무 작은값이나 큰값을 쓰면 오히려 학습이 잘 안되는 경향이 존재한다.

cf) 특정한 가설하에 연역적으로 증명가능할 때,
batch size를 2배 증가시키면 step size는 √2배 증가시켜야한다. 

cf) batch size를 증가시켰는데도 총 epoch수를 그대로 두면
한 epoch당 iteration수가 줄어들기에
그만큼 gradient로 parameter update를 덜 시키는 것이므로
Loss감소속도가 느려져 학습이 잘 안될 수도 있다.

그렇기에 적절한 Configuration설정은 준필수적이다.

 

특히, Dataset은 Data Augmentation

Metric은 추가하거나 교체하고, Model도 구조를 변경시키는 시간은 상대적으로 적은 시간이 들지만

 

Hyper-parameter Tuning의 경우 적절한 값을 찾기 위해서는 상당히 많은 시간을 할애해야한다.

Model의 parameter 최적화를 위해 Hyper-parameter를 적절히 조절해야하고, 이는 Hyper-parameter를 변경시키며 다양한 실험을 해야하기 때문이다.

 

이를 사람이 일일히 한다면?

즉, Hyper-parameter를 사람이 직접 일일히 tuning하는 작업은

매우 비효율적이고, 기록이 누락될수도 있고 이를 수기로 정리까지 해야하는, 

종합고민3종세트라 할 수 있겠다.

 

 

 

 

 

 

📌 WandB?

WandB(Weights & Biases)는 더 최적화된 모델을 빠른시간내에 만들 수 있게 도와주는, ML Experiment Tracking Tool이다.

주요기능

W&B Platform

  • Experiments: 머신러닝 모델 실험을 추적하기 위한 Dashboard 제공.
  • Artifacts: Dataset version 관리와 Model version 관리.
  • Tables: Data를 loging하여 W&B로 시각화하고 query하는 데 사용.
  • Sweeps: Hyper-parameter를 자동으로 tuning하여 최적화 함.
  • Reports: 실험을 document로 정리하여 collaborators와 공유.

 

 

 

📌 W&B Experiments. 함수 및 예제

모델학습 시, 모델 학습 log를 추적하여 Dashboard를 통해 시각화
이를 통해 학습이 잘 되고 있는지 빠르게 파악할 수 있다.

 

1. config setting

W&B실행을 위해 config파일이 필요하기에 

Hyper-parameter, Data명 등 학습에 필요한 구성들을 그룹화한다.

또한, 이 config파일은 sweep에 중요하게 사용된다.

config  = {
    'dataset': 'MNIST',
    'batch_size': 128,
    'epochs': 5,
    
    'architecture': 'CNN',
    'classes':10,
    'kernels': [16, 32],
    
    'weight_decay': 0.0005,
    'learning_rate': 1e-3,
    
    'seed': 42
}

 

 

 

 

 

 

2. Dataset with DataLoader

def make_loader(batch_size, train=True):
    full_dataset = datasets.MNIST(root='./data/MNIST', train=train, download=True,  transform=transforms.ToTensor())

    loader = DataLoader(dataset=full_dataset,
                        batch_size=batch_size,
                        shuffle=True, pin_memory=True, num_workers=2)
    return loader

 

 

 

 

 

3. CNN Model

class ConvNet(nn.Module):
    def __init__(self, kernels, classes=10):
        super(ConvNet, self).__init__()

        self.layer1 = nn.Sequential(
            nn.Conv2d(1, kernels[0], kernel_size=5, stride=1, padding=2),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.layer2 = nn.Sequential(
            nn.Conv2d(16, kernels[1], kernel_size=5, stride=1, padding=2),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.fc = nn.Linear(7 * 7 * kernels[-1], classes)

    def forward(self, x):
        out = self.layer1(x)
        out = self.layer2(out)
        out = out.reshape(out.size(0), -1)
        out = self.fc(out)
        return out

추가적으로 W&B는 모델의 weights와 bias같은 parameter를 추적할 수 있다.

이를 통해 학습 도중 weights의 histogram이나 distribution을 통해 원활한 학습방향수정이 가능하다.

 

 

 

 

 

4. Train 함수

def train(model, loader, criterion, optimizer, config):
    wandb.watch(model, criterion, log="all", log_freq=10)

    example_ct = 0
    for epoch in tqdm(range(config.epochs)):
        cumu_loss = 0
        for images, labels in loader:

            images, labels = images.to(device), labels.to(device)

            outputs = model(images)
            loss = criterion(outputs, labels)
            cumu_loss += loss.item()

            optimizer.zero_grad()
            loss.backward()

            optimizer.step()

            example_ct +=  len(images)

        avg_loss = cumu_loss / len(loader)
        wandb.log({"loss": avg_loss}, step=epoch)
        print(f"TRAIN: EPOCH {epoch + 1:04d} / {config.epochs:04d} | Epoch LOSS {avg_loss:.4f}")

wandb.log()함수를 통해 loss함수를 시각화 할 수 있음.

이때, step을 epoch으로 받아 avg_loss값을 기록하는 것을 알 수 있다.

 

wandb.watch()는 Dashboard에서 실험 log를 시각화하는 역할을 수행.

 

 

5. Run 함수

def run(config=None):
    wandb.init(project='MNIST', entity='계정명', config=config)

    config = wandb.config

    train_loader = make_loader(batch_size=config.batch_size, train=True)
    test_loader = make_loader(batch_size=config.batch_size, train=False)

    model = ConvNet(config.kernels, config.classes).to(device)
    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate)

    train(model, train_loader, criterion, optimizer, config)
    test(model, test_loader)
    return model

wandb.int()으로 wandb web서버와 연결.

 

cf) project와 entity를 기입 가능한 곳

  • config 설정 하는 파일 (config.py 혹은 config.yaml)
  • wandb.sweep()
  • wandb.init()
  • wandb.agent()

 

 

 

 

6. 결과

실험결과, 각 에폭마다 해당 Layer에 전파되는 Gradient값들을 확인할 수 있다.

추가적으로 해당 epoch에 대한 gradient distribution의 경우 마우스를 가져다 놓으면 위의 그림처럼 확인가능하다.

🏢 ETRI (2024.01.09)

📌 01.08-TODO List:

1. 논문 List마저 읽기
∙ Multi-Granularity Alignment Domain Adaptation for Object Detection (CVPR 2022)
∙ Cross-domain adaptive teacher for object detection (CVPR 2022)
∙ ConfMix: Unsupervised Domain Adaptation for Object Detection via Confidence-based Mixing (WACV 2023)
∙ Object detection based on semi-supervised domain adaptation for imbalanced domain resources (Machine Vision and Applications 31 2020)

2. Deep Learning 2024(Bishop): Chapter 2 읽고 공부하기
∙ 2.1  The Rule of Probability
∙ 2.2  Probability Densities
∙ 2.3  The Gaussian Distribution
∙ 2.4  Transformation of Densities
∙ 2.5  Information Theory
∙ 2.6. Bayesian Probabilites

3. 주말에 공부할 것: WanDB사용법 제대로 알기!
i) WanDB란?
ii) Sweep알기❗️
iii) WanDB Visualization Method (feat. Confusion Matrix)

4. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Abstract
∙ Introduction (- 화)
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)
∙ Experiments (2번째로 많음 - 목)
∙ Conclusion
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 
 
 

🚍 출근! (8:10 - 8:20)

6시 알람이 지독하게도 날 깨워서 겨우겨우 셔틀버스 시간에 맞춰 일어났다...
그래도 밥은 맛있게 야무지게 먹고왔다 히히🤣
출퇴근은 셔틀버스가 역쉬 제일 빠른거 같다. (Shortest Path Algorithm?)
 
 
 
 
 

📖 공부! (8:30-12:00)

셔틀버스 운행하는 곳이 내 자취방 근처라는 것을 알고? 일찍와서 공부를 시작할 수 있었다.
지난주에 미리 정리한 논문 리스트에 대한 Abstract와 Conclusion에 대해 정리해 보았다.
(남은 논문 3편 정리완료. 8:30~10:10)
https://chan4im.tistory.com/220

 

[DA]: Relative Research paper Brief.

Survey Paper ∙ Deep Domain Adaptive Object Detection: a Survey (IEEE 2020) ∙ Unsupervised Domain Adaptation of Object Detectors: A Survey (IEEE 2023) Conference Paper ∙ Domain Adaptive Faster R-CNN for Object Detection in the Wild (CVPR 2018) ∙ Abs

chan4im.tistory.com

 
 
 
 
 
 
 
 
 
 

🍚 밥이다 밥! (12:30~13:00)

마찬가지로 동편제(한식)
닭갈비가 나왔는데 사진 지금보니 진짜 많이도 담았다ㅋㅋㅋ
(살뺀다고 식이조절하고 있는데 이거땜시 바로 돼지🐷될듯ㅋㅋㅋ)


 
 
 
 
 
 

 
 

📖 공부! (13:30-18:00)

WandB 정리를 모두 끝냈다.

 

'Deep Learning : Vision System/MLOps Tool: Weights & Biass' 카테고리의 글 목록

컴퓨터과학, 인공지능에 대한 공부를 열심히 하는 공대생

chan4im.tistory.com

 
주말에 딥러닝과 논문리뷰에 좀 더 집중해서 공부할 수 있을 것 같다 히히😜.

논문 초록,서론,결론파트는 다 읽었다
후후..
 
 

 

🚍 퇴근! (18:30 - 19:00)

퇴근이 제일 좋다는 직장인의 말에 공감이 점점된다ㅋㅋㅋ
아침출근때문에 그냥 졸리다ㅋㅋ 피곤🩸하고ㅠㅠ


 
 
 
 

🏋🏻 운동! (19:00 -)

벤치하고 집가는데 폭설이...
어우...
 
 

 
 
 

📌 TODO List:

1. 논문 review: A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data
∙ Related Works (내용 적음 - 수)
∙ Source free Domain Adaptive Object Detection (내용 짱많음 - 수)
∙ Experiments (2번째로 많음 - 목)


2. 주중에 할 것: Deep Learning 2024(Bishop)-Chapter 2 읽고 공부하기
∙ 2.1
∙ 2.2
∙ 2.3
∙ 2.4
∙ 2.5
∙ 2.6
 

A Free Lunch for Unsupervised Domain Adaptive Object Detection without Source Data | Proceedings of the AAAI Conference o

 

ojs.aaai.org

 

'2024 winter > ETRI(일상)' 카테고리의 다른 글

[ETRI]2024.01.11  (0) 2024.01.11
[ETRI]2024.01.10  (4) 2024.01.10
[ETRI]2024.01.08  (4) 2024.01.08
[ETRI]2024.01.05  (4) 2024.01.05
[ETRI]2024.01.04  (0) 2024.01.04

+ Recent posts