Leela Chess Zero

**Leela Chess Zero**(릴라 체스 제로, 약칭 LCZero, lc0)는 오픈 소스 체스 엔진이다. 구글의 알파제로 체스 엔진에서 영감을 얻어 개발하게 된 컴퓨팅 자원 오픈 소스 프로젝트이다. Lella Chess Zero는 스톡피시 체스 엔진의 개발자인 게리 린스콧(Gary Linscott) 주도 하에 개발이 되었으며, Leela Zero의 Go 엔진으로부터 본 따온 프로그램이다.

Leela Zero나 AlphaGo Zero와 같이 Leela Chess Zero는 강화 학습을 통해 구연되었다. 처음에는 기본 규칙 외의 지식이 없는 상태에서 시작했다. Leela Chess Zero 웹사이트에서 조정된 분산 컴퓨팅 네트워크를 사용하여 반복된 자가 대결을 통해 강화 학습을 하였다. 이를 통해 엔진은 직접 체스를 하는 법을 배웠다. 2024년 11월으로부터 현재 엔진에서 사용하는 대부분의 모델은 이전 강화 학습 실행에서 생성된 데이터에 대한 지도 학습을 통해 학습한다.

, Leela Chess Zero는 자가 대결을 약 25번 반복하였으며, 매일 거의 10억번의 경기를 한다.  체스 엔진중 선두자로 불리우는 스톡피시 체스 엔진과 맞먹을 정도의 수준에 도달하였다.

## 역사
Leela Chess Zero 프로젝트는 AlphaZero의 성공을 재현하려고 개발된 오픈 소스 자체 학습 체스 엔진이다. 이는 처음으로 2018년 1월 9일 TalkChess.com에서 처음 발표되었다. 이 엔진은 훈련을 시작한 지 몇 달 만에 Leela Chess Zero는 이미 그랜드마스터 수준에 도달했으며, 평가 함수로 사용하는 딥 러닝 신경망의큰 크기에 의한 낮은 층수를 갖고 있음에도 불구하고 Rybka, 스톡피시, Komodo의 초기 버전의 강점을 모두 능가했다.

2018년 12월, AlphaZero 팀은 AlphaZero에 사용된 아키텍처 및 트래이닝 매개변수에 대한 공개되지 않았던 세부 정보를 공개하는 논문을 *[[사이언스|Science]]지*에 발표하였다. 이러한 변경 사항은 곧 Leela Chess Zero에 적용이 되어 훈련의 효율성과 플레이하는 수준이 모두 향상되었다.

Leela Chess Zero 엔진은 쇼기용 AobaZero 프로젝트에 영향을 주었다.

Leela Chess Zero 엔진은 처음 출시된 이후 계속해서 수정되고 재작성되었으며, 2019년 이후로 여러 백엔드에서 실행되어서 CPU와 GPU로 모두 실행시킬 수 있도록 되었다.

엔진은 다양한 가중치를 이용하도록 설정할 수 있으며, 이 설정에는 다양한 종류의 인공 신경망 프로그램도 변경할 수 있다. 이와 같은 다양한 변경 가능한 가중치는 체스960과 같은 기존의 체스와 규칙이나 배치가 다른 변형 체스에 사용될 수 있다. 이 기능은 2019년에 추가가 되었다.

## 인공 신경망
섬네일| Leela Chess Zero 엔진에서 사용된 트랜스포머 모델의 시각화.
Leela Chess Zero는 AlphaZero와 마찬가지로 신경망을 사용하여 정책 벡터(다음 수들에 대한 분포, 탐색을 유도하는 데 사용됨)와 포지션 평가를 출력한다. 이 신경망들은 기존 체스 엔진들과 달리 GPU에서 실행되도록 설계되었다. 처음에는 잔차 신경망이 사용되었으나, 2022년에는 다니얼eela Chess Zero는 AlphaZero와 마찬가지로 신경망을 사용하여 정책 벡터(다음 수들에 대한 분포, 탐색을 유도하는 데 사용됨)와 포지션 평가를 출력한다. 이 신경망들은 기존 체스 엔진들과 달리 GPU에서 실행되도록 설계되었다. 처음에는 잔차 신경망이 사용되었으나, 2022년에는 다니엘 먼로(Daniel Monroe)와 필립 찰머스(Philip Chalmers)가 설계한 트랜스포머 기반 아키텍처로 전환되었다. 이 트랜스포머 모델은 체스판을 64개의 토큰 시퀀스로 표현하며, 여러 개의 Post-LN 방식 인코더 레이어로 구성된 트렁크를 적용해, 64개의 인코딩된 토큰 시퀀스를 출력한다. 이 시퀀스는 포지션 평가와 다음 수들의 분포 생성을 위해 사용된다. 셀프 어텐션(self-attention) 계층을 개선하기 위해 *<nowiki/>'smolgen*'이라는 도메인 특화 포지션 인코딩 방식을 사용한다.

