챌린지 컬처 CHALLENGE CULTURE

챌린지 컬처 CHALLENGE CULTURE

나이젤 트래비스 저/홍유숙

도전 문화에 대한 강력한 통찰력 - 샘 케네디 보스턴 레드 삭스 사장 겸 CEO
트래비스의 리더십 강의! - 제프리 소넨필드 예일대학교 경영대학원 교수
올가을 10대 비즈니스 도서 - 퍼블리셔스 위클리
『챌린지컬처』를 읽기 전에는 조직의 미래를 말하지 마라!

누구나 알고 있는 글로벌 대기업 던킨도너츠 현직 회장의 70년 위기 극복 경영 노하우와 전략이 담긴 책이다. 또한 도전 문화를 이용해 이끌어낸 다양한 성공 사례가 담겨 있다. 글로벌 대기업인 던킨 브랜드의 특성상 세계 각국의 예시도 종종...



도전하려면 목적을 가지고 질문하고, 긍정적으로 저항하고, 합리적으로 토론하기 같은 기술이 필요하다. 나이젤 트래비스, 그는 우리가 잘 아는 던킨도너츠, 파파존스 ,비디오 대여 기업인 블록버스터를 맡아 일하면서 도전 문화를 진정한 혁신을 강조했다. 변화의 시대에서 도전 문화는 매우 중요하다고 강조하고 있다. 도전 문화 속에서 사람들은 현재 상태를 의심하고, 오랫동안 당연히 여겨온 편견들을 뒤집어 보고, 새로운 아이디어와 제안을 평가하고 논해야 할 필요가 있다. 이러한 도전 문화는 오랜 시간 들여 모델을 만들고 계속 다듬으며 개발해야한다고 한다. 이제 이 책의 속을 파해쳐 보자.



크게 12장으로 구성돼 있다.


제 1장 | 작은 불꽃으로 도전 시작하기: 현상에 이의를 제기하라

제 2장 | 리더가 모델을 만들어야 한다: 단호하게 입장을 표명한 폴

제 3장 | 도전에 대한 혐오감 극복하기: 아버지, 소크라테스, 블록버스터의 차이점

제 4장 | 도전할 수 있는 인재를 발굴하라: 앨런 셰퍼드가 ‘목 살짝 쥐기’라고 말한 이유

제 5장 | 일할 때 필요한 규칙을 명시하라: 우리는 어떻게 케이컵을 런칭했는가

제 6장 | 무엇이든 물어보세요: 60번 이상의 커피 챗

제 7장 | 아웃사이더의 의견 반영하기: 은행가, 미디어, 학생 그리고 톰 하겐 모델

제 8장 | 개인의 넛지: 그럴 기분이 아니더라도 절벽에서 뛰어내리기

제 9장 | 부정적인 규범: 축구선수 대기실에서 배운 교훈

제 10장 | 글로벌 제품의 현지화: 스트룹와플, 포크 플로스, 아침용 라거 맥주 

제 11장 | 과다한 의사소통: 블렌더, 전략, 그리고 악어

제 12장 | 돌고 도는 주기: 쇼크, 느긋한 휴식, 기대 그리고 벨리칙의 리셋 방식


어떤 전략이나 시도를 행하려 할 때 항상 합의나 만장일치 동의가 있어야 한다고 말하는 것은 아니다. 다양한 사람으로 이루어진 집단일수록 만장일치란 불가능한 이야기고, 만장일치를 만들겠다고 나서서도 안된다...(중략)...하지만 도전을 강요할 수 없기 대문에 마법 지팡이를 한 번 휘두른다고 도전 문화가 만들어지지는 않는다...(중략)...모든 사람들에게 도전 문화가 무엇인지, 어떻게 작동하는지, 그 안에서 어떻게 일해야 하는지 이해시켜야 한다.

-제 1장 중...-



세계적인 글로벌 기업인 아마존, 애플, 삼성등에 일하고 싶어하는 사람은 많을 것이다. 하지만 이러한 기업도 전문가들에게 좋은 평가를 받고 있지는 않다. 이러한 기업도 수직적인 문화가 조직 전체에 깔려 있다. 이를 해결하고 새로운 도약을 하기 위해서는 도전 문화가 필요하다. 조직의 현재 상태에 문제가 있다면 언제든 이의를 제기하고, 단호하게 무엇이든 물어볼 수 있어야 한다. 이러한 문화가 조직에 스며들기 위해서는 많은 노력이 필요할 것이다. 개인적으로 생각하기에 도전 의식이 높은 인재를 뽑는 것부터 시작해야 할 것이다. 


다양한 추천평도 이 책의 가치를 한 층더 높여주고 있다. 비즈니스와 고객, 그리고 조직까지 흥미롭고 기업해둘 만한 생각으로 가득 찬 책이라고 극찬하고 있다. 오늘날 훌륭한 리더십과 함께 도전 문화가 필요한 이 시점에서 이 책은 훌륭한 지침서라고 생각한다.



"나이젤 트래비스는 다시 태어나야 하는 시점을 놓친 대기업은 물론 적절한 시기에 탈바꿈한 대기업에서도 일해본 사람이다. 나는 던킨도너츠를 창시한 빌 로젠버그를 개인적으로 알고 있는데, 아마 그는 트래비스가 만들어 놓은 도전 문화를 사랑했을 것이다. 반대 의견을 피력하는 것은 조직에 충성하지 않는 것이 아니라 혁신을 불러일으키고 청렴한 태도를 지켜주는 요소다. 엔론이나 월드컴처럼 금융 사기를 막지 못한 회사나 ‘남자들끼리의 마초 문화’를 누리느라 타인의 사생활이나 여성을 존중하지 않아 어려움을 겪고 있는 최첨단 테크 기업들이 트래비스의 리더십 수업을 들었다면 최악의 상태까지는 가지 않았을 것이다. 순응하는 태도는 창조성을 죽이고 정의를 묻는다. 『챌린지컬처』는 여러 분야에 걸쳐 순응성이 확대되는 것을 사전에 막아주는 소중한 자산이 될 것이다.” 

