728x90

Reference(아주굿): https://sonsnotation.blogspot.com/2020/11/8-normalization.html

 

4 types of Normalization

Normalization

1. 개념: 데이터의 범위를 사용자가 원하는 범위로 제한하는 것

 

2. 여러 기법

- feature들의 0~1 scale (ex. 이미지 데이터 픽셀이 0~255 사이의 값 → 0.0~1.0 사이의 값)

- 표준화(Standardization): 표준정규분포를 갖도록 평균을 빼고 표편으로 나누는 것

- whitening(e.g. batch normalization): 2단계로 구성 (1) Stardardize(standard normalize) pre-activation function (2) Scale and shift

etc.

 

3. 장점

: optimal solution으로의 수렴 속도가 빨라진다.

layer가 1개이든, 2개 이상의 딥러닝이든, 정규화를 할 경우 loss function의 형태가 elongated(타원형)에서 spherical(구 형)으로 바뀌고, optimal solution으로 가는 경로가 더 효율적으로 개선된다.

 


Batch Normalization & Layer Normalization

 

Batch Norm Layer Norm
- Whitening 기법 베이스
(0) 매 순간(=weight가 training되는 순간)마다
(1) Stardardize(standard normalize) pre-activation function
(2) Scale and shift

-
 입력 데이터의 분포를 조정하여, 신경망 내부에서 학습 안정성과 속도 개선
주로 CNN, FCNN에서 활용
->배치 내부의 통계적 변화로 인한 그래디언트 소실 문제를 완화
주로 RNN, 순차적 데이터(시퀀스) 다루는 경우 활용
-> 시간적인 의존성을 고려하여 안정적인 정규화를 제공
주로 mini-batch 내 데이터가 여러 개(=batch size가 2 이상)인 경우
-> 미니배치 크기에 영향을 받음
mini-batch에 들어있는 데이터가 한 개(=batch size가 1)인 경우에도 사용 가능
Standardize에서 사용하는 평균과 표준편차는,
mini-batch 내 모든 데이터의 Feature(채널) '별'로 평균과 표편을 계산.

테스트 시에는, 전체 데이터셋의 평균과 표편을 사용 (배치별로 구해뒀던 평균과 분산을 버리지 않고 메모리에 기억해뒀다가, 재사용)
Standardize에서 사용하는 평균과 표준편차는,
batch에 있는 '모든 feature(모든 채널)'에 대한 평균과 분산
즉, hidden layer 전체의 평균과 분산으로 normalization

 

장점

layer가 여러 개인 DL에서 ...

- 기존에 back prop 시, activation function(eg. 기울기가 0인 영역이 넓은 sigmoid / tanh이나, G.V. issue를 간접적으로 회피하는 ReLU 등.)을 통과하면서 gradient vanishing 문제가 발생하는데,

 

매 순간 Whitening을 수행하여 input을 평균 0, 표준편차 1인 분포로 normalization시켜 주면,

 

- G.V. issue의 근본 원인인 Internal Covariance Shift 문제(아무리 input layer에서 정규분포를 가지는 입력을 줘도 hidden layer를 지나면서 그 분포가 점점 정규분포를 벗어나는 현상)를 해결

Internal Covariance Shift 현상
Internal Covariance Shift로 가속화되는 gradient vanishing

 

Whitening의 두 단계

1. Normalize pre-activation function : pre-activate 된 샘플을 standard normalize

2. Scale and shift : standard normalize 된 샘플의 variance와 bias를 조절할 수 있는 γ, β를 부과해서 parameterize

variance와 bias를 다시 조절하는 이유는 sigmoid의 경우는 중심에 분포가 몰려 있는 것이 효과적이지만, 다른 activation은 그렇지 않기 때문이다. 즉, 학습을 통해 γ와 β를 학습해 적절한 분포를 가지게 하기 위함.

728x90
728x90

 Keras의 callback

: training 단계에서(epoch 시작부터 끝까지) 어떠한 동작을 수행하는 object

- callback들을 통해서 tensorboard에 모든 batch of training들에 대해 metric 수치를 모니터링할 수도 있고, 이를 저장하는 것도 가능

- Early Stop이나 Learning Rate Scheduling과 같은 기능을 통해 학습결과에 따라 학습을 멈추거나 학습률을 조정할수도 있음