2024년 11월 기준으로, Leela Chess Zero에서 사용하는 모델들은 AlphaZero가 사용한 잔차 네트워크보다 훨씬 크고 효율적이며, 한 수당 한 번의 포지션 계산만으로도 그랜드마스터 수준의 실력을 달성했다고 발표되었다. 이 모델은 갇힌 말들이나 요새와 같은 포지션 특유의 특성을 감지하고 이를 활용하여 전통적인 체스 엔진보다 능숙하고, 실력으로 압도할 수 있다. 또한 Leela Chess Zero는 자신만의 특유한 플레이 스타일을 만들어낸다. 몇 수 앞을 보는 능력이 있다는 증거도 있다.

## 프로그램 및 사용
AlphaZero와 마찬가지로 Leela Chess Zero도 강화 학습을 통해 학습하며, 자가 대결을 통해 생성된 데이터를 지속적으로 훈련에 사용한다. 그러나 AlphaZero와 달리 Leela Chess Zero는 분산 컴퓨팅을 통해 데이터 생성 과정을 탈중앙화한다. 자원봉사자들이 자신의 하드웨어에서 자가 대국 데이터를 생성하여 강화 학습 알고리즘에 제공하는 방식을 사용하였다. 훈련용 대결을 제공하려면 자원봉사자는 최신의 정식 출시 후보가 아닌 non-rc 버전의 엔진과 클라이언트를 다운로드해야 한다. 클라이언트는 Leela Chess Zero 서버에 연결하여 최신 신경망 버전을 반복적으로 받아서 자가 대국을 시키고, 그 결과를 서버로 전송하는 방식으로 신경망 학습에 사용하게 된다.

Leela Chess Zero 엔진을 실행하려면 두 가지 구성 요소가 필요하다.

# 탐색을 수행하는 엔진 실행 파일
# 포지션을 평가하는 데 사용하는 신경망 파일

훈련 데이터 기여를 위한 클라이언트는 엔진 실행 자체에는 필요하지 않다. 또한 이전 버전의 신경망도 다운로드하여 사용할 수 있으며, 해당 파일들을 Leela Chess Zero 실행 파일과 같은 폴더에 넣으면 된다.

## 파생작
Top Chess Engine Championship(TCEC) 시즌 15에서, *AllieStein*이라는 엔진이 Leela Chess Zero와 함께 출전했다. AllieStein은 Leela Chess Zero에서 파생된 두 개의 프로젝트를 결합한 것이었다. *Allie*는 Leela Chess Zero와 동일한 신경망을 사용하지만, 다른 수들을 탐색하기 위한 독특한 탐색 알고리즘을 가지고 있었다. *Stein*은 다른 엔진들 간의 대국 데이터를 기반으로 기존 게임 데이터를 이용한 지도 학습으로 훈련된 신경망이다. 이 두 프로젝트는 각각은 Leela Chess Zero와의 유사성 때문에 TCEC에 별도로 출전이 허용되지 않았지만, Allie의 탐색 알고리즘과 Stein 신경망을 결합한 AllieStein은 충분히 독창적이라 판단되어 대회 출전이 허가되었다. TCEC 규정에 따르면 신경망 기반 엔진은 세 가지 핵심 요소인 신경망을 훈련시키는 코드, 신경망 자체, 탐색 알고리즘 중 적어도 두 가지 구성 요소에서 고유한 것이 필요하다.  AllieStein은 Leela Chess Zero와 동일한 코드로 신경망을 훈련하지만, 나머지 두 구성 요소가 새롭기 때문에 AllieStein을 별개의 엔진으로 간주하였다.

2021년 초, LcZero 블로그는 ''Ceres''를 발표했는데, 이는 Leela 엔진을 C#으로 포팅한 것이며, 여러 알고리즘적 개선을 도입했다. 이 엔진은 여러 토너먼트에서 경쟁력 있게 활약했으며, TCEC Swiss 7에서 3위, TCEC Cup 4에서 4위를 기록했다. 2024년에는 체스를 위한 심층 신경망 훈련을 지원하는 *[https://github.com/dje-dev/CeresTrain CeresTrain]* 프레임워크가 PyTorch 기반으로 발표되었다.