- 제프리 A. 소넨펠드(Jeffrey A. Sonnenfeld), 예일대학교 경영대학원 리더십 연구 부학장 겸 레스터 크라운 리더십 프랙티스 교수 



-출판사로부터 도서를 제공받아 작성한 리뷰입니다-


케라스 창시자에게 배우는 딥러닝

케라스 창시자에게 배우는 딥러닝

프랑소와 숄레 저/박해선

단어 하나, 코드 한 줄 버릴 것이 없다!
창시자의 철학까지 담은 딥러닝 입문서

케라스 창시자이자 구글 딥러닝 연구원인 저자는 ‘인공 지능의 민주화’를 강조한다. 이 책 역시 많은 사람에게 딥러닝을 전달하는 또 다른 방법이며, 딥러닝 이면의 개념과 구현을 가능하면 쉽게 이해할 수 있게 하는 데 중점을 두었다. 1부에서는 딥러닝, 신경망, 머신 러닝의 기초를, 2부에서는 컴퓨터 비전, 텍스트, 시퀀스, 생성 모델을 위한 딥러닝 같은 실전 딥러닝을 설명한다. 이외에도 딥러닝을 언제 적용하는지, 한계는 무엇인지...


이 책은 케라스 창시자인 프랑소와 숄페의 저서로, 케라스에 입문하거나 케라스로 처음 딥러닝을 경험하려는 사람들에게 좋습니다...(중략)...한 가지 특이한 점은 단순하게 내용을 나열하거나 사전식으로 늘어놓는 것이 아니라 어떠한 과제를 제시하고 그 과제를 해결하는 과정에서 케라스 코드와 함께 딥러닝 구현 방법을 설명합니다.

-추천사 중...-



본 책은 딥러닝을 처음 배우고나 이해의 폭을 넓히가조 하는 모든 독자층을 위한 도서이다. 머신러닝 기술자, 소프트웨어 엔지니어, 학생들까지 많은 것을 배울 수 있다. 그에 맞게 이 책은 크게 1부와 2부로 구성되어 있다. 1부는 딥러닝을 이론적으로 소개하고 있다. 딥러닝의 배경, 정의, 머신 러닝과 신경망을 시작하는 데 필요한 모든 개념이 들어가 있다.



1장: AI, 머신 러닝, 딥러닝에 관한 핵심 사항과 배경지식

2장: 딥러닝을 배우기 위한 기초 개념에 대해 배운다. 텐서, 텐서 연산, 경사 하강법, 역전파에 대해 배운다.

3장: 신경망에 필요한 딥러닝 프레임워크인 케라스를 소개하고, 딥러닝 컴퓨터 설정, 예제등을 배운다. 회귀 작업을 위한 간단한 신경망을 학습시킬 수 있고 학습 과정에 어떤 일이 일어났는지 확실히 이해할 수 있다.

4장: 대표적인 머신 러닝 작업 흐름을 배운다. 흔히 나타나는 문제와 해결책도 소개한다.


2부는 컴퓨터 비전과 자연어 처리 분야의 실용적인 딥러닝 애플리케이션에 대해 자세히 다룬다. 


5장: 이미지 분류에 알맞은 실용적인 컴퓨터 비전 예제를 배운다.

6장: 텍스트와 시계열과 같은 시퀀스 연속 데이터를 처리하기 위한 기술에 대해 배운다.

7장: 최고 수준의 딥러닝 모델을 구축해본다.

8장: 이미지와 텍스트를 생성할 수 있는 딥러닝 생성 모델을 소개한다.


450페이지에 달하는 이 책은 딥러닝, 머신러닝, 인공지능을 케라스라는 프레임워크를 이용해 쉽고 재미있게 설명해주고 있다. 데이터를 준비하고, 전처리하며, 모델을 구성하고, 훈련된 데이터를 검증하는 일반적인 과정부터 시작해, CNN, RNN, LSTM과 같은 신경망 종류도 배운다.


한 가지 내용을 집어서 살펴보자. 딥러닝에서는 그래디언트 소실 문제가 존재한다. 흔히 심층 신경망을 학습시키기 위해 사용되는 알고리즘에 역전파 알고리즘이 있는데, 이는 출력 손실에서 얻은 피드백 신호를 하위 층에 전파하는 알고리즘이다. 이 때 피드백 신호가 계속 깊은 층을 통과해 전파되면 신호가 아주 작아지거나 완전히 사라질 수 있다. 이렇게 신경망이 학습되지 않는 문제는 그래디언트 소실(vanishing gradient)문제라고 한다.



딥러닝에서 모든 것은 벡터라고 한다. 모두가 기하하적인 공간에 놓은 하나의 포인트인거이다. 이러한 다차원 벡터를 흔히 텐서라 불리며, 이러한 텐서의 공간에서 각 텐서를 연결해 연산을 수행하는 것이 텐서플로우(Tensorflow) 프레임워크의 핵심 구조이다. 한 마디로 마술 같다. 데이터가 가진 의미를 벡터와 기하학 공간으로 변환해 특정 공간에서 다른 공간으로 매핑하는 복잡한 기하하적 변환을 차근차근 학습한다. 원본 데이터에 있는 모든 형태의 관계를 찾기 위해 충분한 고차원 공간이 필요하게 되는 이유이다.