=> 이처럼 Callback들을 잘 활용한다면, 딥러닝 학습의 결과를 보다 좋게 만들 수 있음.

 

주요 활용되는 callbacks

  1. ModelCheckpoint:
    • 기능: 모델의 훈련 중에 지정된 에포크마다 모델의 가중치를 저장.
    • 특징: 훈련 중간에 모델의 상태를 저장하여 최상의 성능을 보이는 모델을 선택할 수 있도록 도와줌. 이후 모델 재사용 또는 재훈련에 유용.
    • 아래 코드 참조
  2. EarlyStopping:
    • 기능: 모델의 훈련 중에 지정된 지표(monitor)를 모니터링하여 성능이 향상되지 않을 경우, 훈련을 조기 종료시킴.
    • 특징: 오버피팅을 방지하고 불필요한 계산을 줄여줌. 훈련 속도를 개선하고 최적의 성능을 달성할 수 있음.
  3. ReduceLROnPlateau:
    • 기능: 모델의 훈련 중에 지정된 지표(monitor)를 모니터링하고, 성능 개선이 없을 경우 학습률(learning rate)을 감소시킴.
    • 특징: 학습률을 동적으로 조정하여 학습 과정을 안정화하고, 최적의 학습률을 찾아주는 역할을 수행.
  4. TensorBoard:
    • 기능: 모델의 훈련 과정과 성능 지표를 시각화하기 위해 TensorBoard 로그를 생성.
    • 특징: 훈련과정을 시각화하여 모델의 동작을 이해하고 모델의 성능을 모니터링할 수 있도록 도와줌.
  5. LearningRateScheduler:
    • 기능: 지정된 학습률 스케줄링 함수를 사용하여 학습률을 동적으로 조정.
    • 특징: 학습률을 조정하여 학습 과정을 안정화하고 최적의 학습 속도를 찾아주는 역할. ReduceLROnPlateau와 유사하지만 더 많은 커스터마이징이 가능.
    • 아래 코드 참조

- Model Checkpoint with 코드!

tf.keras.callbacks.ModelCheckpoint(
    filepath,
    monitor: str = "val_loss",
    verbose: int = 0,
    save_best_only: bool = False,
    save_weights_only: bool = False,
    mode: str = "auto",
    save_freq="epoch",
    options=None,
    initial_value_threshold=None,
    **kwargs
)

 

- Keras에서 제공하는 LearningRateScheduler with 코드!!

=> 얘는 도대체 무슨 기능을 하는지 헷갈려서.. 알아봄

import tensorflow as tf

def lr_scheduler(epoch, lr):
    if epoch % 30 == 0 and epoch != 0:
        lr = lr * 0.1
    return lr

# LearningRateScheduler 콜백 함수 생성
scheduler = tf.keras.callbacks.LearningRateScheduler(lr_scheduler)

# 모델 컴파일
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 콜백 함수 등록하여 모델 훈련
model.fit(x_train, y_train, epochs=100, callbacks=[scheduler])

예제에서 lr_scheduler 함수는 현재 에포크를 확인하여 에포크가 30 배수일 때마다 학습률을 0.1 감소시킴

- 이렇게 하면 모델은 훈련 중간에 학습률을 조정하여 나은 성능을 얻을 있음.

- 이같이 Keras의 LearningRateScheduler는 사용자의 필요에 따라 학습률을 동적으로 스케줄링하여 함수를 원하는대로 정의할 수 있음

- callback함수의 일종이므로, callbacks 리스트에 append해주어야 함! :)

 

 

reference: https://rinha7.github.io/keras-callbacks/

https://keras.io/api/callbacks/base_callback/

 

728x90

728x90

 

0. why skip-connection?

https://lv99.tistory.com/25

 

ResNet (Shortcut Connection과 Identity Mapping) [설명/요약/정리]

등장 배경 레이어가 많아져, 인공신경망이 더 깊어질 수록 gradient vanishing/exploding 문제가 커집니다. 이전의 다른 방법들로 이 문제를 해결했다고 생각했지만, 수십개의 레이어를 가진 모델에서는

lv99.tistory.com

 

1. General Architecture of ResNet

1.1 Main Block of ResNet

https://www.neuralception.com/objectdetection-batchnorm/

2. Architecture of ResNet50

