DeepMind의 Neural Network를 위한 라이브러리 SONNET

 

링크. :  http://www.github.com/deepmind/sonnet

DeepMind가 전체 연구조직을 TensorFlow(TF)를 사용하도록 전환한 이후로 거의 1년이 되었습니다 . 훌륭한 선택인 것으로 입증되었습니다. 많은 모델이 훨씬 빠르게 학습되고, 분산형 학습을 위한 기본 제공 기능이 코드를 크게 단순화 했습니다. 그 과정에서 우리는 TF의 유연성과 적응성이 특정 목적을 위해 더 높은 수준의 프레임워크를 구축하는 데 도움이 된다는 것을 발견했으며 TF로 신경망 모듈을 신속하게 구축하기 위해 작성했습니다. 우리는이 코드베이스를 적극적으로 개발하고 있지만 우리의 연구 요구에 잘 부합하며 오늘 우리는 오픈소스를  발표하게 된 것을 기쁘게 생각합니다. 우리는 이 프레임워크를 Sonnet이라고 부릅니다 .

2015년 11월 초기 출시 이후, 높은 수준의 라이브러리의 다양한 생태계를 중심으로 나타났습니다. TensorFlow를 빨리 수행 할 수 있는 일반적인 작업을 가능하게 합니다. Sonnet은 이러한 기존 신경 네트워크 라이브러리와 많은 유사점을 공유하지만 연구 요구 사항을 중심으로 특별히 설계된 일부 기능을 제공합니다. 학습을 위한 자료에 수반되는 코드 릴리스에는 Pre 버전의 Sonnet이 포함되어 있으며 앞으로 출시될 다른 코드 릴리스는 오늘 발표할 전체 라이브러리 위에 구축 될 예정입니다.

Sonnet을 공개하면 DeepMind에서 만든 다른 모델을 커뮤니티와 쉽게 공유 할 수 있으며 커뮤니티에서 Sonnet을 사용하여 자체 연구를 진행하기를 바랍니다. 최근 몇 개월 동안 우리는 또한 주력 플랫폼인 오픈소스로 사용했으며, 현재 Blizzard와 협력하여 StarCraft II에서 AI 연구를 지원하는 오픈소스 API를 개발하고 있습니다. 앞으로 더 많은 릴리즈가 있으며, 모든 새로운 오픈 소스 페이지에서 이들 모두를 공유할 것 입니다.

라이브러리는 Torch/NN과 유사한 객체 지향 접근법을 사용하여 일부 계산의 순방향 패스를 정의하는 모듈을 만들 수 있습니다. 모듈은 그래프에 연산을 추가하고 출력 Tensor를 반환하는 일부 입력 Tensor와 함께 ‘호출’됩니다. 디자인 선택 중 하나는 같은 모듈에 대한 후속 호출에서 자동으로 변수를 재사용함으로써 변수 공유가 투명하게 처리되도록 하는 것이 었습니다.

자료의 많은 모델은 자연스럽게 계층 구조로 간주 될 수 있습니다. 예를 들어,  Differentiable Neural 컴퓨터에는 LSTM 일 수 있는 컨트롤러가 포함되어 있으며 표준 선형 계층을 포함하도록 구현할 수 있습니다. 우리는 명시적으로 서브 모듈을 나타내는 코드를 작성하면 코드를 재사용하고 신속하게 실험할 수 있음을 발견했습니다. Sonnet은 다른 서브 모듈을 내부적으로 선언하거나 작성시 다른 모듈을 전달하는 모듈 작성을 권장합니다.

우리가 매우 유용하다고 생각한 마지막 기술은 특정 모듈이 임의로 중첩된 Tensor그룹에서 작동하도록 허용하는 것입니다. 반복적인 신경 회로망 상태는 종종 이기종 텐서 집합으로 가장 잘 표현되며, 이를 단순한 목록으로 표현하는 것은 오류가 발생할 수 있습니다. Sonnet은 이러한 임의의 계층 구조를 다루는 유틸리티를 제공하므로 다른 종류의 RNN을 사용하도록 실험을 변경하면 지루한 코드 변경이 필요하지 않습니다. 이 사용 사례를 보다 잘 지원하기 위해 핵심 TF도 변경했습니다.

Sonnet은 TensorFlow와 함께 작동하도록 특별히 설계되었으므로 Tensor 및 variable_scope와 같은 기본 세부 정보에 액세스 할 수 없습니다. Sonnet으로 작성된 모델은 원시 TF 코드와 다른 고급 라이브러리에서 자유롭게 혼합될 수 있습니다.

이는 일회성 릴리스가 아니며 정기적으로 Github 저장소를 사내 버전과 일치하도록 업데이트 합니다. 우리는 Sonnet의 새로운 기능에 대한 많은 아이디어를 얻었으며 준비가되면 사용할 수 있게 될 것입니다. 우리는 사회의 공헌에 매우 흥분하고 있습니다. Sonnet에 대한 자세한 내용은  GitHub 저장소를 참조하십시오 .