zzsaza / Datascience Interview Questions
boost-devs / ai-tech-interview
머신러닝
딥러닝
- 딥러닝은 무엇인가요? 딥러닝과 머신러닝의 차이는?
딥러닝은 인공지능의 한 분야로, 인간의 뇌가 학습하는 방식을 모방한 심층 신경망을 사용하여 복잡한 문제를 해결하는 기술입니다. 이러한 신경망은 많은 층으로 구성되어 있으며, 각 층은 데이터로부터 특징을 추출하고 학습하는 역할을 합니다.
머신러닝은 컴퓨터가 데이터를 기반으로 학습하고, 예측이나 결정을 할 수 있게 하는 기술의 전체적인 범위 입니다. 딥러닝은 이러한 머신러닝의 한 분야로, 특히 많은 양의 데이터와 복잡한 신경망, 알고리즘을 사용해 학습하는 방법입니다.
- 딥러닝이 갑자기 부흥한 이유는 ?
주로 다음 세 가지 요인 때문이다.
1. 데이터의 증가 : 엄청난 양의 데이터가 매일 생성되고 있으며, 이는 딥러닝 알고리즘이 학습하고 패턴을 찾는 데 매우 중요하다.
2. 알고리즘의 발전 : 알고리즘, 특히 신경망의 구조와 학습 방법에 대한 다양한 연구가 지속적으로 발전하고 있다.
3. GPU 성능 증가 : GPU, 병렬 처리 기술의 발전으로 복잡한 딥러닝을 빠르고 효율적으로 학습시킬 수 있다.
- Cost Function과 Activation Function은 무엇인가요 ?
1. Cost Function (비용 함수)
: 모델의 예측이 얼마나 정확한지를 측정하는 함수이다. 모델의 성능을 평가하고, 모델이 학습하는 동안 이 차이(오차)를 최소화하는 것이 우리의 목적이다. (MSE, MAP, ... )
2. Activation Function (활성화 함수)
: 신경망의 뉴런에 적용되는 비선형 함수로, 뉴런의 출력을 결정하는 함수이다. 선형이 아닌 비선형을 사용하는 이유는 신경망이 복잡한 문제를 해결할 수 있도록 하기 위해서이다. (Sigmoid, ReLU, ...)
- Data Normalization은 무엇이고 왜 필요한가요?
데이터 정규화라고 부르며 데이터를 일관된 범위 내의 값으로 변환하는 과정이다. 서로 다른 범위(스케일)을 가진 데이터들을 표준화하고, 모델이 데이터를 더 효율적으로 처리하도록 한다.
가장 일반적인 정규화 방법 중 하나는 Min-Max Normalization으로, 최소-최대 정규화라고 부른다. 이는 각 특성의 값을 0과 1 사이의 범위로 조정한다. 또 다른 방법으로 Standard Normalization이 있으며, 이는 표준 정규화라고 부른다. 이는 데이터를 평균은 0, 표준편차는 1이 되도록 변환한다.
- Activation Function의 종류와 설명
- Sigmoid
- 출력 범위가 0과 1 사이로, 주로 이진 분류 문제에서 출력층으로 사용된다.
- 단점으로, 기울기 소실 문제가 발생할 수 있다.
- Tanh
- 출력 범위가 -1과 1 사이로, 시그모이드 함수와 유사하지만 더 넓은 출력 범위로 더 나은 성능을 보인다.
- 마찬가지로, 기울기 소실 문제가 발생할 수 있다.
- ReLU
- 음수는 0으로, 양수는 그대로 출력한다. 간단하고 계산 효율이 높아 많은 딥러닝 모델에서 기본적으로 사용한다.
- 단점으로, 네트워크의 일부 뉴런이 항상 0만 출력하는 상황이 발생할 수 있다.
- Leaky ReLU
- ReLU와 비슷하지만, 음수 입력에 대해 매우 작은 기울기(ex. 0.01)를 가진다.
- Softmax
- 각 클래스에 대한 확률을 계산한다.
- 주로 다중 클래스 분류 문제에서 출력층에 사용한다. 클래스별 확률을 출력하며 총합은 1이다.
- Overfitting일 경우 대처 방법
1. 더 많은 학습 데이터 사용
2. 모델 복잡도 줄이기
3. 정규화 기법 사용
4. Drop-out 사용
5. 교차 검증
6. Early Stop
7. Data Augmentation
- Hyperparameter는 무엇인가 ?
하이퍼파라미터는 머신러닝이나 딥러닝 모델의 학습 과정을 제어하는 매개변수이다. 이러한 하이퍼파라미터는 모델의 성능에 중요한 영향을 미치며, 모델 학습 전에 설정되어야 한다.
1. Learning Rate : 모델이 학습하는 속도(정도)를 결정
2. Epoch : 전체 학습 데이터 세트를 모델이 학습하는 횟수
3. Batch Size : 모델 학습 시 한 번에 사용되는 데이터 샘플의 수
4. 등
- Weight Initialization 방법에 대한 설명
가중치 초기화는 머신러닝 및 딥러닝 모델의 학습 시작 전에 모델의 가중치를 설정하는 과정입니다. 올바른 가중치로 최기화해야 모델이 빠르고 효율적으로 수렴하도록 도와주며, 학습 과정에서 문제가 발생하는 것을 방지합니다.
1. Zero or Samll
: 모든 가중치를 0 또는 매우 작은 무작위 수로 초기화 합니다.
: 단점으로, 모든 가중치가 같거나 비슷한 값을 가지면 모든 노드가 동일한 방식으로 업데이트 되어 문제가 발생할 수 있습니다.
2. Random Normal
: 가중치를 평균이 0이고 표준편차가 작은 적은 분포에서 무작위로 선택합니다.
: 단점으로, 너무 크거나 작은 값이 발생할 위험이 있습니다.
3. Xavier/Glort Initialization
: 입력과 출력 노드의 수에 따라 가중치의 스케일을 조정합니다.
: Sigmoid를 활성화 함수로 사용할 때 잘 작동합니다.
: 가중치는 평균이 0이고 분산이 2 / (입력 노드 수 + 출력 노드 수) 인 정규 분포에서 선택됩니다.
4. He Initialization
: ReLU를 활성화 함수로 사용할 때 선호되는 방법입니다.
: Xavier 초기화와 비슷하지만, 분산을 2 / (입력 노드 수) 로 설정하여 노드의 출력 분산을 조정합니다.
5. Orthogonal Initialization
: 가중치 행렬을 직교 행렬로 초기화 합니다. 이는 서로 다른 노드가 초기에 더 독립적인 특성을 가지도록 돕습니다.
- Sigmoid 보다 ReLU를 많이 쓰는 이유 ?
1. 계산 효율성
: Sigmoid에 비해 ReLU는 max(0, x) 함수로 매우 간단하고 효율적이다.
2. 기울기 감소 문제
: Sigmoid는 출력 값이 0과 1 사이에 있어 기울기가 점점 소실 되는 문제가 발생하지만, ReLU는 양수 입력에 대해 기울기가 일정하여 이러한 문제를 줄인다.
3. 비선형성 (Non-Linearity)
: ReLU는 선형적인 특징을 가지면서도 비선형 함수이다.
: 이로 인해 모델이 복잡한 함수를 학습할 수 있으면서도 계산적으로도 효율적이다.
3.1 비선형인 이유
: 꺾인 점 존재 (x=0), 단순한 상수배가 아니고 급격히 변화하기도 한다.
4. ReLU로 곡선 함수를 표현하는 방법
: 여러 ReLU를 결합한다.
: 하나의 ReLU 함수만으로는 선형 관계만 표현할 수 있지만, 여러 ReLU를 결합하여 복잡한 패턴과 곡선을 표현할 수 있다.
5. ReLU에서 Bias는 왜 있는걸까 ?
: ReLU의 형태를 변형시키지 않으면서 함수를 이동시킨다. (0이 되는 지점을 조절할 수 있음) 이는 신경망이 더 유연하게 데이터의 다양한 특성을 학습 시킬 수 있음.
: 다양한 형태의 함수를 더 잘 근사할 수 있음.
문제점
1. Dead ReLU : 노드가 음수 값만 받게 되면 항상 0만 출력하는 문제이다.
- Gradient Descent(경사 하강법)에 대한 설명
모델을 최적화하기 위해 사용되는 방법으로, 비용 함수(Cost Function)을 최소화하는 모델의 매개변수 (가중치와 바이어스)를 찾는 것이다.
비용 함수는 모델의 성능을 수치적으로 평가하는 함수로, 일반적으로 예측 값과 실제 값 사이의 차이를 나타낸다. 이를 최소화 하는 것이 목표이다.
이 비용함수의 기울기(그레디언트, Gradient)는 각 매개변수에 대한 함수의 변화량을 나타낸다. 변화량은 편미분을 계산하여 기울기를 구한다.
계산된 기울기를 사용하여 모델의 매개변수를 업데이트한다. 매개변수는 기울기의 반대 방향으로 조정한다. (최소값을 찾기 위해)
매개변수를 업데이트할 때 사용하는 학습률(Learning Rate)은 매개변수를 얼마나 업데이트할 지를 결정한다. 학습률이 너무 크면 최소값을 넘어서게 될 수 있고, 너무 작으면 최적화 가정이 매우 느려진다.
위의 과정을 반복하면서, 비용 함수의 값이 최소가 될 때까지 지속적으로 매개변수를 조정한다.
Gradient Descent 도중 때때로 Loss가 증가하는 이유
1. 학습률이 너무 높은 경우
: 매개변수를 너무 크게 업데이트 하는 경우 발생할 수 있다.
2. 비정상 데이터
: 학습 데이터에 비정상적인 데이터(Outlier)가 포함되어 있는 경우 발생할 수 있다.
- Training Set과 Test Set을 분리하는 이유는?
1. 모델의 성능을 객관적으로 평가하고, 모델이 실제로 새로운 데이터에 대해 얼마나 잘 일반화되는지를 확인하기 위해서이다.
2. 모델이 학습 데이터에만 지나치게 최적화되어, 새로운 데이터에 대해 예측할 때 성능이 떨어지는 과적합을 방지하기 위해서이다.
3. 서로 다른 모델의 성능을 비교할 때, 동일한 테스트 세트를 사용하여 각 모델의 성능을 공정하게 비교할 수 있다.
- Batch Normalization의 효과는 ?
Batch Normalization은 각 층에서 입력의 분포가 학습 과정에서 크게 변하지 않도록 유지하는 것을 목표로 합니다. 이를 통해, 각 층이 더 안정적인 분포의 입력을 받게 되어 학습률을 높이고, 학습 과정을 가속화 할 수 있습니다.
과정
1. 정규화 : 현재 층의 입력에 대한 미니 배치의 평균과 분산을 계산합니다. 그런 다음, 이 평균과 분산을 사용하여 미니 배치 정규화합니다. 이는 입력의 평균을 0으로, 분산을 1로 만듭니다.
2. 스케일링과 시프팅 : 정규화된 데이터는 종종 네트워크 학습에 바로 적합할지 않을 수 있습니다. 따라서, Batch Noramlization은 각 특성에 대해 학습 가능한 스케일링 매개변수 \(\gamma\)와 시프팅 매개변수 \(\beta\)를 도입합니다. 이를 통해, 모델이 필요에 따라 데이터의 스케일과 위치를 조정할 수 있습니다.
3. 역전파를 통한 매개변수 학습 : 학습 과정에서는 역전파를 통해 매개변수도 함께 업데이트 됩니다.
장점
1. 학습 속도 향상
2. 과적합 감소
3. Gradient 문제 완화
단점
1. 배치 크기에 의존적 : 매우 작은 배치 크기에서는 성능이 저하될 수 있습니다.
2. 인퍼런스 시 계산 복잡도 증가
- Dropout의 효과는 ?
Dropout은 딥러닝에서 사용되는 정규화 기법 중 하나를 가리키며, 과적합을 방지하고 모델의 일반화 능력을 향상시키는 데 목적이 있습니다. 이 방법은 모델의 학습 과정 중에 무작위로 일부 뉴런(연결)을 끊는 것을 의미합니다. 여기서 끊는 다는 것은 해당 뉴런의 출력을 일시적으로 0으로 설정하고, 그 뉴런이 네트워크에서 일시적으로 제외된 것 처럼 처리한다는 뜻입니다.
학습 단계에서는 모델을 훈련할 때마다 각 배치에서 특정 비율의 뉴런을 무작위로 선택하여 활성화 상태를 0으로 설정합니다.
테스트 단계에서는 모든 뉴런을 사용합니다. 학습 단계에서 사용하지 않았던 뉴런들의 가중치에 학습 단계에서 사용한 드롭아웃 비율을 곱하여 출력을 조정합니다.
효과
1. 과적합 방지 : 무작위로 뉴런을 드롭아웃시킴으로써, 네트워크가 학습 데이터의 노이즈에 과도하게 적응하는 것을 방지합니다. 이는 네트워크가 더 견고한 특성을 학습하도록 만들며, 새로운 데이터에 대한 일반화 능력을 향상 시킬 수도 있습니다.
2. 앙상블 효과 : 드롭아웃은 마치 각각 다른 네트워크 구조를 학습시키는 것과 유사한 효과를 낳습니다. 이는 여러 모델의 예측을 평균내는 앙상블 기법과 비슷한 효과를 가지며, 결과적으로 더 안정적인 예측을 제공합니다.
3. 특성의 공동 의존성 감소: 드롭아웃은 몇몇 특정 뉴런에 지나치게 의존하는 것을 방지합니다.
- SGD, RMSprop, Adam에 대한 설명
1. SGD
전체 데이터 세트 대신 무작위로 선택된 데이터 샘플에 대한 기울기를 계산하고 가중치를 업데이트하는 방법입니다.
계산 효율성이 좋지만, 최적점에 도달하는 시간이 오래걸리거나 지그재그로 움직이며 진행하는 경우가 있습니다.
2. RMSprop
SGD의 단점을 개선하기 위한 방법 중 하나로, 학습률을 동적으로 조절합니다.
파라미터의 각 요소마다 기울기의 제곱근의 이동 평균을 계산하고, 이를 사용하여 학습률을 조정합니다.
즉, 많이 변화한 가중치는 학습률을 감소시키고, 적게 변화한 가중치는 학습률을 증가시켜 더 안정적인 학습을 도와줍니다.
3. Adam
RMSprop에서 더 나아가 기울기의 모멘텀도 고려하여 학습률을 조정합니다. 즉, 기울기의 지수 가중 이동 평균을 계산하고, 기울기의 제곱의 지수 가중 이동 평균을 사용하여 각 파라미터의 업데이트 크기를 조절합니다.
- 미니배치를 작게할 때의 장단점은 ?
장점
1. 메모리 사용량을 줄일 수 있다. -> 더 큰 모델이나 복잡한 모델을 학습할 수 있다.
2. 빠른 학습 업데이트 -> 초기 학습 과정을 빠르게 할 수 있다.
3. 일반화와 과적합 방지 -> 작은 미니배치는 학습 과정에 노이즈를 추가하며, 이는 일반화와 과적합 방지에 도움이 된다.
단점
1. 수렴 속도 저하 -> 각 업데이트의 방향이 극소점을 찾는 방향과 크게 달라질 수 있다. 더 많은 epoch를 필요로 한다.
2. 성능 저하 -> 모델이 전체 데이터셋의 특성을 충분히 반영하지 못하게 할 수 있다.
- 모멘텀의 수식은 ?
$$ M_t = \gamma M_{t-1} + \eta \nabla f(x_{t-1}) $$
- 딥러닝할 때 GPU를 쓰면 좋은 이유는 ?
병렬 처리, 계산 속도, 대용량 데이터 처리
- GPU를 두 개 다 사용하는 방법은 ?
1. Pytroch : torch.nn.DataParallel
- 학습 시 필요한 GPU 메모리는 어떻게 계산하는가 ?
모델의 크기 + 데이터 크기 x 배치 크기
'끄적 끄적' 카테고리의 다른 글
코랩(Colab) 끊김 방지 (0) | 2024.10.10 |
---|---|
[TISTORY] 수학 기호, 수식 삽입 방법 (+ 모바일) (0) | 2024.07.29 |
[포토폴리오] 참고 블로그 리스트 (0) | 2023.05.20 |
Pytorch 버전 기록 (0) | 2023.03.24 |
[Boostcamp] / [Pre-Course] numpy (0) | 2022.12.29 |