대칭과 등변성: 대칭을 바꾸면 기저가 바뀐다
이 장의 물음
흐림 필터나 합성곱처럼, 신호를 몇 칸 밀어 넣으면 결과도 그만큼 밀려 나올 뿐인 연산은 모두 같은 사인·코사인 물결을 고유벡터로 가졌다(평행이동 대칭). 「왜 하필 사인과 코사인인가」의 답이 「평행이동」이라는 대칭이었는데, 그렇다면 대칭이 평행이동이 아닐 때는 어떻게 될까? 사진은 옆으로 미는 것뿐 아니라 90° 돌려도 같은 고양이를 보여 주고, 장바구니에 담긴 물건은 어떤 순서로 적어도 같은 장바구니다.
ML에서도 같은 장면이 나온다. 위성 사진이나 현미경 사진에는 위아래가 없어서 학습할 때 사진을 90°씩 돌려 몇 장 더 넣는 일이 흔하다. 그런데 2016년의 한 연구는 사진을 돌려 넣는 대신 신경망의 합성곱 커널 자체를 넷으로 돌려 함께 쓰게 했고, 같은 개수의 가중치로 무작위로 돌린 손글씨 숫자에서 오류를 크게 줄였다. 한편 위치 인코딩을 넣지 않은 어텐션은 토큰을 뒤섞어 넣으면 출력도 같은 순서로 뒤섞일 뿐 토큰마다의 출력 값은 바뀌지 않는다. 「돌려도 같다」「섞어도 같다」는 성질을 데이터로 가르칠 때와 구조에 박을 때 무엇이 다를까?
이 장은 다음 물음에 차례로 답한다.
- 그림을 돌리고 뒤집는 일, 칸의 순서를 바꾸는 일을 모아 놓으면 어떤 규칙이 있을까?
- 그림을 돌렸을 때 「답이 그대로인 것」과 「답도 같이 도는 것」은 어떻게 다르고, 어느 쪽을 바라야 할까?
- 평행이동에 사인·코사인 물결이 짝지어졌듯, 90° 돌리기나 순서 바꾸기에도 그 대칭에 맞는 축이 따로 있을까?
- 신경망에 대칭을 가르칠 때 돌린 데이터를 더 넣는 것과 신경망 구조에 대칭을 박는 것은 무엇이 다를까?
군: 대칭을 모은 것
네모 타일 하나를 바닥에 깔았다가 90° 돌려 다시 깔아도 빈틈 없이 맞고, 180°, 270° 돌려도 맞으며, 한 바퀴 돌리면 처음과 같다. ㄱ 자가 그려진 타일이라면 돌릴 때마다 무늬가 달라 보이겠지만, 그래도 「돌리기」라는 동작들은 그대로 남아 있다. 90° 돌리기를 두 번 하면 180° 돌리기이고, 90° 돌린 것은 270° 돌리면 되돌아온다. 이런 동작들을 하나하나 따로 보지 않고 한 묶음으로 모으면 무엇이 보일까?
역사: 기하학을 동작으로 가른 스물세 살의 교수
19세기 중반에는 기하학의 종류가 너무 많았다. 길이와 각도를 따지는 유클리드 기하학 말고도, 평행선 공리를 바꾼 비유클리드 기하학들, 그림자처럼 비추어도 남는 성질만 따지는 사영 기하학이 따로 자랐다. 사영 기하학은 길이와 각도를 아예 버렸는데도 다른 기하학의 정리들을 품는 것처럼 보였지만, 서로 다른 기하학들이 서로 어떤 관계인지 한 자리에서 설명할 틀이 없었다.
1872년 스물세 살에 에를랑겐 대학의 교수가 된 클라인(Felix Klein)은 취임 때 「최근 기하학 연구들을 견주어 본 고찰(Vergleichende Betrachtungen über neuere geometrische Forschungen)」이라는 글을 냈다. 뒷날 「에를랑겐 목록(Erlanger Programm)」이라 불린 이 글은 취임 강연을 위해 썼지만 실제로 강연한 내용은 아니었다. 클라인은 그보다 두 해 앞선 1870년에 노르웨이의 리(Sophus Lie)와 함께 변환을 연구했고, 「변환들의 묶음」이라는 생각을 리에게서 배웠는데, 글의 핵심 문장에도 그 묶음이 나온다. 「공간과 그 안의 변환 묶음이 주어졌다. 공간에 속한 도형들을, 그 묶음의 변환으로 바뀌지 않는 성질에 관해서 연구하라.」 어떤 변환들을 허락하느냐가 기하학을 정한다는 것이다. 옮기고 돌리는 것만 허락하면 길이·각도·넓이가 모두 남는 유클리드 기하학, 크기를 키우는 것까지 허락하면 각도만 남는 닮음의 기하학, 원근으로 비추는 것까지 허락하면 곧은 선이 곧게 남는다는 것 정도만 남는 사영 기하학이다. 허락하는 변환이 많을수록 남는 성질은 적다.