4장 머신 러닝의 기본 요소에서 과대적합(overfitting)과 과소적합(underfitting)에 대해 설명하고 있다. 머신 러닝에서는 항상 이러한 문제가 발생하게 되는데 상황에 따라 어떻게 해결해야 하는지 잘 설명해주고 있다. 과대적합을 막는 가장 단순한 방법으로는 모델의 학습 파라미터 수를 줄이는 것이다. 그 외에도 가중치 규제를 두어 네트워크의 손실 함수에 큰 가중치로 연관된 비용을 추가한다. 그 외에 훈련하는 동안 무작위로 층의 일부 출력 특성을 제외시키는 드롭아웃을 추가하는 방법이 있다. 이러한 방법 모두 그래프와 개념 그림, 코드와 함께 상세하지만 어렵지 않게 설명해주고 있다.



개인적으로 지금까지 읽어본 책 중에서 가장 '역주'가 많은 책이지 않나 싶다. 매 페이지마다 1개 이상의 역주가 있을 만큼 번역자의 꼼꼼함이 돋보이는 책이다. 보충 설명이 필요하거나 혼동될 수 있는 부분을 잘 정리해주고 있어 독자들이 읽기에 많은 도움이 된다.


부록에서는 예제를 실행하기 위해 구축해야할 설정 및 프로그램 설치등 환경 구성에 관한 부분을 친절히 설명해주고 있다. 끝으로 이 책은 쉽고 알차고, 예제까지 배울 수 있는 훌륭한 딥러닝 및 인공지능 기본서이다. 개념부터 실전 예제까지 꾸준히 공부하며 차근차근 완성해 나가보자! 


한 권으로 먼저 보는 2019년 경제전망

한 권으로 먼저 보는 2019년 경제전망

김광석

“경제 읽어주는 남자 김광석, 2019년 경제의 결정적 순간을 짚다!”
세계 경제의 지형부터 국내외 기술·산업의 전망과
중대한 선택을 위한 구체적인 제안까지.
2019년 놓쳐서는 안 될 19가지 경제 이슈를 모두 담았다!

이 책은 최우선으로 알아야 할 경제 전망과 해법을 담았다. 경제 분야 전문가로 잘 알려져 있는 저자는 『한 권으로 먼저 보는 2019년 경제 전망』을 통해 독자들이 가장 궁금해 하는 앞으로 우리 경제의 방향성에 대해 충실히 논한다.

세계 경제는 막다른 골목에 다다랐고, 한국 경제도 그렇습니다. 때문에 올해가 가계 기업 정부의 중대한 의맛결정이 필요한 순간임을 강조하고자 합니다. 2019년 세계 경제는 미중 무역 분쟁, 신흥국 불안 등 온통 불확실성으로 가득 차 있고, 국내 경제는 저성장세가 고착화되고 있습니다. 우리는 우리 삶에 결정적으로 작용할 2019년의 경제가 어떻게 그려질 지 충분히 이해해야 합니다. 그리고 준비해야만 합니다.

-프롤로그 중...-



세계 경제, 부동산 침체, 산업 이슈등 언제나 항상 관심을 있지만, 정작 뉴스만 보면 제대로 이해하기 힘든 최근 현실입니다. 미국의 기준금리 인상이 내 삶에 어떤 영향을 미칠까? 환율이 오르면 직구하기 부담스러운데 별로지 않나?.. 브렉시트는 무엇이고 이탈렉시트는 또 뭐지? 모두가 궁금해하는 부분일 것이다.

이 책은 이러한 세계 경제, 한국 경제, 주요 산업들의 이슈와 문제를 부드럽게 설명해주고 있다.


크게 4부로 이뤄져 있다.


1부 2019년 세계 경제의 이슈에서는 미국의 나홀로 경제 성장, 미국 기준금리 인상, 환율과 무역 전쟁, 브렉시트의 그 이후, 중국경제, 신흥국발 세계 경제 위기 등 세계 경제와 경기를 위주로 다루고 있다. '경제 읽어주는 남자'의 저자인 만큼 어려운 경제 용어 및 정세를 쉽고 간략히 정리해주고 있다. 

역시나 미국의 경제 상황이 현재로선 중요하지만 G2국가인 중국의 경제도 무시할 순 없다.


중국 정부는 스스로 위기를 인식하고, 적극적으로 대응하고 있다. 첫째, 중국 정부는 2015년 ‘중국 제조 2025’ 10대 산업을 발표하며, 세계 최고 제조 강국으로의 도약을 위한 전략을 추진 중에 있다. ‘중국 제조 2025’ 10대 육성대상 산업은 ①차세대 정보기술 산업 ②고급 디지털 선반 및 기계로봇 ③에너지절약 및 신에너지 자동차 ④신소재 ⑤생물의약 및 고성능 의료기계 ⑥항공우주장비 ⑦농기계 및 장비 ⑧해양공정장비 및 고기술 선박 ⑨선진 궤도교통 장비 ⑩전력 장비로 구성된다.

- 본문 60page 중...-


2부는 한국 경제의 주요 이슈이다. 구조적인 장기침체, 실업 문제, 2019년 예산, 가구구조의 변화, 부동산 정책 변화, 주 52시간 근무, 물가등 한국 사회를 들었다 놓았다 하는 문제들이다. 매일매일 뉴스에 나오는 얘기일 것이다. 이 책은 문제를 꼬집을뿐만 아니라 어떻게 문제를 해결하면 좋을지 순서대로 잘 설명해주고 있다.


