PyTorch 및 PyTorch Lightning을 사용하여 Leela Zero를위한 신경망 훈련

PyTorch, PyTorch Lightning 및 Hydra로 구현 된 Leela Zero에 대한 간단한 교육 파이프 라인

번개와 히드라 (?) — 소스

최근에 저는 특히 교육 파이프 라인 작성 및 실험 구성 관리와 관련하여 연구 속도를 높이고 실험을 관리 할 수있는 방법을 찾고 있는데,이 두 가지 새로운 프로젝트를 발견했습니다. https://github.com/PyTorchLightning/pytorch-lightninghttps://hydra.cc/. PyTorch Lightning을 사용하면 교육 파이프 라인을 빠르게 작성할 수 있고 Hydra는 구성을 깔끔하게 관리 할 수 ​​있습니다.

좀 더 현실적인 환경에서 사용하는 연습을하기 위해 저는 교육 파이프 라인을 작성하기로 결정했습니다. https://github.com/leela-zero/leela-zero, Go 엔진. 여러 GPU를 사용하는 빅 데이터 세트에서 거대한 네트워크를 훈련시키는 것과 관련된 흥미로운 기술적 과제가있는 범위가 넓은 프로젝트이기 때문에 저는 이것을 선택했습니다. 또한 이전에는 재미있게 구현했습니다.https:///@peterkeunwoo/beating-my-brother-in-chess-cb17739ffe2, 그래서 나는 이것이 재미있는 사이드 프로젝트라고 생각했습니다.

이 블로그에서는 제가 한 일을 쉽게 이해할 수 있도록 프로젝트의 주요 내용을 설명하겠습니다. 여기에서 내 코드를 읽을 수 있습니다.https://github.com/yukw777/leela-zero-pytorch

릴라 제로

첫 번째 단계는 Leela Zero 신경망의 내부 작동을 파악하는 것이 었습니다. Leela Zero의 문서와https://github.com/leela-zero/leela-zero/tree/next/training/tf 무겁게.

신경망 아키텍처

Leela Zero의 신경망은 ResNet "타워"로 구성되며, 두 개의 "헤드"(정책 헤드와 가치 헤드)가 있습니다. https://deepmind.com/blog/article/alphago-zero-starting-scratch. 모든 컨볼 루션 필터는 정책의 시작 부분에있는 필터와 논문에서와 같이 1x1 인 값 헤드를 제외하고는 3x3입니다. 게임 및 보드 기능은 모양의 텐서 (배치 크기, 보드 너비, 보드 높이, 기능 수)로 인코딩되고 먼저 ResNet 타워를 통해 공급됩니다. 그런 다음 타워는 추상적 인 특징을 추출하고 각 헤드를 통해 공급하여 다음 이동에 대한 정책 확률 분포와 게임의 승자를 예측하는 게임의 가치를 계산합니다.

아래 코드 스 니펫에서 네트워크의 구현 세부 사항을 찾을 수 있습니다.

PyTorch에 구현 된 Leela Zero 신경망

가중치 형식

Leela Zero는 간단한 텍스트 파일을 사용하여 네트워크 가중치를 저장하고로드합니다. 텍스트 파일의 각 행에는 네트워크의 각 계층의 가중치를 나타내는 일련의 숫자가 있습니다. 잔여 타워가 첫 번째, 정책 책임자, 가치 책임자 순입니다.

컨벌루션 레이어에는 2 개의 가중치 행이 있습니다.

  1. 형태가있는 컨볼 루션 가중치 [출력, 입력, 필터 크기, 필터 크기]
  2. 채널 편향
  1. Batchnorm은
  2. Batchnorm 분산
  1. 모양 [출력, 입력]이있는 레이어 가중치
  2. 출력 편향

n_layers = 1 (version number) +
           2 (input convolution) + 
           2 (input batch norm) + 
           n_res (number of residual blocks) * 
           8 (first conv + first batch norm + 
              second conv + second batch norm) + 
           2 (policy head convolution) + 
           2 (policy head batch norm) + 
           2 (policy head linear) + 
           2 (value head convolution) + 
           2 (value head batch norm) + 
           2 (value head first linear) + 
           2 (value head second linear)

