카테고리 보관물: Report

Decoupled Neural Interfaces using Synthetic Gradients[1608.05343] Summary

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

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

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

계속 읽기

Reinforce Pong at Gym

한달 전에 스탠포드 비전 랩의 안드레이 카패시(Andrej Karpathy)가 블로그에 강화학습에 대한 글인 ‘Deep Reinforcement Learning: Pong from Pixels‘를 올렸었습니다. 조금 늦었지만 블로그의 글을 따라가 보려고 합니다. 안드레이는 스탠포드 뿐만이 아니라 구글과 OpenAI에서도 여러 프로젝트에 참여했고 강화학습과 관련된 여러 도서를 읽고 관련 강의도 들었다고 합니다. 강화학습을 쉽게 소개하기 위해 글을 썼다고 하는데 말처럼 쉽지는 않은 것 같습니다.

OpenAI 짐(Gym)은 강화학습 알고리즘을 훈련시키고 평가할 수 있는 프레임워크입니다. 짐에 포함된 퐁(Pong) 게임은 아타리(Atari) 2600에 포함된 간단한 컴퓨터 게임의 시뮬레이션 버전입니다. 두사람이 오른쪽과 왼쪽에 있는 자기 막대를 움직여 공을 받아 넘겨야 하고 상대방이 놓쳐서 화면 옆으로 사라지면 점수를 1점 얻게 됩니다(이를 편의상 한 판이라고 부르겠습니다). 이렇게 점수를 획득하여 가장 먼저 21점을 얻는 쪽이 이기는 게임입니다. 짐에서는 화면의 왼쪽 편이 하드 코딩되어 있는 컴퓨터 에이전트이고 오른쪽 편이 강화학습을 통해 우리가 학습시켜야할 에이전트입니다.

짐 라이브러리에서는 공이 위치가 이동되었을 때를 한 스텝(step)이라고 표현합니다. 게임 화면에서 공이 이동할 때 마다 스크린샷을 찍는다고 생각하면 비슷합니다. 매 스텝마다 짐은 우리에게 리워드(reward)를 줍니다. 이겼을 때는 1, 졌을 때는 -1, 이도저도 아닌 공이 게임 판 위를 여전히 돌아다니고 있는 중간에는 0을 리턴합니다. 우리는 매 스텝마다 막대의 위치를 위로 올릴 것인지(UP), 아래로 내릴 것인지(DOWN)를 결정하여 짐 라이브러리에 전달합니다. 게임을 이길 수 있도록 막대의 위치를 제어하는 것이 우리가 풀어야 할 숙제입니다.

계속 읽기

인공지능과 법적쟁점

얼마전 소프트웨어정책연구소 SPRi 에서 ‘인공지능과 법적쟁점‘ 이라는 리포트를 공개했습니다. 이 리포트에서는 인공지능을 활용하여 발생하는 문제가 현행 법적 체계 안에서 수용될 수 있는지를 검토하고 인공지능이 일으킨 사고나 창작물에 대한 법적 쟁점을 다루었습니다.

구체적으로 보면 인공지능 에이전트가 기사를 대신해서 쓰는 경우가 한 예입니다. 이미 해외에서는 간단한 사고, 사건 보도류의 기사를 인공지능 에이전트가 대신하여 작성하는 것으로 알려져 있습니다. 그렇다면 이런 기사의 저작권이 누구(인공지능 에이전트, 언론사, 인공지능 개발사)에게 있으며 어떤 법으로 보호를 해야하는 지 명확하지가 않습니다. 따라서 이런 상황에 대응할 수 있는 가이드라인과 법제도 개선이 필요하다고 언급하고 있습니다.

동물보호법은 동물의 권리를 인정하는 것은 아니고 동물이 받을 수 있는 고통에 대해 사회의 인식이 높아진 것으로 이해해야 합니다. 이렇게 생명에 대한 존중으로서 동물에 대한 사회적 인식이 높아지고 있지만 민법에 의해 동물은 물건에 포함되어 권리의 주체가 아니고 보호받거나 관리되어야 할 대상이라고 합니다.  즉 동물의 소유권은 해당 동물의 소유자에게 귀속됩니다. 인공지능을 물건으로 간주한다면 소유권은 해당 인공지능의 소유자에게 있습니다. 법적 주체는 사람과 법인으로 한정되어 있으므로 인공지능이 일으킨 문제에 대한 책임은 그 소유자에게 돌아갈 가능성이 높습니다.

