볼록함수의 쌍대

펜셸–영 부등식: F와 F*가 맞물리는 곳

“르장드르 변환은 짝이 맞는 두 값, 곧 η = F′(θ) 인 θ 와 η 를 전제로 만들었다. 짝이 맞지 않는 θ 와 η 를 아무렇게나 가져오면 F(θ) + F*(η) 와 θη 사이에는 무엇이 남는가?”

용수철 — 역학 속의 르장드르 변환

숫자로 먼저 보자. 예로 용수철에 매달린 공을 고른 까닭은 둘이다. 에너지가 속도의 이차식이라 원래 함수와 짝 함수를 모두 손으로 적을 수 있고, 물리학이 이미 이 변환을 날마다 쓰는 곳이기 때문이다. 질량 2 kg 인 공이 초속 1 m 로 움직이는 순간, 운동에너지는 ½ × 2 × 1² = 1 이고 운동량(질량 × 속도)은 2 다. 같은 운동에너지를 운동량으로 적으면 (운동량)² / (2 × 질량) = 4/4 = 1 이다. 둘을 더한 2 는 운동량 × 속도 = 2 와 딱 맞는다. 그런데 운동량 자리에 속도 1과 짝이 맞지 않는 3을 넣으면, 운동량으로 적은 쪽이 9/4 = 2.25 가 되어 합 3.25 가 운동량 × 속도 3 보다 0.25 크다. 짝이 맞으면 남는 것이 없고, 맞지 않으면 틈이 남는다.

위치에너지까지 넣어 이름을 붙이자. 라그랑지안 L 은 "속도로 쓴 에너지 장부"이고, 해밀토니안 ℋ 는 "운동량으로 쓴 에너지 장부"다. 위치 x 는 그대로 두고, 속도 v 에 대해서만 르장드르 변환을 한다.

