태그 보관물: DeepMind

Sonnet: DeepMind’s New TF Wrapper

sonnet-logo-blogpost-170330-r01-width-1500

딥마인드가 새로운 텐서플로우 래퍼 라이브러리 소네트Sonnet오픈소스로 공개했습니다. 이로써 텐서플로우 래퍼 라이브러리가 또 하나 늘었네요. 소네트는 객체지향(OOP) 스타일을 따르고 있어 파이토치와 같이 개발의 편의와 재미를 줄 수 있을 것 같습니다. 소네트의 핵심은 텐서플로우의 그래프 정의를 파이썬 오브젝트화시킨 모듈입니다. 소네트의 모듈을 이용해 파이썬 오브젝트를 만들어 계산 그래프 정의 부분을 객체화시킨 효과를 가집니다. 그리고 자신만의 모듈을 정의해서 사용할 수도 있습니다. 자세한 내막은 다르겠으나 겉 모양새는 씨아노의 래퍼인 라자냐lasagne와 흡사해 보입니다.

아직은 초기 버전이라 직접 컴파일하여 설치해야 하고 맥/리눅스의 파이썬 2.7 만 지원합니다(구글 내부에서는 아직 파이썬 2.7의 레거시가 상당하다는 소문입니다). 소네트도 배워야할지 아직 잘 모르겠습니다. 딥마인드가 단발성의 릴리즈는 아니라고 하는 것을 보아서는 제대로된 릴리즈를 계획하고 있을 것 같습니다. pip 설치나 파이썬 3.5, 윈도우즈 지원등이 된다면 케라스Keras와 자주 비교될 것 같습니다. 가장 인기있는 텐서플로우 래퍼 라이브러리인 케라스를 만든 구글의 프랑소와 숄레는 소네트에 대해 아직 아무런 반응을 보이진 않고 있습니다. 🙂

DL for NLP by Oxford & DeepMind

지난달 말에 데미스 하사비스가 딥마인드에서 대학에 강의를 제공한다는 글을 블로그에 올렸었습니다. 이 때 언급한 강좌가 두개인데요. 하나는 유니버시티 칼리지 런던(UCL)의 ‘Advanced Topics in Machine Learning‘이고 다른 하나는 옥스포드 대학의 ‘Deep Learning for Natural Language Processing‘입니다. 이 중에 옥스포드 대학의 강의가 온라인으로 공개되고 있습니다! 이 강좌의 깃허브에 슬라이드와 함께 동영상 링크가 포함되어 있습니다. 그리고 이 강좌의 실습은 파이토치나 텐서플로우를 권장하고 있네요! 딥마인드는 여러 가지 방식으로 독일, 중국, 아프리카 등에 교육 지원을 할 것이라고 합니다. 우리나라에서는 꿈 같은 일이겠죠? 😎

(무슨 이유인지 제 맥북 크롬에서는 동영상 플레이가 되지 않고, 사파리 브라우저에서는 강좌 플레이가 잘 되었습니다. 참고하세요.)

DeepMind’s new paper: Memory Augmented Neural Network, DNC

dnc_figure1-width-1500

출처: 딥마인드 블로그

딥마인드에서 외부 메모리를 사용하는 뉴럴 네트워크 모델에 관한 새로운 페이퍼를 네이처를 통해 발표하였습니다. 뉴럴 네트워크가 입력값 외에 외부 저장 장치를 사용하여 좀 더 복잡한 데이터 구조에 대해 학습할 수 있도록 했다고 하는데요. 페이퍼 외에 딥마인드 블로그에 관련된 포스트를 통해 좀 더 자세히 설명하고 있습니다. 소스코드는 공개하긴 하는데 시간이 6개월 정도 걸린다고 합니다@.@ 아마도 텐서플로우 코드로 변경해서 공개하려는 것 아닐까 추측됩니다. 이전의 연구와 비교해서 보려면 두개의 페이퍼 ‘Neural Turing Machines‘ 과 ‘Memory Networks‘ 를 참고하면 좋을 것 같습니다.

네이처에 게재된 페이퍼는 여기에서 다운받을 수 있습니다. 페이퍼에 딸린 수학공식 부록은 여기에서 다운받을 수 있습니다. 페이퍼의 결과를 보여주는 동영상도 두개 같이 실렸습니다.

