article thumbnail image
Published 2022. 4. 11. 09:33

목차

  1. 딥러닝은 무엇인가요? 딥러닝과 머신러닝의 차이는?
  2. Cost Function과 Activation Function은 무엇인가요?
  3. Data Normalization은 무엇이고 왜 필요한가요?
  4. 알고있는 Activation Function에 대해 알려주세요. (Sigmoid, ReLU, LeakyReLU, Tanh 등)
  5. 오버피팅의 경우 어떻게 대처해야 할까요?
  6. 하이퍼 파라미터는 무엇인가요?
  7. Weight Initialization 방법에 대해 말해주세요. 그리고 무엇을 많이 사용하나요?
  8. 볼츠만 머신은 무엇인가요?
  9. TF, PyTorch 등을 사용할 때 디버깅 노하우는?
  10. Neural Network의 가장 큰 단점은 무엇인가? 이를 위해 나온 One-Shot Learning은 무엇인가?

 


1. 딥러닝은 무엇인가요? 딥러닝과 머신러닝의 차이는?

딥러닝이란 여러 층을 가진 인공신경망(Artificial Neural Network, ANN)을 사용하여 머신러닝 학습을 수행하는 것으로, 심층학습이라고도 부른다.

딥러닝은 엄밀히 말하자면 머신러닝에 포함되는 개념이다. 따라서 전통적인 머신러닝 기법과 딥러닝 기법의 차이를 설명하고자 한다.

 

머신러닝딥러닝의 가장 큰 차이점은 다음과 같다. 기존 머신러닝에서는 학습하려는 데이터의 여러 특징 중에서 어떤 특징을 추출할지 사람이 직접 분석하고 판단해야하는 반면, 딥러닝에서는 기계가 자동으로 학습하려는 데이터에서 특징을 추출하여 학습하게 된다. 따라서 특징 추출에 사람이 개입(feature engineering)하면 머신러닝, 개입하지 않으면 딥러닝이다. 또한, 딥러닝은 머신러닝보다 큰 데이터셋과 긴 학습시간이 필요하다. 정형데이터는 주로 머신러닝, 비정형데이터는 주로 딥러닝 방식을 사용한다.

 

추가내용) AI, ML, DL

 

인공지능이란 인간이 가지고 있는 인식, 판단 등의 지적 능력을 모델링하여 컴퓨터에서 구현하는 것이다. 머신러닝, 딥러닝 외에도 다양한 분야가 인공지능 내에 포함된다.

 

머신러닝이란 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법이다. 머신러닝은 조건이 복잡하고 규칙이 다양한 경우에, 데이터를 기반으로 일정한/숨겨진 패턴을 찾아내서 문제를 해결한다. 머신러닝의 단점은 데이터에 매우 의존적이라는 것이다. 즉, 좋은 품질의 데이터를 갖추지 못하면 머신러닝 수행결과도 좋지 않다는 것이다.

 

머신러닝은 아래와 같이 분류된다.

  • 지도학습
    • 분류, 회귀, 추천시스템, 시각/음성 인지(DL), 텍스트분석/NLP(DL)
  • 비지도학습
    • 클러스터링, 차원축소, 강화학습

 


2. Cost Function과 Activation Function은 무엇인가요?

cost function

 

모델은 데이터에 대해 현재 예측을 얼마나 잘하고 있는지 알아야 학습 방향을 어느 방향으로, 얼마나 개선할지 판단할 수 있다. 이 때, 예측 값과 데이터 값의 차이에 대한 함수 cost function(MSE, CrossEntropy 등) 이라고 한다. cost function 을 최소화함으로써 모델을 적절한 표현력을 갖추도록 학습시킬 수 있다.

activation function

 

데이터를 예측하기 위해 선형 모델을 사용할 수 있다. 하지만 선형 모델의 경우 복잡한 데이터에 대해서는 적절한 예측을 못한다. 따라서 이를 처리하기 위해 비선형 모델이 필요하다.

 

선형 모델을 비선형 모델로 만들어주는 역할을 하는 함수가 바로 활성화 함수 activation function(Sigmoid, ReLU 등)이다.

비선형 함수인 활성화 함수가 선형 함수와 결합됨으로써 선형 모델은 비선형 모델이 된다.

 

선형 모델은 깊게 쌓을 수 없다. 깊게 쌓아도 하나의 층을 잘 튜닝한 것과 다르지 않기 때문이다.