L(v)=12mv2−V(x),p=∂L∂v=mv,H(p)=p v−L=p22m+V(x)\textcolor{#5b6fe0}{L}(\textcolor{#786800}{v}) = \tfrac{1}{2} \textcolor{#c078a0}{m} \textcolor{#786800}{v}^2 - \textcolor{#885868}{V}(\textcolor{#008850}{x}), \qquad \textcolor{#e0504a}{p} = \frac{\partial \textcolor{#5b6fe0}{L}}{\partial \textcolor{#786800}{v}} = \textcolor{#c078a0}{m} \textcolor{#786800}{v}, \qquad \textcolor{#c0622f}{\mathcal{H}}(\textcolor{#e0504a}{p}) = \textcolor{#e0504a}{p}\, \textcolor{#786800}{v} - \textcolor{#5b6fe0}{L} = \frac{\textcolor{#e0504a}{p}^2}{2\textcolor{#c078a0}{m}} + \textcolor{#885868}{V}(\textcolor{#008850}{x})
L라그랑지안 (속도의 볼록함수, 원본 자리)p운동량 = L 의 기울기 (쌍대 기울기 변수). 여기서 p 는 확률이 아니다H해밀토니안 (L 의 르장드르 변환)v속도 (원래 변수)m질량V(x)위치 x 에서의 위치에너지 (용수철이면 12kx2)\begin{array}{ll} \textcolor{#5b6fe0}{L} & \text{라그랑지안 (속도의 볼록함수, 원본 자리)} \\ \textcolor{#e0504a}{p} & \text{운동량 = } L \text{ 의 기울기 (쌍대 기울기 변수). 여기서 } p \text{ 는 확률이 아니다} \\ \textcolor{#c0622f}{\mathcal{H}} & \text{해밀토니안 (} L \text{ 의 르장드르 변환)} \\ \textcolor{#786800}{v} & \text{속도 (원래 변수)} \\ \textcolor{#c078a0}{m} & \text{질량} \\ \textcolor{#885868}{V}(\textcolor{#008850}{x}) & \text{위치 } x \text{ 에서의 위치에너지 (용수철이면 } \tfrac12 k x^2 \text{)} \end{array}

기울기가 새 좌표가 되고(p = ∂L/∂v), 새 함수는 "기울기 × 변수 − 원래 함수"다. 르장드르 변환의 정의 F*(η) = sup(θη − F(θ)) 에서 sup 이 잡히는 점을 대입한 것과 똑같다.

실제 운동에서는 p를 언제나 mv로 정의하므로, 매 순간 L(v) + ℋ(p) = pv 가 성립한다. 그러나 이것은 p가 v에서의 기울기일 때만이다. p와 v를 따로 고르면 ½mv² + p²/2m ≥ pv 이고(산술–기하 평균), 등호는 p = mv 일 때뿐이다. 이 부등식이 일반 볼록함수에서 어떻게 생겼는지 아래에서 본다.

질량 m을 키우면 L = ½mv² 를 두 번 미분한 값 m이 커지고, ℋ = p²/2m 을 두 번 미분한 값 1/m은 작아진다. 원래 함수와 짝 함수의 두 번 미분한 값끼리의 관계 F″ · (F*)″ = 1 이 여기서 m · (1/m) = 1 이다.

파이썬

import numpy as np

m, k = 2.0, 8.0                        # 질량, 용수철 상수
dt, steps = 1e-3, 3000
x, v = 1.0, 0.0

print("   t       v        p       L+ℋ      pv")
for n in range(steps + 1):
    p = m * v                                  # 운동량 = L 의 기울기
    L = 0.5 * m * v**2 - 0.5 * k * x**2
    H = p**2 / (2 * m) + 0.5 * k * x**2
    if n % 750 == 0:
        print(f"{n * dt:5.2f}  {v:+.4f}  {p:+.4f}  {L + H:.4f}  {p * v:.4f}")
    v += -k / m * x * dt                       # 속도를 먼저 바꾸고 그 속도로 위치를 옮긴다(반암시적 오일러)
    x += v * dt

v, p = 1.0, 3.0                                # p 를 mv(=2) 와 다르게 고르면
print(f"p≠mv : L+ℋ−pv = {0.5 * m * v**2 + p**2 / (2 * m) - p * v:.4f}  (> 0)")
#    t       v        p       L+ℋ      pv
#  0.00  +0.0000  +0.0000  0.0000  0.0000
#  0.75  -1.9950  -3.9900  7.9600  7.9600
#  1.50  -0.2822  -0.5645  0.1593  0.1593
#  2.25  +1.9551  +3.9101  7.6445  7.6445
#  3.00  +0.5588  +1.1177  0.6246  0.6246
# p≠mv : L+ℋ−pv = 0.2500  (> 0)

펜셸–영 부등식 — 합은 언제나 θη 이상

“원본과 쌍대의 합은 언제나 θη 인가?”

아니다. 정의에서 바로 부등식이 나온다. F*(η)는 모든 θ에 대한 θη − F(θ) 중 가장 큰 값이다. 그러니 아무 θ를 하나 골라도 F*(η) ≥ θη − F(θ) 이다. 옮기면 끝이다.

F(θ)+F∗(η)≥θ η,등호  ⟺  η=F′(θ)\textcolor{#5b6fe0}{F}(\textcolor{#3b7de0}{\theta}) + \textcolor{#c0622f}{F^*}(\textcolor{#e0504a}{\eta}) \ge \textcolor{#3b7de0}{\theta}\,\textcolor{#e0504a}{\eta}, \qquad \text{등호} \iff \textcolor{#e0504a}{\eta} = \textcolor{#5b6fe0}{F}'(\textcolor{#3b7de0}{\theta})
F볼록함수 (미분 가능하다고 둔다)F∗그 르장드르 변환θ원래 변수 (아무 값)η기울기 변수 (아무 값)\begin{array}{ll} \textcolor{#5b6fe0}{F} & \text{볼록함수 (미분 가능하다고 둔다)} \\ \textcolor{#c0622f}{F^*} & \text{그 르장드르 변환} \\ \textcolor{#3b7de0}{\theta} & \text{원래 변수 (아무 값)} \\ \textcolor{#e0504a}{\eta} & \text{기울기 변수 (아무 값)} \end{array}

이것을 펜셸–영 부등식이라 부른다. 등호는 sup이 바로 그 θ에서 잡힐 때, 곧 η = F′(θ) 일 때 성립한다. F가 미분할 수 없는 꺾인 점에서는 어떻게 되는지 아래 문제 6에서 따져 본다.

비유 — 퍼즐 조각

θ 조각과 η 조각을 아무렇게나 가져와 붙이면 틈이 생긴다: F + F* − θη > 0. η가 θ에서의 기울기일 때만 조각이 딱 맞물리고 틈이 0이 된다.

"한쪽이 커지면 다른 쪽이 작아지는 시소"로 생각하면 틀린다. F = θ²/2 이면 F* = η²/2 이고, 맞물린 짝 η = θ 에서 둘 다 θ²/2 다. 함께 커지고 함께 작아진다. 합이 θη로 고정되는 것은 맞물린 짝 위에서뿐이고, 그 θη도 θ를 따라 변한다.

틈의 크기는 그 자체로 쓸모가 있다. θ′ 을 η = F′(θ′) 인 점이라 하면, 틈은 F(θ) − F(θ′) − F′(θ′)(θ − θ′), 곧 θ′ 의 접선과 곡선 사이의 θ에서의 높이 차다. 그림의 「간격」이 바로 이것이다. 이 간격을 브레그만 발산이라 부른다.

볼록함수와 접선 사이의 간격
볼록함수와 접선 사이의 간격
직접 움직여 보기

불러오는 중…

파이썬

import numpy as np

pairs = {
    "e^θ":          (np.exp, np.exp, lambda e: e * np.log(e) - e, (0.01, 20)),
    "log(1+e^θ)":   (lambda t: np.log1p(np.exp(t)), lambda t: 1 / (1 + np.exp(-t)),
                     lambda e: e * np.log(e) + (1 - e) * np.log(1 - e), (0.001, 0.999)),
    "θ²/2":         (lambda t: t**2 / 2, lambda t: t, lambda e: e**2 / 2, (-5, 5)),
}
rng = np.random.default_rng(0)
for name, (F, dF, Fs, (lo, hi)) in pairs.items():
    th, et = rng.uniform(-3, 3, 100_000), rng.uniform(lo, hi, 100_000)
    gap = F(th) + Fs(et) - th * et                           # 아무 짝
    t0 = rng.uniform(-3, 3, 5)
    tight = np.abs(F(t0) + Fs(dF(t0)) - t0 * dF(t0)).max()    # 맞물린 짝 η = F'(θ)
    print(f"{name:11s} 아무 짝의 최소 틈 {gap.min():.1e}   맞물린 짝의 틈 {tight:.1e}")
# e^θ         아무 짝의 최소 틈 2.7e-08   맞물린 짝의 틈 5.6e-17
# log(1+e^θ)  아무 짝의 최소 틈 1.6e-10   맞물린 짝의 틈 2.2e-16
# θ²/2        아무 짝의 최소 틈 6.3e-10   맞물린 짝의 틈 0.0e+00

아무 짝에서는 틈이 음수로 내려가지 않고, 맞물린 짝에서는 부동소수점 오차 수준으로 0이다.

ML에서: 손실 함수는 틈이다

모델이 내놓은 값을 θ 자리에, 정답을 η 자리에 넣으면 펜셸–영 틈은 「정답과 맞물리지 않은 만큼」을 재는 손실이 된다. 정답과 짝이 맞으면 0 이고, 어긋날수록 커진다. F 를 무엇으로 고르느냐에 따라 이 틈이 회귀 모델의 제곱 오차가 되기도 하고, 분류 모델의 교차엔트로피가 되기도 한다. 두 경우는 아래 문제 7에서 직접 계산한다.

수확

“역학의 라그랑지안 → 해밀토니안도 르장드르 변환이다. L + ℋ = pv 는 p가 v에서의 기울기일 때만 성립하는 등식이다.”

“원본과 쌍대의 합은 언제나 θη 이상이다. 기울기로 맞물린 짝에서만 등호가 된다. 그 틈이 곧 발산이다.”

문제 6. 펜셸–영과 꺾인 점

(가) F(θ) = eᶿ 에서 θ = 1 로 고정하고, 틈 F(1) + F*(η) − η 를 η = 1, 2, e, 4 에서 계산하라. 틈이 가장 작은 곳은 어디이고, 그 값은 얼마인가? 틈이 0 보다 작아질 수 없음을 정의에서 보여라. 위의 펜셸–영 위젯에서 「문제 6 불러오기」를 누르고 η 슬라이더를 움직여 확인할 수 있다. (나) F(θ) = |θ| 의 F*를 구하고, 등호가 성립하는 (θ, η) 쌍을 모두 찾아라.

함께 풀기

김민준 M01
김민준

F*(η) = η log η − η 는 η = 1 에서 −1 로 가장 작아요. 틈에서 F(1) = e 는 고정이니까, F* 가 가장 작은 η = 1 에서 틈도 가장 작겠죠.

선생님 T01
선생님

η = 1 과 η = 2 에서 틈을 직접 계산해 볼래요?

김민준 M04
김민준

η = 1 이면 e − 1 − 1 = 0.718, η = 2 면 e + 2 log 2 − 2 − 2 = 0.105 예요. 2 가 더 작아요. 틈에는 −θη 도 들어 있는데 F* 만 봤어요. η = e 에서는 e + (e − e) − e = 0 이고, η = 4 에서는 0.263 이에요.

이서연 S01
이서연

e 는 θ = 1 에서의 기울기 e¹ 이잖아. 틈이 0 이 되는 곳이 기울기로 맞물린 η 야. 0 보다 작아질 수 없다는 증명은 한 줄이야. F*(η)는 sup이니까 어떤 θ를 넣은 θη − F(θ)보다도 크거나 같아. 그걸 옮기면 돼. 등호는 η = F′(θ) 일 때만이고.

선생님 T01
선생님

(나)에서도 그래요?

이서연 S01
이서연

|θ| 는 θ > 0 이면 기울기 1, θ < 0 이면 −1. F*(η) = sup(θη − |θ|) 는 |η| ≤ 1 이면 0, 넘으면 +∞ 예요. 등호는 θ > 0, η = 1 이거나 θ < 0, η = −1 이에요.

선생님 T01
선생님

θ = 0 은요?

이서연 S01
이서연

F′(0) 이 없으니까 등호가 안… 잠깐, F(0) + F*(η) = 0 + 0 = 0 이고 θη 도 0 이에요. |η| ≤ 1 이면 전부 등호예요.

이서연 S08
이서연

꺾인 점에서는 그 점을 받치는 직선이 기울기 −1부터 1까지 전부라서, 맞물리는 η가 구간 하나 통째로예요. "η = F′(θ) 일 때만"은 미분 가능한 점에서만 맞는 말이었어요.

선생님 T01
선생님

그 구간을 부분기울기(subgradient)라고 불러요. 편미분과는 상관없고, 받치는 직선의 기울기 모음이라는 뜻이에요. 매끄러운 점에서는 부분기울기가 보통 기울기 하나로 줄어들죠.

이서연 S01
이서연

해석학에서 좌미분과 우미분이 다른 점이 생각나요. 그 사이의 기울기가 전부 "받치는 직선"이 되는 거네요.

문제 7. 제곱 오차와 교차엔트로피는 같은 틈인가

펜셸–영 틈 F(θ) + F*(η) − θη 의 θ 자리에 모델의 출력을, η 자리에 정답을 넣어 보자. (가) 회귀 모델: F(θ) = θ²/2 이면 F*(η) = η²/2 다. 예측 θ = 1.5, 정답 η = 2 에서 틈을 구하고 제곱 오차와 견주어라. (나) 이진 분류 모델: F(θ) = log(1 + eᶿ), F*(η) = η log η + (1 − η) log(1 − η) 다. 로짓 θ = 1, 정답 라벨 η = 1 에서 틈을 구하고, 모델이 정답에 준 확률의 −log 와 견주어라. (다) 라벨이 η = 1.2 처럼 0 과 1 밖에 있으면 틈은 어떻게 되는가?

함께 풀기

김민준 M01
김민준

(가)는 1.125 + 2 − 3 = 0.125 예요. (2 − 1.5)² / 2 도 0.125 니까 제곱 오차의 절반이에요. (나)는 F*(1) 에 log 0 이 들어가서 −∞ 예요. 그럼 틈도 −∞ 인데요.

선생님 T01
선생님

펜셸–영 틈이 음수가 될 수 있었나요?

김민준 M06
김민준

아뇨, 0 이상이라고 했는데… 식은 맞게 넣었어요.

이서연 S01
이서연

0 × log 0 이 문제야. η log η 는 η 가 0 에 다가가면 0 으로 가니까, (1 − η) log(1 − η) 는 η = 1 에서 0 이야. F*(1) = 1 × log 1 + 0 = 0.

김민준 M07
김민준

그럼 틈은 log(1 + e) − 1 = 0.3133 이에요. 모델이 정답에 준 확률은 시그모이드 1/(1 + e⁻¹) = 0.7311 이고 −log 0.7311 = 0.3133. 교차엔트로피 손실과 똑같아요.

선생님 T01
선생님

회귀의 제곱 오차와 분류의 교차엔트로피가 같은 틀에서 나왔어요. 바뀐 것은 F 하나예요. (다)는요?

이서연 S06
이서연

F*(1.2) = sup(1.2θ − log(1 + eᶿ)) 인데, θ 가 커지면 log(1 + eᶿ) 는 거의 θ 라서 0.2θ 가 끝없이 커져요. F*(1.2) = +∞ 이고 틈도 +∞ 예요. F* 의 정의역 [0, 1] 이 곧 라벨이 살 수 있는 곳이네요. 확률이 아닌 라벨을 넣으면 교차엔트로피는 값이 없어요.

김민준 M01
김민준

조교가 100점 만점 과제에 120점을 입력했더니 성적 스크립트가 멈춘 적이 있어요. 스크립트가 받을 수 있는 범위부터 정해져 있던 거네요.

문제 8. 오목한 굴곡을 가진 함수 (킬러)

F(θ) = θ⁴ − 2θ² 는 볼록이 아니다(|θ| < 1/√3 에서 F″ < 0). (가) F*(0) 과, 그 sup이 잡히는 θ를 모두 구하라. (나) F**(θ) = (F*)*(θ) 를 수치로 구해 F와 비교하라. 어디서 다르고, F**는 어떤 함수인가? (다) 이것을 속도 v의 라그랑지안 L(v) = v⁴ − 2v² 라고 하자. v = 0.5 에서 p = L′(v) 로 두면 L(v) + ℋ(p) = pv 가 성립하는가? 어떤 속도에서 이 등식이 성립할 수 있는가?

함께 풀기

선생님 T01
선생님

(가)부터요.

이서연 S01
이서연

F*(0) = sup(−θ⁴ + 2θ²) 예요. 미분하면 −4θ³ + 4θ = 0, θ = 0, ±1. θ = ±1 에서 1 이니까 F*(0) = 1, 잡히는 점은 두 개예요.

선생님 T01
선생님

기울기 0인 받침 직선이 곡선에 두 군데서 닿는다는 거예요. 볼록함수에서 그런 일이 있었어요?

이서연 S01
이서연

엄격 볼록이면 한 기울기에 한 점이었어요. 여기선 일대일이 깨졌어요.

김민준 M05
김민준

(나)는 돌려 봤는데 버그가 있어요. F*를 격자로 구하고 그걸 다시 변환했는데, θ = 0 에서 F**가 −1 이 나와요. F(0) 은 0 인데요. θ = 0.5 에서도 F는 −0.4375 인데 F**는 −1 이에요.

선생님 T01
선생님

θ = 1.5 와 2 는요?

김민준 M01
김민준

거기선 0.5625, 8.0 으로 똑같아요. 틀린 건 |θ| < 1 에서만이에요. 격자 문제인가 싶어서 촘촘하게 해도 −1 이 그대로예요.

선생님 T01
선생님

구간 [−1, 1] 에서 F**는 어떤 모양이에요?

김민준 M01
김민준

전부 −1 이에요. 평평해요.

선생님 T01
선생님

F(±1) = −1 이에요. 두 점을 줄로 이으면요?

김민준 M08
김민준

높이 −1 인 수평선이요. F**는 가운데 솟은 혹을 그 줄로 덮어 버린 거예요. 버그가 아니라, 두 번 변환하면 원래 함수가 아니라 아래에서 받치는 가장 큰 볼록함수가 나오는 거네요.

선생님 T01
선생님

볼록포라고 불러요. 접선의 모음은 볼록한 부분만 기억할 수 있어요. 혹 부분에는 곡선 아래에서 닿는 직선이 없으니까요.

김민준 M01
김민준

조별 보고서를 요약본만 보고 다시 쓰면, 요약에 안 들어간 곁가지는 사라지는 것 같아요. 요약이 기억하는 것만 돌아와요.

선생님 T01
선생님

서연 학생, (다)요.

이서연 S01
이서연

p = L′(0.5) = 4(0.125) − 2 = −1.5 예요. ℋ(−1.5) = sup(−1.5v − v⁴ + 2v²) 를 구하면 2.621 이고, v ≈ −1.151 에서 잡혀요. L(0.5) = −0.4375, pv = −0.75 니까 L + ℋ − pv = −0.4375 + 2.621 + 0.75 = 2.934 예요. 0이 아니에요.

이서연 S05
이서연

그런데 이상해요. 용수철에서는 L + ℋ = pv 가 매 순간 성립한다고 했잖아요. 운동하는 공은 v = 0.5 를 지날 수 있는데, 그 순간에는 등식이 깨지는 건가요? 물리가 깨지는 건 아니잖아요.

선생님 T01
선생님

용수철에서 등식이 성립한 이유가 뭐였죠?

이서연 S01
이서연

p = mv 가 v에서의 기울기이고, ½mv² 가 볼록이라 그 기울기에서 sup이 v 한 점에서 잡혔기 때문이에요.

선생님 T01
선생님

여기서 p = −1.5 가 되는 v는 몇 개예요?

이서연 S01
이서연

4v³ − 4v = −1.5 를 풀면… −1.151, 0.5, 0.651 세 개요. 그중 sup이 잡히는 건 −1.151 뿐이에요.

이서연 S09
이서연

운동량 −1.5 하나에 속도가 셋이에요. 해밀토니안은 운동량만 보고 에너지를 적는 장부인데, 그 장부에는 −1.151 만 기록되고 0.5 와 0.651 은 적힐 자리가 없어요. 물리가 깨진 게 아니라, 이 라그랑지안은 운동량의 언어로 번역이 안 되는 거예요. 등식이 성립하는 속도는 L 이 볼록포와 겹치는 곳, |v| ≥ 1 뿐이에요.

선생님 T13
선생님

그래서 역학에서는 라그랑지안이 속도에 대해 볼록해야 운동량 장부(해밀턴 형식)로 탈 없이 넘어갈 수 있다고 봐요. 변분법에서는 라그랑지안을 속도로 두 번 미분한 값이 0 이상이어야 한다는 같은 뿌리의 조건을 르장드르 조건(르장드르–클렙시 조건)이라고 불러요. 오늘 두 사람이 다른 문으로 같은 방에 들어왔어요. 민준 학생은 F**가 볼록포라는 걸 숫자로, 서연 학생은 그 볼록포 밖의 속도가 운동량 장부에서 사라진다는 걸 물리로요.

이서연 S01
이서연

선형대수에서 역행렬이 없는 행렬을 만나면 "정보가 사라지는 방향"을 찾으라고 배웠어요. 여기서는 오목한 굴곡이 그 방향이에요.