월간 보관물: 2016 4월

Keras 1.0 Release

Theano와 텐서플로우를 지원하는 유일한 서드파티 라이브러리인 Keras가 1.0 버전을 릴리즈 했습니다. 1.0 버전은 이전에 예고된 것 처럼 코드가 많은 부분 재작성 되었으며 Functional API 로 재 탄생했습니다. 새로운 코드 베이스를 가지게 되었지만 이전 버전의 API의 하위 호환성도 그대로 유지합니다. Functional API 의 가장 큰 특징은 레이어는 물론 생성된 모델까지 모두 함수처럼 호출이 가능하고 재 사용에 유리한 구조를 가집니다.

Keras를 만든 프랑소와 숄레(François Chollet)는 작년 9월 구글로 이직했습니다. 두말할 필요없이 Keras 때문에 구글에서 프랑소와 숄레를 영입한 것이라고 생각할 수 있습니다.

초보자를 위한 통계학 강의(Coursera)

스크린샷 2016-04-12 오전 10.07.23

가장 큰 온라인 학습 사이트(MOOC) 중 하나인 코세라(Coursera)에 4월 12일 부터 새로운 강좌가 시작되었습니다. 이 강좌는 ‘Introduction to Probability and Data‘ 로 Duke 대학의 Dr. Mine Çetinkaya-Rundel 교수(Assistant Professor)가 진행합니다. 이 강좌는 ‘Statistics with R Specialization‘ 의 시리즈 중 첫번째 강의 입니다.

사실 이 강의를 소개해 드리는 이유는 Dr. Mine Çetinkaya-Rundel 때문입니다. Mine 은 이전에 코세라에서 ‘Data Analysis and Statistical Inference‘ 강의를 진행했었습니다. 이 강의는 무려 10주 동안 진행되었고 통계학의 기초를 쉽고 효과적으로 가르쳐 주었습니다. 또 전무후무하게 교수 Mine이 직접 행아웃 동영상 채팅을 두번이나 열어 전 세계 온라인 수강생들과 질의 응답을 했었습니다. 또 그녀는 온라인 통계학 책으로 유명한 OpenIntro Statistics의 저자 중 한명입니다.

어떤 이유에서인지 ‘Data Analysis and Statistical Inference’ 강의가 2014년 이후로 중단되어 아쉬었는데요. 새로운 커리큘럼으로 다시 만나게 되어 매우 반갑네요. 커리큘럼이 바뀌더라도 그녀의 열정과 통찰은 그대로일 것으로 생각합니다. 머신러닝의 고수가 되기 위해 통계학을 그냥 넘길 수 없는 모든 분들께 추천드립니다.

* 강의는 영어로 진행되지만 Mine의 말이 그리 빠르지 않고 자막이 지원됩니다. 실습은 R을 이용합니다.

Andrew Ng의 머신러닝 강좌의 Python 코드 버전

머신러닝을 배우기 위해 온라인 강의 중 어떤게 좋은가요 라고 물어보면 열명이면 열명 모두 Andrew Ng머신러닝 강좌를 추천할 것이라는 데 의심의 여지가 없습니다. 이 강좌는 작년부터 self-paced로 제공되고 있어서 시간이 없어 매주 분량을 쫒아가기 힘든 분들에게도 마감시간에 구애 받지 않고 천천히 학습할 수 있도록 하고 있습니다.

이 강의의 단점(?)이라고 하면 강의와 숙제가 Matlab의 오픈소스 클론인 Octave로 진행된다는 점 입니다. Octave가 시작하기 어려운 언어는 아니기에 큰 장벽이 되지는 않지만 Octave를 배워서 학교나 회사에서 사용할 수 있는 가능성은 희박합니다.

David Kaleko는 Andrew Ng의 머신러닝 강좌의 모든 숙제를 Python으로 재 작성하여 깃허브에 공유하였습니다. Octave에 어려움을 겪으시는 분들은 Python 버전이 도움이 되실 것 같습니다.

인공지능 비서 Amy

xai-pain_solution

이미지출처: X.ai

인공지능 비서 Amy를 개발하고 있는 X.ai 가 2천 3백만 달러를 펀딩 받았다고 발표하였습니다.

Amy는 다운로드하거나 설치하는 소프트웨어가 아니고 이메일을 통해서 미팅 스케줄을 잡아주는 인공지능 비서입니다. 상대에게 메일을 보낼 때 cc(참조)에 amy@x.ai 를 추가만 하면 Amy가 메일의 내용을 읽고 나의 구글 캘린더 일정을 참고해서 상대에게 적절한 미팅시간을 제안합니다. 메일을 받는 사람도 Amy를 사용하고 있는 중이라면 Amy가 자동으로 두 사람의 캘린더를 모두 참고해서 중재합니다.

계속 읽기

The Expanding Universe of Modern AI

nvidia-ai-big-bang

클릭하시면 확대해서 보실 수 있습니다. 출처: Nvidia

Nvidia 에서 인공지능 분야의 테크놀러지 빅뱅(Big Bang)을 한 눈에 조감할 수 있는 이미지를 만들어 오늘 공개했습니다.

