학습(learning)의 3 요소(components)와 딥러닝 알고리즘(Deep Learning Algorithm)의 주요 특징에 대해 설명하시오.
- Task, Task Experience, Performance Measure
- 딥러닝 알고리즘은 어떠한 Task의 정답을 모사하는 값을 출력해주는 함수 또는 분포를 찾는 것으로 그 분포를 구성하는 파라미터 즉 세타 값을 찾는 알고리즘을 말한다.
- 여기서 파라미터는 함수의 weight와 bias가 될 수 있고, 확률 분포의 측면에서 봤을 때는 예측값과 실제값이 될 수 있다.
위 식에 기반하여 딥러닝 알고리즘의 작동방식에 대해 설명하시오.
$f_\theta$는 initialize한 세타값 또는 학습 중인 세타값을 지닌 함수를 의미한다.
이 함수에 $\mathcal{D}_{\tau}^{train}$ 에 해당하는 인풋값을 대입한 결과를 예측값(기대값)으로 본다.
$\mathcal{L}_{\tau}$ 는 Loss function으로 기대값과 실제값의 근사한 정도를 판단하는 연산을 통해(가령 MSE가 최소값을 가지도록) 최대한 근사하는 값이 도출되도록 역전파 알고리즘을 대입하여 세타를 optimize한다.
$\mathcal{A}_{\phi}$ 는 알고리즘을 뜻하며, 세타 옵티마이징을 위한 알고리즘, 괄호 안은 그 파라미터를 의미한다.
$\mathcal{P}_{\tau}$의 경우 Performance를 의미하며 validation 데이터를 세타 최적화한 함수에 대입했을 때 퍼포먼스 결과를 도출하여 모델의 성능을 평가함을 의미한다. 이를 통해 역시나 최적의 세타값을 optimize함을 뜻한다.
결론적으로 두 공식은 모두 optimizing을 뜻하지만 학습과정에서의 train loss는 끊임없이 0으로 수렴하기 위한 최적화를 진행하므로 validation loss와 비교했을 때 loss값을 최소화 하면서도 서로 근사한 지점에서 학습을 중단하는 것이 중요하다.
뉴럴 네트워크(neural network)에서 활성함수(activation function)가 중요한 이유와 활성함수가 없을 경우 (즉, 행렬 연산으로만 네트워크를 구성할 경우) 발생하는 문제에 대해 설명하시오.
input 매트릭스에 weight 매트릭스를 순서대로 곱하고 더한(내적) 결과인 hidden layer는 결론적으로 차원이 변경되어도 선형 함수를 벗어나지 못한다.
그래서 classification task에서 선형 함수를 벗어나지 못하면 XOR 문제를 풀지 못하게 되므로 모델 성능이 한계를 갖는다.
activation function을 통해 선형 함수에서 비선형 함수로 거듭날 수 있어 (Nonlinear transformation) XOR 문제를 풀 수 있게 되었고, 이제는 웬만한 분포는 다 모사할 수 있다고 여겨지고 있다. (universal function approximator)
위 식에서 $\theta^*_\tau$의 의미가 무엇인지 설명하시오. 이를 찾기 위해 딥러닝 알고리즘에서 사용하는 기본적인 최적화 알고리즘($\mathcal{A_\phi}$)과 해당 알고리즘을 적용하기 위해 손실함수($\mathcal{L}_\tau$)가 만족해야 하는 조건에 대해 기술하시오.
$\theta^*_\tau$ : 특정 Task를 잘 수행할 수 있도록 최적화된 세타값을 의미한다.
기본적인 최적화 알고리즘은 Gradient Descent로 MSE와 같이 예측값과 실제값 간 근사한 정도를 판단하기에 적합한 공식을 적용한 결과를 토대로 각 weight값을 편미분한다.
미분을 통해 각 세타 값이 Loss Landscape에서 갖는 기울기 값을 구할 수 있으며 이를 구하면 하강해야할 방향을 알 수 있게 된다.
해당 기울기 값에 학습률 $\alpha$ 를 곱한 값을 현재 세타값에서 빼는 방식으로 최적화가 진행된다.
그러므로 이를 위해서는 미분이 가능해야 한다.
최적화된 모델의 성능($m(\theta^*_\tau)$)을 측정할 때, $\mathcal{D}_\tau^{\text{train}}$ 대신 $\mathcal{D}_\tau^{\text{valid}}$를 사용하는 이유를 설명하고, 나아가 관측된 적이 없는 테스트 데이터($\mathcal{D}_\tau^{\text{test}}$)에서 모델이 잘 작동하기 위해 테스트 데이터가 만족해야하는 가정에 대해 기술하시오.
validation 데이터는 모델이 학습하지 않은 데이터에 해당한다.
train 데이터에 대해서 학습이 완료된 모델을 평가하기 위해서는 사전에 모델이 학습하지 않은 데이터를 부여한 예측값이 실제값과 비교했을 때 근사한 정도가 높다면 비로소 ground truth에 근접한 분포를 형성했다고 판단할 수 있기 때문이다.
train loss값과 validation loss값이 서로 근사하면서 최소값에 이르는 시점의 세타값을 최적화 되었다고 보통 판단한다. train 데이터의 경우 학습하면 할수록 loss값이 최소화된다. 그렇기 때문에 주어진 데이터에 대해서만 철저하게 학습하는 과적합(overfitting)이 발생하고, 그렇게 형성된 분포는 Robust하지 못한 분포가 되어 test 데이터에 대해 좋은 결과를 출력하지 못한다.
훈련 데이터($\mathcal{D}_\tau^{\text{train}}$)가 충분히 많지 않을 경우 학습이 어려운 이유에 대해 수업시간에 배운 개념(distribution 등)을 활용하여 설명하시오.
키 데이터는 평균 키 값을 중심으로 퍼져나가는 정규 분포를 띈다는 것을 알고 있다. 실제 한국 남성의 평균 키를 수집하여 분포로 그린다고 할 때 고작 10명의 데이터로는 정규 분포 모양이 그려지지 않을 가능성이 높다. 안정적으로 종 모양을 띄우기 위해서는 random sampling의 횟수가 일정 수준 이상은 도달해야 한다. (중심 극한 정리) 이를 충족하지 못할 경우 도출한 분포가 실제 분포를 모사한다고 주장하기 어렵다.
데이터를 뽑는 횟수를 거듭할수록 대체적으로 잘 나오는 값이 더 자주 등장할 기회가 확보되는데 횟수가 적을 경우 운이 없으면 극단값만 뽑을 수도 있다. 이런 경우를 배제하는데는 많이 뽑는 것이 약이다. 이와 같은 원리로 데이터의 양이 많은 것이 중요하다.
확률적 경사하강법(Stochastic Gradient Descent)의 개념에 대해 설명하고 딥러닝의 학습규칙($\mathcal{A_\phi}$)으로서 SGD에 기반한 알고리즘이 활용되는 이유를 설명하시오.
세타값 최적화를 위해 모든 인풋 데이터와 연결된 weight에 대한 역전파 알고리즘을 적용하는 것은 비싼 연산에 해당하여 컴퓨팅 파워가 받쳐주지 못할 수 있으며, 학습 속도 자체도 느리다.
이를 해결하기 위해 SGD가 나왔으며 이는 train 데이터를 지정한 갯수만큼 mini-batch 단위로 쪼개어 학습과 최적화를 나누어 하는 방식을 말한다. (엄연한 SGD의 의미는 mini-batch를 1로 설정한 최적화를 뜻했지만 현재 mini-batch를 1로 설정하는 경우는 있을까? 싶을 정도로 없기 때문에 통상 batch 학습을 SGD로 부른다. pytorch의 optim모듈에서는 아예 그냥 학습률 설정 자체를 SGD로 부른다.)
미니배치가 클수록 최적화에 유리하다는 것이 정설이지만 batch size가 특정 선을 넘었을 경우 최적값에 도달하는 속도에 큰 차이가 발생하지 않는다고 한다. 이는 마치 10만 명의 남성을 대상으로 구한 키 분포와 100만명을 대상으로 구한 분포의 형태에 큰 차이가 발생하지 않는 것과 같은 원리가 아닐까 생각한다.
하지만 다 떠나서 내 컴퓨터가 CPU를 벗어나지 못한다면 batch size 32, 64를 벗어나기 어려울지도 모른다.
학습률 스케쥴러(learning rate scheduler)가 중요한 이유와 웜업(warm-up)과 학습률 감소(decay)가 효과적일 수 있는 이유에 대해 설명하시오.
학습률 스케쥴러를 통해 local minima라는 구덩이에 갖히지 않고 빠져나와 최대한 optimal minima에 근접하도록 유도한다.
warm-up은 지정한 범위만큼 학습과정에서 보폭을 점차 늘려가는 과정을 말한다. (epoch를 거듭할수록 선형적으로 늘려나간다. ex. 0.0002, 0.0004, 0.0006, 0.0008, 0.001..) 구덩이를 찾아가기도 전에 무한한 평면으로 튀어나가지 않도록 하기 위함이다.
decay는 특정 epoch 시점에서 학습률을 감소시키는 방법을 뜻한다. 이를 통해 loss 감소 추세를 순간적으로 키울 가능성이 있다. 이럴 경우 학습 시간을 단축하는 효과가 발휘된다. 또한 기존 학습률에서 정체된 loss값의 한계를 뚫을 가능성도 있다.
과적합(overfitting)의 개념과 과적합이 발생하는 이유에 대해 기술하고, 훈련 및 검증 과정에서 과적합의 발생여부를 어떻게 판단할 수 있는지 그리고 이를 어떻게 예방할 수 있는지 설명하시오.
주어진 학습데이터를 거의 완벽하게 모사하는 분포를 모델이 학습할 경우 과적합되었다고 말한다. iteration을 무한정 시행한다면 weight값은 학습데이터를 거의 완벽하게 모사해버린다.
이를 방지하기 위해서는 validation accuracy 또는 loss 값과 비교하는 것이다. train와 validation의 loss값 또는 accuracy가 근사하면서 최소(최대)값을 갖도록 하는 시점에서 학습을 중지하는 것이 좋다. 이를 Early Stop 기능을 통해 n번의 epoch 내 validation accuracy가 개선되지 않는다면 학습을 멈추도록 설정이 가능하다.
'데이터사이언스 이론 공부' 카테고리의 다른 글
RNN과 Encoder-Decoder Structure (0) | 2022.12.05 |
---|---|
RNN과 LSTM 원리에 대한 간략 정리 (0) | 2022.12.05 |
Word Embedding에 대한 간략 정리 (0) | 2022.10.31 |
SVM의 가우시안 RBF 커널 간략 정리 (0) | 2022.10.25 |
엔트로피(Entropy)와 크로스 엔트로피(Cross Entropy) (0) | 2022.10.07 |