텐서플로우
TensorFlow
1. 개요
구글이 2011년에 개발을 시작하여 2015년에 오픈 소스로 공개한 기계학습 라이브러리.
공식 사이트
딥러닝과 기계학습 분야를 일반인들도 사용하기 쉽도록 다양한 기능들을 제공한다. 2016년 알파고와 함께 한국에서도 관심이 높아진 추세이며 관련 컨퍼런스들도 개최되고 있다.
하이 레벨 프로그래밍 언어로 알려진 Python을 활용하여 연산처리를 작성할 수 있다. 다른 언어들도 대부분 지원하지만 Python 관련 자료가 가장 많다. 때문에 공개된 지 그리 오래되지 않았음에도 불구하고 텐서플로우가 다양한 분야에서 활용되고 있다.
단, 기계학습을 정말로 로우 레벨부터 짜거나, 신경망 구조를 프로젝트에 딱 맞는 최적의 구조로 학습시켜 최적의 결과물을 내기 위해서는 파이토치를 써야 한다. 이유는 텐서플로우 라이브러리 자체가 신경망이 한번 학습되기 시작하면 신경망의 구조는 그 구조로 고정되어야만 학습이 가능한 그래프 구조인데 비해, 파이토치는 학습 과정에서 신경망의 구조까지 스스로 학습하여 스스로 변하게 할 수 있는 레이어구조기 때문이다. 실제 상용에 쓰이는 데도 성능의 차이가 심하며, 이미 학계에서는 파이토치가 텐서플로우를 앞질러서 대세로 쓰이고 있다. 오죽하면 해외에는 구글이 실제 사내에서 공개된 텐서플로우를 안쓴다는 말부터(동일한 결과를 내기 위해서는 파이토치 대비 수십배 더 많은 컴퓨팅 파워와 훈련 시간을 요구한다), 텐서플로우는 첫 단추부터 잘못 시작된 라이브러리가 아닌가 하는 자조도 돌고 있다. 단 간단하게 상용으로 개발하는데 있어서는 아직까지 사용자가 많은 텐서플로우가 참고자료가 많아 유용한 편이다.
텐서플로우가 파이토치보다 퍼포먼스가 떨어지는 것은 사실이나 텐서플로우의 유행이 구글에서 만들었고 성능 외적인 측면때문에 텐서플로우가 사용된다는것은 오류가 있는 주장이다. 텐서플로우는 통상적으로 사용되지 않는 구조나 복잡한 구조에 적합하기 때문에 연습문제나 사업에 있어서는 파이토치가 적절하지만 새로운 신경망 구조의 연구에 있어서는 텐서플로우가 더 낫다. 실제로 파이토치로 새로운 구조를 실행해보면 알 수 없는 이유때문에 학습이 안되다가 텐서플로우로 똑같이 만들었더니 된다는 사례가 굉장히 많다. 또한 크고 복잡한 구조일 수록 텐서플로우가 파이토치의 퍼포먼스에 거의 근접한다는 자료도 있다.
2. 특징
텐서플로우는 다음과 같은 특징을 가진다.
- 데이터 플로우 그래프를 통한 풍부한 표현력
- 아이디어 테스트에서 서비스 단계까지 이용 가능
- 계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리
- Python, C++, Go, Java, R[1] 을 지원하며, SWIG를 통해 다양한 언어 지원 가능
2.1. 코드 수정 없이 CPU/GPU 모드로 동작
공개된 버전은 일반 버전과 GPU 가속 버전 두 가지이다. 일반 버전은 어떤 컴퓨터에서든 실행할 수 있다는 장점이 있다.
GPU 가속 버전은 GPGPU를 사용해 대량 연산을 빠르게 수행하므로 훨씬 빠르게 동작하게 된다. 현재 NVIDIA의 GPGPU 언어인 CUDA를 사용하기 때문에 NVIDIA 그래픽카드가 없으면 사용할 수 없다[2] . GPU 가속 버전의 성능은 CPU 성능과는 별 관계가 없고 GPU 성능이 중요하다. CUDA 드라이버와 cuDNN 드라이버를 추가적으로 설치하여야 한다.
그 외에 구글이 자사 서비스를 위해 내부적으로 사용하고 있는 버전도 있는데, 이것은 구글이 자체개발한 AI 가속 하드웨어인 TPU(Tensor Processing Unit) 위에서 동작하기 때문에 인텔 제온이나 엔비디아 테슬라보다도 15~30배 더 빠르다.
TensorFlow 2.0이 출시되면서 CPU 버전과 GPU 버전이 통합되었다. CUDA 환경 설치가 올바르게 되었다면 자동으로 GPU를 인식해준다.
2.2. Tensorflow Lite
TensorFlow로 훈련한 모델을 안드로이드나 iOS, 또는 더 작은 라즈베리 파이 같은 거에다가 사용할 수 있게 변환하는 기술이다. 안드로이드의 경우, 이 .tflite 파일을 직접 넣을 수도 있으며 MLKit등을 활용해 좀 더 쉽게 적용할 수 있다. 예를 들어 이미지 분류 문제를 위해 ResNet50을 훈련했다면, model 에 해당 tflite 파일을 설정하고, 이미지를 1*224*224*3 사이즈의 비트맵으로 변환한 후 각 RGB 값에 255를 나눠서 preprocess하면 된다. 그 다음, 이 파일을 모델에 input하면 각 label 별로 예측한 확률의 array가 나오는데, 여기다가 argmax 같은 함수를 사용해서 prediction 결과를 뽑을 수 있다.
자세한건 TfLite 공식 문서와 MLKit 문서를 참조.
3. 관련 강좌 사이트 및 참조 사이트
- 네이버 클라우드 플랫폼 가이드
- 김성훈 교수의 딥러닝 강좌
- 텐서플로우 코리아
- Udaticy Deep Learning
- AwesomeTensorflow
- AwesomeTensorflowImplementation
- Tensorflow한글 번역
- 아직 작성 중인 텐서플로 강의. 다른 강의도 많이 있음
4. 응용 사례
이것들은 간단 예제 수준이고, 전문 지식이 결합되면 훨씬 더 많은 일들을 할 수 있다. 딥러닝은 아직 학문적 체계가 정립되지 않았기 때문에, 각종 사례를 찾아보는 것 만큼이나 직접 만들어보는 게 더 빠르다.
이루다(인공지능)에도 응용되었다!핑퐁팀 블로그
5. Keras
케라스(Keras)는 TensorFlow, Theano, CNTK 등 딥 러닝 라이브러리를 백엔드로 사용하여 쉽게 다층 퍼셉트론 신경망 모델, 컨볼루션 신경망 모델, 순환 신경망 모델, 조합 모델 등을 구성할 수 있다.
2017년, 구글은 tensorflow 2.0 버전부터는 코어 레벨에서 Keras를 지원 하도록 변경하겠다고 발표 하였고, 현재 발표된 Tensorflow 2.0 stable 버전부터는 사실상 전부 Keras를 통해서만 동작하도록 바뀌었다. 사용자용 튜토리얼 페이지 1.15 버전부터 deprecated 목록에 들어가 있던 자잘한 API가 대부분 정리되었고, 익숙되면 조금 더 편하게 사용할 수 있게 변했다. 하지만 그동안 익숙하게 사용해 왔던 모델을 만든 다음 session을 만들어 동작하는 구조에 익숙하던 사람들에게 멘붕을 준 것은 덤.
6. 관련 문서
7. VS 파이토치
가장 특징적인 파이토치와 텐서플로우의 차이점을 간략하게 설명하자면 텐서플로우는 더 쉽게 다른 언어나 모듈에 적용이 가능하며, 파이토치는 조금 더 파이썬 언어에 친화적으로 설계되었으며 API 사용이 더 쉽다. (레이어 동작을 커스터마이즈 하기 더 유용하다.) [4][5] 일반적으로 연구용이면 파이토치, 기업에서 생산하거나 어플리케이션 개발을 원한다면 텐서플로우라고들 말하지만, 이는 실제 개발 환경등에 따라 달라질 수 있다. 많은 문서들이 이야기 하듯이 더 '좋은' 툴은 없으며, 상황에 맞게 적절하게 맞춰 사용하면 좋을 것이다.
페이스북이 선도하고 있는 파이토치에 비해 덜 직관적인 편이다. 그러나 아쉽게도 구글이 개발했다는 이유 하나만인지 사용자수가 아직까지 파이토치보다 많아 관련 자료를 얻기 수월하다. 학계에서는 2017년부터 이미 파이토치가 텐서플로우보다 더 많이 언급되고 있다. 대부분의 사용자가 텐서플로우에 이미 익숙해져서 라이브러리를 옮기기 싫어한다는 이유도 덤. 만약 당신이 머신러닝을 막 시작해 라이브러리를 고르는 입장이라면 파이토치 라이브러리부터 시작하는 것도 나쁘지 않을 것이다. 파이토치는 텐서플로우와 달리 페이스북이 직접 관리하는 포럼이 존재한다. [6]
[image]
[1] R의 대표적인 통합개발환경(IDE)인 RStudio를 통해 연동되어 있다.[2] 로드맵에 범용 GPU 가속 라이브러리, OpenCL을 지원할 예정이라고 발표했다[3] 무료강좌이니 관심있는 사람은 만들어보자. 교재 PDF[4] https://realpython.com/pytorch-vs-tensorflow/#pytorch-vs-tensorflow-decision-guide[5] https://hackr.io/blog/pytorch-vs-tensorflow[6] https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/