맨 왼쪽에는 연구분야로서 알파고로 유명한 딥마인드, OpenAI, 몬트리올/뉴욕/MIT 대학교 등이 눈에 뜨입니다. 그 다음으로는 핵심 기술이나 프레임워크로서 페이스북이 지원하는 Torch, 구글의 TensorFlow, 버클리의 Caffe, 몬트리올 대학교의 Theano, 마이크로소프트의 CNTK 등을 Nvidia의 cuDNN이 떠 받치고 있는 모습니다. ^^

그 오른쪽에는 머신러닝을 플랫폼화한 아마존 웹서비스와 IBM 왓슨, 구글, 마이크로소프트의 Azure가 있습니다. 그 다음으로가 가장 관심이 갈 만한 인공지능 분야의 떠오르는 스타트업입니다. 가운데 얼마전 세일즈포스로 인수된 메타마인드(MetaMind)가 있습니다. 여기에 언급된 회사들을 한번쯤 눈여겨 보아두면 아마 언젠가 뉴스에서 큰 기사거리로 만날 수 있을 것 같습니다.

산업부분의 리더 들이 가장 오른쪽에 위치해 있는데요. Andrew Ng 박사가 합류한 바이두(Baidu)가 아직 뚜렷한 성과를 내지 못해서인지 이곳에 있는 게 약간 의외입니다. 머지않아 구글이나 페이스북과 나란히 위치해 있는 그림으로 바뀌지 않을까요.

딥러닝북(DeepLearningBook)이 완성되다.

오늘 Ian Goodfellow는 페이스북을 통해 Yoshua Bengio, Aaron Courville과 함께 작성한 딥러닝 책이 완성되었다고 알렸습니다.

이 작업은 무려 2년이 넘게 걸렸습니다. 이 블로그에서도 공유드렸지만 머신러닝이나 딥러닝 레퍼런스로는 빠지지 않고 꼭 리스트업 되는 책 입니다. 온라인에서 읽을 수 있지만 PDF로 제공되지는 않습니다.

프린트된 책을 구매하려면 조금 더 기다려야 할 것 같습니다만 꼭 읽어야할 필수 도서임에 분명합니다.

(업데이트) 아마존에서 프리오더(pre-order)로 주문하실 수 있습니다.

인공지능을 위한 GPU – Nvidia Tesla P100

tesla-p100-header-940x300-2

Nvidia Tesla P100, 출처: Nvidia

어제 Nvidia 는 GTC(GPU Technology Conference) 2016에서 새로운 GPU 칩인 Tesla P100을 발표하였습니다. 수년간 공을 들인 이 제품은 종전과는 달리 게임 시장보다 인공지능 시장을 위해서 기획한 제품이라고 합니다. 무려 150억개의 트랜지스터가 들어갑니다. 16GB 메모리에 들어간 것 까지 합치면 1,500억개의 트랜지스터가 집적되어 있습니다. @.@

P100은 11번째 Pascal 아키텍처로 만든 첫번째 GPU라고 합니다. Pascal 아키텍처를 지지하는 과학자로 페이스북의 Yann Le Cun, 바이두의 Andrew Ng 등이 있습니다. 사실 인공지능 분야에서 Nvidia 의 GPU를 지지하지 않고는 뾰족한 대안이 없기도 합니다.

jhhseaweed

GTC 2016에서 발표하는 Nvidia Jen-Hsun Huang CEO, 출처: Nvidia

Jen-Hsun Huang CEO 가 발표 중에 바이두(Baidu) 엔지니어와 구글(Google) 엔지니어를 감초 출연시켰는데요. 바이두(Baidu) 엔지니어로는 이 블로그에서도 소개해 드렸던 2015년 GTC 컨퍼런스에서 Andrew Ng 박사의 발표 후반부에 음성인식 라이브 데모를 시연한 Bryan Catanzaro 였습니다. 아마도 구글과 바이두 엔지니어들은 Tesla P100 시제품을 이미 쓰고 있겠죠?

머신러닝 분야에서는 AMD나 인텔이 뒤쳐진 것이 어떤 이유인지 사람들마다 의견이 분분합니다. OpenCL 때문이라던지 투자를 게을리했다던가 앞을 내다보지 못했다던가 등등. 어떤 사람들은 Nvidia의 CUDA가 개방적이지 않은 것에 대해 비판을 하기도 합니다. 과연 머신러닝을 위한 GPU는 몇몇 대기업이나 연구소, 클라우드 시스템에 장착되는 시장일까요? 게임 그래픽카드 처럼 많은 사람들에게 꼭 필요한 것이 될까요? 어쨋든 컨볼루션 인공신경망에 대해서라면 OpenCL 기반으로 Python, C++ API를 제공하는 DeepCL도 있습니다.

Tesla P100의 상품 상세는 여기에서 브로셔는 여기에서 보실 수 있습니다. 양산에 돌입했으며 먼저 클라우드 시장에 공급이 되고 내년 1/4분기에는 일반 서버 시장에 공급될 수 있다고 합니다.

Yan Le Cun의 강의 – “딥러닝 그리고 AI 의 미래”