## 경기 결과
2018년 4월, Leela Chess Zero는 최하위 부인 시즌 12 4부에서 딥 신경망을 사용하는 최초의 엔진으로 Top Chess Engine Championship (TCEC)에 참가하게 되었다. 28개의 게임 중 1개의 승리와 1개의 무승부를 거두고 나머지 경기에서 모두 패하게 되었다. 유일한 승리는 스콜피오 2.82가 세번쩨 수를 두고 프로그램이 튕기게 되어서 이기게 된 것이었다. 하지만, Leela Chess Zero는 빠른 속도로 발전하게 되었다. 2018년 7월, Leela Chess Zero는 2018년 World Computer Chess Championship에서 8명의 경쟁자 중 7위를 차지했다. 2018년 8월 TCEC 시즌 13 4부 리그에서 14승 12무 2패의 성적으로 우승을 차지하였다. 3부 리그에서 Leela Chess Zero는 28점 중 16점을 획득하여 2등과 3등 타이브레이커에서 Arasan에게 패배하였다. 이 경기는 결국 28점 중 22.5점을 획득한 Ethereal이 1등을 차지하고, Arasan이 2등, Leela Chess Zero가 3등을 차지하며 종료되었다.

2018년 9월까지 Leela Chess Zero는 세계에서 가장 강력한 엔진과 경쟁할 수 있는 수준까지 도달했다. 2018년 Chess.com Computer Chess Championship(CCCC)에서 Leela Chess Zero는 24개의 체스 프로그램중 5위를 차지했다. 상위 8개 엔진은 2라운드에 진출했고, Leela Chess Zero는 여기서 4위를 차지했다. 이후 Leela Chess Zero는 Komoda와의 30판 경기에서 승리해 토너먼트 3위를 차지했다. Leela Chess Zero는 서로 다른 TCEC 부문의 엔진들이 서로 경기를 펼칠 수 있는 이벤트인 "TCEC Cup"에도 참여했다. Leela Chess Zero는 준결승에서 Stockfish에게 탈락하기 전까지 상위 엔진인 Laser, Ethereal, Fire를 상대로 이겼다.

2018년 10월과 11월에 Leela Chess Zero는 Chess.com Computer Chess Championship 블리츠 경기에 참가하였다. Leela Chess Zero는 Stockfish와 Komodo에 이어 3위를 차지하게 되었다.

2018년 12월에 Leela Chess Zero는 Top Chess Engine Championship 시즌 14 에 참가했다. Leela Chess Zero는 3부, 2부, 1부에서 상위권를 차지하며 모든 부문에서 1위를 차지했다. 프리미어 부문에서는 Stockfish가 전체의 우위를 차지한 반면, Houdini, Komodo, Leela Chess Zero가 2위 경쟁을 하였다. 마지막 라운드에서 Leela Chess Zero는 Stockfish를 흑으로 비기고 Komodo를 제치고 2위를 차지해야 하던 상황에서 승리하게 되어 슈퍼파이널에서 Stockfish와 경쟁하게 되었다. 흑백을 번갈아가며 게임이 진행되었다. Stockfish가 첫판에서 승리를 한 후, Leela Chess Zero가 3게임 리드를 차지했다가 Stockfish가 50.5-49.5의 매우 작은 차이로 승리했다.

2019년 2월, Leela Chess Zero는 두 번째 TCEC Cup 결승에서 Houdini를 이기고 첫 메이저 토너먼트 우승을 차지했다. Leela Chess Zero는 토너먼트 모든 경기에서 패배를 하지 않은 플레이를 보여줬다. 2019년 4월, Leela Chess Zero는 Chess.com Computer Chess Championship 7: Blitz Bonanza에서 우승하여 인공 신경망 최초로 이 타이틀을 차지하였다.

2019년 5월에 열린 Top Chess Engine Championship 시즌 15에서, Leela는 TCEC 컵 타이틀을 방어했으며, 결승전에서 Stockfish를 5.5–4.5(+2 =7 −1)로 꺾고 우승했다. 이 경기에서는 Stockfish가 7말 테이블베이스에서 무승부를 실수로 놓치는 바람에 패배하였다. Leela Chess Zero는 또한 이번 시즌에서 처음으로 슈퍼파이널 우승을 차지했는데, Stockfish를 상대로 53.5–46.5(+14 −7 =79)의 스코어를 기록했다. 이 경기에서는 게임 61번과 62번에서 같은 미리 정해진 오프닝으로 백과 흑 양쪽 모두 승리를 거두는 이례적인 기록도 세웠다.