다양한 도표와 차트 자료까지 객관적이고 체계적으로 알려준다


주 52시간 근무제는 우리 사회에 꼭 도입되어야 할 제도다. 다만, 이러한 제도변화와 함께 나타날 ‘실’이 무엇인지를 명확히 진단하고, 그 ‘실’을 줄이기 위해 보완책을 마련해야 한다. 특히, 다양한 산업과 직업의 눈높이에서 현장에서의 목소리에 귀를 기울여 예외 산업 및 직업에 대한 철저한 분석이 필요하다. 근로기준법 개정을 통해, 주 52시간 근무제 예외 업종의 수를 크게 축소했지만, 업종과 함께 직종에 관한 논의도 요구된다. 또한, ‘돈 없는 삶’을 야기하는 경로를 차단하여, 저소득층의 소득이 더 축소되는 결과를 초래하지 않도록 정밀한 정책들도 동시에 검토되어야 한다.

- 본문 126page 중...-


3부는 2019년 산업의 주요 이슈로 ICT기술의 발전과 규제완화 속에서 발전하는 신산업과 스마트 시대의 4차산업혁명, 한류콘텐츠, 고령사회에 적합한 비즈니스, 남북한 문제와 경제 협력 등 다가올 2019년에 닥칠 산업과 기술부분의 주요 핵심 과제와 이슈를 살펴본다.

한국의 고용부진 원인은 무엇일까?


일하느라 바쁜 직장인, 사회가 돌아가는 모습을 알고싶으나 어디부터 시작해야되는지 모르는 사람, 뉴스나 신문을 자주 보는 사람, 대학생, 취업준비생 등 경제를 알고 현대 사회를 쉽고 빠르게 이해하고자 하는 독자들에게 추천하는 책이다. 부담가지지 않고 쉽고 재미있게 경제를 읽어주고 세상을 알아가는 맛이 생길 것이다.


세계 경제는 2016년의 불황기에서 벗어나 2017년 뚜렷한 회복세를 보였고, 2018년에는 그 수준을 유지하는 모습을 보이고 있다. 2 018년 7월에는 IMF가 2018년 세계 경제성장률을 3.9퍼센트로 전망했고, 2019년에도 3.9퍼센트 수준의 성장세를 유지할 것이라고 보았다. 2018년과 2019년의 세계 경제는 2011년 이후 가장 높은 수준을 유지하고 있는 수준이며, 2017년부터 이어온 경기 확장세가 지속되고 있다고 평가할 만하다. 그러나 2018년 10월 들어 2018년과 2019년 세계 경제성장률 전망치를 각각 3.7퍼센트로 하향조정했다. 즉, 2019년 세계 경제는 ‘종전에 기대했던 만큼은 아니지만, 상당한 경기 확장세가 이어질 것’으로 전망된다.

- 본문 206page 중...-


스마트화된 도시는 교통,에너지,건축,공공서비스등 다양한 분야를 바꿔놓을 것이다

3 Implementation


The main components in a TensorFlow system are the client, which uses the Session interface to communicate with the master, and one or more worker processes, with each worker process responsible for arbitrating access to one or more computational devices (such as CPU cores or GPU cards) and for executing graph nodes on those devices as instructed by the master. We have both lo-cal and distributed implementations of the TensorFlow interface. The local implementation is used when the client, the master, and the worker all run on a single ma-chine in the context of a single operating system process (possibly with multiple devices, if for example, the ma-chine has many GPU cards installed). The distributed implementation shares most of the code with the local implementation, but extends it with support for an en-vironment where the client, the master, and the workers can all be in different processes on different machines. In our distributed environment, these different tasks are containers in jobs managed by a cluster scheduling sys-tem [51]. These two different modes are illustrated in Figure 3. Most of the rest of this section discusses is-sues that are common to both implementations, while Section 3.3 discusses some issues that are particular to the distributed implementation.


Devices


Devices are the computational heart of TensorFlow. Each worker is responsible for one or more devices, and each device has a device type, and a name. Device names are composed of pieces that identify the de-vice’s type, the device’s index within the worker, and, in our distributed setting, an identification of the job and task of the worker (or localhost for the case where the devices are local to the process). Example device names are "/job:localhost/device:cpu:0" or "/job:worker/task:17/device:gpu:3". We have implementations of our Device interface for CPUs and GPUs, and new device implementations for other de-vice types can be provided via a registration mechanism. Each device object is responsible for managing alloca-tion and deallocation of device memory, and for arrang-ing for the execution of any kernels that are requested by higher levels in the TensorFlow implementation.


Tensors


A tensor in our implementation is a typed, multi-dimensional array. We support a variety of tensor ele-ment types, including signed and unsigned integers rang-ing in size from 8 bits to 64 bits, IEEE float and double types, a complex number type, and a string type (an ar-bitrary byte array). Backing store of the appropriate size is managed by an allocator that is specific to the device on which the tensor resides. Tensor backing store buffers are reference counted and are deallocated when no refer-ences remain.


3.1 Single-Device Execution


Let’s first consider the simplest execution scenario: a sin-gle worker process with a single device. The nodes of the graph are executed in an order that respects the depen-dencies between nodes. In particular, we keep track of a count per node of the number of dependencies of that node that have not yet been executed. Once this count drops to zero, the node is eligible for execution and is added to a ready queue. The ready queue is processed in some unspecified order, delegating execution of the ker-nel for a node to the device object. When a node has finished executing, the counts of all nodes that depend on the completed node are decremented.


3.2 Multi-Device Execution


Once a system has multiple devices, there are two main complications: deciding which device to place the com-putation for each node in the graph, and then managing the required communication of data across device bound-aries implied by these placement decisions. This subsec-tion discusses these two issues.


