LP와 QP에서는 목적함수와 제약의 모양을 보고 볼록 문제인지 판단했다. 그런데 식에 곱, 나눗셈, 제곱근이 섞여 있으면 그대로는 볼록 문제처럼 보이지 않을 수 있다. 그때 식 자체를 포기하기 전에 변수를 다른 좌표로 표현하면 계산하기 쉬워지는가?를 물을 수 있다.
Geometric Programming(기하계획법, GP)는 양수 변수의 곱과 거듭제곱으로 된 특정 문제를 로그 변수로 바꾸어 볼록 문제로 푸는 방법이다. 이 글에서는 두 설계변수의 곱을 유지하면서 비용을 줄이는 작은 예제에서 시작한다. 함수의 종류를 구별하고, 로그 변환을 한 줄씩 적용한 뒤, 답을 원래 변수로 되돌리는 것까지 마친다.
Part A. 곱과 거듭제곱이 있는 문제 알아보기
1. 작은 문제: 곱은 16 이상, 비용은 작게
두 부품의 성능을 나타내는 양수 x1,x2를 정한다고 하자. 결합 성능은 두 값의 곱이고, 비용은 각 성능의 제곱근을 더한 값이라는 모형을 생각한다.
minimizex1,x2>0subject tox1+x2x1x2≥16.
먼저 가능한 선택 몇 개의 비용을 계산해 보자.
선택 (x1,x2)
곱 x1x2
비용 x1+x2
(1,16)
16
5
(4,4)
16
4
(16,1)
16
5
균형 있게 나눈 (4,4)가 좋아 보인다. 하지만 세 후보만 비교해서는 모든 양수 중 최적이라고 결론 내릴 수 없다. 이 문제를 어떤 구조로 읽고 풀 것인지가 GP의 출발점이다.
목적함수에는 제곱근이 있고 제약에는 두 변수의 곱이 있다. LP나 QP의 표준형에 바로 들어맞지 않는다. 특히 제곱근은 오목함수이므로, 이 목적함수를 최소화하는 원래 형태는 볼록 최적화의 표준 조건을 만족하지 않는다. GP에서는 이런 곱과 거듭제곱을 로그로 바꿀 수 있는지 살펴본다.
2. Monomial: 양의 계수 하나와 거듭제곱들의 곱
GP의 monomial(단항함수)는 다음 모양이다.
m(x)=cx1a1x2a2⋯xnan,c>0,ai∈R,xi>0.
c는 양의 계수, ai는 지수다. 지수는 양의 정수뿐 아니라 0, 음수, 소수 같은 모든 실수가 가능하다. 예를 들어 다음은 모두 monomial이다.
3x12x2−1,x1=x11/2,x1x216=16x1−1x2−1.
첫 식에서 x1=2, x2=4를 대입하면 3⋅4/4=3이다. 나눗셈은 음의 지수로 쓸 수 있어도 함수의 종류가 달라지지 않는다. 양의 상수도 모든 지수가 0인 monomial이다.
학교에서 다항식을 배울 때의 “단항식”보다 지수의 범위가 넓다. 대신 계수와 변수는 반드시 양수다. −3x1은 계수가 음수이므로 여기서의 monomial이 아니다.
R++n은 모든 성분이 엄격하게 양수인 벡터들의 집합이다. xi≥0와 다르게 0도 포함하지 않는다. 이 정의역 덕분에 음의 지수와 실수 지수를 일관되게 쓰고, 뒤에서 로그도 취할 수 있다.
3. Posynomial: monomial들을 양의 계수로 더하기
Posynomial(포지노미얼)은 monomial을 유한 개 더한 함수다.
f(x)=k=1∑Kckx1a1k⋯xnank,ck>0.
K는 더하는 항의 개수이고, k는 그 항을 구별하는 번호다. 각 항마다 지수도 달라도 된다. 예를 들어
f(x)=2x1+x23+x1x2
는 세 항의 posynomial이다. x1=x2=1이면 값은 2+3+1=6이다. 항이 하나인 monomial도 posynomial에 포함된다.
핵심은 지수가 정수인지가 아니라 양의 계수인 곱의 항들을 더했는가다. 일반적인 polynomial(다항식)과 같은 말이 아니다. 양의 함수값을 가진다는 사실만으로 posynomial인 것도 아니다. 각 항의 계수 조건을 확인해야 한다.
식의 모양을 정리할 때 다음 규칙을 쓸 수 있다.
연산
결과
monomial × monomial, monomial ÷ monomial
monomial
posynomial + posynomial, posynomial × posynomial
posynomial
posynomial ÷ monomial
posynomial
양수 상수 × posynomial
posynomial
posynomial의 뺄셈 또는 posynomial로 나누기
일반적으로 보장되지 않음
예를 들어 (x1+x2)/x1=1+x2/x1은 posynomial이다. 반대로 1/(x1+x2)는 분모가 합이므로 이 규칙으로 posynomial이라고 할 수 없다. 서로 다른 monomial의 합도 보통은 monomial이 아니지만, 2x1+3x1=5x1처럼 같은 지수의 항은 합쳐질 수 있다. 엄격한 양의 계수 정의에서는 0을 곱해 얻은 영함수는 별도로 구별한다.
f0,…,fm are posynomials and h1,…,hp are monomials.
D=R++n.
목적함수와 부등식 왼쪽은 posynomial, 등식 왼쪽은 monomial이어야 한다. 등식에 posynomial을 마음대로 넣지 않는 이유는 로그를 취한 뒤 등식을 affine으로 만들어야 하기 때문이다.
첫 예제의 성능 제약은 양수인 곱으로 나누면 된다.
x1x2≥16⟺x1x216≤1.
목적함수 x1+x2는 posynomial이고, 제약 왼쪽은 monomial이면서 posynomial이기도 하다. 모든 변수도 양수이므로 GP 표준형을 만족한다. 오른쪽 1은 로그를 취하면 0이 된다. 이것이 나중에 볼록 최적화의 표준 제약 형태로 돌아가는 연결점이다.
GP 표준형에 들어맞는다는 말과 원래 변수에서 이미 볼록하다는 말은 다르다. GP는 로그로 바꾼 뒤의 볼록성을 이용한다.
Part B. 로그 변환이 식을 바꾸는 과정
5. 먼저 변수만 바꾼다: 양수 x와 실수 y
로그가 곱을 덧셈으로 바꾸는 성질을 이용한다. 여기서 log는 자연로그이며, e를 밑으로 한다.
log(ab)=loga+logb,log(xr)=rlogx(a,b,x>0).
새 변수를 다음처럼 정의한다.
yi=logxi⟺xi=eyi.
yi는 “e를 몇 제곱해야 xi가 되는가”를 나타낸다. xi=1이면 yi=0이고, xi=4이면 yi=log4다. 0<xi<1이면 yi는 음수가 될 수 있다. 양수라는 제한은 x에 대한 것이며, y는 모든 실수를 움직일 수 있다.
이 변환은 양수 xi 하나마다 실수 yi 하나를 정확히 대응시킨다. 따라서 변환한 문제를 푼 뒤 xi=eyi로 돌아갈 수 있다. 0이나 음수 xi는 이 대응에 포함되지 않는다.
6. Monomial에 변수를 대입하고 로그까지 취하면 affine이 된다
작은 함수 하나로 두 단계를 구별해 보자.
m(x)=3x12x2−1.
먼저 xi=eyi를 대입한다.
m(ey)=3e2y1−y2.
여기서 ey는 각 성분에 지수를 취한 벡터다. 아직 함수는 지수함수다. 그 함수값에 로그를 취하는 단계까지 하면
logm(ey)=log3+2y1−y2
가 되어 affine 함수가 된다. x=(2,4)의 원래 함수값은 3이고, 변환된 식에 y=(log2,log4)를 넣으면 log3이다. 변수뿐 아니라 함수값의 눈금도 달라졌다는 점에 주의한다.
그림은 더 간단한 m(x)=x를 보여 준다. 오른쪽은 단순히 가로축 이름만 바꾼 그림이 아니다. x=ey를 대입하고 함수값에도 로그를 취해 logey=y/2로 만든 것이다.
일반적인 monomial에도 같은 계산을 적용한다. a=(a1,…,an)T, b=logc라고 쓰면
교안 발췌 · Module 6 — Geometric Program: Convex Form
yi=logxi,xi=eyi,cx1a1⋯xnan⟶eaTy+b,b=logc.
따라서 로그까지 취한 결과는 aTy+b다. 특히 monomial 등식 hj(x)=1은 로그 좌표에서 affine 등식이 된다.
7. Posynomial의 로그는 Log-Sum-Exp가 된다
합에는 곱에서 쓴 로그 규칙을 적용할 수 없다.
log(a+b)=loga+logbin general.
예를 들어 a=b=1이면 왼쪽은 log2이고 오른쪽은 0이다. 그래서 posynomial은 항들을 따로 로그로 바꾸어 더하는 것이 아니라, 지수함수들의 합 전체에 로그를 취한다.
f(x)=2x1+3x2−1⟹logf(ey)=log(2ey1/2+3e−y2).
계수도 지수 안으로 넣으면 2=elog2, 3=elog3이므로 다음과 같다.
logf(ey)=log(ey1/2+log2+e−y2+log3).
이 모양이 log-sum-exp다. 일반적으로 지수 안의 affine 식들을 akTy+bk라고 쓰면
F(y)=log(k=1∑KeakTy+bk).
이 함수는 볼록하다. Convex Function 글에서 배운 볼록함수의 한 예가 실제 문제 변환에 쓰이는 지점이다. 로그는 오목함수이지만, 여기서는 지수함수의 합과 결합한 이 특정 모양 전체가 볼록하다. 아무 양수 함수에 로그를 취하면 볼록해진다는 규칙은 없다.
심화: Log-Sum-Exp의 볼록성을 확인하는 이유
tk=akTy+bk라고 쓰고, 각 지수항이 전체 합에서 차지하는 양의 비율을 pk=etk/∑letl로 둔다. 이 비율의 합은 1이다. 벡터 aˉ=∑kpkak는 이 가중치로 평균한 방향이다.
미분하면 Hessian은 다음과 같다.
∇2F(y)=k∑pkakakT−aˉaˉT.
임의의 방향 v에 대해 이 이차형식을 계산하면
vT∇2F(y)v=k∑pk(vTak−vTaˉ)2≥0.
양의 가중치를 곱한 편차의 제곱 합이므로 음수가 될 수 없다. 따라서 Hessian이 PSD이고 F는 볼록하다. 이 유도를 외우지 않아도, GP를 변환한 목적함수와 부등식이 이 모양이라는 사실을 알아보면 된다.
Part C. 볼록 문제로 바꾸고 원래 답까지 구하기
8. 첫 예제에 변환을 한 줄씩 적용하기
처음 문제의 목적함수와 표준형 부등식은 다음 두 함수였다.
f0(x)=x1+x2,f1(x)=x1x216≤1.
첫째, 변수만 바꾼다.x1=ey1, x2=ey2를 대입하면
f0(ey)=ey1/2+ey2/2,f1(ey)=16e−y1−y2≤1.
둘째, 양수인 함수값에 로그를 취한다. 로그는 엄격하게 증가하므로 작은 비용을 더 큰 비용보다 먼저 선택하는 순서를 바꾸지 않는다. 부등식의 방향도 유지한다.
목적함수는 log-sum-exp라서 볼록하고 제약은 affine이다. 이제 볼록 최적화 문제다.
초록 영역은 조건을 만족하는 부분이고, 파랑·갈색 등고선은 원래 비용이 각각 4·5인 점들을 나타낸다. 회색 비용 3.5의 등고선은 가능집합에 닿지 못한다. 오른쪽에서는 같은 점들을 로그 좌표로 옮겼다. 변환된 목적함수의 등고선 값은 각각 log4, log5이지만 원래 비용의 순서는 그대로다.
왼쪽의 가능집합도 이 예제에서는 볼록하다. 원래 형태가 볼록 최적화가 아니었던 이유는 목적함수가 볼록하지 않았기 때문이다. 오른쪽에서는 목적함수와 제약을 함께 볼록 최적화의 조건에 맞췄다. 왼쪽 좌표축 위의 점들은 xi>0 정의역에 포함되지 않는다.
9. 손으로 끝까지 풀고 x로 돌아오기
목적함수는 두 변수가 커질수록 증가한다. y1+y2>log16인 여유가 있다면 두 값을 조금씩 함께 줄여도 제약을 지키며 비용을 낮출 수 있다. 따라서 최적점은 경계에 있다.
y1+y2=log16.
합을 고정한 채 두 값의 균형만 바꾸도록 새 실수 t를 하나 쓰자.
y1=log4+t,y2=log4−t.
어떤 t에도 두 값의 합은 2log4=log16이다. t=0이면 균형 잡힌 배분이고, 양수면 첫 번째 쪽으로, 음수면 두 번째 쪽으로 치우친다. 목적함수를 이 변수 하나로 쓰면
F(t)=log(2et/2+2e−t/2).
양수 w=et/2라고 두면 다음 계산으로 최소값을 알 수 있다.
w+w1−2=w(w−1)2≥0.
따라서 et/2+e−t/2≥2이고, 등호는 w=1, 즉 t=0에서만 성립한다. 로그는 증가하므로
F(t)≥log4,y1∗=y2∗=log4.
이것은 로그 좌표에서의 답이다. 원래 성능값으로 돌아가려면 성분마다 지수를 취한다.
x1∗=ey1∗=4,x2∗=ey2∗=4.
곱은 4⋅4=16으로 제약을 지킨다. 원래 비용은 4+4=4다. 두 목적함수의 최적값을 구분하면 다음과 같다.
무엇을 계산했는가?
값
로그 좌표의 최적점 y∗
(log4,log4)
원래 변수의 최적점 x∗
(4,4)
변환된 목적함수의 최적값
log4
원래 목적함수의 최적값
4
변환된 비용을 원래 비용으로 보고 끝내면 안 된다. 로그를 목적함수에 적용했으므로 원래 비용은 그 값의 지수다. 최적점도 xi=eyi로 복원한다. 이 예제에서는 변환과 역변환 모두 정확하므로 근사 문제를 푼 것이 아니다.
10. 일반 GP에도 같은 변환을 적용한다
각 posynomial fi의 항을 번호 k로 구분하고, 그 지수 벡터를 aik, 양의 계수의 로그를 bik라 쓰자. Ki는 그 함수의 항 개수다. 그러면
fi(y)=logfi(ey)=log(k=1∑KieaikTy+bik).
등식용 monomial hj의 지수 벡터를 dj, 양의 계수를 cj라 쓰면 loghj(ey)=djTy+logcj다. 따라서 변환된 문제는
목적함수와 부등식은 log-sum-exp, 등식은 affine이다. 이것이 GP in convex form(볼록 형태의 GP)이다. 로그의 단조성은 같은 답을 고른다는 것을, log-sum-exp의 볼록성은 변환된 문제의 구조가 볼록하다는 것을 보장한다. 두 이유는 역할이 다르다.
모든 함수가 monomial이면 항이 하나뿐이라 로그를 취한 함수가 전부 affine이 된다. 이 경우 변환된 문제는 LP로 줄어든다. 예를 들어
등식에서 y2=log2, 부등식에서 y1≥log2다. 목적함수는 y1이 작을수록 작아지므로 y1∗=log2다. 복원하면 x∗=(2,2), 원래 최적 비용은 22⋅2=8이다. 로그 문제의 비용 3log2=log8과도 대응한다.
Part D. 직접 정식화하고 풀어 보기
11. GP인지 판별할 때 확인할 것
식에 곱이 있다고 모두 GP인 것은 아니다. 먼저 양수 정의역을 확인하고, 각 함수가 어떤 종류인지 구별한 뒤 제약을 표준형으로 정리한다.
주어진 식
GP 표준형으로 정리하기
posynomial f(x)≤b, b>0
f(x)/b≤1
posynomial f(x)≤ monomial m(x)
f(x)/m(x)≤1
monomial m1(x)=m2(x)
m1(x)/m2(x)=1
monomial m(x) 최대화
양수인 역수 1/m(x) 최소화
posynomial f(x)≥1 또는 f(x)=1
일반적으로 표준 GP 조건을 만족하지 않음
예를 들어 x1+x2≤x3는 (x1+x2)/x3≤1로 쓸 수 있다. 분모가 monomial이므로 왼쪽은 posynomial이다. 반면 x1+x2=6은 로그로 바꾸면 ey1+ey2=6이어서 affine 등식이 되지 않는다. 이 식이 다른 방법으로 풀 수 없는 제약이라는 뜻은 아니며, 주어진 형태가 표준 GP 등식 규칙에는 들어맞지 않는다는 뜻이다.
LP·QP는 주로 원래 식의 affine·이차 구조를 보고 분류하고, GP는 양수 변수와 monomial·posynomial 구조를 본다. 따라서 이름의 순서만으로 GP가 QP의 차수를 더 높인 문제라고 생각하지 않는다. GP에서는 로그 변환 뒤의 구조가 중요하다.
12. 혼자 풀어 보는 확인 문제
문제 1. 주어진 형태가 표준 GP에 들어갈까?
모든 변수가 양수라고 하자. 다음을 각각 판별하고 이유를 설명하라.
목적함수 x1+x2를 최소화하고 x1x2≥4를 만족한다.
목적함수 x1−x2를 최소화한다.
등식 제약 x1+x2=4를 둔다.
정답과 해설 펼치기
1번은 GP다. 목적함수는 posynomial이고 제약은 4/(x1x2)≤1로 쓸 수 있다.
2번의 목적함수는 음의 계수 항이 있어 posynomial이 아니다. 함수값이 일부 영역에서 양수라는 것만으로 계수 조건을 대신할 수 없다.
3번의 왼쪽은 posynomial이지만 monomial은 아니다. 로그 변환 후의 등식도 affine이 아니므로 이 형태는 표준 GP 등식에 해당하지 않는다. x1+x2≤4라면 (x1+x2)/4≤1로 쓸 수 있어 GP 부등식으로는 허용된다.
문제 2. 합의 로그와 monomial 등식 변환하기
f(x)=2x1+3/x2와 등식 x1x22=8을 yi=logxi로 변환하라.
정답과 해설 펼치기
함수값에 로그까지 취하면
logf(ey)=log(2ey1/2+3e−y2).
두 항을 따로 로그로 바꿔 더하면 다른 함수가 된다. 등식은 곱의 로그 규칙을 적용할 수 있으므로
log(x1x22)=log8⟺y1+2y2−log8=0.
합은 log-sum-exp로, 곱 하나는 affine으로 바뀌는 차이를 확인할 수 있다.
문제 3. 첫 번째 비용에 가중치가 생기면?
목적함수를 2x1+x2로 바꾸고, 같은 성능 제약 x1x2≥16을 둔다. GP인지 확인하고 최적점을 구하라. 여전히 (4,4)가 답인가?
정답과 해설 펼치기
목적함수는 두 항의 posynomial이고 제약도 같으므로 GP다. 변환된 목적함수는 log(2ey1/2+ey2/2), 제약은 y1+y2≥log16이다.
손계산에서는 양수 a=x1, b=x2로 쓰면 ab≥4이고 비용은 2a+b다. 제곱이 0 이상인 사실에서
(2a−b)2≥0⟹2a+b≥22ab≥42.
등호가 성립하려면 2a=b이고 ab=4여야 한다. 따라서 a=2, b=22이며
x1∗=2,x2∗=8,f0(x∗)=42.
첫 번째 성능의 비용이 더 비싸져 그 값을 줄이고 두 번째를 늘린다. 양쪽 계수가 같을 때의 대칭성만 보고 항상 같은 양을 배분하면 안 된다. 로그 좌표의 답은 (log2,log8)이다.
문제 4. 변환된 해를 원래 해로 읽기
문제 3의 로그 좌표 해가 y∗=(log2,log8)이고 변환된 최적 비용이 log(42)다. 원래 변수와 비용을 각각 어떻게 복원하는가?
정답과 해설 펼치기
변수는 성분마다 지수를 취한다.
x∗=(elog2,elog8)=(2,8).
원래 목적함수값도 로그를 취했으므로 지수로 되돌린다.
f0(x∗)=elog(42)=42.
원래 식에 직접 대입하면 22+8=42이고 곱은 16이다. 점과 비용의 역변환을 각각 수행한 뒤 원래 제약에 대입하는 순서다.
문제 5. 양수 정의역이면 최적점이 항상 존재할까?
minx subject to 0<x≤1은 GP다. 최적점이 x=0이라고 해도 될까? 로그 문제는 어떻게 되는가?
정답과 해설 펼치기
0은 정의역 밖이므로 최적점이라고 할 수 없다. 비용을 0에 한없이 가깝게 할 수 있지만 실제로 0을 달성하는 양수는 없다. 원래 문제의 infimum은 0이며 최소점은 없다.
로그 변환은 miny subject to y≤0이다. y→−∞로 비용이 끝없이 내려가고, 복원한 x=ey가 0에 가까워진다. GP가 볼록 문제로 변환된다는 사실만으로 최적점의 존재나 유일성까지 보장되지는 않는다.
GP를 풀 때 남겨 둘 순서는 양수 정의역 확인 → monomial·posynomial 구별 → 오른쪽 1로 정리 → 로그 변수 대입 → 함수값에 로그 → 볼록 문제 풀이 → 원래 변수와 비용 복원이다.
GP에서는 표현을 바꿔 풀기 쉬운 등가 문제를 만들었다. 다음 Duality Part 1에서는 최적값을 아직 몰라도 그보다 낮다고 보장할 수 있는 값을 만들어, 답의 품질과 최적성을 판단하는 방법을 배운다.