TCEC 시즌 16에서는 Leela Chess Zero가 프리미어 디비전에서 3위로 마감하며, Stockfish와 새롭게 등장한 딥 신경망 네트워크 엔진 AllieStein에 밀려 슈퍼파이널 진출에 실패했다. Leela Chess Zero는 프리미어 디비전에서 유일하게 단 한 번도 패배하지 않은 엔진이었으며, Stockfish와의 6번의 대결 중 한 번 승리하기도 했다. 하지만 Leela Chess Zero는 9승에 그친 반면, AllieStein과 Stockfish는 각각 14승을 기록했다. 이로 인해 약체 엔진을 상대로 승리를 많이 따내지 못한 것이 3위로 이어졌고, Leela Chess Zero는 AllieStein보다 0.5점, Stockfish보다 1점 낮은 점수를 기록했다. TCEC 컵 4기에서는, Leela Chess Zero가 디펜딩 챔피언으로 1번 시드를 받아 AllieStein과 Stockfish와는 대진표의 반대쪽에 배치되었다. Leela Chess Zero는 결승에 진출했으나, Stockfish와의 결승전에서 7연속 무승부 후, 8번째 게임에서 패배하며 준우승에 그쳤다.

TCEC 시즌 17(2020년 1월~4월)에서는 Leela Chess Zero가 챔피언 자리를 탈환했으며, Stockfish를 52.5–47.5로 제압했다. 마지막 10판 중 6승을 거두는 인상적인 결과를 남겼으며, 게임 95번과 96번에서는 같은 미리 정해진 오프닝에서 백과 흑 모두 승리하였다.

Leela Chess Zero는 시즌 18에서도 다시 슈퍼파이널에 진출했지만, 이번에는 Stockfish에게 53.5–46.5로 패배했다.

TCEC 컵 6기 결승전에서는 AllieStein에게 패배하며 2위를 기록했다.

TCEC 시즌 19에서는 Leela Chess Zero가 다시 슈퍼파이널에 진출했다. 이번에는 *NNUE*를 도입한 새로운 Stockfish 버전과 대결했다. NNUE는 탐색 트리의 리프 노드 평가에 주로 사용되는 얕은 신경망 기반 평가 함수이다. Stockfish NNUE는 Leela Chess Zero를 54.5–45.5(+18 −9 =73)로 압도했다.

그 이후로 Leela Chess Zero는 계속해서 슈퍼파이널에 진출했으나, Stockfish에게 매번 패배하였다.

* 시즌 20: +14 −8 =78
* 시즌 21: +19 −7 =74
* 시즌 23: +27 −10 =63
* 시즌 24: +20 −16 =64
* 시즌 25: +27 −23 =50
* 시즌 26: +31 −17 =52
* 시즌 27: +35 −18 =47

NNUE가 Stockfish에 도입된 이래로 Leela는 TCEC Swiss 6과 7, TCEC Cup 11에서 우승을 차지했으며, 주요 토너먼트에서는 보통 Stockfish에 이어 2위를 차지했다.

### 결과 요약








## 주목할만한 경기

* Leela vs Stockfish, CCCC 보너스 게임, 1-0 릴라는 1폰 핸디캡에도 불구하고 세계 챔피언 스톡피시 엔진을 이겼다.
* Stockfish vs Leela Chess Zero – TCEC 시즌 15 슈퍼파이널 – 61번째 게임 Trompovsky attack 오프닝에서 Leela Chess Zero는 흑으로 스톡피시를 완벽하게 압도했다. Leela Chess Zero는 하나의 수로 포지션 평가가 0.1에서 -1.2로 올라갔고, 스톡피시의 평가는 15번째 움직임이 지나서야 음수가 되었다.
* Stockfish vs Leela, CCC 21 래피드 준결승 - 163번째 게임 Leela Chess Zero는 Stockfish의 룩을 함정에 빠뜨린다.
* 스톡피시 대 릴라, CCC 23 래피드 파이널 – 189번째 게임 Leela Chess Zero는 흑으로, 요새를 만들어 지는 포지션에서 무승부를 만들어냈다.  Stockfish는 이 전략을 인지하지 못했으며, 포지션 평가가 약 100수 동안 +5 이상을 유지했다.

## 각주


## 같이 보기

* 
* Leela Chess Zero on GitHub
* Neural network training client
* Engine
* Neural nets
* Chessprogramming wiki - Leela Chess Zero

분류:C++로 작성된 자유 소프트웨어
분류:GPL 라이선스 소프트웨어
분류:응용 기계 학습
분류:2018년 소프트웨어
분류:자유-오픈 소스 소프트웨어
분류:체스 엔진