현재 Leela Zero beta는 배치 노름이라는 용어 만 사용하고 gamma1로 설정 합니다. 그러면 실제로 어떻게 convolutional bias를 사용하여 배치 노름에서 학습 가능한 매개 변수를 적용하는 것과 동일한 결과를 생성합니까? 먼저 배치 표준에 대한 방정식을 살펴 보겠습니다.

y = gamma * (x — mean)/sqrt(var — eps) + beta

y = (x — mean)/sqrt(var — eps) + beta

(x_conv + bias — mean)/sqrt(var — eps) = 
(x_conv — mean)/sqrt(var — eps) + beta
x_conv + bias — mean = 
x_conv — mean + beta * sqrt(var — eps)
bias = beta * sqrt(var — eps)

그렇다면 실제로 어떻게 구현할까요? Tensorflow에서 gamma호출 하여 용어 만 무시하고 처리하도록 배치 표준 계층에 지시 할 수 있습니다 tf.layers.batch_normalization(scale=False). 불행히도 PyTorch에서는 일괄 정규화 레이어를 무시하도록 설정할 수 없습니다 gamma. 당신은 단지 모두를 무시할 수 있습니다 gammabeta설정에 따라 affine에 매개 변수를 False: BatchNorm2d(out_channels, affine=False). 그래서 일괄 정규화를 둘 다 무시하도록 설정 한 다음 단순히 텐서를 추가했습니다 beta. 그런 다음 방정식 bias = beta * sqrt(var — eps)을 사용 하여 가중치 파일에 대한 컨벌루션 편향을 계산했습니다.

교육 파이프 라인

Leela Zeros의 신경망에 대한 세부 사항을 파악한 후 훈련 파이프 라인을 다룰 때였습니다. 앞서 언급했듯이 PyTorch Lightning과 Hydra라는 두 가지 도구를 사용하여 훈련 파이프 라인 작성 속도를 높이고 실험 구성을 깔끔하게 관리하고 싶었습니다. 제가 어떻게 사용했는지 자세히 살펴 보겠습니다.

PyTorch 번개

훈련 파이프 라인을 작성하는 것은 제가 연구에서 가장 선호하지 않는 부분입니다. 반복적 인 상용구 코드가 많이 포함되고 디버깅하기가 어렵습니다. 이 때문에 PyTorch Lightning은 나에게 신선한 공기와 같았습니다. 훈련 파이프 라인 작성시 대부분의 상용구 코드를 처리하는 PyTorch 위에 많은 보조 추상화가없는 경량 라이브러리입니다. 이를 통해 모델 아키텍처와 같은 학습 파이프 라인의 더 흥미로운 부분에 집중하고 연구 코드를보다 모듈화되고 디버깅 가능하게 만들 수 있습니다. 또한 기본적으로 멀티 GPU 및 TPU 교육을 지원합니다!

훈련 파이프 라인에 PyTorch Lightning을 사용하기 위해 가장 많은 코딩을해야했던 것은 훈련 파이프 라인의 세부 사항을 지정하기 위해 NetworkLightningModule상속받은 클래스를 작성하는 LightningModule것이 었습니다 Trainer. .NET을 작성하는 방법에 대한 자세한 내용은 공식 PyTorch Lightning 설명서를 참조하십시오 LightningModule.

히드라

제가 좋은 해결책을 찾고있는 또 다른 연구 부분은 실험 관리입니다. 연구를 수행 할 때 가설을 테스트하기 위해 수많은 실험 변형을 실행하는 것은 피할 수 없으며 확장 가능한 방식으로 추적하는 것이 매우 중요합니다. 지금까지 실험 변형을 관리하기 위해 구성 파일에 의존했지만 플랫 구성 파일을 사용하면 빠르게 관리 할 수 ​​없게됩니다. 템플릿은이 문제에 대한 하나의 해결책입니다. 그러나 구성 파일을 렌더링하기 위해 값 파일의 여러 레이어를 오버레이하면 어떤 값이 어떤 값 파일에서 왔는지 추적하기가 어려워지기 때문에 템플릿도 결국 지저분 해지는 것을 발견했습니다.