계속 읽기

TensorFlow White Paper[1603.04467] Summary

텐서플로우 백서(White Paper)라고도 불려진 텐서플로우의 첫번째 페이퍼 ‘TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems‘[1603.04467]를 요약해서 정리해 보았습니다. 아직 읽지 않은 분들에게 도움이 되었으면 합니다. 부족한 부분이 있다면 댓글로 보완해 주세요.

소개

2011년에 구글 브레인 팀이 조직되어 딥 뉴럴 네트워크(deep neural network)에 대한 연구를 시작하였고 딥 뉴럴 네트워크 시스템인 디스트빌리프(DistBelief)를 개발했습니다. 구글은 디스트빌리프를 비감독학습(unsupervised learning), 언어[1, 2], 이미지인식[1, 2], 비디오분류, 음성인식[1, 2, 3], 보행자감지, 바둑, 시퀀스예측, 강화학습(reinforcement learning)과 그외[1, 2] 여러 분야에 사용해왔습니다. 구글 안의 50개가 넘는 팀과 알파벳 자회사들이 디스트빌리프를 이용해 다양한 제품에 딥 뉴럴 네트워크를 적용해왔습니다. 여기에는 검색, 광고, 음성인식시스템[1, 2, 3], 구글포토, 지도, 스트리트뷰, 번역, 유투브 등이 포함됩니다. 이러한 경험을 바탕으로 차세대 대규모 머신러닝 시스템인 텐서플로우(TensorFlow)를 개발했습니다.

텐서플로우는 상태 정보를 가지는 데이터플로우(dataflow) 그래프로 컴퓨터의 계산을 표현합니다. 안드로이드, iOS 같은 모바일 환경에서 추론(inference) 시스템을 만들수도 있고 한개 또는 여러개의 GPU를 가진 단일 서버에서는 중간 규모의 훈련(training)과 추론 시스템을 구축할 수 있습니다. 또는 수천개의 GPU가 탑재된 수백대의 서버에서 운영될 수도 있습니다. 텐서플로우를 이용하면 학습 시스템은 대규모로 하면서 실제 서비스는 소형화하여 운영할 수 있습니다.

텐서플로우는 매우 빠른 성능과 유연한 구조를 가지고 있어 새로운 모델을 빠르게 실험해 볼 수 있고 실제 서비스에도 안정적으로 사용할 수 있습니다. 디스트빌리프와 비교해 볼 때 텐서플로우의 프로그래밍 방식이 더 유연하고 성능은 더 뛰어납니다. 구글 내부의 여러 팀들이 이미 디스트빌리프에서 텐서플로우로 전환했습니다. 텐서플로우는 딥 뉴럴 네트워크를 만드는 데 사용되는 것이 일반적이지만 다른 머신러닝 알고리즘을 적용하거나 수치 계산 용으로도 사용할 수 있어서 다양한 산업 분야에 폭 넓게 활용될 수 있습니다. 텐서플로우는 2015년 11월 아파치 2.0 오픈소스 라이센스로 공개되었고 www.tensorflow.org에서 다운받을 수 있습니다.

계속 읽기

First Contact with TensorFlow

 

tensorflowbookcover-1024x7122x

‘First Contact with TensorFlow’ Book Cover. 출처: http://www.jorditorres.org

스페인 카탈루냐 공과대학의 Jordi Torres 교수가 텐서플로우를 소개하는 책 ‘First Contact with TensorFlow‘을 공개했습니다. 책의 서두에서도 밝혔지만 이 책은 ‘Fundamental of Deep Learning‘ 같은 책 처럼 머신러닝의 이론적 배경에 무게를 두기 보다는 텐서플로우를 처음 접하는 사람들을 위한 입문서 용도로 쓰여 졌습니다.

이 책은 대략 140여 페이지 정도로 pdf 나 인쇄본으로 구매할 수도 있지만 온라인에서 무료로 읽을 수 있도록 책 전체를 공개하고 있습니다. 부가적으로 Jordi Torres 교수가 강의에 활용했던 슬라이드는 여기에서 다운받으실 수 있습니다.

