해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
임성빈 교수님 - 베이즈 통계학 맛보기
베이즈 통계학은 어떤식으로 모델의 모수를 추정하고 모델을 추정할 때 사용되는 베이즈 정리에 대해서 알아보고자 합니다. 베이즈 정리는 데이터가 새로 추가될 때 정보를 업데이트하는 방식에 대해서 이론적인 기반을 소개하는 내용입니다. 머신러닝 예측 모형의 방법론에 많이 활용되는 이론입니다.
1) 조건부 확률
조건부 확률은 베이즈 통계학을 이해하기 위해 필수적으로 개념을 이해해야 합니다. 여기서 조건부 확률이란 사건 B가 일어난 상황에서 사건 A가 발생할 확률을 의미하며 $P(A\cap B) = P(B)P(A|B)$ 정의를 만족합니다. 여기서 $P(A|B)$가 조건부확률입니다.
2) 베이즈 정리
베이즈 정리는 조건부확률을 이용하여 정보를 갱신하는 방법을 알려줍니다. $A$라는 새로운 정보가 주어졌을 때 $P(B)$로부터 $P(B|A)$를 계산하는 방법을 제공합니다. 이 베이즈 정리는 아래의 수식을 만족합니다.$$ P(B|A) = \frac{P(A\cap B)}{P(A)} = P(B)\frac{P(A|B)}{P(A)} $$
3) 베이즈 정리 : 예제 $$P(\theta|D) = P(\theta)\frac{P(D|\theta)}{P(D)}$$
여기서 $D$는 새로 관찰하는 데이터를 말하며, $\theta$는 가설이나 모델링하는 이벤트나 모델에서 계산하고 싶어하는 모수라고 할 수 있습니다. $P(\theta|D)$를 사후확률(posterior)이라고 부르는데 이렇게 부르는 이유는 데이터를 관찰한 이후에 나타나는 확률이기 때문입니다. $P(\theta)$는 사전확률(prior)이라고 부르며, 데이터가 주어지지 않은 상태에서 사전에 주어진 확률입니다. $P(D|\theta)$는 가능도(likelihood)는 현재 주어진 모수에 대해 $D$라는 데이터가 관찰될 확률을 말합니다. $P(D)$는 Evidence라고 하며 데이터 자체의 분포를 뜻합니다. 위의 식으로 사전확률을 사후확률로 업데이트시켜줄 수 있습니다.
만약, COVID-99라는 바이러스가 있다고 가정해보자. 이 질병의 발병률은 10%로 알려져 있습니다. COVID-99에 실제로 걸렸을 때 검진될 확률은 99%, 실제로 걸리지 않았을 때 오검진될 확률이 1%라고 할 때, 어떤 사람이 질병에 걸렸다고 검진결과가 나왔을 떄 정말로 COVID-99에 감염되었을 확률은 얼마일까요? (이 문제는 사전확률, 민감도(Recall), 오탐율(False alarm)을 가지고 정밀도(Precision)를 계산하는 문제입니다. )
이 문제에서 $\theta$를 COVID-99 발병 사건으로 정의하고, $D$를 테스트 결과라고 정의했을 때, 사전확률 $P(\theta) = 0.1$이라고 할 수 있으며, $P(D|\theta) = 0.99, P(D|\neg \theta) = 0.01$이라는 가능도를 구할 수 있습니다. 하지만, 가능도와 사전확률만으로는 구할 수가 없기 때문에 가지고 있는 정보를 통해서 Evidence를 구해야 합니다.
Evidence는 $P(D) = \sum_{\theta}P(D|\theta)P(\theta) = P(D|\theta)P(\theta) + P(D|\neg \theta)P(\neg \theta)$로 표현할 수 있습니다. 위에 식에 대입해보면 0.108이라는 Evidence를 구할 수 있습니다. 만약 $P(D|\neg \theta)$를 모른다면, 이 문제는 풀기 어렵습니다. 위에서 얻은 정보를 통해서 $P(\theta|D)$를 구해보면 0.916이라는 값을 구할 수 있습니다.
만약, 오검진될 확률(1종 오류)이 1%가 아닌 10%라면 어떻게 될까요? 오탐율(False alarm)이 오르면 테스트의 정밀도(Precision)가 떨어지는 현상이 발생하게 됩니다. 변경된 오탐율로 계산했을 때, $P(\theta|D)$값은 0.524로 확실히 떨어지는 것을 확인할 수 있습니다. 데이터분석에서 종류에 따라 제1종 오류를 줄이는 것이 중요할 지 제 2종 오류를 줄이는 것이 중요할 지는 다릅니다. 의료 분야에서는 제2종 오류를 줄이는 것이 중요합니다. 암에 걸렸는 데, 걸리지 않았다고 진단을 하게 되면 큰 문제가 발생할 수 있기 때문입니다. 사전확률을 모르는 경우에는 베이즈 정리를 활용하기가 어렵습니다. 그래서 임의로 사전확률을 설정해주기도 하지만, 분석의 신뢰도가 떨어질 수 있습니다.
4) 베이즈 정리를 통한 정보의 갱신
베이즈 정리를 통해 새로운 데이터가 들어왔을 때 앞서 계산한 사후확률을 사전확률로 사용하여 갱신된 사후확률을 계산할 수 있습니다. 그러면 앞에서 COVID-99 판정을 받은 사람이 두 번째 검진을 받았을 때도 양성이 나왔다면 진짜 COVID-99에 걸렸을 확률은 어떻게 될까요?이미 이전에 계산된 $P(\theta|D) = 0.524, P(D|\theta)=0.99, P(D|\neg \theta)=0.1$을 가지고 새로운 Evidence를 구하면, 0.566이라는 값을 구할 수 있으며, 이 값을 통해 갱신된 사후확률을 구하게 되면 0.917이라는 높은 정밀도의 값을 구할 수 있게 됩니다. 만약, 세 번째 검사에서도 양성이 나온다면 정밀도는 99.1%까지 갱신되게 됩니다.
5) 인과 관계
조건부 확률은 유용한 통계적 해석을 제공하지만 인과관계(causuality)를 추론할 때 함부로 사용해서는 안 됩니다. 데이터가 많아져도 조건부 확률만 가지고 인과관계를 추론하는 것은 불가능합니다. 인과관계는 데이터 분포의 변화에 강건한 예측 모형을 만들 때 필요합니다. 단, 인과관계만으로는 높은 예측정확도를 담보하기는 어렵습니다. 인과관계를 알아내기 위해서는 중첩요인(confounding factor)의 효과를 제거하고 원인에 해당하는 변수만의 인과관계를 계산해야 합니다. 예를 들어, A와 B에 영향을 미치는 중첩요인 C가 있을 때, C를 제거하지 않고 인과관계를 계산하게 되면, 가짜 연관성(spurious correlation)이 나오게 됩니다.
최성준 교수님 - 딥러닝 기본 용어 설명
1) 소개
무엇이 우리를 좋은 딥러닝 개발자로 만들 수 있을까요? 텐서플로우나 파이토치와 같은 구현스킬이 중요합니다. 또한 선형대수학, 확률론과 같은 수학 기술들이 많이 필요합니다. 최근에 나온 논문들에 대해 아는 것도 중요합니다. 인공지능은 머신러닝이라는 분야가 포함되어 있고 그 안에는 딥러닝이라는 분야가 포함되어 있습니다. 이것은 딥러닝을 공부한다는 것이 인공지능을 다 말한다고 할 수 없다는 뜻입니다. 딥러닝의 가장 중요한 요소는 무엇이 있을까요? 모델을 학습할 수 있는 데이터, 데이터를 통해 학습하고자하는 모델, 모델을 만든 뒤에 학습시키기 위한 loss function, loss function을 최소화하기 위한 알고리즘이 필요합니다. 다양한 논문들을 볼 때, 이 네가지 관점에서 보면 좀 더 이해하기가 수월합니다.
2) Data
데이터는 어떤 문제를 풀 것인가에 대해 영향을 받게 됩니다. Classification의 경우 다양한 분류 대상 이미지들이 필요할 것입니다. Semantic Segmentation의 경우에는 어떤 픽셀이 어떤 부분인지 분류하는 것을 말합니다. Detection의 경우 원하는 대상의 bounding box를 찾는 것을 이야기하게 됩니다. Pose Estimation은 사람의 3차원/2차원 스켈레톤 정보를 알아내는 것을 말합니다. Visual QnA는 이미지와 문장이 주어졌을 때, 질문에 대한 답을 구하는 것을 말합니다.
3) Model
같은 문제라고 하더라도 다양한 모델의 성질에 따라 성능이 차이나게 됩니다. 여기에는 Googlenet, Resnet과 같은 다양한 model이 포함됩니다.
4) loss function
모델과 데이터가 주어졌을 때, weight를 어떻게 최적화시켜줄 것인지에 대한 함수라고 볼 수 있습니다. 보통 회귀문제에서는 MSE(Mean Squared Error)를 사용하고, 분류문제에서는 CE(Cross Entropy)를 사용해서 최적화시켜줍니다. 확률적인 문제의 경우에는 MLE를 활용해서 최적화 시켜줍니다. 결국 loss function은 원하고자 하는 값에 대한 근사치에 불과하게 됩니다. 일반적으로 loss function을 줄어든다고 해서 무조건 내가 원하는 결과를 주는 것은 아니라는 것입니다. 위에서 제시한 방법에 대한 loss function은 무조건 사용해야 하는 것은 아닙니다. 우리가 알아야할 것은 loss function을 이 문제에서 왜 사용하고 어떻게 문제가 해결되는 지를 이해해야 합니다.
5) Optimization Algorithm
최적화 방법은 어떻게 네트워크를 줄일지에 대한 이야기입니다. SGD나 Momentum과 같은 최적화 알고리즘들의 특성을 이해하는 것이 중요합니다. 이것뿐만 아니라 Dropout, Early stopping, k-fold validation, Weight decay, Batch normalization, MixUp, Ensemble, Bayesian Optimization과 같은 다양한 방법으로 학습한 데이터에서만 잘 동작하는 것이 아니라 다양한 실제 환경에서도 잘 동작하도록 만드는 테크닉들도 적용해야 합니다.
6) Historical Review
2012년도 AlexNet이 처음으로 이미지넷 대회에서 딥러닝 모델로 처음으로 1등을 하게 됩니다. 이전에는 SVM과 같은 고전적인 모델이 1등을 했었지만 딥러닝을 활용해서 실질적으로 성과를 만들게 된 계기가 되었습니다. 2013년도에는 DQN이라는 Q-learning을 활용한 강화학습 알고리즘을 꼽을 수 있습니다. 2014년에는 Encoder/Decoder를 통해 기계어 번역의 트렌드가 바뀌게 되었습니다. Adam은 일반적으로 좋은 결과를 만들어 주는 데 기여했습니다. 2015년에는 Generative Adversarial Network이 처음 나오게 되었으며, ResNet 이전에는 Layer를 깊게 쌓으면 좋은 성능이 나오지 않았습니다. ResNet을 통해 딥러닝 알고리즘의 Layer를 깊게 쌓을 수 있도록 도와줬습니다. 2017년에는 transformer라는 구조가 많은 것들을 대체하고 있습니다. 2018년에는 Bert(fine-tuned NLP models)를 통해 문제를 해결할 때 다양한 말뭉치들을 통해 학습하고 fine-tuning하는 개념이 생기게 되었습니다. 2019년에는 GPT-X는 굉장히 많은 파라미터들을 가지고 구성된 모델입니다. 2020년에는 Self Supervised Learning이 나오게 되었는 데, 한정된 학습데이터 외에도 정답을 모르는 unsupervised learning을 적용하는 방법이였습니다.
최성철 교수님 - Pytorch 시작하기
1) Pytorch
Pytorch는 Numpy 구조를 가지는 Tensor 객체로 array를 표현합니다. 자동미분(Autograd)을 지원하여 Deep Learning 연산을 지원합니다. 또한 다양한 형태의 Deep Learning을 지원하는 함수와 모델을 지원하는 특징이 있습니다.
2) Colab connect to VScode
최성준 교수님 - 뉴럴 네트워크 MLP
1) Neural Networks
Neural networks의 정의는 "function approximators that stack affine transformations followed by nonlinear transformations"입니다.
2) Linear Neural Networks
선형 회귀 분석에서는 위의 그림과 같이 표현되고, 우측은 데이터와 모델, loss function(MSE)로 정의할 수 있습니다. 결국, 여기서 우리가 하고자 하는 것은 loss 값을 최소화하는 w, b를 구하는 것입니다. 기본적으로 선형모델을 근사시키는 방법에는 여러가지가 존재하지만 그것들은 제약조건이 많이 존재합니다. 그래서 이를 신경쓰지 않고 해결하기 위해서 Backpropgation을 활용하려고 합니다. loss가 줄어드는 것이 목적이기 때문에 미분 값의 음수 방향으로 업데이트하게 된다면 최적의 지점에 도착하게 됩니다. 각각의 w,b를 업데이트하는 과정에서 $\eta$가 편미분값에 곱해지게 되는 데, 이것을 우리는 step size라고 부릅니다. step size는 너무 작거나, 너무 클 때에는 학습이 제대로 되지 않습니다. 하지만, 세상은 선형의 문제만 존재하지 않습니다. 그래서 무수히 많은 weight와 bias 값을 계산해야 한다면 이를 행렬로 표현해서 계산해주면 됩니다. 여기서 행렬곱이란 것은 두 벡터스페이스 간의 선형 변환이라고 해석할 수 있습니다. 선형성이 있는 변환은 행렬로 표현할 수 있기 때문에 행렬을 찾는다는 것은 두 벡터스페이스 간의 선형 변환을 찾겠다는 것과 같은 의미가 됩니다. 만약, 선형함수로만 층을 계속 쌓게되면 어떤 현상이 발생할까요? 층을 아무리 쌓아도 결과는 하나의 층을 지나온 것과 다르지 않습니다. 이런 이유에서 선형함수와 비선형 함수를 모두 사용해서 층을 쌓게 되는 것입니다.
비선형함수로 활용되는 activation function에는 Relu, Sigmoid 등 다양한 것이 존재하는 데, 문제에 따라 어떤 활성화 함수가 좋은지는 알수가 없습니다. 분명한 것은 레이어를 깊게 쌓기 위해서는 반드시 비선형 함수를 포함시켜야 한다는 것입니다. Neural Network가 학습이 잘 되는 이유가 있습니다. 그 이유는 히든 레이어 하나가 포함된 인공신경망은 원하는 값으로 근사할 수 있습니다. 하지만, 이것은 존재한다의 의미이지, 내가 원하는 문제에 대해 원하는 것을 얻을 수 있다는 아니라는 것을 확실히 인지해야 합니다. loss function은 대표적으로 회귀문제에서는 MSE, 분류문제에서는 CE, 확률 문제에서는 MLE를 사용하는 데, 이것은 정해진 것이 아닙니다. 그때마다 상황에 맞는 loss function을 활용해서 우리가 원하는 결과를 얻어내면 되는 것입니다. 하지만, 비교적 앞에서 말한 것대로 각각의 문제에서 널리 사용되는 loss function입니다. 단순히 사용하면 돼! 라는 것보다는 원리와 이유를 알고 사용해야 합니다.