(업데이트) 페이퍼의 내용을 텐서플로우로 구현한 깃허브 레파지토리 DNC-tensorflow 가 공개되었습니다. 페이퍼의 내용을 모두 구현한 것은 아니지만 페이퍼의 내용을 이해하는 데 큰 도움이 될 것 같습니다.

Partnership on AI

partnership-on-ai

구글, 딥마인드, 페이스북, 마이크로소프트, 아마존, IBM 6개 회사가 ‘Partnership on AI‘란 단체를 발족시켰습니다. 각 회사에서 한명씩 대표(board)를 구성하게 되며 AI 연구와 윤리, 표준, 리포트, 컨퍼런스 등의 분야에 적극적인 역할을 것으로 보입니다. 공익단체라는 점에서 OpenAI를 의식하여 연합한 것인지는 모르겠습니다. 바이두(Baidu)는 끼일만도 한데 빠진 것과 딥마인드는 구글의 자회사이지만 공룡들과 어깨를 나란히 하고 있는 것이 눈에 띄입니다.

(업데이트) Partnership on AI에 대한 관심이 뜨겁습니다. 사람들은 바이두외에 애플, 트위터, 인텔 등도 빠져 있는 것을 궁금해 하고 있는 것 같습니다. 특히 OpenAI가 빠져있어서 이를 두고 미묘한 대립 기류가 있는 것은 아닌지 다양한 해석이 있습니다. OpenAI는 아마 초기 멤버로 초청받지 못한 아쉬움이 있는 듯 트위터를 통해 향후 참여를 희망한다고 이야기 했고 딥마인드측 대표인 무스타파 설리만(Mustafa Suleyman)이 이에 화답했습니다. Partnership on AI의 발표 자료를 보면 OpenAI 같은 비영리 기관도 곧 참여가 이루어 질 것으로 보입니다. 이들이 데이터 공유를 위해 뭉쳤는지 인류를 위해 뭉쳤는지는 모르겠지만 만약 OpenAI가 없었다면 기대하기 어려운 일이었지 않을까요?

(2017-01-30) Partnership on AI에 애플과 OpenAI가 합류했다는 소식입니다. 애플은 창립 멤버로 OpenAI는 이사회 구성원으로 합류했습니다. 바이두같은 회사가 합류할 가능성은 높아 보이지는 않습니다만 미국안의 파트너쉽이 되어 버린 것 같습니다.

WaveNet: DeepMind’s New Model for Audio

blogpost-fig1-anim-160908-r01

딥마인드에서 오디오 시그널 모델인 웨이브넷(WaveNet)에 관한 새로운 페이퍼 공개하고 블로그에 글을 올렸습니다. 글자를 음성으로 읽어 주는 TTS(Text To Speech)를 위한 종전의 방법인 parametric TTS, concatenative TTS 와는 다르게 오디오의 웨이브(waveforms) 자체를 모델링하여 음성을 생성하도록 하였습니다. 사용된 TTS 데이터는 구글의 TTS 데이터 셋을 사용했습니다. 결과적으로 기존 TTS 시스템과 사람 사이의 격차를 절반 가량 줄였다고 합니다.

딥마인드의 블로그 페이지에서 실제로 들어보시면 다른 두 방식의 TTS 보다 웨이브넷의 음성이 훨씬 부드럽다는 것을 느끼실 수 있습니다. 샘플 음성은 영어와 중국어입니다. 앞으로 사람과 대화하는 느낌을 가지고 챗봇과 이야기할 날이 멀지 않은 것 같습니다.

웨이브넷의 장점 중 하나는 한번 만든 모델에서 목소리를 바꾸어 오디오를 생성할 수도 있고 음악과 같은 사람의 목소리와는 다른 분야에도 활용이 가능하다는 것도 있습니다. 블로그 페이지 아래 부분에 클래식 피아노 연주를 이용해 학습한 후 생성한 오디오 샘플을 들어 보실 수 있습니다. 악보 노트를 RNN으로 생성하는 방식과는 다르게 훨씬 풍성한 사운드가 만들어졌습니다(마젠타 보고 있나요?).

딥마인드에서 주말이 시작되려니 숙제를 던져주네요. 🙂

(업데이트) 웨이브넷의 인기가 높네요. 일주일도 되기전에 텐서플로우, 케라스(Keras), 씨아노(Theano)로 구현하는 코드가 공개되었습니다.