l이 책의 한글 번역본이 출간 되었습니다.  온라인(YES24, 교보문고)/오프라인 서점에서 구입하실 수 있습니다. 구입하시면 저에게 큰 도움이 됩니다. 🙂

아래 포스트에 포함된 글과 코드를 최신 텐서플로우 버전에 맞추어 수정하였습니다. 하지만 코드는 가능하면 테스트를 거친 번역서 깃허브의 주피터 노트북을 참고해 주세요.

원 도서의 라이센스(CC BY-NC-SA 3.0)에 따라 전체 내용을 번역하여 공유합니다. 원서의 코드는 파이썬 2.7를 기준으로 작성되어 있습니다. 파이썬 3.x 버전  notebook으로 작성한 이 책의 코드는 여기에서 보실 수 있습니다. 텐서플로우 논문 요약 자료도 함께 참고하세요.

추천사, 서문, 실용적접근

1. 텐서플로우 기본다지기

2. 텐서플로우 선형회귀분석(Linear Regression)

3. 텐서플로우 클러스터링(Clustering)

4. 텐서플로우 단일 레이어 뉴럴 네트워크(Single Layer Neural Network)

5. 텐서플로우 다중 레이어 뉴럴 네트워크(Multi Layer Neural Network)

6. 병렬처리

맺음말

감사의말, 저자, BSC, UPC 그리고 GEMLEB 모임

‘Fundamental of Deep Learning’ Preview

rc_lrg

O’Reilly에서 텐서플로우와 관련된 첫 번째 책인 ‘Fundamental of Deep Learning‘이 2016년 말에 출간 예정입니다. 지금은 Early Release 단계로 미리 구입해서 PDF나 이북 리더기로 읽으실 수 있습니다. 이 글은 2016년 4월 8일자 판을 기준으로 처음 작성되었습니다. 책이 업데이트 되면 포스트의 내용을 수정하거나 추가하도록 하겠습니다.

이 전 포스트에서 말씀드린대로 이 책은 원래 Theano를 기반으로 딥러닝을 설명하려고 했으나 구글에서 텐서플로우를 발표하고 나서 Theano대신 텐서플로우를 선택하게 되었습니다. 이런 결정을 하게 된 이유가 무엇인지 두 프레임워크의 차이를 비교하며 설명하고 있습니다.

책의 전체 챕터는 총 12장 이지만 현재 작성된 것은 5장까지 입니다. 아직 절반도 쓰여지지 않았지만 도서의 평점은 매우 좋은 편입니다. 마지막까지 좋은 결과물로 이어지길 기대합니다.

1. The Neural Network
– Building Intelligent Machines
– The Limits of Traditional Computer Programs
– The Mechanics of Machine Learning
– The Neuron
– Expression Linear Perceptrons as Neurons
– Feed-forward Neural Networks
– Linear Neurons and their Limitations
– Sigmoid, Tanh, and ReLU Neurons
– Softmax Output Layers
– Looking Forward

계속 읽기

실수하기 쉬운 Python 코드

이 글은 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 을 참고하여 작성되었습니다.

머신러닝 분야에서 선호되는 언어로는 Python 과 R 이 자주 비교대상이 됩니다. 두 언어의 태생의 근원을 생각해 보면 아마도 Python 은 전통적인 소프트웨어 엔지니어 그룹에서 R 은 통계나 수학자 그룹에서 많이 사용될 것 같습니다. 이 글은 Python 에서 버그를 만들기 쉬운 코드에 대해 설명을 하고 있습니다. Python 에 꽤 익숙한 저도 눈으로만은 잡아내기 힘들더군요 ; )

계속 읽기

텐서플로우 튜토리얼 – 3

이 글은 Illia Polosukhin 가 쓴 TensorFlow Tutorial – Part 3 을 번역한 글 입니다. (update: 2016-04-20) 텐서플로우 0.8 버전에 맞추어 코드를 수정하였고 번역을 다듬었습니다. 아래 예제를 쥬피터 노트북으로 작성하여 깃허브에 올려 놓았습니다.

