실습 · 연습문제 2개
점구름의 불변 특징 설계하기 invariant-features
평면 위의 점 개 로 이루어진 점구름에서, 다음 세 변환에 모두 불변인 특징 벡터를 만든다.
- 회전: ()
- 평행이동:
- 원소 순서 바꾸기: 행의 치환
함수 invariant_features(X)를 완성해 1차원 NumPy 배열을 반환한다. 길이는 에만 의존해야 한다(같은 이면 같은 길이).
테스트는 다음을 확인한다.
- 무작위 회전·평행이동·치환을 함께 적용해도 특징이 같다.
- 모양이 다른 점구름은 특징이 다르다. 모든 점을 1.5배 늘린 점구름, 점 하나를 옮긴 점구름과 구별되어야 한다. 상수 벡터나 점의 개수처럼 "아무것도 구별하지 못하는 불변량"은 통과하지 못한다.
힌트: 회전과 평행이동에 불변인 가장 기본적인 양은 두 점 사이의 거리다. 순서에 불변으로 만들려면 순서에 의존하지 않는 방식으로 모은다(정렬, 합, 히스토그램 등). 무게중심을 빼는 것만으로는 회전 불변이 되지 않는다.
참고: 정렬한 쌍별 거리는 일반적인 점구름을 잘 구별하지만, 모든 경우에 완전한 불변량은 아니다. 서로 합동이 아닌데 쌍별 거리의 모음이 같은 특수한 점 배치가 존재한다. 반사(거울상)도 거리를 바꾸지 않으므로, 이 특징은 거울상 쌍을 구별하지 못한다.
순열 등변 층 만들고 검증하기 perm-equivariant-layer
집합(점구름, 분자의 원자들, 입자들)은 원소의 순서에 의미가 없다. 원소 개의 특징을 행으로 쌓은 행렬 에 대해, 순서를 바꾸는 치환 행렬 를 적용하면 출력의 행도 똑같이 바뀌어야 한다.
다음 층은 이 성질(순열 등변성)을 만족한다.
첫 항은 원소마다 같은 가중치를 따로 적용하고, 둘째 항은 집합 전체의 평균을 모든 원소에 똑같이 더한다.
함수 equivariant_layer(H, W_self, W_pool, b)를 완성한다. 입력에는 batch 축이 있다.
| 인자 | shape |
|---|---|
H |
(B, N, D_in) |
W_self |
(D_in, D_out) |
W_pool |
(D_in, D_out) |
b |
(D_out,) |
반환값의 shape은 (B, N, D_out)이다.
테스트는 다음을 확인한다.
- 위 식과 같은 값을 낸다.
- batch 항목마다 원소 순서를 무작위로 바꿔도 출력이 같은 방식으로 바뀐다(등변).
- 평균은 batch 항목마다, 원소 축으로 낸다. batch 축이나 feature 축으로 평균을 내면 등변성 또는 batch 독립성이 깨진다.
- 같은 가중치로 원소 수가 다른 집합(, )을 처리한다.
- 출력을 원소 축으로 합하면 순서에 불변인 집합 표현이 된다.
힌트: H.mean(axis=?, keepdims=True)의 shape이 (B, 1, D_in)이 되도록 축을 고른다. 행렬 곱 @은 마지막 두 축에 작용하고 앞 축은 broadcasting된다(7.7장).