월간 보관물: 2016 8월

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

출처: 딥마인드 블로그

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

AI == Deep Learning?

딥러닝(Deep Learning)은 인공지능(Artificial Intelligence)과 같은 건가요? 라고 누가 묻는다면 조금 멈칫거릴 것 같습니다. 두 단어를 모두 많이 쓰기도 하고 듣기도 했지만 차이에 대해선 깊에 생각해 본적이 없었던 것 같습니다. 아마도 다른 사람들도 이를 혼용해서 부르거나 각기 나름대로 구분해서 생각할 것 같은데요. KD너겟(KDnuggets)에서 이와 관련된 글이(Is “Artificial Intelligence” Dead? Long Live Deep Learning?!?) 실렸습니다. 페드로 도밍고스(Pedro Domingos) 교수를 비롯해서 7명의 전문가에게 나름대로 두 단어의 정의를 부탁했습니다.

ai-ml-dl

출처: KD너겟 홈페이지

사람마다 조금씩 바라보는 시각이 다르지만 대체적으로 큰 틀에서는 딥러닝은 머신러닝(Machine Learning)의 부분 집합이며 인공지능은 머신러닝을 포괄하는 큰 의미로 생각하고 있습니다. 따라서 딥러닝은 인공지능의 동의어도 아니고 인공지능을 대체하는 개념도 아닙니다. 최근의 성과에 힘입어 미디어에서 딥러닝과 인공지능을 혼용하여 사용하지만 딥러닝은 딥 뉴럴 네트워크(Deep Neural Networks)를 사용한 머신러닝의 한 분야입니다.

딥러닝이 주로 인공지능 분야에 활용되고 있지만 인공지능은 딥러닝 이외에도 강화학습(reinforcement learning), 몬테카를로 트리탐색(Monte Carlo tree search), 유전자 알고리즘(Genetic algorithm) 등과 같은 기술이 함께 사용되고 있다는 점을 설명하고 있습니다. 인공지능은 또 머신러닝과 상관없는 문제해결(Problem Solving), 검색(Search), 지식표현(Knowledge Representation) 등 많은 다른 분야와 연관되어 있다는 점을 페드로 도밍고스 교수가 지적하고 있습니다.

그는 딥러닝은 특별히 이미지(비전), 텍스트(언어), 음성 등의 분야에서 주로 사용되고 있으며 구조화 되지 않은 입력 데이터를 이용해서 예측을 하는 데는 여전히 일반적인 머신러닝 알고리즘인 앙상블(Ensemble) 메소드나 서포트 벡터 머신(SVM) 등이 좋은 선택이라고 말하고 있습니다.

트위터의 휴고 라로쉘(Hugo Larochelle)도 인공지능은 궁극적인 목표이고 딥러닝을 그에 다다르기 위한 수단 중 하나라고 정의하고 있습니다. 소울 해커스 랩(Soul Hackers Labs)의 CEO 카를로스 아구에타(Carlos Argueta)는 자연어 처리나 컴퓨터 비전에 대해 이야기하면 사람들이 하나 같이 ‘딥러닝을 사용하나요?’ 라고 묻는데 아주 피곤하다고 하네요. 🙂

(업데이트) 7월말에 엔비디아(Nvidia) 블로그에 이와 관련된 글(What’s the Difference Between Artificial Intelligence, Machine Learning, and Deep Learning?)이 실렸습니다. 이 글에서도 딥러닝은 인공지능이나 머신러닝 보다 최근에 각광받기 시작했으며 머신러닝의 한 분야임을 잘 설명하고 있습니다.

deep_learning_icons_r5_png-jpg

 출처: 엔비디아 블로그

PaddlePaddle: Baidu’s DL Framework