Synthetic Gradient Revisited

지난주에 발표된 ‘Decoupled Neural Interfaces using Synthetic Gradients‘ 페이퍼에 많은 관심이 몰려서 인지 저자인 맥스 제이더버그(Max Jaderberg)가 딥마인드(Deepmind) 블로그에 페이퍼의 내용을 좀 더 자세히 설명하는 을 올렸습니다. 이 글에서 새롭게 추가된 내용은 없습니다만 두개의 멋진(!) 애니메이션을 이용해 가짜 그래디언트(Synthetic Gradient)를 잘 표현해 주고 있습니다.

3-6

출처: 딥마인드 블로그

이 그림에서 한 레이어의 출력이 상위 레이어와 그래디언트 모델(다이아몬드 도형)의 입력으로 전달됩니다. 그래디언트 모델은 즉각적으로 그래디언트를 계산하여 입력을 전달한 레이어의 파라메타를 업데이트 합니다. 그리고 하위 레이어로 역전파 됩니다. 상위 레이어에서 전달된 그래디언트도 상위 레이어의 그래디언트 모델에 의해서 생성된 그래디언트입니다. 이를 타겟 그래디언트라고 부르고 이를 이용해 현재 레이어의 그래디언트 모델을 학습시킵니다. 최종 출력의 그래디언트가 충분히 전달된다면 그래디언트 모델은 꽤 정확한 가짜 그래디언트를 추측할 수 있을 것입니다.

3-10

출처: 딥마인드 블로그

순환 신경망의 그림은 BPTT(Backpropagation Through Time)의 경계를 넘어서 그래디언트를 역전파 시킬 수 있도록 그래디언트 모델을 활용할 수 있다는 점을 표현하고 있습니다. BPTT는 메모리 등 리소스가 제한된 상황에서 늘릴 수 있는 한계가 있기 때문에 그래디언트 모델을 활용하면  BPTT 경계 이전 스텝까지 그래디언트를 역전파 시켜서 모델 파라메타를 업데이트할 수 있는 효과를 만들 수 있습니다.

페이퍼에서도 나와 있듯이 그래디언트 모델에 대해서 특별히 순환 신경망(Recurrent Neural Network)에서의 효용성을 자주 언급하고 있습니다. 피드 포워드(Feed Forward)의 경우 학습 속도에 대해서 언급하지 못했지만 순환 신경망의 경우는 학습 속도도 빨라진 것을 그래프로 제시하기도 했습니다.

아래 팬트리뱅크(Penn TreeBank) 그래프에서 파란 실선이 그래디언트 모델을 사용하여 레이어 사이를 비동기(DNI, Decoupled Neural Interface)화 한 경우입니다. BPTT를 8로 한 DNI 모델이 40으로 한 일반적인 순환 신경망의 경우보다 학습 속도와 결과 모두 좋았다고 합니다.

3-11

출처: 딥마인드 블로그

딥마인드의 이 페이퍼에 대한 좀 더 자세한 내용은 이 포스트를 참고해 주세요.

Decoupled Neural Interfaces using Synthetic Gradients[1608.05343] Summary

지난 주 딥마인드에서 내놓은 이 페이퍼는 이전 포스트에서 잠깐 언급했듯이 뉴럴 네트워크의 레이어간의 데이터 주입과 그래디언트 업데이트를 비동기적으로 처리하는 방식을 제안하고 있습니다. 이전에 이런 방식과 유사한 연구가 있었는지 배경 지식을 구하기는 힘들었지만 분명한 것은 이 페이퍼가 여러 사람에게 큰 관심을 끌고 있다는 점입니다.

뉴럴 네트워크의 한 레이어에서 데이터를 처리할 때 다른 레이어가 작업을 하지 않은 상태를 멈춰(locking)있다고 표현할 수 있습니다. 특히 레이어간의 연산이 다른 디바이스에 할당되어 있는 경우에는 물리적으로도 멈춰있는 형태가 됩니다. 이렇게 멈춰있게 되는 경우는 에러 그래디언트(gradient)를 역전파시킬 때도 마찬가지 입니다. 체인 룰(chain rule)의 특성상 이전 레이어에서 그래디언트가 전달되지 않으면 하위 레이어는 대기 상태에 있습니다. 이런 레이어간의 동기성은 거대한 뉴럴 네트워크의 학습 속도에 영향을 미치므로 레이어간의 데이터 전달을 비동기적으로 처리하는 모델을 제안하고 있습니다.

