mallo

이 저장소는 PC-ALM을 무엇으로 소개하고, 어디까지 재현해 주는 걸까요?

요약 듣기

0:005:16

원문 보기github.com
요약 보기

이 문서는 PC-ALM이라는 방법을 설명하는 연구 논문 자체라기보다, 그 방법을 직접 실행해 볼 수 있게 만든 공식 JAX 기준 구현을 소개하는 안내문이에요. 가장 핵심이 되는 문장은 PC-ALM이 predictive coding의 층별 갱신을 backpropagation과 더 맞도록 정렬한다는 주장이고, 그 방식으로 층마다 생기는 제약 오차를 라그랑주 승수에 누적한다고 적고 있어요. 다만 여기서는 아이디어의 요약만 보일 뿐, 전체 수식이나 증명은 들어 있지 않아요.

용어가 낯설다면 이렇게 읽으면 덜 막혀요. 이 문맥에서 predictive coding과 backpropagation은 비교 대상이고, PC-ALM은 둘을 더 가깝게 맞추려는 방법으로 소개돼요. '층별 로컬 제약 오차를 누적한다'는 표현은, 모델 전체를 한 번에 다루기보다 각 층에서 생긴 어긋남을 따로 모아 다음 조정에 반영한다는 그림으로 이해할 수 있어요. 가상의 비유로 보면, 여러 층으로 된 건물에서 각 층 관리인이 자기 층의 문제 메모를 따로 적어 두고, 라그랑주 승수는 그 메모를 한 번 보고 버리는 게 아니라 계속 쌓아 두는 장부처럼 떠올릴 수 있어요. 물론 이 발췌만으로는 그 장부가 정확히 어떤 식으로 갱신되는지까지는 알 수 없고, 자세한 내용은 연결된 논문이나 프로젝트 페이지를 봐야 해요.

이 구현이 다루는 범위도 비교적 분명해요. 문서에 따르면 이것은 논문에 나온 residual MLP의 너비·깊이 그리드를 MNIST와 Fashion-MNIST에서 재현하는 'minimal reference'예요. 그리고 BP, PC, PC-ALM을 같은 아키텍처에서 돌리며, 논문에서 쓴 고정된 gamma0=1 설정을 사용한다고 밝혀요. 여기서 읽어야 할 포인트는, 이 저장소가 아주 넓은 모든 변형을 다 담은 범용 프레임워크라기보다, 논문 실험의 특정 범위를 기준 형태로 옮겨 놓은 구현이라는 점이에요.

실행 조건도 몇 가지 있어요. 소스 코드를 체크아웃한 상태에서 돌리고, 먼저 uv를 설치하라고 안내해요. 테스트 스위트도 따로 실행할 수 있어요. GPU를 쓸 때는 조건이 더 붙는데, NVIDIA GPU라면 맞는 JAX CUDA 빌드를 설치한 뒤 그 빌드가 유지되도록 이후 명령에서 no-sync 옵션을 쓰라고 해요. 데이터 쪽에서는 합성 smoke test는 다운로드가 필요 없지만, MNIST와 Fashion-MNIST 실험을 하려면 데이터를 받아야 해요. 압축되지 않은 IDX와 gz된 IDX를 둘 다 지원하고, 다른 위치의 데이터를 쓰려면 MNIST/raw와 FashionMNIST/raw가 들어 있는 디렉터리를 data-dir로 지정하라고 되어 있어요. 그러니까 이 저장소는 버튼 한 번으로 끝나는 데모라기보다, 환경과 데이터 위치를 맞춰서 재현하는 기준 실험 코드에 가까워요.

문서가 숫자로 보여 주는 대표 예시는 Fashion-MNIST 한 셀 재현이에요. 조건은 너비 32, 깊이 32, ReLU, 시드 0, 전체 데이터 한 에폭, 그리고 추론 예산 T=2L로 적혀 있어요. 그 설정의 CPU 기준 실행 결과로 BP는 테스트 정확도 78.66%, PC는 68.13%, PC-ALM은 77.75%가 제시돼요. 또 'Gradient cosine to BP'라는 항목에서는 BP 1.000, PC 0.604, PC-ALM 0.909가 적혀 있어요. 이 표만 놓고 보면, 적어도 이 기준 실행에서는 PC-ALM의 수치가 정확도와 gradient cosine 둘 다 PC보다 BP에 더 가까운 모습으로 적혀 있다고 읽을 수 있어요. 하지만 문서가 함께 단서를 달아 두는데, 이것은 CPU reference run의 기대 결과이고 작은 수치 차이는 정상이라고 해요. 그래서 실행했을 때 소수점까지 완전히 같아야 한다는 뜻은 아니고, 반대로 이 표 하나만으로 모든 조건에서의 일반적 결론까지 확정할 수 있는 것도 아니에요. 또 gradient cosine의 정확한 계산식은 이 발췌에 나오지 않아요.

재현을 넘어 여러 실험을 정리하는 방법도 함께 적혀 있어요. eta_best_by_cell.csv에는 데이터셋, 활성화 함수, 너비, 깊이별로 논문에서 고정해 둔 activity step size가 들어 있고, 값은 seed들에 대한 median이라고 설명해요. 다른 실험을 하고 싶다면 YAML 설정을 고치거나 train.py의 단일 실행 옵션을 쓰면 된다고 해요. MNIST용 설정 파일도 따로 안내돼요. 평가 단계에서는 각 실행이 결과 파일을 남기고, 그리드 실행에서는 cells.csv가 모든 방법과 시드를 요약해 준다고 해요. 또 그 파일로 heatmap을 만들 수 있다고 안내하죠. 마지막으로, 코드를 쓰면 인용을 요청하고 라이선스는 MIT라고 밝혀요. 즉 이 저장소는 단순 예제 스크립트보다, 논문 실험을 같은 형식으로 돌리고 결과를 모아 보는 연구용 기준 구현의 성격이 강해요.