바이두에서 새로운 딥러닝 프레임워크를 오픈소스로 공개하였습니다. 이 프레임워크의 이름은 패들패들(PaddlePaddle)로 ‘PArallel Distributed Deep LEarning’의 앞자리를 따왔습니다. 올해 초에 바이두에서 공개한 프레임워크가 있었지만 범용적인 프레임워크라고 보기는 어렵습니다. 이번에 발표한 패들(PaddlePaddle)이 본격적인 바이두의 딥러닝 프레임워크라고 보여집니다.

패들(PaddlePaddle)은 C++로 작성되었고 파이썬 인터페이스를 가지고 있습니다. 수학 연산의 성능과 분산환경 그리고 순환 신경망에 대해 최적화를 했다고 언급하고 있습니다. 텐서플로우가 그랬듯이 패들(PaddlePaddle)을 개발을 하면서 바이두의 여러 제품에 이미 널리 적용하고 있는 것 같습니다.

패들(PaddlePaddle)의 공식 페이지는 ‘www.paddlepaddle.org‘ 이고 9월 1일에 오픈이 될 예정입니다. 아마도 9월 1일에 열리는 바이두 월드(http://baiduworld.baidu.com/)에 맞추어 대대적인 홍보를 할 것 같습니다. 패들(PaddlePaddle) 문서는 여기에서 보실 수 있습니다. 문서에 포함되어 있는 이미지 분류 에서 파이썬 인터페이스를 이용하여 뉴럴 네트워크 설정을 하고 커맨드라인에서 paddle 명령으로 학습시키는 것을 엿볼 수 있습니다. 텐서플로우의 InteractiveSession 같은 기능을 기대하거나 쥬피터 노트북(Jupyter Notebook)을 활용하기는 다소 어려울 것 같습니다.

패들(PaddlePaddle)이 바이두에서 만든 것이고 충분한 문서가 중국어로 제공될 수 있기 때문에 중국내에서는 쉽게 사용자층을 확보할 수 있을 것 같습니다. 그리고 실리콘밸리에 있는 앤드류 응(Andrew Ng)의 바이두 리서치가 패들(PaddlePaddle)의 미국내 보급에 어떤 역할을 할지 궁금합니다.

텐서플로우(TensorFlow), 씨아노(Theano), 토치(Torch), 카페(Caffe), CNTK, 데스트니(DSSTNE)에 이어서 패들(PaddlePaddle)까지! 이제 웹브라우저 종류보다도 많아진 것 같습니다. 🙂

(업데이트) 패들의 홈페이지가 정식으로 오픈되었고 바이두 월드 컨퍼런스도 시작되었습니다. 컨퍼런스 기조 연설 동영상 후반부에 앤드류 응(Andrew Ng)의 발표가 있습니다. 이 동영상의 1시간 52분 57초 정도에 짧지만 패들에 대한 소개가 있습니다. 중국어라서 전혀 알아들을 수는 없지만 슬라이드 자료의 한자를 이용해 추측해 보면 주요 서드파티 라이브러리(아마도 텐서플로우가 아닐까 생각됩니다)보다 데이터 전처리와 훈련, 그리고 추론에 드는 코드의 양이 각각 1/5, 1/3, 1/5 로 적게 든다고 언급하는 것 같습니다.(혹 중국어를 잘 아시는 분 계시면 댓글 부탁 드립니다)

(업데이트) 구글과 아마존에서 일했던 AI 과학자 델립 라오(Delip Rao)에게 우연히 물어봤는데 정확하게 한자를 해석해 주었습니다. 왼쪽의 세 문장은 위에서 부터 ‘Sequence model preparation’, ‘Sequence model training’ 그리고 ‘Image classification model’ 이라고 합니다. 맨 위 컬럼에 쓰인 문장은 예상대로 ‘Major third party platform’ 입니다. 하지만 텐서플로우를 의미하는 것인지는 확실하지 않다록 하네요. 그도 앤드류 응이 코드 라인수를 장점으로 발표하는 게 의아하게 생각되는 모양입니다.

페이스북의 GPU 파트너쉽 추가

14106250_330551667287531_197901342_n

출처: 페이스북 리서치 블로그

페이스북이 오늘 리서치 블로그를 통해 GPU 파트너쉽에 유럽 9개국 15개 연구기관에 22개의 GPU 서버를 제공한다고 밝혔습니다. 올해 초에 발표한 것에 이어 두번째 입니다. 페이스북은 그동안 여러번 GPU 서버 ‘Big Sur’에 대한 소개를 했었고 미디어에게 데이터센터를 공개하기도 했었습니다. 어디에도 정확하게 나와 있지는 않지만 온라인 매체의 글들을 살펴 보았을 때 이 서버는 토치(Torch)로만 사용이 가능할 것으로 추측됩니다. 혹시 연구기관들이 토치 생태계 안에서 연구를 진행하게끔 하려고 GPU 서버를 제공하는 걸까요? 이건 너무 무리한 가정일까요?

TensorLayer: New TF Wrapper

img_tensorlayer케라스(Keras), TF.Learn, 슬림(Slim), 프리티텐서(PrettyTensor) 에 이어 텐서플로우 래퍼(wrapper) 라이브러리 텐서레이어(TensorLayer)가 하나 더 생겼습니다. 텐서레이어는 텐서플로우를 감싸고 있는 고수준 래퍼이지만 텐서플로우의 로직을 너무 감추지 않고 있는 점이 다릅니다. 따라서 텐서플로우를 어느 정도 알고 있어야 사용함에 불편이 없을 것 같습니다.

다른 라이브러리와는 조금 다르게 콘볼루션과 리커런트 뉴럴 네트워크는 물론 강화학습 예제까지 풍부하게 제공하고 있으며 PDF, Epub 으로도 문서를 다운받을 수 있도록 해 놓았습니다. 모든 문서는 영어와 중국어로 제공됩니다. 텐서레이어의 소스는 깃허브에서 확인하실 수 있습니다.

이 라이브러리는 임페리얼 칼리지 런던(Imperial College London)의 Ph.D 졸업예정자(candidate)인 하오 동(Hao Dong)이 만들고 있습니다. 개발 목표에 TPU를 지원이 포함되어 있어 관심을 끄네요.

Predefined models in TF Slim

텐서플로우 슬림(Slim)에 잘 알려진 콘볼루션 모델들이 추가될 예정입니다. 텐서플로우 버전 0.10 브랜치에는 현재 AlexNet v2, Overfeat, VGG11, VGG16 가 들어가 있고 마스터 브랜치에는 Inception v1, v2, v3 와 ResNet v1, v2 그리고 VGG19가 더 추가되어 있습니다.

케라스(Keras)가 VGG, Inception, ResNet 모델에 대한 파라메타를 함께 제공하는 것과는 달리 슬림에 포함된 것은 모델 정의(즉 그래프 구성) 부분입니다.(슬림도 훈련된 모델 데이터를 제공하고 있습니다. 아래 내용을 참고해 주세요.)

(업데이트) 구글 리서치 블로그에서 슬림(Slim)의 업데이트에 대해 공식적으로 발표를 하였습니다. 슬림이 contrib 디렉토리에 있기 때문에 서드파티 수준으로 여겼는데 조금 의외입니다. 슬림 패키지는 구글 브레인팀에서 직접 개발을 하고 있는 것 같습니다. 이름도 TF-Slim으로 정식 명칭을 사용했습니다. 발표 내용을 보면 콘볼루션 모델이외에도 다양한 기능들이 추가되었고 미리 훈련된(pre-trained) 모델 데이터도 텐서플로우 모델 깃허브에서 제공하고 있습니다.

Facebook Open Source Image Recognition Tools

14129665_289426244750193_980137424_n

출처: 페이스북 리서치 블로그

오늘 페이스북이 리서치 블로그를 통해 이미지에서 오브젝트를 구별하는 프레임워크인 딥마스크(DeepMask)와 샵마스크(SharpMask), 그리고 멀티패스넷(MultiPathNet)을 공개하였습니다. 페이스북에 얀 리쿤(Yann LeCun) 박사가 있는 것으로도 짐작할 수 있지만 콘볼루션을 사용하는 이미지 인식 부분에서는 많은 성과를 가지고 있습니다. 그동안 공개되었던 자료 중에 얀 리쿤 박사가 직접 시연한 이미지 인식에 대한 데모도 있었고 얼마전에는 시각장애자를 위해 이미지를 읽어주는 데모를 공개하기도 하였습니다. 오늘 발표는 그간 발표한 페이퍼와 데모들의 뒤에 있는 기술을 설명하고 토치(Torch)로 된 소스를 공개한 것입니다.

관련된 페이퍼를 읽어보진 못했지만 블로그의 내용을 바탕으로 정리했습니다. 한줄 요약하면 딥마스크와 샵마스크로 이미지 안의 오브젝트를 구분해 내고 멀티패스넷으로 오브젝트의 타입을 가려낸다고 합니다.

딥마스크는 피드 포워드(feed forward) 네트워크로 이미지를 스캔하면서(아마도 콘볼루션으로) 오브젝트가 담겨있는지 또 오브젝트가 스캔 영역의 중앙에 위치하는 지를 찾습니다. 콘볼루션의 특성상 딥마스크의 하위 레이어에서 상위 레이어로 갈 수록 오브젝트들의 세부적인 차이에는 둔감해 지지만 정확한 경계를 잡아내는 데는 어려움이 있습니다. 샵마스크는 딥마스크의 이런 단점을 보완하기 위해 딥마스크에서 만들어낸 하위 레이어의 특성맵을 다시 들여다 보는 과정을 가집니다. 하나의 네트워크에서 생성된 결과물을 재사용하므로 이런 방식은 효율적입니다.

물론 딥마스크나 샵마스크는 구분해 낸 이미지가 무엇인지 모릅니다. 이런 역할을 하는 것은 멀티패스넷으로 RCNN(Region-CNN)의 두번째 스텝에 해당하며 오브젝트의 스케일이나 차이를 구분해 내도록 개선하였습니다. RCNN의 첫번째 스텝, 즉 이미지를 찾아내는 것은 앞서 말한 딥마스크와 샵마스크가 담당하게 됩니다. 전체 세단계를 요약하면 딥마스크로 오브젝트를 찾아내고 샵마스크로 경계를 특정한 후 멀티패스넷으로 어떤 오브젝트인지 알아내게 됩니다.

14129678_1295994390440912_1435692944_n

출처: 페이스북 리서치 블로그

아직 이 기술은 완벽하지는 않습니다. 하지만 꽤 뛰어난 성능을 발휘하고 있으며 페이스북에서 시각장애자에게 친구들의 사진의 내용을 읽어주는 것을 구현시킬 수 있을 것입니다. 또한 가상현실을 포함한 다양한 어플리케이션에서 응용될 수 있습니다. 실제로 동영상에서 이미지를 구분해 내는 데모를 만들었습니다. 페이스북은 앞으로도 계속 기술을 발전시키고 커뮤니티에 공개하겠습니다!

딥마스크와 샵마스크의 토치 구현은 여기에서 확인하실 수 있으며 멀티패스넷의 토치 구현은 여기에서 보실 수 있습니다. 딥마스크의 페이퍼와 샵마스크의 페이퍼, 멀티패스넷의 페이퍼도 보실 수 있습니다.

fastText도 그렇지만 페이스북이 ML 커뮤니티를 위해 크게 손을 흔드는 것 같네요. 다양성이 존재하는 것은 언제든지 바람직합니다. 토치 버전이 공개되었으니 텐서플로우로 된 구현도 나오길 기대합니다.

(업데이트) 샵마스크의 데모가 공개되어 있습니다. 이 페이지에서 동그란 원들에 마우스를 호버하면 샵마스크가 이미지에서 찾은 오브젝트를 구분하여 확인할 수 있습니다.

Text summarization with TensorFlow

textsum

출처: 구글 리서치 블로그

오늘 텐서플로우를 사용하여 글을 요약하는 모델에 대한 소개가 구글 리서치 블로그에 실렸습니다. 텐서플로우를 사용하여 seq2seq 방식으로 학습시켰고 현재 알려진 것 중에 가장 좋은 성능을 낸다고 합니다. 위 그림처럼 기사의 첫문단을 사용하여 기사의 헤드라인을 만들어내고 있네요. 사용한 데이터 셋은 Annotate English Gigaword를 사용했다고 합니다. 기사 헤드라인을 만드는 것으로 시작했지만 더 큰 텍스트의 내용을 요약하는 모델로 연구가 진행될 것으로 보입니다. 이 모델의 코드는 텐서플로우의 모델 깃허브에 공개되어 있습니다.

Montreal DL Summer School Lectures!

이달 초에 몬트리올에서 진행됐던 딥러닝 서머스쿨의 동영상이 공개되었습니다. 강의자들을 보면 제프 딘(Jeff Dean), 요슈아 벤지오(Yoshua Bengio), 조경현 교수 등이 있습니다. 아직 발표자료와 동영상이 모두 매치되지는 않았습니다. 많은 사람들이 환영을 하는 만큼 놓칠 수 없는 자료 같습니다.

스탠포드 대학에서도 다음달 딥러닝 서머스쿨을 연다고 하는데요. 이 영상도 공개되었으면 하는 바램입니다. 그리고 9월 24~25일에 열리는 AI 온라인 컨퍼런스인 AI with the Best에 페드로 도밍고(Pedro Domingos) 교수가 합류했다는 소식입니다.

‘Introduction to NLP’ at Coursera

intro-nlp.png

코세라에서 9월 부터 미시간 대학교의 ‘Introduction to Natural Language Processing‘ 코스가 시작됩니다. 아마도 2015년에 진행했던 것과 유사한 커리큘럼으로 보여집니다. 요즘 화두가 되는 인공지능을 이용하는 부분은 2017년 초에 새롭게 추가되어 진행될 예정이라고 해서 약간 아쉽습니다만 지금으로도 충분히 좋은 강좌라고 생각됩니다. 파이썬과 NLTK 라이브러리를 사용합니다.

얼마전 코세라에서 예전 강좌를 다시 시작한다고 포스팅를 올린 적이 있는데요. 그 중에 스탠포드의 ‘Natural Language Processing’이 강좌가 열린다고 한 것은 오류라고 메일이 왔습니다. 현재 이 강의 페이지는 제대로 열리지도 않네요. ㅠ.ㅠ  그나마 제프리 힌튼(Geoffrey Hinton)의 뉴럴 네트워크 강좌와 다프니 콜러(Daphne Koller)의 확률 그래프 모델 강좌는 예정대로 진행될 것 같습니다.

이 강좌의 수료증을 받으려면 약 50달러를 내야하지만 수료증이 필요 없는 경우엔 무료로도 강의를 들을 수 있습니다. 며칠전 코세라의 공동 창업자 중 한명인 다프니 콜러(Daphne Koller)가 코세라를 떠나 구글이 설립한 바이오 벤처 칼리코(Calico)로 옮겼다는 소식이 전해졌습니다. 앤드류 응(Andrew Ng)도 바이두로 간 마당에 코세라가 더 비즈니스틱하게 변모하지 않을지 괜한 걱정이 드네요. :-/

(업데이트) 9월 6일 부터 강의가 정식으로 시작 되었습니다. 이 강좌는 12월 4일까지 12주간 진행됩니다.