비선형 모델은 깊게 쌓을 수 있다. 선형으로 만들었다가 비선형으로 만드는 작업을 계속 반복할 수 있기 때문이다. 이로 인해 모델은 복잡한 데이터에 대해 더 표현력이 좋아질 수 있다.

 

활성화 함수는 입력 값에 대해 더 높게 혹은 더 낮게 만들 수 있기 때문에 활성화 함수라고 불린다.


3. Data Normalization은 무엇이고 왜 필요한가요?

Data Normalization(데이터 정규화)이란  feature들의 분포(scale)을 조절하여 균일하게 만드는 방법 이다. 데이터 정규화가 필요한 이유는 데이터 feature 간 scale 차이가 심하게 날 때, 큰 범위를 가지는 feature(ex. 가격)가 작은 범위를 가지는 feature(ex. 나이)보다 더 강하게 모델에 반영될 수 있기 때문이다.


즉, 데이터 정규화는 모든 데이터 포인트가 동일한 정도의 스케일(중요도)로 반영되도록 하는 역할을 수행하며, 아래와 같은 장점을 얻을 수 있다.

  • 학습속도가 개선된다.
  • 노이즈가 작아지므로 오버피팅을 억제시킨다.
  • 데이터를 덜 치우치게 만드므로, 좋은 성능을 보인다.

 

 

추가내용) Regularization, Normalization, Standardization

 

Regularization(정규화, 규제) 란 모델에 제약(penalty)를 주어 모델의 복잡성을 낮추고, 이를 통해 오버피팅을 방지하는 방법이다. 제약을 사용하면 학습 정확도(train accuracy)는 조금 낮아질 수 있지만, 테스트 정확도(test accuracy)를 높일 수 있다. 정규화에는 Drop out, Early Stopping, Weight decay(Parameter Norm Penalty)와 같은 방법이 존재한다.

 

Normalization, Standardization은 모두 데이터의 범위(scale)을 축소하는 방법이다.(re-scaling) 데이터의 범위 재조정이 필요한 이유는 데이터의 범위가 너무 넓은 곳에 퍼져있을 때(scale이 크다면), 데이터셋이 outlier를 지나치게 반영하여 오버피팅이 될 가능성이 높기 때문이다. 두 방법은 scale 조절 방식에 차이가 존재한다.

 

Normalization(정규화) 방법에는 Batch Normalization, Min-Max Normalization 등이 있다.

  • Batch Normalization : 적용시키려는 레이어의 통계량, 분포를 정규화시키는 방법이다.
  • Min-Max Normalization : 모든 데이터 중에서 가장 작은 값을 0, 가장 큰 값을 1로 두고, 나머지 값들은 비율을 맞춰서 모두 0과 1 사이의 값으로 스케일링하는 방법이다. 모든 feature들의 스케일이 동일하지만, 이상치(outlier)를 잘 처리하지 못한다. 식은 아래와 같다. 

 

Standardization(표준화) 란 표준화 확률변수를 구하는 방법이다. 이는 z-score를 구하는 방법을 의미한다. z-score normalization이라 불리기도 한다.

  • Z-score: 관측값이 평균 기준으로 얼마나 떨어져있는지 나타낼 때 사용한다. 각 데이터에서 데이터 전체의 평균을 빼고, 이를 표준편차로 나누는 방식이다. 이상치(outlier)를 잘 처리하지만, 정확히 동일한 척도로 정규화 된 데이터를 생성하지는 않는다. 식은 아래와 같다.

4. 알고있는 Activation Function에 대해 알려주세요. (Sigmoid, ReLU, LeakyReLU, Tanh 등)

4.1. Sigmoid

 

sigmoid 함수는 입력을 0~1 사이의 값으로 바꿔준다.

입력 값이 크거나 작을 때 기울기가 0에 가까워지는 saturation 문제가 있다.
이는 gradient vanishing 문제를 야기하므로 요즘에는 활성화 함수로서 잘 사용되지 않는다.

또한 값이 zero-centered 가 아니기 때문에 입력값의 부호에 그대로 영향을 받으므로 경사하강법 과정에서 정확한 방향으로 가지 못하고 지그재그로 움직이는 문제가 있다.

 

4.2. Tanh

 

tanh 함수는 입력을 -1~1 사이의 값으로 바꿔준다.