ㄱ 타일을 90°씩 돌리기
클라인이 말한 「변환 묶음」을 손에 잡히는 크기로 줄여 보자. 칸 4 × 4 위에 ㄱ 자를 그리고(칠한 칸이 1, 빈칸이 0), 시계 반대 방향으로 90°씩 돌린다.
| 돌린 각도 | 0° | 90° | 180° | 270° |
|---|---|---|---|---|
| 칠한 칸이 그리는 모양 | ㄱ | ┌ 꼴(위 가로획, 왼쪽 세로획) | ㄴ | ┘ 꼴(오른쪽 세로획, 아래 가로획) |
돌린 그림 넷은 모두 다르니, 이번에는 돌리기를 이어서 해 본다. 90° 돌린 뒤 180° 돌리면 270° 돌린 것과 그림이 같고, 270° 돌린 뒤 90° 돌리면 처음 그림이 된다. 열여섯 가지 순서쌍을 모두 해 보면 결과는 늘 네 돌리기 가운데 하나다(sources/symmetry-groups/s1_group.py). 결과를 표로 적으면 아래 그림의 오른쪽 표가 되는데, 각도를 더하고 360°를 넘으면 360°를 빼는 덧셈과 똑같다.

표에서 세 가지가 보인다. 첫째, 둘을 이어 해도 넷 밖으로 나가지 않는다. 둘째, 0° 돌리기는 무엇과 이어 해도 상대를 바꾸지 않는다. 셋째, 어느 돌리기든 그것을 되돌리는 돌리기가 넷 안에 있다(90°와 270°, 180°와 180°). 이 세 가지를 갖춘 변환 묶음을 군 (대칭을 모은 것 / group)이라 하는데, 일상어의 군대·무리와는 다른 말이다.
ㄱ 그림은 네 돌리기에서 모두 다르게 보였지만, 모서리 네 칸만 비운 굵은 십자(+)를 그리면 네 돌리기 모두 같은 그림을 낸다. 그림이 무엇이든 돌리기 묶음은 같은 군이고, 그림마다 다른 것은 그 군의 어느 원소가 그림을 그대로 두느냐다. 이 그대로 두는 원소들을 그 그림의 대칭이라 부른다.
순서를 바꾸는 일도 군이다. 칸 세 개에 「가, 나, 다」를 적고 순서를 바꾸는 방법은 여섯 가지이고, 여섯 가지 가운데 둘을 이어 해도 여섯 안에 있으며, 어느 것이든 되돌릴 수 있다. 그런데 돌리기와 다른 점이 하나 있다. 1번·2번 칸을 바꾼 뒤 2번·3번 칸을 바꾸면 「나, 다, 가」가 되고, 순서를 거꾸로 하면 「다, 가, 나」가 된다. 이어 하는 순서에 따라 결과가 달라지는 것으로, 돌리기 넷이 어떤 순서로 이어 해도 결과가 같았던 것과 다르다.
ML에서: 데이터의 대칭이 신경망의 꼴을 가른다
브론스타인(Michael Bronstein), 브루나(Joan Bruna), 코언(Taco Cohen), 벨리치코비치(Petar Veličković)는 2021년 「기하학적 딥러닝: 격자, 군, 그래프, 측지선, 게이지」라는 긴 글을 냈다. 그들은 합성곱 신경망·그래프 신경망·트랜스포머처럼 따로 자란 신경망들을 한 틀로 정리하겠다며 그 틀을 「클라인의 에를랑겐 목록의 정신으로」 세웠다고 밝혔다. 이 틀은 데이터가 놓인 바탕이 어떤 변환에 대해 같은지를 먼저 묻는 것이다. 그림의 칸은 평행이동, 집합의 원소는 순서 바꾸기, 구 위의 값은 구의 회전이 그 변환이다. 바탕의 군이 정해지면 신경망이 지킬 성질도 정해진다. 클라인이 허락하는 변환으로 기하학을 갈랐듯이, 지켜야 할 변환으로 신경망의 꼴을 가르자는 제안이다.
문제 1. 12시간 시계
12시간 시계의 시침은 한 번에 정수 시간만큼 앞으로 돌릴 수 있다. (가) 「5시간 앞으로」를 되돌리려면 몇 시간 앞으로 돌려야 하는가? (나) 0시에서 「5시간 앞으로」만 거듭하면 몇 번 만에 0시로 돌아오는가? (다) 시침을 4시간씩만 돌릴 수 있으면 0시에서 닿는 시각은 몇 개인가? 4시간씩과 6시간씩을 섞어 돌릴 수 있으면?

