스핀 글래스: 제각각의 방향으로 굳은 스핀
레플리카 방법을 끝까지 계산하려면 복제본들의 겹침이 어떤 모양인지 가정해야 했다. 가정하기 전에 직접 재 보면 어떨까? 같은 결합 아래 복제본 두 개를 따로 뽑아 겹침을 재면, 결합을 평균한 Z²에서처럼 0에서 벗어날까? 벗어난다면, 결합의 평균이 0이라 스핀들이 어느 한 방향을 편애하지 않을 텐데 그 상태는 한 방향으로 정렬한 자석과 어떻게 다를까?
역사: 이상한 합금
1970년대 초, 금 같은 자성 없는 금속에 철 같은 자성 원자를 조금 섞은 합금에서, 온도를 내리면 원자 하나하나의 스핀이 한 방향으로 정렬하지 않고 원자마다 제멋대로의 방향으로 굳는다는 실험 결과가 나왔다. 1972년 카넬라와 마이도시가 바깥 자기장(스핀을 한쪽으로 미는 바깥 자석의 영향, magnetic field)을 줄일수록 자화율(바깥 자기장을 조금 걸었을 때 자화가 얼마나 반응하는지 재는 양)의 봉우리가 뾰족해진다는 것을 보이자 이것이 진짜 상전이(온도 같은 조건이 한 점을 지날 때 계의 성질이 갑자기 바뀌는 일)일 수 있다는 생각이 퍼졌다.
스핀 16개에서 재 보기
스핀 16개 SK 모델에서 결합을 200번 뽑아, 결합마다 두 가지 양을 볼츠만 분포로 평균해 보자. 하나는 스핀 전체의 평균 방향 m의 제곱이고, 다른 하나는 같은 결합 아래 따로 뽑은 두 복제본의 겹침 q의 제곱이다. 스핀들이 서로 무관하게 동전을 던진다면 둘 다 1/16 = 0.0625 근처다. β = 0.5에서는 m²의 평균이 0.063, q²의 평균이 0.080으로 둘 다 그 근처에 있다. β = 3에서는 m²의 평균이 0.055로 그대로인데 q²의 평균은 0.585로 뛴다.
스핀 전체로는 어느 쪽으로도 기울지 않았는데, 따로 움직이는 두 복제본은 크게 닮았다. 스핀들이 결합이 정한 방향으로 굳기 시작했지만 그 방향이 스핀마다 제각각이라 평균 방향은 0이라는 뜻이다. 이처럼 무작위 결합 때문에 스핀들이 규칙 없는 방향으로 굳은 상태를 스핀 글래스 (평균 방향은 0인데 복제본 사이의 겹침은 0이 아닌 상태, spin glass)라 한다. 보통의 유리에서 원자의 위치가 규칙 없이 굳어 있는 것에 빗댄 이름이고, SK 모델에서는 kT = 1에서 이 상전이가 일어난다.
사이 나쁜 세 사람
스핀들은 왜 한 방향으로 정렬하지 못하고 제각각의 방향으로 굳으며, 굳는 방법은 하나뿐일까?
결합이 무작위이면 모든 결합을 동시에 만족시키는 배치가 없는 경우가 흔하다. 세 사람이 서로 둘씩 사이가 나빠 모두 떨어뜨려 앉히고 싶은데 자리가 두 줄뿐이면, 어떻게 앉혀도 한 쌍은 같은 줄에 앉는 것과 같다. 이처럼 결합들이 서로 다른 것을 요구해 모두 만족시킬 수 없는 상황을 좌절(frustration)이라 한다.

골짜기가 지수적으로 많다
좌절이 곳곳에 있으면 에너지를 낮추는 방법이 여러 가지로 나뉘어, 스핀 하나를 뒤집어서는 에너지가 내려가지 않는 국소 최솟값이 수없이 생긴다. SK 모델에서 그 수는 스핀 수에 대해 e^(0.1992N)으로 늘어난다고 계산되었다(다나카·에드워즈, 브레이·무어 1980). 스핀 8·12·16·20개에서 직접 세어 보면 평균 5.4·11.6·25.7·57.4개로, 스핀이 약 3.5개 늘 때마다 두 배가 된다.

