[CS182] Lecture 2 - ML Basics 1.
CS 182: Deep Learning
Head uGSI Brandon Trabucco btrabucco@berkeley.edu Office Hours: Th 10:00am-12:00pm Discussion(s): Fr 1:00pm-2:00pm
cs182sp21.github.io
머신러닝 문제는 크게
- Supervised learning
- Unsupervised learning
- Reinforcement learning
으로 나뉜다.
1. Supervised learning
Label이 있는 데이터를 통해 학습한 후, unseen data에 대한 label을 추측한다.
여기서 f(x)를 표현하는 방법, f와 label의 차이를 측정하는 방법, 최적의 parameter를 찾는 방법 모두 여러 가지가 있다.
2. Unsupervised learning
이번엔 unlabeled data에서 representation을 구하는 것이다.
대표적인 예시는 generative modeling인데, 주어진 unlabeled data로부터 새로운 무언가를 생성해내는 것이다.
GANs, VAEs, pixel RNN 등이 예시 모델이다.
또는 representation 그 자체를 배우는 것이 목표인 모델도 있다. 1강 초반의 lauguage model이 그 예이다.
3. Reinforcement learning
현재 state에 따라, reward를 최대화하도록 학습하는 것이 reinforcement learning이다.
State에 따라 agent는 action을 취하고, 이에 반응하여 reward가 지급되고 state가 갱신되는 것이 반복된다.
이번 강의에선 Supervised learning에 집중한다.
앞서 간단하게 살펴 본 supervised learning의 예시는 위와 같다.
그러나 어떤 데이터가 특정한 label임을 어떻게 알 수 있을까?
예를 들어,
위의 이미지처럼 숫자를 인식하는 모델에서, "애매하게 맞는" 경우를 discrete한 label에서 어떻게 표현할 수 있을까?
이를 확률로 표현함으로써 해결할 수 있다.
Discrete한 label을 조금 바꾸는 건 불가능하나, 확률을 조금 올리는 건 가능하니, output을 확률로 표현하는 것이다.
이렇게 해당 input x일 때, 그 class가 y인 확률을 구하도록 학습한다.
그렇다면, 어떻게 확률 정보를 뽑아낼 수 있을까?
확률은 반드시 양수이고, 모든 class에 대한 conditional probability의 합은 1이여야 한다. 이를 만족시키기 위해 내부적으로 생성된 feature를 softmax 함수에 통과시켜서 자연스럽게 위의 조건을 충족시키는 방법이 있다.
반드시 softmax일 필요는 없고, 함수의 값이 양수이면서 전체 class들에 대한 합이 1인 함수를 사용하면 된다.
머신러닝에서 보통 right answer는 right parameter에 의해 나오므로, 확률 변환 함수보다는 올바른 parameter를 구하는 것이 중요해서 아무런 함수를 사용해도 된다고 하신다.
위와 같이 softmax 함수를 사용해 확률의 조건을 만족시킬 수 있다.
일반적으로, N개의 label이 있으면 p(y|x)는 N-dim vector이고, softmax를 사용해 나타내는 이 확률값은
이 된다.
이 함수의 이름이 softmax인 이유는 위 그림에서 알 수 있는데, exponential coefficient가 커질수록 softmax 함수는 보다 hard해지고, 마치 계단함수처럼 모양이 변화한다. 기본 softmax 함수는 soft하게 최대값으로 접근해서 그러한 이름이 붙었다고 한다.
보통, 문제를 해결하기 위해 우리가 밟는 절차는
Class 정의 --> loss fcn 정의 --> optimizer 선택 --> 일해라 GPU
인데, 이번에 다룰 부분은 loss function이다. 우리가 최소화하고자 하는 것이다.
이를 위해, 먼저 dataset이 어떻게 생성되는지부터 관찰해보자.
수많은 데이터들 중에서 어떤 데이터가 뽑힐 확률이 p(x)를 따른다고 하자.조건부확률을 사용해, 이 데이터가 뽑혔을 때, label이 y일 확률은 p(y | x)이다.즉, 데이터셋 안의 (data, label) 이 뽑힐 확률은 p(y | x)의 분포를 따른다.
그렇다면 data가 i.i.d. 가정을 따를 때, 전체 dataset에 대한 확률은 각 data의 확률들의 곱이 된다.이것은 true p(D)인데, 우리가 원하는 것이 이것이다. 우리는 최대한 이 원본 데이터 분포를 학습하고 싶은데,
그걸 위해 parametrization function을 통해 확률값을 학습한다. 위의 p(D)를 극대화하는(=원본 데이터 분포에 가장 가까운?) parameter를 학습해야 하는데, 문제는 확률값은 0과 1 사이이기에 여러 번 곱해질수록 전체 값이 0에 가까워진다는 점이다.
그래서 위 확률에 log를 취해 곱셈을 덧셈으로 만들어준다. 이를 최대화하는 parameter를 찾는 것은 위에서의 p(D)의 최대화와 같다. 이를 만족하는 theta를 찾는 과정이 MLE(maximum likelihood estimation)이고,
부호만 반전시킨 것이 NLL(negative log-likelihood)이다.결국 우리가 최소화하고자 하는 것이 loss이므로, 위 형태가 곧 하나의 loss function이 될 수 있다.
일반적으로, loss function은 parameter가 얼마나 나쁜지를 측정하고, 우리는 가장 최선의 parameter를 찾고자 한다.
위의 이미지에 NLL, zero-one loss, MSE라는 3개의 loss function의 예시가 있다.
MSE는 실제로 NLL과 같은 형태이다. Gaussian data를 전제로 한 후 NLL을 계산 시, MLE의 최대화(NLL의 최소화)가 곧 squared error의 최소화가 됨을 확인할 수 있다(CS229의 4강 참조).
Loss function을 정의한 다음은 optimizer를 골라야 한다. 대체 어떻게 parameter를 최적화할까? Loss function이 최소가 되는 걸 골라야 하니, 변수를 그 방향으로 조금씩 움직여 보면 되지 않을까?.
다음과 같이 loss function이 있다. 여기서 값이 감소하게 되는 방향을 찾아, 조금씩 parameter를 갱신해 나가는 방법이다.
간단히 낮은 차원에 대해 관찰해보면,
Slope의 반대 방향으로 갈 시 loss가 감소함을 쉽게 볼 수 있다.
N-dim에서도 크게 다르지 않고, 각 element마다 derivative를 계산해주면 된다.
이는 gradient descent라는 방법으로 추후 배우게 된다고 한다.
그럼 지금까지의 내용을 정리하는 느낌으로, logistic regression의 예시를 보자.
Vector의 형태로 주어지는 input에 parameter를 곱해 나온 결과에 softmax 함수를 취래 각 class에 대한 확률값을 계산해준다.
Negative log-likelihood를 이용해 loss를 구하고, loss가 감소하는 방향으로 parameter를 갱신하며 optimization을 수행한다.
그 중 class가 2개뿐인 경우를 binary classification이라고 하는데, 위 식에서 볼 수 있듯이 간단한 계산을 이용해
p(y | x)값을 조금 더 깔끔하게 정리할 수 있다.
마지막으로 risk에 대해 알아보겠다.
말 그대로, 잘못된 답을 얻게 될 가능성이다. 보통 loss의 평균을 이용해 계산한다.
Empirical risk는 가진 sample에 기반해 구한 loss, 즉 경험에 의한 risk이다.
True risk는 실제 현실에서 model이 가지게 될 loss의 기대값이다.
당연히 우리는 우리가 가진 data만 활용 가능하니 empirical risk가 true risk와 같다고 가정해서 학습을 진행할 수 밖에 없다.
그러나 이것이 risk에 대한 좋은 representation일까? Empirical risk의 minimization이 true risk의 minimazation과 같을까?
여기엔 두 가지 상황이 존재한다.
Overfitting: empirical risk는 낮지만 true risk는 높은 경우이다.
Dataset이 너무 작거나 model이 너무 powerful할 때(has too many parameters/capacity) 발생하는 현상으로,
가지고 있는 sample에 대해서만 risk가 낮으니 dataset을 과하게 학습한 경우라고 할 수도 있겠다.
Underfitting: 두 risk 모두 높은 경우이다.
model이 너무 약하거나 optimizer가 잘 맞지 않을 때 일어난다.