(가)는 뒤로 5시간이니까 −5요.

시계에는 「앞으로」만 있다고 했어요. 앞으로만 돌려서 되돌릴 수 있나요?

아, 12시간 돌리면 제자리니까 앞으로 7시간이요. 5 + 7 = 12. (나)는 5시간씩 가면 5, 10, 3, 8, 1, … 해서 12번 만에 0시예요.

(다)는 4시간씩이면 0, 4, 8에서 다시 0이라 세 개야. 6시간씩이면 0과 6 두 개고.

그럼 섞으면 3 × 2 = 6개? 아니면 둘을 섞으니까 열두 시각 다 가지 않을까요?

4와 6을 몇 번씩 더한 수는 어떤 수들이죠?

4와 6은 둘 다 짝수라서 몇 번을 더해도 짝수예요. 홀수 시각은 못 가요.

짝수 시각은 다 갈까요? 2시는요?

2시는… 4 + 4 + 6 = 14니까 2시예요. 2시에 갈 수 있으면 2시간씩 도는 것과 같으니까, 짝수 시각 0, 2, 4, 6, 8, 10 여섯 개가 다 돼요.

그럼 내 6개가 맞았네?

개수는 맞아. 그런데 3 × 2라서가 아니라 2시간씩 도는 것과 같아져서야.

그래요. 4시간씩만 돌리는 동작들도 이어 해도 그 안에 있고 되돌릴 수 있으니, 열두 동작 안의 작은 군이에요.

실험 조 배정할 때 4명씩 조 짜면 남는 사람 생기는 거랑 비슷하네요. 어떻게 섞어도 못 닿는 데가 있어요.
문제 2. 바꾸는 순서가 결과를 바꾸는가
칸 세 개에 「가, 나, 다」가 있다. (가) 「1·2번 칸 바꾸기」와 「2·3번 칸 바꾸기」를 이 순서로 할 때와 거꾸로 할 때의 결과를 적어라. (나) 이 두 가지 바꾸기만 여러 번 이어 해서 여섯 가지 순서를 모두 만들 수 있는가? (다) 여섯 가지 바꾸기에서 고른 순서쌍 36개 가운데, 이어 하는 순서를 바꾸면 결과가 달라지는 쌍은 몇 개인가? 90° 돌리기 넷에서는?

