Q1. 딥러닝과 머신러닝의 차이는?
기존 머신러닝에서는 학습하려는 데이터의 여러 특징 중에서 어떤 특징을 추출할지 사람이 직접 분석하고 판단해야하는 반면, 딥러닝에서는 기계가 자동으로 학습하려는 데이터에서 특징을 추출하여 학습하게 된다. 따라서 특징 추출에 사람이 개입(feature engineering)하면 머신러닝, 개입하지 않으면 딥러닝이다. 또한, 딥러닝은 머신러닝보다 큰 데이터셋과 긴 학습시간이 필요하다. 정형데이터는 주로 머신러닝, 비정형데이터는 주로 딥러닝 방식을 사용한다.
+) 머신러닝이란 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법이다. 머신러닝은 조건이 복잡하고 규칙이 다양한 경우에, 데이터를 기반으로 일정한/숨겨진 패턴을 찾아내서 문제를 해결한다. 머신러닝의 단점은 데이터에 매우 의존적이라는 것이다. 즉, 좋은 품질의 데이터를 갖추지 못하면 머신러닝 수행결과도 좋지 않다는 것이다. 머신러닝은 지도학습(분류, 회귀, 추천시스템 등)과 비지도학습(클러스터링, 차원축소, 강화학습)으로 분류된다.
Q2. cost function과 activation function은 무엇인가?
cost function: 모델은 데이터에 대해 현재 예측을 얼마나 잘하고 있는지 알아야 학습방향을 어느 방향으로, 얼마나 개선할지 판단할 수 있다. 이 때, 예측 값과 데이터 값의 차이에 대한 함수를 cost function(MSE, CrossEntropy 등) 이라고 한다.
activation function: 데이터를 예측하기 위해 선형 모델을 사용할 수 있다. 하지만 선형 모델의 경우 복잡한 데이터에 대해서는 적절한 예측을 못한다. 따라서 이를 처리하기 위해 비선형 모델이 필요하다.선형 모델을 비선형 모델로 만들어주는 역할을 하는 함수가 바로 활성화 함수 activation function(Sigmoid, ReLU 등) 이다.
+) 비선형 함수인 활성화 함수가 선형 함수와 결합됨으로써 선형 모델은 비선형 모델이 된다.
선형 모델은 깊게 쌓을 수 없다. (why? 깊게 쌓아도 하나의 층을 잘 튜닝한 것과 다르지 않기 때문이다.)
비선형 모델은 깊게 쌓을 수 있다. (why? 선형으로 만들었다가 비선형으로 만드는 작업을 계속 반복할 수 있기 때문이다.) 이로 인해 모델은 복잡한 데이터에 대해 더 표현력이 좋아질 수 있다.
Q3. Tensorflow, Pytorch 특징과 차이가 무엇인가?
가장 큰 차이는 딥러닝을 구현하는 패러다임이 다르다는 것이다.
Tensorflow: Define-and-Run. 계산 그래프를 한 번 정의하고 나면 그래프에 들어가는 입력 데이터만 다르게 할 수 있을 뿐 같은 그래프만을 실행할 수 있다.(정적)
Pytorch: Define-by-Run. 각 순전파마다 새로운 계산 그래프를 정의하여 이용한다.(동적)
Q4. Data Normalization, Regularization은 무엇인가?
Data Normalization: Data Normalization(데이터 정규화)이란 feature들의 분포(scale)을 조절하여 균일하게 만드는 방법이다. 데이터 정규화가 필요한 이유는 데이터 feature 간 scale 차이가 심하게 날 때, 큰 범위를 가지는 feature(ex. 가격)가 작은 범위를 가지는 feature(ex. 나이)보다 더 강하게 모델에 반영될 수 있기 때문이다. 즉, 데이터 정규화는 모든 데이터 포인트가 동일한 정도의 스케일(중요도)로 반영되도록 하는 역할을 수행하며, 아래와 같은 장점을 얻을 수 있다. =>Batch Norm같은 경우
Regularization: 모델에 제약(penalty)를 주어 모델의 복잡성을 낮추고, 이를 통해 오버피팅을 방지하는 방법이다. 제약을 사용하면 학습 정확도(train accuracy)는 조금 낮아질 수 있지만, 테스트 정확도(test accuracy)를 높일 수 있. => weight decay(L1,L2), Drop out, Early Stopping
Q5. L1, L2 regularization은 무엇인가?
L1 loss가 L2 loss에 비해 Outlier에 대하여 더 robust함(why? L2 loss는 직관적으로 오차의 제곱을 더하기 때문에 더 크게 영향을 받기 때문이다.)
L1 Regularization은 가중치 업데이트 시, 가중치의 크기에 상관 없이 상수값을 빼면서 진행된다. 그렇기에 작은 가중치들은 거의 0으로 수렴 되어, 몇개의 중요한 가중치들만 남게 된다. 즉 L1은 sparse model같은 경우에 쓰이기 좋다. L2 Regularization은 가중치 업데이트 시, 가중치의 크기가 직접적인 영향을 미다. 즉, L2는 L1 보다 가중치 규제에 좀 더 효과적이다.
Q6. Activation Function은 무엇인가?
Sigmoid: 입력을 0과 1사이로 바꿔주며 기울기아 0에 가까워지는 saturation문제가 있다. 이것은 gradient vanishing문제를 야기하기에 요즘에는 잘 쓰이지 않는다.
Tanh: 입력을 -1과 1사이로 바꿔주며 Sigmoid와 마찬가지로 saturation문제가 있다.
ReLU: f(x)=max(0,x)으로, 입력이 양수면 그대로, 음수면 0을 출력한다. 계산 효율과 성능에서 뛰어난 성능을 보여 가장 많이 사용되는 활성화 함수이다. 양의 입력에 대해서는 saturation 문제가 발생하지 않는다. 그러나 음의 입력 값에 대해서는 어떤 업데이트도 되지 않는 Dead ReLU 문제가 발생한다.
LeakyReLU: ReLU 와 마찬가지로 좋은 성능을 유지하면서 음수 입력이 0이 아니게 됨에 따라 Dead ReLU 문제를 해결하였다.
Q7. Overfitting일 경우 해결할 수 있는 방법은 무엇인가?
Early stopping: training loss는 계속 낮아지더라도 validation loss는 올라가는 시점을 overfitting으로 간주하여 학습을 종료하는 방법이다.
Weight decay: L2 regularization과 똑같으며 wieght를 작게 유지함으로써 일반화 능력을 향상시킨다.
Data augmentation: 훈련 데이터의 개수가 적을 때, 데이터에 인위적으로 변화를 주어 훈련 데이터의 수를 늘리는 방법이다.
Noise robustness: 노이즈나 이상치같은 엉뚱한 데이터가 들어와도 흔들리지 않는(robust 한) 모델을 만들기 위해 input data나 weight에 일부러 노이즈를 주는 방법을 말한다.
Dropout: 각 계층 마다 일정 비율의 뉴런을 임의로 정해 drop 시키고 나머지 뉴런만 학습하도록 하는 방법을 말한다. 매 학습마다 drop 되는 뉴런이 달라지기 때문에 서로 다른 모델들을 앙상블 하는 것과 같은 효과가 있다. dropout은 학습 시에만 적용하고, 추론 시에는 적용하지 않는다.
Batch normalization: 활성화함수의 활성화값 또는 출력값을 정규화하는 방법이다. 각 hidden layer에서 정규화를 하면서 입력분포가 일정하게 되고, 이에 따라 Learning rate을 크게 설정해도 괜찮아진다. 결과적으로 학습속도가 빨라지는 효과가 있다. => 학습 시 미니배치 단위로 입력의 분포가 평균이 0, 분산이 1이 되도록 정규화한다.
Q8. 뉴럴넷의 가장 큰 단점은 무엇인가? 이를 위해 나온 One-shot learning은 무엇인가?
사람은 처음 보는 물건 (새 레이블) 에 대해 조금만 봐도 다른 것과 이 물건을 구분해낼 수 있다. 하지만 뉴럴넷은 이 물건을 구분해내기 위해서는 이 물건에 대한 많은 데이터를 학습해야한다.
One-shot Learning 은 뉴럴넷도 새로운 레이블을 지닌 데이터가 적을 때 (one-shot 에서는 한 개) 에도 모델이 좋은 성능을 내도록 사용되는 방법이다. 이를 위해서는 기존에 다른 레이블의 많은 데이터를 학습하여 데이터의 특성을 잘 이해하는 pretrained 모델이 필요하다. 학습된 모델에 새로운 레이블의 데이터 하나 던져 주면 모델은 데이터의 특성에 대한 이해를 바탕으로 이 레이블에 대해서도 이해를 하게 된다.
+) One-shot learning: 하나의 샘플 이미지만으로 새로운 클래스를 인식하는 것을 의미한다. 예를 들어, 고양이를 인식하는 딥러닝 모델에게 "스핑크스"라는 새로운 종류의 고양이를 인식하도록 요청한다면, 모델은 이전에 본 적이 없는 스핑크스 고양이 사진 하나만으로도 인식을 수행할 수 있어야 한다. 이것은 학습 데이터가 매우 제한적인 경우에 유용하다.
Few-shot learning: 한 클래스당 일부 샘플 이미지만 사용하여 새로운 클래스를 인식하는 것을 의미한다. 예를 들어, 알파벳 손글씨 이미지를 분류하는 딥러닝 모델에게 "종이 상자"라는 클래스를 추가하라는 요청을 받았다면, 모델은 종이 상자에 대한 몇 가지 샘플 이미지를 보고 이를 인식할 수 있어야 한다. 이것은 one-shot learning보다는 학습 데이터가 더 많이 필요하지만, 전체 데이터셋을 학습하는 것보다 효율적인 방법이다.
Zero-shot learning: 기존의 지도 학습에서는 학습 데이터에 포함된 클래스에 대해서만 분류 작업을 수행할 수 있다. 하지만 제로샷 학습은 이전에 학습된 모델을 사용하여 학습 데이터에 없는 새로운 클래스를 인식하고 분류할 수 있다. 이를 위해서는 새로운 클래스에 대한 설명 정보를 입력으로 주어야 한다.
예를 들어, '강아지', '고양이', '토끼' 등의 동물 분류 모델이 있다고 가정해본다. 이 모델이 '사자'라는 클래스에 대해서는 학습되지 않았지만, '사자'라는 동물의 특징을 설명하는 텍스트 정보를 입력하면, 모델은 이를 이용하여 '사자'를 분류할 수 있다.
Q9. Gradient Descent란 무엇인가?
Gradient Descent는 어떤 함수의 극소점을 찾기 위해 gradient 반대 방향으로 이동해 가는 방법이다.
경사하강법의 문제는 아래와 같다.
- 적절한 학습률
- local minimum
Q10. Back Propagation이란 무엇인가?
역전파 알고리즘은 Loss에 대한 입력값의 기울기(미분값)를 출력층 layer에서부터 계산하여 거꾸로 전파시키는 것이다.
이렇게 거꾸로 전파시켜서 최종적으로 출력층에서의 output값에 대한 입력층에서의 input data의 기울기 값을 구할 수 있다. 이 과정에서 chain rule이 이용된다.
출력층 바로 전 layer에서부터 기울기(미분값)을 계산하고 이를 점점 거꾸로 전파시키면서 전 layer들에서의 기울기와 서로 곱하는 형식으로 나아가면 최종적으로 출력층의 output에 대한 입력층에서의 input의 기울기(미분값)을 구할 수가 있다. 이를 그림으로 나타내면 아래와 같다.
'AI' 카테고리의 다른 글
부스트코스 '딥러닝을 이용한 자연어 처리' 강좌 (0) | 2023.07.10 |
---|---|
연세대학교 대학원 인공지능학과 합격! (2) | 2023.06.17 |
딥러닝 기술면접 준비 2 (0) | 2023.05.31 |