안녕하세요?

 

11강에서 그라디언트에 대해서 공부했습니다. ML을 공부하며 제가 처음 넘겼던 고비였습니다. 그라디언트 디센트를 공부하면서 이해는 하겠는데, 뭔가 답답한 기분이 계속 들었습니다. "그라디언트가 기울기 벡터라고 하고 원래 그라디언트는 증가하는 방향이다."라는 의미가 안 다가왔었습니다. 네 맞습니다. 그라디언트에 대해서 잘 몰랐습니다. 이번강의 보시면서 저처럼 답답한 기분이 드시는 분은 꼭 11강부터 보시기 바랍니다.

11강 보기: https://www.youtube.com/watch?v=rpZnpiAa_TI

강의보기: https://www.youtube.com/watchv=kVFyBvwrcoA&list=TLPQMjcwNzIwMjSR4y9Zt-PaQw&index=2

 

Optimization(최적화)

최적화는 머신러닝뿐만 아니라 다양한 분야에서 활용되는 이론입니다. AI 대학원에서도 따로 한 과목이 있을 정도로 내용도 많고 중요한 이론이죠.

하지만, 우리는 아직 Deep Learning을 공부하는 단계가 아니니까 아주 간단하게만 공부할 예정입니다. 그래도 딥러닝 최적화에 대한 맛보기 정도는 같이 학습할 겁니다. 지난 강에서 Jacobian과 Hessian을 간단히 소개했기 때문에 충분히 이해할 수 있습니다.

가봅시다.!!

최적화의 3 요소: Objective function, Decision Variable, Constraint

영어로 3요소를 보니까 처음 보는 거 같지만, 앞에 두 개는 이미 공부했습니다.

1. Objective Function(목적함수)

$$ \min_x f(x) $$

$f(x)$ 가 목적함수고 이걸 최소화시키는 x를 찾는다는 겁니다. 많이 보고 들은 말입니다. 우리의 목적함수는 뭐였죠? 맞습니다. MSE 또는 SSE였습니다.

$$ \min_w L(w), \quad L(w) = \frac {1}{N}\sum_{i=0}^{N}(w^Tx_i - y_i)^2 $$

위와 같이 쓸 수 있습니다.

 

2. Decision Variable(결정변수)

$$ x = \begin {bmatrix}
x_0 \\
x_1 \\
... \\
x_{N}
\end {bmatrix} $$

우리의 결정변수는 $w$ 였습니다. 우리의 회귀 선을 결정해 주는 변수인 거죠.

$$ w = \begin {bmatrix}
w_0 \\
w_1 \\
... \\
w_{N}
\end {bmatrix} $$

이 두 가지는 Direct Solution을 공부하면서 계속 봐왔습니다. 혹시 잘 모르시면 이전 강의 빨리 돌려서 보시면 금방 이해하실 수 있습니다.

 

3. Constraint(제약조건)

우리의 목적함수 MSE, Loss Function을 구할 때는 제약조건이 없었습니다. 그래서 강의에서 하나 추가해서 예를 들었습니다. $w_j \geqq 0, \forall j$ 즉, 모든 $j$에 대하여 $w_j$는 0보다 크거나 같다는 겁니다. 결괏값(종속변수) $y$ 에 대해서 모든 입력값(독립변수)$x$가 양의 관계를 갖는다고 제약조건을 줬습니다.

집값과 관계가 있는 독립변수를 면적과 방의수로 했는데 만약 전체 데이터에 대해 양의관계가 아니라면 데이터가 부족하거나 편향돼있다고 판단하고 최적화 알고리즘을 실행시킬 필요도 없다는 거죠.

Convex function

출처: https://vitalik.eth.limo/general/2020/11/08/concave.html

 

사실 다 아실 겁니다. "아래로 블록", "위로 블록". Convex를 왜 공부할까요? 그라디언트 디센트가 뭐였는지 제가 간략하게 설명했었습니다. 아무점이나 잡은 다음에 $w$에 대응하는 L(w)를 구하고 $w$를 계속 변경하면서, $\nabla L(w)$가 거의 0과 가까워지면 stop 하는 알고리즘입니다. 그럼 아무 데나 잡은 점에서 convex 한 function 이어야만 합니다. 그래야 $w$를 계속 변경하면서 대입하는 게 의미가 있는 겁니다. $w$에 대한 함수가 아래로 블록 하지 않은데 $w$를 움직여 봤자 최솟값으로 갈 수 없겠죠.

 

여기서 의문이 드셔야 됩니다. 우리가 배운 MSE는 $w$에 대한 함수이고 2차 방정식이었고, 최고차항의 계수는 $x_i^2$으로 무조건 컨벡스인데 이런 알고리즘을 배워야 돼?

 

네 맞습니다. 현재까지 배운 목적함수에 대해서 Convex를 결정하는 알고리즘을 넣는 거는 의미가 없습니다. 하지만 딥러닝에서는 얘기가 다릅니다.

딥러닝의 목적함수

 