(가)는 칸 세 개로 해 본 대로 「나, 다, 가」와 「다, 가, 나」요. (나)는 바꾸기가 둘뿐이니까 만들 수 있는 것도 둘에 처음 것까지 세 개 정도 아닐까요?

「1·2 바꾸기 → 2·3 바꾸기」를 한 묶음으로 보고, 그 묶음을 한 번 더 해 보면요?

「나, 다, 가」에서 다시 하면 「다, 가, 나」네요. 한 칸씩 도는 거라 세 번 하면 제자리고요. 여기에 바꾸기 하나씩 붙이면 나머지 둘도 나와요. 여섯 개 다 돼요.

(다)는 직접 세 봤어. 36쌍 가운데 18쌍이 순서를 바꾸면 결과가 달라져. 같은 걸 두 번 하는 6쌍, 아무것도 안 하는 것이 낀 쌍, 한 칸씩 도는 것 둘끼리의 쌍이 같은 쪽이고.

90° 돌리기 넷에서는요?

0쌍이에요. 돌린 각도를 더하는 거라 더하는 순서가 상관없어요. 그러니까 군이라고 다 순서를 바꿔도 되는 건 아니네요.

행렬 곱셈도 AB ≠ BA라서 곱하는 순서를 바꾸면 결과가 달라지잖아. 선형대수 시간에 반례로 외우던 거.
문제 3. 돌리기와 좌우 뒤집기로 데이터 늘리기
그림 분류 모델을 학습시키면서, 그림마다 「0°·90°·180°·270° 가운데 하나로 돌리기」와 「반의 확률로 좌우 뒤집기」를 무작위로 적용해 데이터를 늘린다. (가) ㄱ 그림 하나에서 나올 수 있는 서로 다른 그림은 몇 장인가? (나) 「90° 돌린 뒤 뒤집기」와 「뒤집은 뒤 90° 돌리기」는 같은 그림을 내는가? (다) 8만 번 무작위로 적용했을 때 그림마다 나오는 비율은 어떤가? (위젯 1의 「90° 돌리기」「좌우 뒤집기」 단추로 확인해 보자.)

(가)는 돌리기 넷에 뒤집기 둘이니까 4 × 2 = 8장이에요. 그런데 뒤집고 돌리고 다시 뒤집고 돌리면 새 그림이 계속 나오지 않을까요?

위젯에서 돌리기와 뒤집기를 아무렇게나 열 번쯤 눌러 봐요. 새 그림이 나오나요?

계속 눌러도 여덟 가지 안에서만 돌아요. 아홉 번째 그림이 안 나와요.

(나)는 달라. 90° 돌린 뒤 뒤집은 그림과 뒤집은 뒤 90° 돌린 그림은 서로 180° 돌린 꼴이야.

그럼 「뒤집은 뒤 90° 돌리기」를 「돌린 뒤 뒤집기」 꼴로 다시 적으면 몇 도 돌린 거죠?

270°요. 아, 순서를 바꾸면 돌리는 방향이 거꾸로 되는 거네요.

그래서 순서가 바뀌어도 여덟 가지 밖으로 나가지 않아요. 뒤집고 돌린 것은 언제나 「돌리고 뒤집기」 꼴로 다시 적을 수 있으니까요. (다)는요?

돌리기를 고르게, 뒤집기를 반반 고르니까 여덟 가지가 8분의 1씩, 12.5%예요. 8만 번 해 보면 12.14%에서 12.64% 사이로 나와요.

증강 설정에 옵션 두 개만 켰는데 실제로는 여덟 가지 그림을 보여 주는 거였네요. 숙제로 증강 종류를 세라고 하면 옵션 수를 곱하고 끝냈을 거예요.