Security_RNRF

[머신러닝] 구글 오픈소스- 텐서플로우(TensorFlow) 본문

Project/AI

[머신러닝] 구글 오픈소스- 텐서플로우(TensorFlow)

RNRF 2020. 11. 26. 21:53

 

구글의 딥러닝, 머신러닝 라이브러리 
텐서플로우(TensorFlow)

TensorFlow is an Open Source Software Library for Machine Intelligence

구글의 텐서플로우는 일반인들도 쉽고 다양한 기능들로 딥러닝과 기계학습 빅데이터분석을 할수 있게 해주는 오픈소스 라이브러리 입니다 .
데이터만 있으면 인공지능을 구현할 수 있도록 해주며 무료로 제공 되고 있습니다 .
오픈소스로 공개 (https://github.com/tensorflow
유연하고, 효율적이면서 휴대성이 좋아 스마트폰부터 대형 컴퓨터 클러스터까지 모두 수행이 가능하여 학습된 모델을 실제 제품에 바로 적용 할 수 있도록 합니다 .
이미지, 음성, 비디오등 다양하고 많은 데이터를 처리할 수 있는 장점이 있으며, 대표적인 구글 번역 스트템 에도 적용 되었습니다 .
C++과 파이썬을 사용하여 접근성이 높은 텐서플로우는 짧은시간에 강력한 머신러닝 딥러닝 분석을 할 수 있도록 해 줍니다.


딥러닝 학습을 위해서는 많은 데이터를 이용한 훈련이 매우 중요합니다 .
많은 데이터를 반복하여 학습시키는 데에는 많은 시간이 걸리게 되며, 이러한 이유로 과거에는 중앙처리장치(CPU, Central Processing Unit)로 데이터를 처리 하게되여 많은 시간이 걸려 실용적이지 못했습니다 .
데이터 분석 처리를 획기적으로 빠르게 학습하기 위해 그래픽처리장치(GPU,Graphics Processing Unit)를 이용하면서 부터 딥러닝 성능은 크게 향상 되었습니다 .
PC에 꽂을 수 있는 GPU는 3000개 이상의 처리코어를 가지고 있어 동시에 병렬적으로 딥러닝 수치계산을 빠르게 할 수 있도록 해 줍니다 .
일반적으로 이미지(사물/얼굴) 인식부터 음성 인식 등 다양한 분야의 머신러닝 작업을 수행 할때는 GPU나 CPU를 창착한 고객의 스마트 기기에서도 구동 되고 있습니다 .
특히 구글은 인공지능서비스를 훈련시킬 뿐 아니라 구동할 때도 GPU기반 스마트기기를 활용 합니다 .

텐서플로우(TensorFlow)는 데이터플로우 그래프(Data flow graph)를 사용하여 수치 연산을 하는 소프트웨어로 , 그래프의 노드(Node)는 수치연산을 나타내고 엣지(edge)는 노드사이를 이동하는 다차원 데이터 배열(tensor)를 나타내 줍니다 .
유연한 아키텍처로 구성되어 있어 코드 수정없이 데스크탑, 서버 혹은 모바일 디바이스에서 CPU나 GPU를 사용하여 연산을 구동시킬수 있습니다.
텐서플로우는 머신러닝과 딥뉴럴 네트워크 연구를 목적으로 개발되었으며, 여러 다른 분야에도 충분히 적용될 수 있습니다 .
텐서플로우를 사용하기 위한 언어는 파이썬이 대표적이며
수기 숫자 분류와 이미지인식, 워드 임베딩(Word Embedding), RNN(Recurrent Neural Network), 기계번역을 위한 (Sequence to Sequence)모델, 자연어처리 , PDE(Partial Differential Equation)기반의 시뮬레이션에 대한 애플리케이션 등이 포함 되어 있습니다 .

일반버전과 GPU 가속 버전 두가지가 공개 되어 있으며 , 일반버젼은 어떤 컴퓨터에서든 실행할 수 있고, GPU가속버전은 GPGPPU를 사용 대량 연산을 빠르게 수행할수 있습니다 . 단 NVIDIA의 GPGPU 언어인 CUDA를 사용하기 때문에 NVIDIA 그래픽카드에서만 작동됩니다.
그외 구글의 자사 서비스를 위한 내부버전은 AI 가속 하드웨어인 TPU(Tensor Processing Unit)에서 동작되어 타사보다 최대30배 더 빠르다고 합니다 .

TensorFlow™ is an open source software library for numerical computation using data flow graphs

텐서플로우(TensorFlow)는 graph로 연산(computation)을 나타내는 프로그래밍 시스템 입니다 .
graph에 있는 노드는 작업 op(operation)이라고 부릅니다.
작업은 0개 혹은 그이상의 Tensor를 가질 수 있고 연산도 수행하며 0개 혹은 그 이상의 Tensor를 만들어 내기도 합니다 .
TensorFlow에서 Tenser는 정형화된 다차원 배열 (a typed multi_dimensional array)입니다.
TensorFlow에서 graph는 연산을 표현해 놓은 것이라서 연산을 하려면 graph가 Session 상에 실행 되어야 합니다 .
Session은 graph의 작업을 CPU나 GPU같은 Device에 배정하고 실행을 위한 메서드들을 제공 합니다 .
tensor는 파이썬 에서 numpy ndarry형식으로 나오고 C 와 C++에서는 TensorFlow Tensor형식으로 나옵니다 .
텐서플로우에는 Scikit Flow라는 패키지도 포함되어, 한줄 모델링 기능(oneline medeling function)을 응용 수학적인 함수, 클래스 모델등을 제공합니다 .

Tensor 

원래 의미는 2차원 이상의 배열이지만 여기 에서는 임의의 차원을 가진 배열을 뜻합니다.
텐서플로우는 방향성 있는 그래픽 구조로써 모델을 구성 하는데 이때 그래프는 0이상의 입출력을 갖는 노드들의 연결체 입니다 .

Operation

임의의 계산을 수행하는 것으로 다양한 속성 값(attribute) 을 가질수 있습니다.

Kernel

커널은 operation을 디바이스 별로 실제 구현한 것으로 가속화를 위해 다양한 분산 최적화 알고리즘을 활용하고 있습니다.
실제 코드상에서는 처리되는 곳이  CPU인지, GPU인지에 따라 다른구현을 활용합니다.

Variale

변수란 학습을 통해 변화하는 배열값을 저장하기 위한 operation입니다.
TensorFlow가 학습할때 다양한 디바이스에 분산하여 처리하는 구조로 명시적 type을 지정 합니다.

Session

TensorFlow그래프를 구성한후 실제 수행을 할때 다앙한환경(CPU, CPU/GPU, 원격분산처리)에서 처리하기 위해서 Client에서 session을 만들어 전달하는 개념입니다.


텐서플로우는 바이너리패키지나 깃허브 소스를 이용해 설치할 수 있습니다 .
텐서플로우 파이썬 API는 파이썬 2.7과 3.3+을 지원 합니다 .
 Pip : 파이썬 패키지를 설치하고 관리하는 패키지 매니저 프로그램 
 Virtualenv:  각기 다른 파이썬 프로젝트에서 필요한 패키지들의 버젼이 충돌되지 않도록 다른 공간에서 운영할수 있는 툴로 기존 패키지들을 덮어쓰지 않게 됩니다 .
 아나콘다(Anaconda): 아나콘다는 여러 수학, 과학, 패키지를 기본적으로 포함하고 있는 파이썬 배포판 입니다 .
Anaconda는 "conda" 패키지 매니저를 사용하여 Virtualenv와 유사한 환경 시스템을 제공 합니다 .
 도커 (Docker): 로컬 컴퓨터에서 컨테이너로 리눅스 운영체제를 운영할 수 있는 시스템 입니다 .
 소스에서 설치: 텐서플로우를 pip wheel을 이용하여 빌드하고 설치 합니다 .
  Pip는 파이썬 패키지를 설치하고 관리하는 패키지 매니저 프로그램 입니다 .

 특징
●  데이터 플로우 그래프를 통한 풍부한 표현력
● 코드 수정 없이 CPU/GPU모드로 동작
 아이디어 테스트에서 서비스 단계까지 이용가능 
 (distributed)실행환경이 가능함
 계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리
 Python/C++를 지원하며, SWIG를 통해 다양한 언어 지원 가능 

 관련소프트웨어
● 텐서보드(TensorBoard)
기본적으로 텐서플로우에 내장된 그래프 시각화 소프트웨어
텐서플로우 실행 중의 log파일을 이용해 모델의 동작을 살핌
통계요약, 학습 분석, 디버깅 등에 도움을 줌 
● 텐서플로우 서빙 (Tensor Serving)
학습된 텐서플로우 모델을 쉽게 활용할 수 있는 소프트웨어로 내장된 함수를 사용하여 자신의 모델을 export하고 이를 텐서플로우 서빙에서 사용 함


구글, 사진속 물체 인식을 위학 TensorFlow API 공개 
(google Research blog)


얼마전 구글은 텐서플로우기반 물체인식 API를  오픈소스로 공개하였으며, 깃허브(GitHub)를 통해 자료를 받을 수 있습니다 .
이미지 사진에서 물체를 확인할 수 있도록하는 텐서플로우 기반 물체인식 (TensorFlow Object Detection) API 입니다 .
개발자들에게는 딥러닝 모델을 직접 만들고 학습시키지 않아도 관련 기술을 사용할 수 있게 합니다 .
현재 구글서비스  NestCam, 스타일 기반 이미지 검색, 구글 스트리트 뷰 글자인식 등에 사용 되고 있는 동일 API라고 합니다 .
이번 물체인식 API는 무거운 인셉션 기반 CNN(convolutional neural networks)과 비교적 덜 정교한 머신에서 작동하도록 설계된 경량모델을 포함한 모바일넷(mobilenets)을 발표한바 있는데,  물체인식, 얼굴인식, 랜드마크인식 등의 기능을 제공 합니다 .

구글은 앞으로도 TensorFlow 와 자신들의 연구 결과를 지속적으로 오픈하여 개발자들이 TensorFlow생태계에 들어와 결과적으로 클라우드 머신러닝 플랫폼 시장은 확대 발전 될 듯 합니다 .


■  관련 사이트 : http://www.tensorflow.org
  https://www.udacity.com/course/deep-learning--ud730

TensorFlow: Open source machine learning

TensorFlow: 텐서플로우: 모두를 위한 기계 학습

참조 : https://www.gitbook.com/@tensorflowkorea

[출처] [머신러닝] 구글 오픈소스- 텐서플로우(TensorFlow)|작성자 에이콘아카데미

Comments