****모바일 앱 환경에서는 latex 수식이 깨져서 나타나므로, 가급적 웹으로 보시길 추천드립니다. ***
"Which loss functions are used in deep learning optimization?"
오늘은 딥러닝 최적화 상황에서 자주 쓰이는 목적 함수, 즉 손실 함수에는 무엇이 있는지 그리고 그 함수들의 성질에 대해
이야기해보고자 한다.
먼저, 딥러닝에서의 최적화 문제 종류는 크게 두 가지, Stochastic optimization problem과 Finite-sum minimization (or Empirical Risk Minimization)이 있다.
Stochastic optimization problem은 다음과 같이 정의된다.
$\min_x [f(x) = \mathbb{E}_z f(x, z)]$
여기서 $z$는 random variable을 의미한다. 딥러닝에서는 가장 대표적으로 Data sampling이 있을 것이다.
만약, 위 $z$라는 random variable이 i.i.d하고, Uniform distribution을 따른다면, 위 문제는 다음과 같이 표현된다.
$\min_x [f(x) = \frac{1}{n} \sum_{i=1}^n f_i(x)]$
여기서 $n$은 train data 개수 (sample) 를 의미한다. 즉, 우리가 최소화하고 싶은 함수는 각 sample loss ($f_i(x)$)의 평균이다.
딥러닝에서 $x$는 모델의 파라미터를 의미하고, $f(x)$는 구체적인 함수로 정의되어진다. 이 함수로 어떤 것이 사용되는지 알아보자.
딥러닝에서의 최적화는 결국 '모델의 output과 정답 (label)과의 차이 (loss value) 를 최소화해간다.'이고 '정답과의 차이'를 측정하는 함수가 곧 손실함수이다. 위 경우에서는 이는 $f$로 표기하였다.
즉, $i$번째 data sample ($1 \le i \le n$)에 대해서 모델의 결과값과 정답의 차이를 측정한 것이 $f_i$이다.
그리고 현재의 파라미터 $x_t$ 에서 그 값을 측정했다면 $f_i(x_t)$가 된다.
이렇게 $n$개의 모든 data sample들에 대해서 loss 값을 구한 것이 $f(x_t)$이고 이를 최소화하는 것이 딥러닝의 학습 과정이다.
이러한 과정을 "Empirical Risk Minimization" (ERM)이라고 한다. ERM도 딥러닝, 최적화에서 매우 중요한 개념, 용어이기 때문에 이에 대해서 조만간 자세하게 이야기할 예정이다.
그렇다면, 다시 본론으로 돌아와서 구체적으로 딥러닝 학습에서 자주 쓰이는 $f_i(x)$에는 어떠한 것들이 있을까?
첫 번째는 'Square Loss' 이다.
$f_i(x) := (y_i - \hat{y}_i)^2$
매우 심플하다. 그냥 i번째 데이터의 'label' ($y_i$)와 모델의 예측값 ($\hat{y}_i$) 의 차이를 제곱한 것이다.
제곱을 한 이유는 둘 사이의 차가 '양수'일 수도 있고, '음수'일 수도 있기 때문에 양수와 음수를 그대로 더하면 총 loss value가 줄어드므로 이를 제곱해서 양수로 만든 다음에 더한 것이다.
아마 통계, 선형회귀 등을 공부해본 적이 있다면 위와 같은 Square loss꼴에 익숙할 것이다.
위 Loss function은 '회귀' (Regression)에서 가장 대표적으로 자주 쓰이는 함수이다.
그리고 앞서 언급했듯이 결국 '학습' (Training)은 Loss function을 최소화하도록 $x$를 업데이트하는 것이기 때문에 이는
통계에서의 'least square problem'으로 치환될 수 있다.
least square problem은 매우매우 중요한 개념이기 때문에 이에 대해서는 추후 '통계'를 주제로 글을 연재하게 된다면
다룰 수 있도록 해볼 계획이다.
다음으로 딥러닝에서 자주 쓰이는 손실함수는 'cross-entropy loss'이다.
이것 또한 매우 중요한 손실함수이므로 이에 대해 자세히 설명하는 것으로 이번 포스팅을 마무리하겠다.
먼저 단순한 예시, 즉 이진 분류 (binary classification) 상황에 대해 먼저 설명하고 그 다음 다중 분류 (multi class classification) 으로 넘어가겠다.
전자를 잘 이해한다면 후자도 쉽게 이해할 것이다.
cross-entropy를 설명하기 전에 이것이 어떤 상황에서 주로 쓰이는 손실함수인지 알아보자.
이 함수는 주로 '분류' (classification) task에서의 손실함수로 쓰이는데 딥러닝에서 분류는 상당히 자주 쓰이는 task이다.
가장 단순하게는 여러 클래스를 가진 이미지 데이터셋에서 해당 사진이 어떤 클래스에 속하는지, 즉 강아지인지 고양이인지 사자인지 호랑이인지 등을 분류하는 것이 있을 수 있다.
딥러닝에서 '분류'를 수행하기 위해서는 결국 해당 데이터가 특정 클래스에 속할 확률을 출력해야 하는데, 이진 분류에서는 '양성일 확률', '음성일 확률'이 출력될 것이고, 단순하게 생각해서 양성일 확률이 0.5 (threshold)보다 크면 양성으로 모델은 분류하고, 0.5보다 작으면 음성으로 모델은 분류할 것이다.
다중 분류에서는 클래스가 3가지 이상이므로, 특정한 이미지에 대해서 사자일 확률, 고양이일 확률, 강아지일 확률, 호랑이일 확률, 얼룩말일 확률 등등이 출력될 것이고 이 중 가장 큰 확률로 모델은 해당 이미지를 분류해낼 것이다.
그렇다면 신경망에서 마지막에 출력이 될 때 확률이 출력되어야 하므로, 확률의 기본 공리들을 모두 만족해야 한다.
즉 다음을 만족해야 한다.
$0 \le \mathbb{P}(\hat{y}_i^c|x_i) \le 1$
$\sum_{c=1}^C \mathbb{P}(\hat{y}_i^c|x_i) = 1$
여기서 '$c$'는 클래스를 의미한다. 총 $C$개의 클래스가 있고, $i$번째 데이터에 대해서 모델이 예측한 각각의 클래스일 확률을 $\mathbb{P}(\hat{y}_i^c)$으로 표현하였다.
조건부 확률로 표기한 이유는 특정 데이터가 주어졌을 때, 모델이 특정 데이터가 각 클래스에 속할 확률을 출력하는 것이므로 조건부 확률로 표기하였다.
그렇다면 이진 분류에서는 한 클래스에 속할 확률이 p이면 자동적으로 다른 클래스에 속할 확률이 1 - p 이므로, 0과 1 사이의 값으로 p가 출력되게 해주면 된다.
이때 쓰이는 함수가 대표적으로 sigmoid function이 있다.
Sigmoid function은 위 그래프와 같이 S자 모양으로 생긴 함수이며 함숫값의 범위는 $[0, 1]$ 이다.
즉, 함숫값을 확률로 볼 수 있고, 이진 분류를 위한 머신러닝 / 딥러닝에서 실제로 많이 쓰이는 함수 중 하나이다.
그렇다면, 특정 사진이 '강아지', '고양이'를 분류하는 경우는 어떻게 되어야 할까?
우선 라벨링을 진행해야 한다. 강아지 클래스를 $0$, 고양이 클래스를 $1$이라고 한다면, 강아지 사진에 대해서는 $[1, 0]$, 고양이 사진에 대해서는 $[0, 1]$로 라벨링을 진행할 수 있다.
그리고 모델의 아웃풋도 $[p, 1 - p]$로 나올 것이고 이 중 좀 더 큰 값을 갖는 것으로 클래스 분류를 진행할 것이다.
(만약 $p$가 크면 강아지, $1 - p$가 크면 고양이라 분류할 것이다.)
그렇다면 라벨도 하나의 확률분포로 볼 수 있고 (각 값이 $0$ 이상 $1$ 이하이고, 총합이 $1$이므로) 모델의 아웃풋도 확률분포이므로, 그 두 확률분포 '차이'가 최소화되도록 최적화 과정을 진행해야 한다.
자, 그런데 이진 분류에 대한 분포를 모델링할 수 있는 아주 유명한 확률 분포 모델이 있다.
'베르누이 분포'이다.
베르누이 분포 (Bernoulli distribution) 는 매 시행에서 결과가 둘 중 하나에 속할 확률을 나타내는 분포이다.
$f(x ; p) := p^x (1 - p)^{1 - x}$
단, $x \in \{0, 1\}$
결과가 두 가지 중 하나이므로 베르누이 분포를 따르는 Random variable $x$가 가질 수 있는 값은 $0$ 또는 $1$이라 하고, (양성 또는 음성, 남자 또는 여자 etc), 위 분포에서 $x$가 $0$일 확률은 $1 - p$, $1$일 확률은 $p$임을 알 수 있다.
자, 그렇다면 모델의 확률 분포가 베르누이 분포이고, 이 베르누이 분포는 라벨이 갖고 있는 베르누이 분포와 그 차이가 최소화되어야 한다.
다시 말하면, 이는모델의 아웃풋이 갖는 확률분포가 어떤 정해진 확률분포 (라벨의 확률분포)와 가까워지도록 해야 하고, 이를 측정하는 함수가 'binary cross-entropy loss'이다.
여기서 $y_i$는 $i$번째 data sample의 라벨 (정답)이고, $\hat{y}_i$는 모델의 output (예측)이다.
일반적으로, $\hat{y}_i$는 가장 마지막에 sigmoid function을 통과한 값이다.
자, 베르누이 분포와 binary cross-entropy의 유사점이 느껴지는가? 결국 베르누이 분포의 log likelihood 이다.
$\log$를 붙이면, 곱이 합으로 바뀌므로 쉽게 유도해볼 수 있다.
$-$가 붙은 것은 '손실함수'이므로 '최소화'하기 위해 붙은 것이고, 이를 Negative log likelihood라고 한다.
즉, 모델 아웃풋의 log likelihood를 최대화한다 = negative log likelihood를 최소화한다. = negative log likelihood를 우리는
'(binary) cross-entropy loss' 라고 한다.
다중 분류는 어떨까?
각각의 클래스에 속할 확률을 한 번에 출력해주면서 총합이 1인 확률의 성질을 만족해주는 함수가 필요하다.
이를 위한 아주 좋은 함수가 있는데, Softmax function이다.
우변의 함수를 softmax function이라고 하는데 결국 i번째 클래스가 c번째 클래스에 속할 확률을 나타낸다.
그리고 확률의 총합은 1이다.
그렇다면, 분류를 위한 모델에서는 결국 모델의 아웃풋은 일종의 확률분포를 지니고 있음을 알 수 있고, 그렇다면 "$i$번째 데이터에 대한 모델의 확률값 분포는 label과 같은 class에서 $1$에 가장 가까운 값이어야 한다."
예를 들어, 클래스가 {자동차, 자전거, 배, 비행기}가 있다고 해보자.
그렇다면 비행기 사진을 집어넣는다면 모델의 output은 softmax를 거쳐서 나오기 때문에
비행기일 확률, 자동차일 확률, 자전거일 확률, 배일 확률이 나올 것이다.
그리고, 당연히 비행기일 확률이 가장 높아야 한다.
label도 $\{ 0, 0, 0, 1 \}$로 이뤄져 있을 것이다.
자동차일 확률 = $0$, 자전거일 확률 = $0$, 배일 확률 = $0$, 비행기일 확률 = $1$.
* 라벨을 0과 1로 만들어주는 과정을 '원핫인코딩'이라고 한다.
역시나 동일하게 모델의 아웃풋으로 나오는 확률분포가 라벨이 갖고 있는 확률분포와 최대한 닮아야하고, 차이가 최소화되어야 한다. 이를 우리는 log likelihood를 최대화하는 방식, negative log likelihood를 최소화하는 방식으로 진행하고 역시나 'cross - entropy loss'를 사용한다. 다만, 현재는 '다중 분포'이기 때문에 bernoulli가 아닌, multinomial distribution으로 모델링될 수 있다.
그리고 이때의 손실함수는 다음과 같다.
여기서 $p(x_i)$는 $x_i$에 대한 true label distribution, $q(x_i)$는 $x_i$에 대한 모델 아웃풋 distribution을 의미한다.
그런데 앞에서 라벨 distribution은 정답 클래스에 대해서만 확률이 1이고 나머지는 모두 0으로 모델링되어 있다고 하였다.
0에 log값을 곱해도 0이므로 결국 여러 개의 클래스에 대한 확률에서 남는 것은 정답 클래스에 대한 모델의 확률값 즉,
$-\log{q(x_i)}$이고 이것을 최소화 하는것은 결국 $q(x_i)$를 최대화하는 것과 동일하다. 즉, 정답인 클래스에 대해 모델의 확률 예측값이 최대화되도록 하는 것이다.
이 함수는 매우 중요한 함수이므로 다른 관점에서 다시 한 번 해석해보겠다.
정보 이론 관점에서 cross entropy를 설명할 수 있는데 이를 위해서는 entropy, KL-divergence, 그리고 결국 cross entropy가 KL-divergence와 entropy의 합임을 알아야 하는데 이를 설명하면 너무 길어지기 때문에 다음 글로 미루도록 하겠다.
'Deep dive into Optimization' 카테고리의 다른 글
Deep dive into optimization : Gradient descent - Updated (0) | 2023.03.20 |
---|---|
Deep dive into optimization: Gradient descent - Updated (0) | 2023.03.16 |
Deep dive into optimization: Convexity - Updated (0) | 2023.03.11 |
Deep dive into optimization part 3 - Updated (0) | 2023.03.08 |
Deep dive into Optimization Part 1. 최적화란 무엇인가? (Updated) (2) | 2023.03.04 |
댓글