딥러닝의 목적함수는 위 그림처럼 아주 복잡합니다. GD는 초기화 시, 아무 점이나 고르기 때문에 현재 점에서 Convex 한 지 판단할 수 있으면, Convex 하지 않은 경우 GD를 생략할 수 도 있을 겁니다.

Convex Function, Convex Set

 

Convex인지 어떻게 판단할까요? 위 그림 아래 수학식이 있습니다.

(수학식의 내용은 강의에서는 더 자세하게 설명했습니다.)

"왜 Convex 수식을 공부해야 되는 거야?" 더 나아가면, Machine Learning 수학식들을 왜 다 공부하는지도 의문입니다.

도대체 왜???????

 

수학식으로 쓸 수 있으면 알고리즘으로 만들 수 있고, 컴퓨터로 프로그래밍이 가능합니다. 컴퓨터는 계산기니 까요.

그럼 진짜 우리가 쓰는 GD알고리즘이 Convex를 판단하고 GD를 할까요?

 

다시 복잡한 딥러닝의 목적함수를 생각해 봅시다. 

 

저렇게 복잡하니 무조건 Non-Convex인데 무슨 소리인지 모르겠는데...

 

그럼 구간을 나누어서 특정 구간에서 Convex인지 판단하는 건 괜찮을 까요? 그리고 다른 $w$(즉 다른 점)를 잡아 다시 해당 구간에서 Convex여부를 판단하고 GD를 한다면 효율적일 것 같습니다. 

 

유튜브 강의에서 Non-Convex 한 4차 방정식의 경우로 생각해봅시다. 4차 방정식은 아래로 블록 2개가 있으니까 Random Initialization을 몇 번해서 Convex한 경우에 GD를 수행하고 $L(w)$가 가장 작을 때를 구하면 될 것 같습니다.  

 

진짜 이렇게 구하는 게 좋을까요? 

GD 코드 예시

 

우리가 쓰는 패키지의 GD관련 Method가 이런 방법을 사용할까요? 진짜 효율적일까 한번 생각해 봅시다. 

 

정답부터 말씀드리면 실제 GD 알고리즘에서 Convex를 판단하는 로직은 없습니다. 위 Deep Learning 목적함수 그림에서 Deep Learning 목적함수를 매우 복잡한 것처럼 표현했지만, 3차원 공간에 최대한 복잡하게 보이게 표현한 것뿐입니다. 실 데이터에서 딥러닝의 목적함수는 3차원 공간에 표현 불가능하고 훨씬 더 복잡합니다. 그 복잡한 목적함수를 구간 별로 나누어서 Convex를 판단한다는 건 전혀 실용적이지 않습니다. Convex 한 지 판단하는 계산을 추가하는 것 자체가 컴퓨터에게 추가적인 부하를 주는 겁니다.

 

그냥 그라디언트 디센트를 진행하고 Local Minimum을 피하기 위한 기법들을 사용하는 게 훨씬 효율적입니다. 또한 앞 서 말씀 뜨렸지만, 우리가 현재까지 배운 MSE는 명확하게 Convex입니다. 굳이 Convex 판단 로직을 추가하지 않아도 됩니다. 

 

Non-Convex는 Global Minimum이 보장되지 않습니다. 즉 Local Minimum에 도달할 가능성이 있다는 거죠. 하지만, Global Minimum을 찾는 방법과 Local Minimum을 피하는 방법이 있습니다. 그래서 굳이 Convex를 판단하지 않고 일단 GD를 진행하고 Global Minimum에 가는 방법을 쓰는 겁니다. 

 

대표적으로 2가지 방법이 있습니다.

 

1. 초기화와 관련된 방법과

2. 수학적으로 GD 식에 변형을 주는 방법도 있습니다.

 

1번 중에 하나는 여러 점에서 그라디언트 디센트를 하고 가장 작은 $L(w)$를 선택하는 방법입니다. 유튜브 강의에서 설명했습니다.  또한, 향후 딥러닝을 공부할할 때 여러 번 초기화 하는 것 말고도 Xavier/He 초기화를 공부할 것입니다.

 

2번에는 AdaGrad, Adam, RMSProp 등이 있습니다. 이 역시도 Deep Learning을 학습하며 공부할 예정입니다.

 

아직까지는 Shallow만 이해하셔도 됩니다. 

Gradient Descent

유트브 강의에서는 Gradient Descent에 대한 자세한 내용을 하기 전에 Gradient에 대해서 다시 복습합니다. 11강 블로그에서 말씀드렸지만, 12강에도 틀린 부분 정정합니다.

그라디언트의 방향이 그라디언트 값이 커지는 방향이라고 했는데 *함수 $f$가 커지는 방향이 더 정확합니다.

 

*함수 $f$는 $w$에 대해 미분하기 전 원래 함수 즉, MSE를 의미합니다.

 

유트브 강의에서는 MSE를 미분한 식으로 GD를 한다는 걸 설명하고, Direct Soultion과 비교하면서 끝을 냈습니다.

마찬가지로 GD에 대한 포스팅은 다음 강으로 넘기겠습니다. ^^

+ Recent posts