스톡피쉬 18은 어떻게 만들어졌는가
How We Built Stockfish 18 by Daniel Monroe
이 영상은 세계 최고의 체스 엔진인 스톡피쉬 18의 출시를 맞아, 이전 버전보다 더욱 강력해진 검색 알고리즘의 개선 사항과 혁신적인 신경망 구조의 변화를 상세히 설명합니다. 특히 데이터 공유를 통한 오류 수정, 정밀해진 탐색 깊이 조절, 그리고 기물 간의 관계를 직접 파악하는 새로운 평가 방식이 어떻게 체스 실력의 향상으로 이어졌는지 다룹니다.
-
검색 알고리즘의 비약적 개선
- 보정 이력 공유 시스템
- 스톡피쉬는 신경망의 평가 함수에서 발생하는 일관된 평가 오류를 조정하기 위해 보정 이력이라는 기법을 사용합니다.
- 기존에는 CPU의 각 코어마다 별도의 검색 스레드가 실행되었으나, 스톡피쉬 18에서는 이 보정 이력을 스레드 간에 서로 공유하도록 설계되었습니다.
- 스레드들이 서로 관찰한 오류 정보를 실시간으로 통신함으로써, 더욱 정확한 보정이 가능해졌으며 이는 엔진의 실질적인 경기력 향상으로 직결되었습니다.
- 오류의 비대칭성 해결
- 스톡피쉬가 범하는 오류의 분포를 분석한 결과, 평가치가 위쪽으로 치우치는 일관된 비대칭성이 발견되었습니다.
- 이를 해결하기 위해 양수 오차에 대해 할인율을 적용하여 균형을 맞추었으며, 이 과정에서 추가적인 경기력 점수를 획득했습니다.
- 소수점 단위의 탐색 깊이 축소
- 늦은 수 축소(LMR) 기법은 특정 위치가 좋은지 먼저 초기 탐색을 한 뒤, 확인을 위해 전체 탐색을 수행하는 방식입니다.
- 과거에는 탐색 깊이를 조절할 때 반드시 정수 단위로만 가능했기 때문에 미세한 조정이 불가능했습니다.
- 스톡피쉬 18은 소수점 단위의 축소를 지원하여 검색 깊이를 원하는 만큼 아주 정밀하게 변경할 수 있게 되었습니다.
- 튜닝 과정을 통해 최적의 상수를 찾아낸 결과, 기존에 최선의 수가 '기물 잡기'일 때 다른 수들의 탐색 깊이를 1만큼 줄이던 것을 이제는 1.09만큼 줄이도록 정교화되었습니다.
- 보정 이력 공유 시스템
-
새로운 신경망 아키텍처 도입
- 기물 간 텐션 및 관계 파악
- 기존 버전의 신경망은 전처리 과정 없이 보드 상태를 그대로 입력받아 기물 간의 관계를 스스로 파악해야 했습니다.
- 새로운 아키텍처는 다른 체스 엔진인 몬티의 아이디어를 차용하여, 기물 간의 위협 및 방어 관계를 직접 입력값으로 제공합니다.
- 어떤 기물이 무엇을 공격하거나 방어하고 있는지 신경망에 구체적으로 전달함으로써 보드 상태에 대한 이해도를 높였습니다.
- 아키텍처 최적화 과정
- 중복 위협 제거: 두 개의 폰이 서로 마주 보고 있어 발생하는 중복된 위협 정보를 하나로 통합하여 효율성을 높였습니다.
- 변경 사항 추적: 위협 감지 속도를 높이기 위해 매번 처음부터 계산하는 것이 아니라, 이전 위치에서 다음 위치로 이동할 때 발생하는 변화량만 추적합니다.
- 캐시 메모리 활용: 위협 입력 가중치를 압축하여 CPU 캐시에 모두 들어갈 수 있게 함으로써 접근 속도를 획기적으로 개선했습니다.
- 성능 및 효율성 증대
- 새로운 아키텍처에 맞춰 검색 상수를 재조정(튜닝)한 결과, 시스템이 신경망의 예측을 훨씬 더 신뢰하게 되었습니다.
- 이를 통해 좋지 않은 위치를 더 확신 있게 가지치기하고 중요한 위치에 집중할 수 있게 되었으며, 최대 7 엘로(ELO) 점수의 성능 향상을 이뤄냈습니다.
- 기물 간 텐션 및 관계 파악
-
성능 비교 및 결론
- 역사적 비교: 2017년 알파제로에게 패배했던 스톡피쉬 8 버전과 비교했을 때, 이번 스톡피쉬 18은 무려 100배 이상 빠른 속도를 자랑합니다.
- 이러한 발전은 알고리즘의 정교화와 하드웨어 자원의 극한 효율화를 통해 달성되었습니다.