3.2.1 Node Placement


Given a computation graph, one of the main responsi-bilities of the TensorFlow implementation is to map the computation onto the set of available devices. A sim-plified version of this algorithm is presented here. See Section 4.3 for extensions supported by this algorithm.

One input to the placement algorithm is a cost model, which contains estimates of the sizes (in bytes) of the input and output tensors for each graph node, along with estimates of the computation time required for each node when presented with its input tensors. This cost model is either statically estimated based on heuristics associated with different operation types, or is measured based on an actual set of placement decisions for earlier execu-tions of the graph.

The placement algorithm first runs a simulated execu-tion of the graph. The simulation is described below and ends up picking a device for each node in the graph using greedy heuristics. The node to device placement gener-ated by this simulation is also used as the placement for the real execution.

The placement algorithm starts with the sources of the computation graph, and simulates the activity on each device in the system as it progresses. For each node that is reached in this traversal, the set of feasible devices is considered (a device may not be feasible if the device does not provide a kernel that implements the particular operation). For nodes with multiple feasible devices, the placement algorithm uses a greedy heuristic that exam-ines the effects on the completion time of the node of placing the node on each possible device. This heuristic takes into account the estimated or measured execution time of the operation on that kind of device from the cost model, and also includes the costs of any communica-tion that would be introduced in order to transmit inputs to this node from other devices to the considered device. The device where the node’s operation would finish the soonest is selected as the device for that operation, and the placement process then continues onwards to make placement decisions for other nodes in the graph, includ-ing downstream nodes that are now ready for their own simulated execution. Section 4.3 describes some exten-sions that allow users to provide hints and partial con-straints to guide the placement algorithm. The placement algorithm is an area of ongoing development within the system.


3.2.2 Cross-Device Communication


Once the node placement has been computed, the graph is partitioned into a set of subgraphs, one per device. Any cross-device edge from x to y is removed and replaced by an edge from x to a new Send node in x’s subgraph and an edge from a corresponding Receive node to y in y’s subgraph. See Figure 4 for an example of this graph transformation.


Figure 4: Before & after insertion of Send/Receive nodes


At runtime, the implementations of the Send and Re-ceive nodes coordinate to transfer data across devices. This allows us to isolate all communication inside Send and Receive implementations, which simplifies the rest of the runtime.

When we insert Send and Receive nodes, we canoni-calize all users of a particular tensor on a particular de-vice to use a single Receive node, rather than one Re-ceive node per downstream user on a particular device. This ensures that the data for the needed tensor is only transmitted once between a source device → destination device pair, and that memory for the tensor on the desti-nation device is only allocated once, rather than multiple times (e.g., see nodes b and c in Figure 4)

By handling communication in this manner, we also allow the scheduling of individual nodes of the graph on different devices to be decentralized into the work-ers: the Send and Receive nodes impart the necessary synchronization between different workers and devices, and the master only needs to issue a single Run request per graph execution to each worker that has any nodes for the graph, rather than being involved in the scheduling of every node or every cross-device communication. This makes the system much more scalable and allows much finer-granularity node executions than if the scheduling were forced to be done by the master.


3.3 Distributed Execution


Distributed execution of a graph is very similar to multi-device execution. After device placement, a subgraph is created per device. Send/Receive node pairs that com-municate across worker processes use remote communi-cation mechanisms such as TCP or RDMA to move data across machine boundaries.


Fault Tolerance


Failures in a distributed execution can be detected in a variety of places. The main ones we rely on are (a) an error in a communication between a Send and Receive node pair, and (b) periodic health-checks from the master process to every worker process.

When a failure is detected, the entire graph execution is aborted and restarted from scratch. Recall however that Variable nodes refer to tensors that persist across ex-ecutions of the graph. We support consistent checkpoint-ing and recovery of this state on a restart. In partcular, each Variable node is connected to a Save node. These Save nodes are executed periodically, say once every N iterations, or once every N seconds. When they execute, the contents of the variables are written to persistent stor-age, e.g., a distributed file system. Similarly each Vari-able is connected to a Restore node that is only enabled in the first iteration after a restart. See Section 4.2 for details on how some nodes can only be enabled on some executions of the graph.


2. Programming Model and Basic Concepts


A TensorFlow computation is described by a directed graph, which is composed of a set of nodes. The graph represents a dataflow computation, with extensions for allowing some kinds of nodes to maintain and update persistent state and for branching and looping control structures within the graph in a manner similar to Naiad [36]. Clients typically construct a computational graph using one of the supported frontend languages (C++ or Python). An example fragment to construct and then execute a TensorFlow graph using the Python front end is shown in Figure 1, and the resulting computation graph in Figure 2. 


In a TensorFlow graph, each node has zero or more in-puts and zero or more outputs, and represents the instantiation of an operation. Values that flow along normal edges in the graph (from outputs to inputs) are tensors, arbitrary dimensionality arrays where the underlying element type is specified or inferred at graph-construction time. Special edges, called control dependencies, can also exist in the graph: no data flows along such edges, but they indicate that the source node for the control dependence must finish executing before the destination node for the control dependence starts executing. Since our model includes mutable state, control dependencies can be used directly by clients to enforce happens before relationships. Our implementation also sometimes inserts control dependencies to enforce orderings between otherwise independent operations as a way of, for example, controlling the peak memory usage. 



Operations and Kernels