sigmoid 함수와 마찬가지로 saturation 문제가 있다.

 

4.3. ReLU

 

ReLU 함수는 입력이 양수면 그대로, 음수면 0을 출력한다.

계산 효율과 성능에서 뛰어난 성능을 보여 가장 많이 사용되는 활성화 함수이다.

양의 입력에 대해서는 saturation 문제가 발생하지 않는다.

음의 입력 값에 대해서는 어떤 업데이트도 되지 않는 Dead ReLU 문제가 발생한다.

 

4.4. LeakyReLU

 

ReLU 와 마찬가지로 좋은 성능을 유지하면서 음수 입력이 0이 아니게 됨에 따라 Dead ReLU 문제를 해결하였다.


5. 오버피팅의 경우 어떻게 대처해야 할까요?

5.1. Regularization

Generalization이 잘 되도록 모델에 제약을 주며 학습을 하여 overfitting을 방지하는 방법

 

5.2. Early stopping

training loss는 계속 낮아지더라도 validation loss는 올라가는 시점을 overfitting으로 간주하고 학습을 종료하는 방법

 

5.3. Parameter norm penalty (weight decay)

비용함수에 제곱을 더하거나(L2-Regularization), 절댓값을 더해서(L1-Regularization) weight 크기에 페널티를 부과하는 방법

 

5.4. Data augmentation

훈련 데이터의 개수가 적을 때, 데이터에 인위적으로 변화를 주어 훈련 데이터의 수를 늘리는 방법

 

5.5. Noise robustness

노이즈나 이상치 같은 엉뚱한 데이터가 들어와도 흔들리지 않는(robust 한) 모델을 만들기 위해 input data나 weight에 일부러 노이즈를 주는 방법

 

5.6. Label smoothing

모델이 Ground Truth를 정확하게 예측하지 않아도 되게 만들어 주어 정확하지 않은 학습 데이터셋에 치중되는 경향(overconfident)를 막아주는 방법

 

5.7. Dropout

각 계층 마다 일정 비율의 뉴런을 임의로 정해 drop 시키고 나머지 뉴런만 학습하도록 하는 방법

매 학습마다 drop 되는 뉴런이 달라지기 때문에 서로 다른 모델들을 앙상블 하는 것과 같은 효과가 있다.

dropout은 학습 시에만 적용하고, 추론 시에는 적용하지 않는다.


6. 하이퍼 파라미터는 무엇인가요?

하이퍼 파라미터(Hyper-parameter)는 모델링할 때, 사용자가 직접 세팅해주는 값을 뜻한다. 하이퍼 파라미터는 정해진 최적의 값이 없으며, 사용자의 선험적 지식(경험하지 않아도 알 수 있는 것)을 기반으로 설정(휴리스틱=어림짐작)한다. 예를 들어, 딥러닝의 하이퍼 파라미터에는 학습률, 배치 사이즈 등이 있고, 가중치는 학습 과정에서 바뀌는 값이며 이는 파라미터에 속한다. 하이퍼 파라미터 튜닝 기법에는 Manual Search, Grid Search, Random Search, Bayesian Optimization 등이 있다. 딥러닝에서의 하이퍼 파라미터는 아래의 그림을 참고한다.

딥러닝에서의 하이퍼 파라미터

 

파라미터 vs 하이퍼 파라미터

파라미터와 하이퍼 파라미터를 구분하는 기준은 사용자가 직접 설정하느냐 아니냐이다. 사용자가 직접 설정하면 하이퍼 파라미터, 모델 혹은 데이터에 의해 결정되면 파라미터이다. 딥러닝에서 하이퍼 파라미터는 학습률, 배치 크기, 은닉층의 개수 등이 있고, 파라미터는 가중치, 편향 등이 있다.


7. Weight Initialization의 방법에 대해 말해주세요. 그리고 무엇을 많이 사용하나요?

딥러닝에서 가중치를 잘 초기화하는 것은 기울기 소실이나 local minima등의 문제를 야기할 수 있기 때문에 중요하다.

7.1. LeCun Initialization

딥러닝의 대가 LeCun 교수님이 제시한 초기화 방법으로 들어오는 노드 수에 대해 정규 분포와 균등 분포를 따르는 방법이 있다.

 

  • 정규 분포를 따르는 방법

 

  • 균등 분포를 따르는 방법

 

7.2. Xavier Initialization