https://eremo2002.tistory.com/76

 

ResNet50 구현해보기

케라스를 이용하여 ResNet50을 구현하였다.ResNet 50-layer 네트워크 구조는 다음과 같다. 그리고 레이어가 50개 이상인 버전에서는 오른쪽과 같은 bottleneck skip connection 구조를 사용한다. 케라스에서 제

eremo2002.tistory.com

 

https://www.researchgate.net/figure/ResNet50-architecture-shown-with-the-size-of-the-filters-and-outputs-of-each_fig5_338563385

 

 

728x90

728x90

Major types of Loss function

1. MSE /. MSE / ,,, (회귀에 사용됨)

2. Margin-based (Discriminative setting)
• 0/1 loss
• logloss
• exponential loss
• hinge loss

 

3. Probabilistic setting
• Cross-Entropy (실제로 많이 사용됨)

- 크로스 엔트로피란 무엇?: https://3months.tistory.com/436 (아주 잘 정리됨, 이하 내용의 출처)

예측 모형은 실제 분포인 q를 모르고, 모델링을 하여 q 분포를 예측하고자 하는 것이다.
예측 모델링을 통해 구한 분포를 p(x) 라고 해보자. 실제 분포인 q를 예측하는 p 분포를 만들었을 때, 이 때 cross-entropy 는 아래와 같이 정의된다. 

Cross-Entropy

- q와 p가 모두 식에 들어가기 때문에, cross-entropy 라는 이름이 붙었다고 할 수 있다. 

- 머신러닝을 통한 예측 모형에서 훈련 데이터에서는 실제 분포인 p 를 알 수 있기 때문에(지도 학습) cross-entropy 를 계산할 수 있다.

- 즉, 훈련 데이터를 사용한 예측 모형에서 cross-entropy는 실제 값과 예측값의 차이(dissimilarity)를 계산하는데 사용.

 

예를 들어, 가방에 0.8/0.1/0.1 의 비율로, 빨간/녹색/노랑 공이 들어가 있다고 하자, 하지만 직감에는 0.2/0.2/0.6의 비율로 들어가 있을 것 같다. 이 때, entropy 와 cross-entropy 는 아래와 같이 계산된다.

 

 

- 크로스 엔트로피 based on Negative Log-likelihood

why log?: 곱의 계산을 합의 계산으로 바꾸기 위해


정답인 class에 대해 우리 모델이 부여한 score (정답이 아닌 class로 예측할 확률은 모두 생략)


why negative?


*잠시, Likelihood-function이 뭔데?

https://angeloyeo.github.io/2020/07/17/MLE.html

- likelihood 라는 것은 특별히 어려운 것이 아니고, 지금 얻은 데이터가 특정 분포로부터 나왔을 가능도.

그림 1. 획득한 데이터와 추정되는 후보 분포 2개(각각 주황색, 파란색 곡선으로 표시)

눈으로 보기에도 파란색 곡선 보다는 주황색 곡선에서 이 데이터들을 얻었을 가능성이 더 커보인다. 왜냐면 획득한 데이터들의 분포가 주황색 곡선의 중심에 더 일치하는 것 처럼 보이기 때문이다. 이 예시를 보면, 우리가 데이터를 관찰함으로써 이 데이터가 추출되었을 것으로 생각되는 분포의 특성을 추정할 수 있음을 알 수 있다. 여기서는 추출된 분포가 정규분포라고 가정했고, 우리는 분포의 특성 중 평균을 추정하려고 했다.

출처: https://angeloyeo.github.io/2020/07/17/MLE.html

그림 2. 주황색 후보 분포에 대해 각 데이터들의 likelihood 기여도를 점선의 높이로 나타냈다.

 

- 수치적으로 이 likelihood를 계산하기 위해서는 각 데이터 샘플에서 후보 분포에 대한 높이(즉, likelihood 기여도)를 계산해서 다 곱함.