반면 Hydra는 구성 기반 구성 관리 시스템입니다. 최종 구성을 렌더링하기 위해 별도의 템플릿과 값 파일을 사용하는 대신 여러 개의 작은 구성 파일을 결합하여 최종 구성을 구성합니다. 템플릿 기반 구성 관리 시스템만큼 유연하지는 않지만 구성 기반 시스템은 유연성과 유지 관리 성 사이에서 좋은 균형을 이룹니다. Hydra는 연구 스크립트에 특별히 맞춤화 된 시스템 중 하나입니다. 스크립트의 주요 진입 점 기능에 대한 데코레이터로 사용해야하기 때문에 호출에 약간의 부담이 있지만 실제로이 디자인 선택을 통해 교육 스크립트와 쉽게 통합 할 수 있다고 생각합니다. 또한 명령 줄을 통해 구성을 수동으로 재정의 할 수 있으므로 실험의 다양한 변형을 실행할 때 매우 유용합니다. Hydra를 사용하여 다양한 크기의 네트워크 아키텍처와 교육 파이프 라인 구성을 관리했습니다.

평가

훈련 된 네트워크를 평가하기 위해 https://github.com/mattheww/gomillGo 토너먼트를 운영합니다. Leela Zero가 하나 인 Go Text Protocol (GTP) 엔진 간의 토너먼트를 실행하는 라이브러리입니다. 내가 사용한 토너먼트 구성을 찾을 수 있습니다.https://github.com/yukw777/leela-zero-pytorch/blob/master/eval/bg-vs-sm.ctl.

결론

PyTorch-Lightning 및 Hydra를 사용하여 교육 파이프 라인 작성 속도를 획기적으로 높이고 실험 구성을 효율적으로 관리 할 수있었습니다. 이 프로젝트와 블로그 게시물이 귀하의 연구에도 도움이되기를 바랍니다. 여기에서 코드를 확인할 수 있습니다.https://github.com/yukw777/leela-zero-pytorch

Suggested posts

베이지안 확산 모델링을 사용한 고급 예측

베이지안 확산 모델링을 사용한 고급 예측

데이터 과학의 모든 영역에서 동적 현상을 예측하고 설명하기위한 혁신적인 모델링 솔루션에 대한 수요가 많습니다. 모델링 및 동적 현상 예측의 높은 프로필 사용 사례는 다음과 같습니다. 오픈 소스 데이터 세트에 적용된 베이지안 확산 모델링을 보여주는 종단 간 예제가 제공됩니다.

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

비용이 많이 드는 앱은 무료 앱보다 높은 평가를 받습니까?

애플리케이션의 평균 사용자 평점은 사용자가 앱을 즐기는 지 여부와 앱의 성공 수준을 결정하는 데 도움이되는 훌륭한 지표입니다. 사용자가 응용 프로그램을 구입해야하는 경우 응용 프로그램에 대한 표준이 무료 응용 프로그램에 비해 높습니다.

Related posts

Spotify의 마법 성분 : 기계 학습

Spotify의 마법 성분 : 기계 학습

면책 조항 :이 기사는 Spotify와 관련이 없으며 Spotify 및 현재 관련이 없을 수있는 과거 구조에 대한 확인되지 않은 정보로 구성 될 수 있습니다. 음악은 표현의 한 형태, 예술의 형태, 전체적인 문화 활동입니다.

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

신경 과학에서 자동 분화, 신경망 이론 및 신경 과정의 과소 적합에 이르기까지 현재 추구되고있는 다양한 딥 러닝 연구 흐름에 대한 더 나은 개요를 얻고 싶으십니까? 합리적으로 통과하기에는 열려있는 arXiv 탭이 너무 많습니까? 전체 동영상을 볼 시간이 너무 적습니까? 논문의 핵심 아이디어와 개념에 대한 간략한 요약 만 있다면. 그런 다음 '머신-러닝-콜라주'시리즈를 소개하게되어 기쁩니다.

내부의 관심 네트워크 그래프

수학에서 NumPy까지 단계별 가이드

내부의 관심 네트워크 그래프

그래프 신경망 (GNN)은 그래프 데이터에서 학습 할 수있는 표준 도구 상자로 등장했습니다. GNN은 콘텐츠 추천 또는 신약 발견과 같은 다양한 분야에서 영향이 큰 문제를 개선 할 수 있습니다.

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

안녕하세요! 이미지 분할에 대한이 짧은 시리즈의 첫 번째 부분을 읽지 않았다면 여기에서 읽으십시오. 이전 이야기에서 임계 값 및 색상 분할에 대해 논의 했으므로 2 부에서는 색도 분할과 이미지 차이에 중점을 둘 것입니다.