Lecun과 비슷하지만 들어오는 노드 수와 나가는 노드 수에 의존하고, 적절한 상수 값도 발견하여 사용하는 방법

 

  • 정규 분포를 따르는 방법

 

  • 균등 분포를 따르는 방법

 

sigmoid나 tanh 함수와는 좋은 결과를 보여주지만 ReLU 함수와 사용할 경우 0에 수렴하는 문제가 발생한다.

따라서 sigmoid나 tanh 함수와 주로 많이 사용한다.

 

7.3. He Initialization 

ReLU와 함께 많이 사용되는 방법으로, LeCun 방법과 같지만 상수를 다르게 하였다. 들어오는 노드만 고려한다.


8. 볼츠만 머신은 무엇인가요?

볼츠만 머신은 가시층(Visible Layer)와 은닉층(Hidden Layer), 총 두 개의 층으로 신경망을 구성하는 방법이다.

볼츠만 머신은 모든 뉴런이 연결되어 있는 완전 그래프 형태이며, 제한된 볼츠만 머신(RBM)에서는 같은 층의 뉴런들은 연결되어 있지 않은 모양이다.

 

기본적으로 단층 구조이며, 확률 모델이다. 분류나 선형 회귀 분석 등에 사용될 수 있다.

특히 DBN(Deep Belief Network)에서는 RBM들을 쌓아 올려, 각 볼츠만 머신을 순차적으로 학습시킨다.

 

 

색깔 별 cell의 역할은 아래와 같다.


9. TF, PyTorch 등을 사용할 때 디버깅 노하우는?

오류가 발생하는 곳, 중요한 데이터가 바뀌는 지점을 디버깅 포인트로 두고, 확인하는 방법이 있다. 또, IDE에서 다양한 디버깅 extension을 지원하기 때문에 이를 잘 활용하면 좋은 인사이트를 얻을 수 있다. 예를 들어, vs code의 jupyter extension을 사용하면 데이터 프레임, 변수 값 등을 보기 쉽게 정렬하여 확인할 수 있다.

 

디버깅 노하우도 중요하지만, 오류에 대한 대처방식을 익히면 좋다. 디버깅 하지 않고 오류에 대처할 수 있으므로, 디버깅 시간을 아껴준다. 예를 들어, 딥러닝 학습을 위한 코드를 작성할 때, 가장 많이 발생하는 오류는 CUDA out of memory와 shape 오류이다.

out of memory와 같은 오류는 배치 사이즈를 줄인다거나, 입력 데이터의 사이즈를 줄이는 방식으로 해결할 수 있다. shape 오류는 디버깅을 통해서 현재 입력 데이터의 shape, type등을 확인하고, 함수의 파라미터가 요구하는 shape, type에 맞게 변형하는 과정이 필요하다.

추가적으로 딥러닝 디버깅 툴은 아니지만, logging tool로서 tensorboard, wandb 등이 매우 유용하게 사용될 수 있다.


10. Neural Network의 가장 큰 단점은 무엇인가? 이를 위해 나온 One-Shot Learning은 무엇인가?

사람은 처음 보는 물건(새 레이블)에 대해 조금만 봐도 다른 것과 이 물건을 구분해낼 수 있다. 하지만 뉴럴넷은 이 물건을 구분해내기 위해서는 이 물건에 대한 많은 데이터를 학습해야 한다.

 

One-Shot Learning은 뉴럴넷도 새로운 레이블을 지닌 데이터가 적을 때(One-Shot 에서는 한 개)에도 모델이 좋은 성능을 내도록 사용되는 방법이다.

 

이를 위해서는 기존에 다른 레이블의 많은 데이터를 학습하여 데이터의 특성을 잘 이해하는 pretrained model이 필요하다.

 

학습된 모델에 새로운 레이블 데이터 하나 던져주면 모델은 데이터의 특성에 대한 이해를 바탕으로 이 레이블에 대해서도 이해를 하게 된다.


Ref : https://github.com/SunWooChan/ai-tech-interview/blob/main/answers/3-deep-learning.md

'💡 AI > DL' 카테고리의 다른 글

Back-Propagation 의 Chain Rule  (0) 2021.02.01
Chain Rule  (0) 2021.02.01
DNN의 수학적 이해  (1) 2021.02.01
Deep Neural Network - Back Propagation  (0) 2021.02.01
심화 경사하강법  (0) 2021.01.31
복사했습니다!