출처: https://angeloyeo.github.io/2020/07/17/MLE.html

 

 

  • CrossEntropyLoss != Log-likelihood model
    ("Negative Log"-likelihood는 loss function의 미분이 용이하고 직관적이도록 돕는 아이디어같은.)

    ("Likelihood function" 역시 파라미터 추정을 위한 컨셉' 느낌.)
  • 파이토치에서 CrossEntropyLossLogSoftmax를 적용한 후 Negative Log-likelihood(NLL) Loss까지 적용한 식과 동일하다. (여기서 LogSoftmax는Softmax 함수를 적용한 후 Log 함수를 적용하는 것과 동일한 함수.)
  • CrossEntropyLoss 안에서 LogSoftmax와 Negative Log-likelihood 가 진행되기 때문에 softmax나 log 함수가 적용되지 않은 모델 output(raw data)을 input으로 주어야 합니다.
  • 이와 달리 NLLLoss 안에서는 softmax나 log함수가 이뤄지지 않습니다. 그래서 모델 output(raw data)을 input으로 그대로 사용하는 것이 아니라 LogSoftmax 함수를 적용한 후 input으로 사용해야합니다.

 

 

출처: https://supermemi.tistory.com/entry/Loss-Cross-Entropy-Negative-Log-Likelihood-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC-Pytorch-Code


• KL Divergence (예측 분포와 정답 분포 간 차이 기반)

 

728x90
728x90

모집단(population)이란 정보를 얻고자 하는 관심 대상의 전체집합(집단 전체)

모수(population parameter) 모집단 분포 특성 규정 짓는 척도. 관심의 대상이 되는 모집단의대표값’.

 

표본(sample) 모집단(population) 부분집합

표본통계량(sample statistic)이란 표본의 몇몇 특징을 수치화한

 

확률변수(random variable): 확률현상에 기인해 결과값이 확률적으로 정해지는 변수

  • 확률현상; 어떤 결과들이 나올지는 알지만 가능한 결과들 중 ‘어떤 결과가 나올지는 모르는’ 현상 (ex. 동전을 던졌을 때 나오는 면)
  • 확률변수는 상수가 아닌 ‘변수’이다. 우리 주변에 확률적인 현상이 존재할때, 확률변수는 확률적으로 정해지는 것이고, 현상에 따라 변화할 수 있기 때문이다.
  • 확률변수의 예시: 확률변수 X = 100원짜리 동전을 한 번 던졌을 때 이순신 장군이 나오는 횟수, P(X) = 1/2

 

확률분포(probability distribution) 확률변수가특정한 값을 가질 확률’을 나타내는함수’

              • 확률분포의 종류: 확률변수의 종류에 따라 둘로 나뉨
                • 이산확률분포(discrete p.b.): 이산확률(확률변수가 가질 있는값의 개수를 있는경우) 확률분포. (e.g. X=주사위를 던져서 나오는 눈의 개수일 1,2,3,4,5,6)
                  • 확률질량함수(probability mass function, pmf): 이산확률변수에서 특정 값에 대한 확률을 나타내는 함수 (e.g. X=주사위를 던져서 나오는 눈의 개수, f_x(1) = P(X=1) = 1/6)
                  • 이산확률분포의 종류: 베르누이분포와 이항분포, 기하분포와 음이항분포, 초기하분포, 포아송분포)
                • 연속확률분포(continuous p.b.): 연속확률변수(확률변수가 가질 있는값의 개수를 없는경우) 확률분포 (e.g X=중학교 학생의 키)
                  • 확률밀도함수(probability density function, pdf): 연속확률변수가특정 구간 포함 확률
                  • 누적분포함수(cumulative distribution function, pdf): 주어진 확률 변수가 특정 값보다 작거나 같은 확률
                  • 연속확률분포의 종류: 정규분포, 감마분포, 지수분포, 카이제곱분포, 베타분포, 균일분포
            •  

독립항등분포(iid, independent and identically distributed): 이상의 확률변수를 고려할 , 변수들이 통계적으로 독립이고, 동일한 확률분포를 가지고 있을 , 독립항등분포를 따른다고 .


베타분포(Beta Distribution): 두 매개변수 α와 β에 따라 [0, 1] 구간에서 정의 되는 연속확률분포

*α와 β; 분표의 형태를 결정짓는 모수

  • 쓰임새: 베이지안에서 사전확률을 가정할때 베타분포를 가정. (모수에 따라 다양한 형태로 변형 가능하기 때문, 사전정보가 없는 상황에서는 베타분포를 많이 가정한다고 함)
  • 베타함수를 이용

 

Reference:

https://losskatsu.github.io/statistics/betadist/#

728x90

+ Recent posts