여기서 제안하는 방법은 한 레이어에서 데이터가 처리된 후 그 다음 레이어를 통과해 마지막 레이어에서 에러가 계산되어 역전파 되기를 기다리지 않고 데이터가 처리되자 마자 가짜 그래디언트(synthetic gradient)를 업데이트 하는 것입니다. 가짜 그래디언트로 레이어의 파라메타(가중치)가 업데이트 되면 다음 미니배치 데이터를 받아 들일 수 있게 됩니다. 가짜 그래디언트는 진짜 그래디언트가 앞 레이어로 부터 전달되면 이 값을 이용하여 보다 좋은 가짜 그래디언트를 만들기 위해 학습합니다. 즉 가짜 그래디언트를 위한 소규모의 뉴럴 네트워크가 레이어 사이 사이에 위치해 있습니다. 아래 그림은 이런 그래디언트의 비동기적인 업데이트 과정을 잘 보여 주고 있습니다.

계속 읽기

Asynchronous update with Synthetic Gradient

구글 딥마인드 팀에서 새로운 페이퍼 ‘Decoupled Neural Interfaces using Synthetic Gradients‘를 공개했습니다. 보통 포워드 방향으로 뉴럴 네트워크를 학습시키고 백워드 방향으로 그래디언트를 전파할 때 모든 뉴럴 네트워크의 레이어가 멈춰있게 됩니다. 즉 동기적으로 파라메타가 업데이트 되는 것이죠. 이 페이퍼에서는 뉴럴 네트워크의 레이어를 작게 분리하여 학습과 에러 전파를 비동기적으로 할 수 있도록 했다고 합니다. 초록만 대충 보았는데 좀 더 정확한 내용이 파악되면 업데이트 하도록 하겠습니다.

Deep Q Learning with Gym and TensorFlow

model

텐서플로우와 OpenAI에서 공개한 강화학습 도구인 Gym을 이용한 Q Learning 구현물이 깃허브에 공개되었습니다. 이 코드는 2015년 네이처지에 실린 구글 딥마인드(DeepMind) 팀의 ‘Human-Level Control through Deep Reinforcement Learning‘ 논문을 텐서플로우와 Gym으로 구현한 것입니다. 결과 화면은 흥미롭습니다.

best

원 논문은 구현은 토치로 개발되었습니다. 원 논문의 소스는 여기서 다운받을 수 있습니다.

(추가) 이 코드는 쿠키런 게임을 개발한 데브시스터즈에서 만들었습니다. 강화학습 분야는 역시 게임회사에서 관심이 많은 것 같습니다.

DeepMind moves to TensorFlow

오늘 구글은 블로그를 통해 딥마인드(Deepmind.com)가 토치(Torch)에서 텐서플로우(TensorFlow)로 연구, 개발 프레임워크를 교체한다고 발표하였습니니다.

토치는 그동안 딥마인드와 페이스북이 사용하면서 코드 기여도 상당했었지만 딥마인드가 토치를 더이상 사용하지 않게 됨으로써 토치 진영에는 페이스북과 트위터가 남게 되었습니다. 어찌보면 예상된 수순이었을지 모르겠습니다. 이세돌과 알파고가 바둑대전을 할 때 제프딘이 언급한 것 처럼 이미 알파고에 텐서플로우가 일정 부분 사용되고 있었기 때문입니다.

며칠 전 선다 피차이(Sundar Pichai) 구글 CEO가 보낸 창업자의 편지(Founder’s letter)에서 앞으로 세상은 모바일 퍼스트(mobile first)에서 AI 퍼스트(AI first)로 변할 것이라고 말하고 있습니다.

“We will move from mobile first to an AI first world.”

이런 비전의 첫 교두보인 텐서플로우가 무엇보다도 널리 쓰이길 바라는 것이 구글에서는 당연할 것입니다. 딥마인드는 지난 몇 달간 기존의 연구를 텐서플로우로 변경하면서 테스트를 해왔고 이제 앞으로 딥마인드에서 수행하는 모든 연구는 텐서플로우를 이용할 것이라고 합니다.

물론 텐서플로우를 PR 하는 것이라고 비아냥 거리는 냉소도 인터넷에 돌아다니긴 합니다.