An operation has a name and represents an abstract computation (e.g., “matrix multiply”, or “add”). An operation can have attributes, and all attributes must be provided or inferred at graph-construction time in order to instantiate a node to perform the operation. One common use of attributes is to make operations polymorphic over different tensor element types (e.g., add of two tensors of type float versus add of two tensors of type int32). A kernel is a particular implementation of an operation that can be run on a particular type of device (e.g., CPU or GPU). A TensorFlow binary defines the sets of operations and kernels available via a registration mechanism, and this set can be extended by linking in additional operation and/or kernel definitions/registrations. Table 1 shows some of the kinds of operations built into the core TensorFlow library. 



Sessions


Clients programs interact with the TensorFlow system by creating a Session. To create a computation graph, the Session interface supports an Extend method to augment the current graph managed by the session with additional nodes and edges (the initial graph when a session is created is empty). The other primary operation supported by the session interface is Run, which takes a set of out-put names that need to be computed, as well as an optional set of tensors to be fed into the graph in place of certain outputs of nodes. Using the arguments to Run, the TensorFlow implementation can compute the transitive closure of all nodes that must be executed in order to compute the outputs that were requested, and can then arrange to execute the appropriate nodes in an order that respects their dependencies (as described in more detail in 3.1). Most of our uses of TensorFlow set up a Session with a graph once, and then execute the full graph or a few distinct subgraphs thousands or millions of times via Run calls. 



Variables


In most computations a graph is executed multiple times. Most tensors do not survive past a single execution of the graph. However, a Variable is a special kind of operation that returns a handle to a persistent mutable tensor that survives across executions of a graph. Handles to these persistent mutable tensors can be passed to a handful of special operations, such as Assign and AssignAdd (equivalent to +=) that mutate the referenced tensor. For machine learning applications of TensorFlow, the parameters of the model are typically stored in tensors held in variables, and are updated as part of the Run of the training graph for the model. 

Abstract


TensorFlow [1] is an interface for expressing machine learning algorithms, and an implementation for executing such algorithms. A computation expressed using TensorFlow can be executed with little or no change on a wide variety of heterogeneous systems, ranging from mobile devices such as phones and tablets up to large-scale distributed systems of hundreds of machines and thousands of computational devices such as GPU cards. The system is flexible and can be used to express a wide variety of algorithms, including training and inference algorithms for deep neural network models, and it has been used for conducting research and for deploying machine learning systems into production across more than a dozen areas of computer science and other fields, including speech recognition, computer vision, robotics, information retrieval, natural language processing, geographic information extraction, and computational drug discovery. This paper describes the TensorFlow interface and an implementation of that interface that we have built at Google. The TensorFlow API and a reference implementation were released as an open-source package under the Apache 2.0 license in November, 2015 and are available at www.tensorflow.org.


초록


텐서플로는 머신 러닝 알고리즘을 표현하는 인터페이스이며, 이러한 알고리즘을 실행하기 위해 구현됐다. 텐서플로는 활용한 연산은 스마트폰, 태블릿부터 그래픽카드와 같은 수천개의 연산장치까지 다양한 시스템을 그대로 이용할 수 있다. 이 시스템은 유연하며, 심층 신경망 모델의 알고리즘을 추론하고 학습하는 것부터 시작해 음성 인식, 컴퓨터 비전, 로보틱스, 정보 검색, 자연어처리, 지리정보 추출, 연산 제약 발견과 같은 다양한 분야에서 기계 학습 시스템을 적용하고 연구할 수 있다. 이 논문은 텐서플로 인터페이스에 대해 설명하며 구글에서 구성된 인터페이스로 구현됐다. 텐서플로 API와 레퍼런스는 www.tensorflow.org에서 2015년 11월 아파치2.0으로 라이선스되 오픈소스 패키지로 이용가능하다.


1. Introduction


The Google Brain project started in 2011 to explore the use of very-large-scale deep neural networks, both for research and for use in Google’s products. As part of the early work in this project, we built DistBelief, our first-generation scalable distributed training and inference system [14], and this system has served us well. We and others at Google have performed a wide variety of research using DistBelief including work on unsupervised learning [31], language representation [35, 52], models for image classification and object detection [16, 48], video classification [27], speech recognition [56, 21, 20], sequence prediction [47], move selection for Go [34], pedestrian detection [2], reinforcement learning [38], and other areas [17, 5]. In addition, often in close collaboration with the Google Brain team, more than 50 teams at Google and other Alphabet companies have deployed deep neural networks using DistBelief in a wide variety of products, including Google Search [11], our advertis-ing products, our speech recognition systems [50, 6, 46], Google Photos [43], Google Maps and StreetView [19], Google Translate [18], YouTube, and many others. 


1. 소개


구글 브레인 프로젝트는 2011년 연구와 구글 제품 사용의 목적으로 방대한 심층 신경망 연구부터 시작됐다. 프로젝트 초기 첫번째 분산 학습과 추론 시스템인 DistBelief를 구현했으며 정상적으로 동작했다. 그 후, 비지도 학습, 언어 표현, 이미지 분류와 객체 인식 모델, 비디오 분류, 음성 인식, 시퀀스 예측, Go언어의 이동 선택, 보행자 분석, 강화 학습등의 분야에서 DistBelied를 활용하기 시작했다. 게다가, 구글 브레인 팀과 협력으로 50개 이상의 구글팀과 Alphabet사가 구글 검색, 광고 제품, 음성 인식 시스템, 구글 포토, 구글 맵 및 스트리트뷰, 구글 번역, 유튜브등과 같은 제품서비스에 적용하기 시작했다.


