DL&ML/concept

ML General 잡질문/답변 (기술면접)

식피두 2021. 5. 14. 15:50

기존 글에도 정리를 해왔지만,

기술 면접 준비하면서 정리 했던 것들 몇 가지 보충해서 정리해봤다.

 

틀린 내용이 있을 수 있으니 의심하면서 보길...

 

Backpropagation 계산법 (이상한 곳에서는 간단한 계산 시킬 수도...)

로컬 그래디언트에 업스트림 그래디언트를 곱해줌으로써 구하는 것을 기본 원칙으로 계산 하면 된다

 

Regression vs. Classification

확률적인 관점에서 설명할 줄 알면 든든...

가정하는 분포가 뭔지 (이산? 연속? / 베르누이? 가우시안?)

가정 분포에 따라 Loss는 어떻게 달라지는지...

 

Sigmoid 쓰는 이유?

In order to map predicted value to probability

a는 sigmoid의 기울기를 결정, b는 중심 위치를 결정

 

Convariance vs. Correlation

두 변수가 서로 어떻게 관계를 가지는지를 보여주는 수치 Covariance

0이면 unrelated

+이면 same direction

-이면 opposite direction

 

Covariance의 nomalized version이 correlation으로

Covariance를 각 변수의 표준편차 곱으로 나눠주면 된다.

 

멀티 라벨 분류 문제에서 Micro/Macro - Precision/Recall/F-score?

micro는 클래스 구분 없이 글로벌하게 TP, TN, FP, FN를 구해서 계산

macro는 각 클래스별로 구한 뒤 평균

 

뉴럴넷 학습시 에러가 증가할 경우 뭘 의심 해야 하나?

  • Gradient
  • Feature Scaling / Data Shuffling
  • Learning Rate
  • 버그 ; ex) 값의 일부를 NaN으로 바꿔버리는 지점

 

Large Weight 은 Overfit의 가능성으로 이어진다

입력이 조금만 변해도 큰 웨잇에 의해 값의 변화 폭이 커질 테니까

이 때는 regularization을 이용해서 weight의 크기를 제한할 수 있어야 함.

 

BatchNorm 장점?

  • 초기화 기법을 뭘 쓰든 상관 없이 잘 학습 될 여지
  • fc layer 다음에, non-linear 전에 위치 시켜 사용
  • activation을 가우시안 분포로 맞춰 줌 (but, 실제론 그렇지 않다는 논문도 있다. 아래 블로그 글 참고)
    • 실제 장점은 error surface를 스무스하게 만들어주기 때문에 학습이 원활하고 빠르게...
  • 주어진 배치 속에서 dim. 별로 normalization을 위한 평균/표준편차를 누적해 나가면서 계산
  • 깊은 네트워크여도 Weight이 중첩 되면서 값이 커지는 것을 방지한다.
  • grad 흐름 원활
    • LR을 키울 수
  • Regularization 효과도 있음
 

[개념 정리] Batch Normalization in Deep Learning - part 2.

논문에서 저자가 말한 것 처럼 Batch Normalization (BN)는 네트워크 레이어의 Internal Covariate Shift (ICS)문제를 해결하기 위해 나온 기법이다. BN을 이용하면 확실하게 학습 속도가 빨라지고 안정적으로

cvml.tistory.com

 

Batch size & Learning rate의 관계?

일반적으로는 배치가 커질 수록 LR을 크게 가져갈 수 있다.

배치가 커질 수록 error surface 상에서 내려가는 방향에 대해 좀 더 확신을 가질 수 있기 때문이다.

 

  • LR을 고정하고 배치 사이즈를 키울 경우 LR을 줄이는 효과가 있음 + 학습은 더 빨라짐 (메모리만 넉넉하다면야...)
  • 배치사이즈를 줄이면 일반화 효과는 커진다는 소리도 있다. "Revisiting Small Batch Training for  Deep Neural Network"

 

왜 입력을 Normalize 해야할까?

입력을 노말라이즈 하지 않으면, 특정 피쳐와 관련된 웨잇의 그래디언트가 다른 피쳐와 연관된 웨잇의 그래디언트 보다 상대적으로 클 수가 있다. 이렇게 되면, 최적화시 그래디언트 방향이 스무스 하지 못해질 여지가 있고, 지그재그 패턴을 보일 수 있는데 이렇게 되면 수렴이 느려진다.

 