이전 튜토리얼 – 1, 튜토리얼 – 2 에서 텐서플로우(TensorFlow)와 사이킷플로우(Scikit Flow)를 소개하고 타이타닉 데이터셋을 이용하여 몇가지 모델을 만드는 법을 소개했습니다.

이번에는 카테고리 변수를 다루는 좀 더 복잡한 모델을 만들어 보겠습니다.

일반적으로 머신러닝에서는 카테고리 변수를 다루기위해 각 카테고리에 대해 one-hot 벡터(혹은 one-hot encoding, 한 요소만 1인 벡터)를 만듭니다. 딥러닝에서는 분산표현방식(Distribution representation) 또는 임베딩(Embedding) 이라고 부르는 방법이 있습니다.

임베딩 방식을 사용하면 각 카테고리를 원하는 사이즈의 실수 벡터로 표현할 수 있으며 나중에 모델에서 피처(feature)로 사용합니다. 참고할 점은 텐서플로우 컴포넌트(그리고 다른 딥러닝 프레임워크들도)의 미분계산 능력때문에 작업에 가장 최적화된 모델을 트레이닝 시키게 도와줍니다. 이는 개개의 피처 엔지니어링(feature engineering)을 할 필요가 없게 만드는 딥러닝 툴킷의 가장 강력한 기능입니다.

계속 읽기

텐서플로우 튜토리얼 – 2

이 글은 Illia Polosukhin 가 쓴 TensorFlow Tutorial – Part 2 을 번역한 글 입니다. (update: 2016-04-19) 텐서플로우 0.8 버전에 맞추어 코드를 수정하였고 번역을 다듬었습니다. 아래 예제를 쥬피터 노트북으로 작성하여 깃허브에 올려 놓았습니다.

이전 튜토리얼 – 1 에서 텐서플로우(TensorFlow)와 사이킷플로우(Scikit Flow)를 소개하고 타이타닉 데이터셋을 이용하여 간단한 로지스틱 회귀분석(Logistic Regression)의 예를 보였습니다.

여기에서는 사이킷플로우를 이용하여 컨볼루션 네트워크(convolutional networks, 합성곱신경망 또는 CNN)를 만드는 여러개의 레이어(multi-layer)가 완전히 연결된(fully connected) 뉴럴 네트워크를 만들어 보겠습니다.

다층 완전연결 신경망(Multi-layer fully connected neural network)

당연히 텐서플로우가 또 다른 선형 회귀분석(Linear Regression)나 로지스틱 회귀분석(Logistic Regression) 프레임워크라면 큰 의미가 없습니다. 텐서플로우의 이면에 있는 아이디어는 미분 가능한 모델들을 연결하여 하나의 코스트 함수(cost function or loss function)를 이용하여 최적화할 수 있는 것입니다.

계속 읽기

텐서플로우 튜토리얼 – 1

이 글은 Illia Polosukhin 가 쓴 TensorFlow Tutorial – Part 1 을 번역한 글 입니다.
(update: 2016-04-18) 텐서플로우 0.8 버전에 맞추어 코드를 수정하였고 번역을 다듬었습니다. 아래 예제를 쥬피터 노트북으로 작성하여 깃허브에 올려 놓았습니다.
(update: 2016-08-29) 일리아 폴러서킨(Illia Polosukhin)이 주로 TF.Learn에 관해 수정한 내용을 반영하였습니다. 일리아의 코드는 TF 0.10에 맞춰진 것으로 정식버전이 릴리즈 되면 깃허브의 내용을 수정하겠습니다.

구글이 텐서플로우 머신러닝 프레임워크를 공개하고 나서 광풍이 휘몰아치고 있습니다. 깃허브에는 만개가 넘는 별이 달리고 인공지능 연구자들 사이에서 이미 큰 관심을 모으고 있습니다

그럼 데이터 과학자들이 할 법한 일들을 위해 텐서플로우를 어떻게 사용할 수 있을까요? (그리고 당신이 인공지능 연구자라면-앞으로 흥미로운 문제들과 마주하게 될 것입니다.)

왜 텐서플로우인가?

당연한 질문입니다. 데이터 과학자로서 이미 R, Scikit Learn 등 여러 툴들을 사용하고 있는데 왜 또 다른 프레임워크를 다루어야 하는걸까요?

계속 읽기