Based on our experience with DistBelief and a more complete understanding of the desirable system properties and requirements for training and using neural networks, we have built TensorFlow, our second-generation system for the implementation and deployment of large-scale machine learning models. TensorFlow takes computations described using a dataflow-like model and maps them onto a wide variety of different hardware platforms, ranging from running inference on mobile device platforms such as Android and iOS to modest-sized training and inference systems using single machines containing one or many GPU cards to large-scale training systems running on hundreds of specialized ma-chines with thousands of GPUs. Having a single system that can span such a broad range of platforms significantly simplifies the real-world use of machine learning system, as we have found that having separate systems for large-scale training and small-scale deployment leads to significant maintenance burdens and leaky abstractions. TensorFlow computations are expressed as stateful dataflow graphs (described in more detail in Section 2), and we have focused on making the system both flexible enough for quickly experimenting with new models for research purposes and sufficiently high performance and robust for production training and deployment of machine learning models. For scaling neural network training to larger deployments, TensorFlow allows clients to easily express various kinds of parallelism through replication and parallel execution of a core model dataflow graph, with many different computational devices all collaborating to update a set of shared parameters or other state. Modest changes in the description of the computation allow a wide variety of different approaches to parallelism to be achieved and tried with low effort [14, 29, 42]. Some TensorFlow uses allow some flexibility in terms of the consistency of parameter updates, and we can easily express and take advantage of these relaxed synchronization requirements in some of our larger deployments. Compared to DistBelief, TensorFlow’s programming model is more flexible, its performance is significantly better, and it supports training and using a broader range of models on a wider variety of heterogeneous hardware platforms. 


DistBelif에서의 경험과 분산 시스템의 속성과 신경망을 이용한 학습에 필요한 부분을 기반해, 방대한 규모의 머신 러닝 모델을 구현하는 두번재 시스템인 텐서플로를 개발했다. 텐서플로는 수천개의 그래픽카드가 연결된 특수한 대규모 학습 시스템부터 여러 그래픽카드로 이뤄진 단일 시스템과 안드로이드 iOS와 같은 모바일 디바이스 플랫폼까지 다양한 하드웨어 플랫폼에서 사용할 수 있는 연산 기반 데이터 플로우 모델 및 매핑 형태를 취한다. 대규모 학습 및 소규모 구축에 필요한 별도의 시스템을 갖추면 유지 보수에 상당한 비용이 초래되므로, 다양한 플랫폼으로 확장할 수 있는 단일 시스템은 머신 러닝 시스템을 보다 간단히 사용할 수 있게한다. 텐서플로 연산은 데이터 플로우 그래프로 표현되며, 연구 목적 및 고성능 연산, 머신 러닝 모델을 간편히 구축하고 학습하는 제품을 보다 빨르고 유연하게 구성할 수 있게 한다. 신경망 학습을 좀 더 크게 확장하고자, 텐서플로는 코어 모델 데이터 플로우 그래프를 복제 및 병렬 연산을 통해 쉽게 표현할 수 있게 클라이언트에서 제공하며 파라미터 및 다른 상태를 공유할 수 있게 여러 연산 디바이스와 정보를 주고받는다. 이처럼, 다양한 변화를 통해 병렬 연산에 대해 다양하게 접근하고 쉽게 코드를 작성할 수 있다. 몇몇 텐서플로는 파라미터 갱신의 연속성의 관점에서 유연성을 제공하는데, 대규모 시스템의 동기화 문제에 있어 많은 도움이 된다. DistBelief와 비교해 텐서플로의 프로그래밍 모델은 훨씬 유연하고 성능 또한 좋으며, 다양한 하드웨어 플랫폼을 지원해 학습할 수 있다.


Dozens of our internal clients of DistBelief have already switched to TensorFlow. These clients rely on TensorFlow for research and production, with tasks as diverse as running inference for computer vision models on mobile phones to large-scale training of deep neural networks with hundreds of billions of parameters on hundreds of billions of example records using many hundreds of machines [11, 47, 48, 18, 53, 41]. Although these applications have concentrated on ma-chine learning and deep neural networks in particular, we expect that TensorFlow’s abstractions will be useful in a variety of other domains, including other kinds of machine learning algorithms, and possibly other kinds of numerical computations. We have open-sourced the TensorFlow API and a reference implementation under the Apache 2.0 license in November, 2015, available at www.tensorflow.org. 


DistBelief의 여러 내부 클라이언트는 이미 텐서플로로 전환됐다. 이러한 클라이언트는 텐서플로에 종속돼 연구와 제품에 사용되며 모바일 폰부터 수백개의 장치로 수천억개의 파라미터를 구성하는 대규모 학습 심층 신경망까지 컴퓨터 비젼 추론 실행에 이용된다. 이러한 애플리케이션이 머신 러닝과 심층 신경망에 집중되 있더라도, 텐서플로는 머신 러닝 알고리즘과 수치 연산과 같은 다양한 영역에서 사용할 수 있음이 기대된다. 텐서플로 API의 경우 오픈 소스로 공개했으며, 레퍼런스는 아파치 2.0 라이선스 형태로 www.tensorflow.org에서 확인할 수 있다.


The rest of this paper describes TensorFlow in more detail. Section 2 describes the programming model and basic concepts of the TensorFlow interface, and Section 3 describes both our single machine and distributed imple-mentations. Section 4 describes several extensions to the basic programming model, and Section 5 describes several optimizations to the basic implementations. Section 6 describes some of our experiences in using Ten-sorFlow, Section 7 describes several programming idioms we have found helpful when using TensorFlow, and Section 9 describes several auxiliary tools we have built around the core TensorFlow system. Sections 10 and 11 discuss future and related work, respectively, and Sec-tion 12 offers concluding thoughts. 