왜 BatchNorm에 의해 입력 분포가 비슷해지면 학습의 속도가 증가?

Internal Covariate Shift가 보정 되면서(? -> 실제론 그렇지 않다고 함), 달라지는 입력에 의해 Hidden Unit의 분포가 변하는 양이 감소한다. 예를 들어서, A 고양이 이미지를 학습하다가, 종이 다른 B 고양이 이미지가 입력 된다면 입력 분포가 갑자기 달라지기 때문에 hidden Unit도 거기에 대응해서 크게 변해야할 수 있지만, BatchNorm은 그럴 가능성을 줄여 준다. Hidden Unit이 적게 변하게 만들어 줌으로써 일반화 효과로도 이어질 수 있다.

 

여러 가지 초기화 방법들

  • Bias 는 0으로 초기화 해도 상관 없음
    (https://stackoverflow.com/questions/43498037/why-add-zero-bias-in-neural-networks)
  • Xavier 초기화
    • 이전/다음 노드 개수에 의존
    • np.random.randn(in, out) / np.sqrt(in) # 입력의 개수로 스케일링
  • He 초기화
    • ReLU에 좀 더 적합
    • ReLU가 입력 분포의 절반은 날려버리니까
    • np.random.randn(in, out) / np.sqrt(in/2) # 입력 절반이 날아가는 것 반영

 

여러 가지 Activation에 대해 살펴두기

  • sigmoid 같은 경우 양 끝 단에서 saturation 문제가 발생 (기울기가 거의 0에 수렴 -> vanishing gradient 여지)
  • tanh 도 saturation 문제는 있으나, zero centered 되어 있음
  • ReLU = max(0, x) ; dead neuron의 여지
  • Leaky ReLU = max(0.1x, x)
  • PReLU = max(ax, x)
  • 그 외, Swish등 요즘 다양한 것 나왔던데 추가로 살펴볼 것

 

Feature Trasnform

  • 뉴럴넷의 레이어를 통과함에 따라 데이터의 분포가 주어진 태스크를 해결하기에 적합한 분포로 변해가는 것
  • 중간에 Non-linear Activation을 통과하면서 Linear 하게 분류할 수 없는 입력 피쳐들이 분류가 용이하도록 분포에 변화가 생기는 것

 

왜 Activation이 필요할까?

리니어 + 리니어 + 리니어 레이어만 가지고 네트워크를 만들면

리니어 레이어 한 개 쓴 것보다 나아질 게 없다.

즉, 복잡한 패턴을 잡아낼 수가 없다. (capture non-linear relationship)

이 때, non-linear activation을 추가함으로써 입력 피쳐 공간을 구기거나 펼침이 가능해지고(non-linear feature transform), 결국 linearly seperable 한 피쳐를 얻어낼 수 있다.(분류 문제라면)

 

왜 입력의 범위가 zero-centered 되어야 좋은건지?

(시그모이드를 액티베이션으로 썼을 때를 가정)

시그모이드는 출력 값이 zero-centered가 아니다. 따라서, 그 출력 값이 항상 양수가 되버린다.

이 말은 모든 weight에 대한 그래디언트가 upstream gradient의 부호에 의해 결정 된다는 소리...

따라서 다음 레이어의 그래디언트의 부호에 따라 zig-zag path로 최적화 될 여지가 있다.

*뭔 소린가 싶다면 back-prop 계산 복습 해볼 것

 

ReLU는 zero-centered이긴 하지만 입력 분포의 절반은 버린다.

초기화를 잘못하거나 LR이 너무 높을 경우 Dead ReLU로 이어질 수 있다고 함.

 

 

 

'DL&ML > concept' 카테고리의 다른 글

ArcFace Loss  (1) 2021.04.25
ReLU가 Non-linear인 이유?  (0) 2021.04.14
Seq2Seq & Beam Search  (0) 2021.04.14
Classification에서 CrossEntropy를 Loss 함수로 쓰는 이유?  (0) 2021.04.13
Posterior, Likelihood, Prior  (0) 2021.04.12