yannlecun-cern

지난 달 24일 얀리쿤(Yan Le Cun) 박사가 취리히 CERN에서 강의한 ‘Deep Learning and the Future of AI’ 의 동영상이 공개되었습니다.

https://mediastream.cern.ch/MediaArchive/Video/Public2/weblecture-player/index.html?year=2016&lecture=510372#

발표 슬라이드는 아래 주소에서 다운받으실 수 있습니다.

https://indico.cern.ch/event/510372/attachments/1245509/1840815/lecun-20160324-cern.pdf

(추가) 비슷한 자료를 이용하여 1월 24일에 캘리포니아 Lawrence Livermore National Laboratory에서 진행한 발표 동영상이 유튜브에 있습니다. 유튜브에서는 자막이 지원되어 조금 더 쉽게 들으실 수 있을 것 같습니다.

오늘부터 페이스북(Facebook)이 이미지를 읽습니다.

페이스북은 오늘 시각장애자를 위해 페이스북에 올라온 이미지를 설명하는 텍스트(automatic alternative text)를 자동으로 생성하여 스크린리더를 통해서 들을 수 있다고 발표하였습니다.

http://newsroom.fb.com/news/2016/04/using-artificial-intelligence-to-help-blind-people-see-facebook/

지금은 iOS 에서만 제공하고 추후 안드로이드(Android) 폰에서도 지원할 것이라고 합니다. 페이스북에서 간단한 시연 동영상을 올렸습니다. 머신러닝을 사용하는 방법에 있어서 구글의 바둑 경기보다 페이스북의 장애인을 위한 접근성을 높이는 이번 발표가 더 좋은 것 같습니다.

텐서플로우(TensorFlow)의 병렬 처리 버전이 곧 나온다.

텐서플로우의 최대의 약점을 하나 꼽자면 아마도 병렬처리 부분일 것 입니다. 텐서플로우는 여래개의 멀티코어 CPU, GPU를 지원하지만 여러대의 머신에서 병렬로 모델을 학습시킬 수가 없습니다. 마이크로소프트가 CNTK를  발표하면서도 텐서플로우와의 차별점으로 이 점을 부각시켰었습니다.

물론 구글 내부에서 사용하는 텐서플로우는 분명 병렬처리가 가능한 버전일 것입니다. 하지만 오픈소스에는 이 부분이 포함되어 있지 않습니다. 그런데 곧 이 약점이 메꾸어질 수 있을 것 같습니다. 미국 에너지부의 산하 연구기관인 Pacific Northwest National Laboratory(이하 PNNL)이 텐서플로우에 병렬처리 기능을 더한 소프트웨어를 올 봄에 릴리즈 하겠다고 발표하였습니다.

이와 관련된 논문을 PNNL에서 한달 전 쯤 발표했습니다. 이 논문에서 텐서플로우의 병렬 처리를 위해 어떤 방법을 사용하였는 가와 성능의 향상이 얼만큼 되었는지를 보여주고 있습니다. 병렬 처리를 위한 서버간 통신을 위해서는 메세지 패싱 인터페이스(MPI)를 사용했고 학습을 위한 데이터를 쪼개어 각 서버에서 독립적으로 모델을 학습하였습니다.

학습된 모델의 가중치(Weight)와 바이어스(Bias)를 동기화 시킬 때는 알고리즘이 복잡해지고 MPI 프로토콜이 충분히 빠르기 때문에 비동기적(asynchronous)인 방법을 쓰지 않고 동기적인 방법을 채택했다고 합니다.

MPI 대신 맵리듀스(Map-Reduce) 스타일의 하둡(Hadoop)이나 스파크(Spark)를 선택할 수 있었지만 높은 I/O 와 고성능 네트워크 인터페이스에 대한 지원이 부족하여 제외하였다고 기술되어 있습니다.

논문에 있는 결과 리포트 중 MNISTCIFAR10 데이터셋을 이용한 DNN(Deep Neural Network), CNN(Convolution Neural Network)테스트 결과는 아래와 같습니다. x 축은 core의 수를 나타냅니다.

그래프에서 알 수 있듯이 병렬화에 의한 성능 향상이 선형적으로 증가하지는 않았습니다. 하지만 이 실험은 제약적 환경에서 운영된 것으로 좀 더 향상될 여지는 있어 보입니다. 다만 병렬화가 크면 클 수록 코어당 처리할 수 있는 일의 양은 상대적으로 줄어드는 것은 피할수 없을 것 같습니다.

이번 달 혹은 다음 달에 정식 릴리즈가 되면 다시 포스팅하도록 하겠습니다.

(추가) Jeff Dean은 텐서플로우 깃허브에 올라온 분산 처리에 대한 이슈에 코멘트를 달았었습니다. 여기에서 텐서플로우의 분산(병렬) 기능은 구글 내부 인프라에 밀접하게 연관되어 있어서 깃허브에 올리지 못하고 싱글 머신 버전 먼저 올린 것이라고 합니다. 연관된 코드를 정리하고 있지만 아직 남아있는 것이 있습니다. 하지만 가장 높은 우선순위를 두고 있다고 밝혔습니다.