앞으로 이 논문에서 텐서플로를 좀 더 자세히 살펴본다. 섹션 2에서는 프로그래밍 모델과 텐서플로 인터페이스의 기본 개념을 설명하고, 섹션 3에서는 단일 장치와 분산 시스템에 대해 알아본다. 섹션 4에서는 기본적인 프로그래밍 모델로 확장하며, 섹션 5에서는 기본적인 구현을 최적화해본다. 섹션 6에서는 텐서플로를 이용해 코드를 작성해보며, 섹션 7에서는 텐서플로에 사용되는 프로그래밍 함수를 살펴보며, 섹션 9에서는 텐서플로 시스템에 구성된 보조 도구를 알아본다. 섹션 10과 11에서는 미래의 활용에 대해 고민해보며, 섹션 12에서 이 모든 내용을 정리해본다.


생활을 변화시키는 인공지능

생활을 변화시키는 인공지능

다쿠치 카즈히로, 모리시마 료코 저/양성건

생활을 바꾸는 인공지능의 미래

최근 몇 년, 인공지능이라는 말이 뉴스나 신문, 웹 등에 자주 등장하고 있다. 인간의 일을 빼앗고 더 나아가 가까운 미래에 인류를 넘어선다는 이야기까지 나오는 등 기대와 불안과 혼돈이 함께 소용돌이치고 있다. 과도한 기대와 불안은 그 실태가 잡히지 않기 때문에 생겨난다. AI는 그 정의부터가 애매한 데다, 관련 기술도 복잡하고 전체를 파악하기 어렵다. 『생활을 변화시키는 인공지능』에서는 알파고부터 싱귤래리티, 딥러닝, IoT, 빅 데이터, 로봇, 스마트 가전, 핀테크, 자동 거래, ...






이책은 인공지능(Artificial Intelligence)에 대해 누구나 쉽게 이해할 수 있게 도와주는 책이다. 우리가 흔히 들어본 구글, 마이크로소프트, 아마존, 페이스북, 애플등 여러 IT기업들이 인공지능을 어떻게 개발하고 활용하며 세상을 변화시키는 지 알려주고 있다.



AI의 정체란 무엇일까? 사전상에는 인간의 학습능력과 추론능력, 지각능력, 자연언어의 이해능력 등을 컴퓨터 프로그램으로 실현한 기술이라고 한다. 하지만 현재까지 모든 사람이 "지능"이라고 인정할 수 있을 정도의 인간 수준으로 두뇌와 판단 능력을 가진 AI는 완성되지 않았다. 그럼에도 불구하고, AI는 점점 똑똑해지고 있어, 인간의 생활을 윤택하고 많은 도움을 주는 '헬퍼'의 존재로서 계속 발전되고 있다.



인공지능 기술이 발달하는 만큼 누구나 인공지능을 쉽게 이해하고 받아들일 수 있어야 한다. 석유와 인터넷이라는 3차 산업혁명을 겪은 우리들은 이제 인공지능과 함께하는 4차산업혁명을 겪고 있다. 이러한 변화속 이제는 인공지능이 무엇인지 어떤 역할을 하는지 남녀노소 배우고 알아야할 시대가 온것이다. 스스로 인공지능을 만들어보거나 이미 학습된 인공지능을 활용할 수 있는 다양한 서비스들이 존재한다. 아직까지 일반인들이 쉽게 접근할만한 수준은 아니지만 점차 빠르고 간단하게 인공지능을 구현하는 시대가 머지않아 올것이다.




네이버라는 회사에 관심이 많다면 '클로바(Clova)'또한 잘 알것이다. 네이버에서 개발한 인공지능 플랫폼이다. 최근 많은 기업들이 자기들만의 인공지능 플랫폼을 앞세워 인공지능 스피커 시장에 진입하고 있다. 아직은 기초적인 수준으로 의사결정을 도와주거나 검색하는 정도이지만, 머지않아 학습하지 않아도 시키지 않아도 스스로 사용자가 원하는 의사를 스스로 결정해 행동하는 인공지능 스피커 시대도 올것이다.



이렇듯 인공지능은 우리 삶의 많은 변화를 주고 있다. 모두가 인공지능의 여러 이론인 딥러닝, 머신 러닝, 강화 학습, 신경망등을 공부해야 한다는 것은 아니다. 하지만, 우리가 지금 현재 일상적으로 컴퓨터를 사용하고 자동차를 운전하듯이 인공지능에 대해서도 누구나 이해하고 어떤 역할을 하는지 남녀노소 불문하고 이해해야할 필요는 충분하다.


이 책에서는 최신 기술을 통해 인공지능이 우리 일상과 기업을 어떤 모습으로 변화시키고 있는지 잘 알려주고 있다. 인공지능에 아무것도 모르는 일반인들도 이 책을 다 읽게되면 인공지능에 대한 희미한 형태정도는 쉽게 그릴 수 있을 것으로 본다.




나의 첫 안드로이드

나의 첫 안드로이드

한동호

초급 개발자의 눈높이에 맞춘
안드로이드 앱 프로그래밍 입문서

이제 막 안드로이드 앱 개발을 시작한 초급 개발자에게는 하나의 앱을 만들더라도 안드로이드 개념을 제대로 이해하고, 개발하는 것이 중요하다. 처음에 기본기를 제대로 익혀야 실전 앱을 개발하면서 겪는 다양한 상황에 유연하게 대처할 수 있다. 이 책의 목적은 단순히 책의 예제를 따라해보는 데 있는 것이 아니라, 제대로 된 실전 앱을 만들 수 있는 역량을 키우는 데 있다. 안드로이드 앱을 만들어 보면서 개념을 익히고, 예제 소스코드 분석을 통해 응용력을...




+ Recent posts