결합을 스핀 수마다 100번씩 뽑아, 스핀 하나를 뒤집어서는 에너지가 내려가지 않는 배치가 몇 개인지 모든 배치를 훑어 센다.
import numpy as np
rng = np.random.default_rng(0)
def configs(N): # 스핀 N개의 배치 2^N개
return 1.0 - 2 * ((np.arange(2**N)[:, None] >> np.arange(N)) & 1)
def sample_J(N):
J = np.triu(rng.normal(0, 1 / np.sqrt(N), (N, N)), 1)
return J + J.T
# 온도 0의 골짜기: 스핀 하나를 뒤집어서는 에너지가 내려가지 않는 배치의 수
for N in (8, 12, 16, 20):
S = configs(N); counts = []
for _ in range(100):
J = sample_J(N)
counts.append(np.sum(np.all((S @ J) * S > 0, axis=1))) # 모든 스핀이 제 국소장 방향을 향함
print(f"N = {N:2d}: 국소 최솟값 평균 {np.mean(counts):5.1f}개, ln(개수)/N = {np.log(np.mean(counts)) / N:.3f}")
# N = 8: 국소 최솟값 평균 5.4개, ln(개수)/N = 0.210
# N = 12: 국소 최솟값 평균 11.6개, ln(개수)/N = 0.205
# N = 16: 국소 최솟값 평균 25.7개, ln(개수)/N = 0.203
# N = 20: 국소 최솟값 평균 57.4개, ln(개수)/N = 0.202
골짜기의 수는 스핀 하나당 로그로 0.20 근처에 머물러, 스핀 수에 대해 지수적으로 는다(큰 N의 계산값은 0.1992).
ML에서: 신경망의 손실 지형
코로만스카, 헤나프, 마티유, 벤 아루스, 르쿤(2015)은 몇 가지 강한 가정 아래 완전 연결 신경망의 손실 함수를 구면 스핀 글래스의 에너지와 연결했다. 그들은 논문 요약에 「큰 네트워크에서 무작위 손실 함수의 임계점(그래디언트가 0인 점)들에서 가장 낮은 값들은 전역 최솟값을 아래 경계로 하는 뚜렷한 띠 안에 놓이고, 그 띠 밖의 국소 최솟값 수는 네트워크 크기에 따라 지수적으로 줄어든다」고 적었다. 스핀 16개에서도 국소 최솟값 38개가 스핀 하나당 에너지 −0.53~−0.35의 좁은 띠에 촘촘히 놓였던 것을 떠올리면 이 문장이 무엇을 세는지 보인다.
문제 7. 네 사람을 두 줄에 앉히기
네 사람 가, 나, 다, 라를 앞줄과 뒷줄에 나눠 앉힌다. (가) 가–나, 나–다, 다–라, 라–가 네 쌍이 서로 사이가 나쁘다. 사이 나쁜 쌍을 모두 다른 줄에 떨어뜨려 앉힐 수 있는가? (나) 그중 다–라가 사이가 나쁜 대신 꼭 같은 줄에 앉고 싶어 하는 단짝이라면? (다) 앉힐 수 있는지 없는지를 미리 가르는 규칙을 찾으라.

세 사람일 때도 안 됐는데 사이 나쁜 쌍이 네 쌍이면 더 어렵겠죠. (가)는 안 되고, (나)는 나쁜 쌍이 세 쌍으로 줄었으니 될 것 같아요.

직접 앉혀 봐요. 가를 앞줄에 두고 가, 나, 다, 라 순서로 한 바퀴 돌면서 줄을 정해 볼까요?

(가)는 가 앞, 나 뒤, 다 앞, 라 뒤… 라와 가도 다른 줄이네요. 되잖아요! (나)는 가 앞, 나 뒤, 다 앞, 단짝인 라도 앞… 그런데 라와 가가 같은 줄이에요. 안 돼요.

쌍의 수가 아니라 고리를 한 바퀴 도는 동안 줄을 몇 번 바꾸느냐가 문제 같은데.

(가)와 (나)에서 한 바퀴 도는 동안 줄을 각각 몇 번 바꿨죠?

사이 나쁜 쌍을 지날 때마다 바꿨으니까 (가)는 네 번, (나)는 세 번이요.

그러니까 고리 위에 사이 나쁜 쌍이 짝수 개면 제자리로 돌아오고 홀수 개면 반대 줄에서 끝나. 세 사람도 홀수 3이었고.

스핀으로 옮기면요?

사이 나쁜 쌍은 결합이 음수, 단짝은 양수예요. 고리를 따라 결합의 부호를 모두 곱해서 음수면 좌절이에요.

조별 과제 조를 둘로 나눌 때도 사이 나쁜 사람 수만 세면 안 되고, 고리를 한 바퀴 따라가 봐야 하는 거네요.
문제 8. 좌절이 남기는 바닥 상태
스핀 세 개의 모든 쌍을 같은 결합 J로 묶고, 에너지를 E = −J(s₁s₂ + s₂s₃ + s₃s₁)로 둔다. (가) J = +1일 때와 J = −1일 때, 에너지가 가장 낮은 배치는 각각 몇 개인가? (나) 문제 7 (나)의 네 사람 고리(결합 셋은 −1, 하나는 +1)에서는 몇 개인가? (다) 좌절이 있으면 가장 낮은 에너지의 배치가 왜 느는가?

배치 여덟 개를 다 돌렸어요. J = +1이면 모두 위, 모두 아래인 두 개가 −3으로 가장 낮아요. J = −1이면 가장 낮은 에너지가 −1이고, 그런 배치가 여섯 개예요.

여섯 개면 모두 같은 방향인 두 개만 빼고 전부네. 결합 하나는 꼭 못 지키는데, 어느 결합을 포기할지가 세 가지이고 배치마다 모든 스핀을 뒤집은 배치가 하나씩 있어서 3 × 2 = 6이야.

같은 셈을 네 사람 고리에 하면요?

결합 넷 가운데 하나만 포기하면 되니까 4 × 2 = 8개요. 배치 열여섯 개 가운데 절반이에요.

좌절이 없으면 에너지가 가장 낮은 배치가 두 개뿐인데, 있으면 포기할 결합을 고르는 수만큼 늘어나네요. 스핀이 많으면 이런 고리가 곳곳에 있으니까…

고리마다 포기할 결합을 고르는 방법이 생기고 그 선택들이 서로 엮이면, 에너지가 거의 같은 골짜기가 여럿 생겨요. 골짜기가 스핀 수에 대해 지수적으로 느는 것이 이렇게 시작돼요.