페이지

2020년 9월 28일 월요일

A.I가 시(poetry)를 이해할 수 있을까?

최첨단 AI 자연어 처리 모델의 등장

818일자 포춘 지 블로그에 “AI가 시를 이해할 수 있을까라는 기사가 눈에 띈다. 최근에 AI 중에 눈에 띄는 발전을 보이는 분야는 자연어 처리 분야이다. 정확히는 언어 모델이라는 분야인데 이전까지는 불가능하다고 생각되던 부분이 최근 몇 년간에 눈부신 기술의 발전으로 인해, 이제 보다 커다란 그림으로 우리 앞에 성큼 다가오고 있다.

그동안 인공지능(AI) 자연어 처리(NLP)에서 가장 화제가 되고 있는 플랫폼으로는 구글의 양방향 언어모델 버트(Bert), OpenAI의 단방향 언어모델 GPT-2, 기계신경망 번역(Transformer) 모델 등이었는데 올해 528일에 개방형 arXiv 31명의 OpenAI 연구자들이 GPT-3 라는 3세대 언어예측모델을 발표하면서 세간의 주목을 끌기 시작했다. 주변에서 개발자들만 이러한 용어에 익숙해왔는데 GPT-3 라는 용어를 최근 뜻하지 않은 주변 인물들로부터 듣고있다.

OpenAI 2015년 테슬라 CEO 엘론 머스크와 전 Y콤비네이터 대표였던 샘 앨트만이 설립한 비영리 및 영리 기업이다. 엘론머스크는 2018년 이사회에서 탈퇴하고 기증자로 남아있고 2019년에는 마이크로소프트가 1조원을 투자한 바 있다. 구글이 인수한 DeepMind 와 경쟁하고 있다고 볼 수 있다.


새로운 언어 모델의 특징

  GPT-3 Generative Pre-trained Transformer 3 의 약자로 그 근간은 transformer 라는 언어 모델에 근거하고 있다. 이는 지난해 초에 공개한 소설 쓰는 인공지능 GPT-2 보다 훨씬 크고 혁신적인 모델이다. 이 모델은 4990( 499 Billion) 개의 단어(토큰)를 대상으로 웹과 책 등으로부터의 가중치에 따른 선택으로 3000(300 Billion)개 단어를 샘플링하여 사전 훈련을 받았다. 그리고 1750 (175 billion) 개의 매개변수(parameter)가 사용되었다고 한다. 여기서 매개변수는 심층신경망의 층(layer)과 층 속의 뉴론(unit) 사이의 연산에서 생겨나는 매개변수 숫자인데 많을수록 복잡하다는 것을 의미한다. 이는 작년 초 GPT-2 대비 116배의 크기를 나타낸다.

GPT-3의 특징은 사람이 한 두 줄 정도의 문장을 던져주면, 사람이 적은 것인지 분간이 안 될 정도의 논리 정연한 장문을 만들어 낸다는 점이다.

사전 학습된 변역 (Pre-trained Transformer), 이게 무슨 말인고 하니, 예전에는 입력되는 순차적인 언어들을 차례로 훈련시켜 어떤 단어가 신경망에 입력되었을 때, 그 다음에 어떤 단어가 올 것인가 등등을 예측했다면, 번역(transformer)모델이라는 것은 통째로 책이나 웹에 있는 초대형의 문장 세트를 엄청난 컴퓨터용량에 한꺼번에 훈련시켜서 사전에 만들어 놓은 것을 말한다. 이 모델 에다가 API(응용 프로그램 인터페이스)를 제공하여 사용자들이 거의 모든 영어와 관련된 작업을 범용적으로 문자를 입력하면 이 훈련된 모델의 성능을 그대로 사용한 결과를 얻을 수 있게 만들었다는 것을 뜻한다. 뒤에 몇가지 예제를 살펴보겠다.


전이 학습 (Transfer Learning)

  전이 학습이란 심층신경망의 최고 성능이 입증된 모델의 가중치(weight) 모델을 그대로 가져와 비교적 작은 데이터세트에 적용하여 사용하는 것을 말한다. 예들 들어 2014년 이미지넷 인식대회에서 옥스포드대학 연구팀VGG 가 개발한 모델로서 16개의 심층신경망 층(layer)이 사용된 VGG16 사전 훈련 모델을 사용한다고 하자. VGG16 사전 훈련 모델을 사용하면 2014년 이미지넷 인식대회에서 준우승을 차지한 성능의 가중치가 그대로 소규모 데이터세트를 다루는 심층신경망에 적용되어 VGG16 에서의 장점을 누릴 수 있다.

우선 Keras from keras.applications.vgg16 import VGG16 문을 선언해 줌으로써 VGG16 모델이 로드 되고 아래 그림 1과 같이 입력 shape 를 맞춰주고 모델을 로드하면 된다.


(그림 1. Keras 를 이용한 Pre-trained 모델 사용 예)


그동안 이미지 분류 분야는 이러한 전이 학습이 고성능으로 사전 훈련된 모델의 가중치모델을 가져다가 적용하여 발전할 수 있는 계기가 되어왔지만 자연어처리분야는 이러한 사전 훈련 모델이 부진했는데 이제 이런 사전 훈련 모델을 통해 상용화를 가속화할 수 있는 단계로 접어들었음을 의미한다.

AI 자연어처리의 발전

  자연어처리를 이해하는데 기초적으로 알아야하는 워드임베딩, skip gram 등의 기본적 지식을 30분을 투자해서 참을성 있게 들어 보실 분은 여기 를 눌러 50분 분량의 유튜브 초기 30분을 들어보자. 초보자들은 조금 어려울 수 있지만 더 알고 싶으면 이러한 단어들을 유튜브나 구글에 검색하면 적지 않은 정보를 얻을 수 있다.

AI를 이용한 자연어처리를 이해하기 위해 Word2vec, Skip Gram, RNN, Bi-LSTM, GRU 같은 선행 기술들을 알고 있으면 좋지만, 빠르게 진화하고 있는 기술은 어쩌면 과거와의 단절을 통해 패러다임을 변화하는 지도 모른다. 그 변화의 신호탄이 이 논문 이었고 이전의 recurrent neural network모델을 쓰지 않고 encoder-decoder 기반의 attention 만으로 이전의 문제점들을 극복해 낸다는 논문을 발표한다. 아래 그림2Transformer 의 구조이고 Bert Transformer 의 인코더-디코더 모델 중에 인코더 만을 사용한다

(그림2. Transformer 구조)


GPT-3 적용 예

  아래는 GPT-3 가 코로나19에 대해서 상대방과 대화를 나누는 내용이다. 신기한 것은 GPT-3 의 데이터세트가 201910월이어서 코로나를 모른다. 그러나 상황을 설명해주고 대화를 이어가면 할 수 있다. 아래 굵은 글씨가 GPT-3 가 생성한 결과이다

(그림 3. GPT-3의 코로나 관련 대화)


  미 버클리 대학생 리암 포어가 GPT-3를 사용해 작성한 블로그 게시물이 IT뉴스 큐레이팅 플랫폼인 해커뉴스에서 1위를 차지했다고 한다. 819일 뉴스.

(그림 4. GPT-3 가 생성한 뉴스)


Casetext 라는 법률회사는 소송이 있을 때, 미국의 관습법 전체를 훈련 받은 GPT-3 가 일반 문장으로 질의를 던졌을 때, 예를 들어, 같은 개념에 대하여 다른 언급이 있었던 결과를 찾고자 할 때 사용한다고 한다

(그림 5. Casetext 사의 GPT-3을 이용한 검색 창)


꽤 전문적인 의학 지식도 답을 할 수 있다. 아래 굵은 글씨가 GPT-3 가 생성한 결과이다

 (그림 6. GPT-3의 의학 관련 문제의 답)


  자 이제 GPT-3 가 시를 작성한 예를 보자. AI 로 시를 생성하는 결과를 실험을 하는 사이트에 있는 T.S. Eliot Hollow Man 이라는 시에 대한 GPT-3 가 생성한 시 에 대한 평가는 다음과 같다.

원작의 변형에 불과하다. 원작의 서정성과 음률이 없어 이 시의 영혼을 잃어버렸다. 아름다움은 비논리적인 영역으로 정보로서 코딩 될 수 없다. 대상에 대한 지향성의 경험은 컴퓨터 정보에는 획득될 수 없지만, 우리의 마음은 완벽하게 우리 자신들을 위해 코딩할 수 있다.

아래는 T.S Eliot 의 원작과 GPT-3 가 생성한 시를 비교해서 표시하였다. 오른쪽의 GPT-3 의 경우, 굵은 글씨로 표시한 원작의 4줄 정도를 GPT-3 에 알려주면 나머지 시를 GPT-3 가 생성하는 것을 볼 수 있다. 
      ( 1. T.S 엘리옷의 Hollow Man 원작 과 GPT-3 생성 본 비교)


결언


앞의 예에서 살펴본 데로, 무엇보다도 GPT-3의 장점은 영어로 되는 모든 작업에 적용할 수 있고 인공지능 전문 지식이 없어도 문자를 인공지능에 입력할 수만 있다면 처리 결과를 받아 볼 수 있다는 놀라운 범용성이다, 다양한 작업에 GPT-3 모델을 사용하기 위해 경사도 / 매개 변수 업데이트를 수행 할 필요가 없다고 한다. 무슨 말인가 하면, 작업 별 모델 아키텍처가 필요하지 않을 뿐만 아니라 대규모 사용자 지정 작업 별 데이터 집합 이 필요하지 않다는 개념이다. 이점은 최첨단 NLP 로 나아가는 큰 단계로 생각된다.

그러나 전작 GPT-2 가 소설 작성과 더불어 가짜 뉴스 생성의 이슈로 인해 모든 사람에게 개방하는 것에 조심스러운 입장인 OpenAI 의 입장을 생각하면, 누구나가 쉽게 접근할 수 있을지는 아직 모르겠다. OpenAI는 비영리법인인 OpenAI inc 와 영리법인인 OpenAI LP를 따로 가지고 있다. 아마도 영리법인을 통해 기업 고객들에게 서비스하지 않을 까 하는 관측이 나오고 있다.

한글이 전세계가 사용하는 영어에 비해 규모의 경제에서 열세인 상황에서 GPT-3 에 필적할 성능을 구가하는 언어 모델의 탄생을 기대할 수 있을까 하는 생각이 들었다. 점점 AI가 국가별 패권주의로 치닫는 환경에서 우리도 대비를 해야겠다.

복수의 GPU가 있다면 분산 훈련을 실행해보자

 4개의 GPU로 분산 훈련(Distributed Training)을 시행하면 1개의 GPU로 훈련하는 것보다 4배로 성능이 빨라질까?

  결론부터 이야기하면, 4배로 빨라진다. 물론 복수 기계 간의 네트워크 속도나 어떤 병렬 학습 전략을 채택 하느냐에 따라 차이가 있겠지만, 자체 테스트결과는 GPU 증가에 따라 이미지 분류의 경우 선형적으로 초당 이미지 처리 성능이 증가했다. 이 설명은 뒷부분에서 다루겠다.

처음 머신러닝 모델을 만들고 학습용 데이터로 하나의 서버에서 훈련을 실행할 경우에는 별다른 속도의 병목 현상을 느끼지 못할 수도 있지만, 딥러닝의 특성상 데이터와 모델이 커지면 피할 수 없이 직면하는 문제는 훈련 시간의 증가다. 만약 단일 서버에 4개의 GPU가 있다면, 4개모두의 GPU를 대상으로 병렬 훈련을 실행하면 그렇다, 훈련에 4시간이 소요되던 것이 1시간에 끝난다.  만약 3대의 서버에 각각 4개의 GPU가 장착되어 있다면 이 모두를 연결하여 12개의 GPU에 분산 훈련을 시행할 수 있다. 각각의  경우에, 적용할 수 있는 병렬 학습 전략을 고려해야 한다.


(그림1. 각각의 노드 상의 장치와 GPU)


훈련의 과정은 여러분들이 아시는 바와 같이, 먼저 모델이 학습데이터를 읽어서 1) 초기화한 weight와 모델이 feed forward 를 통해 예측한 값을 내고, 2) 예측 값과 실제 값의 차이로 나타나는 손실 함수, 3)  손실을 weight 로 편미분한 경사도(gradient)를 구하는 과정이 반복되어 결국 weight 가 변경되는 과정이다. 분산 훈련은 각 GPU 1개의 작업 프로세스(worker process)가 위치하여 각 GPU의 경사도 값을 서로 주고 받고 각자의 worker는 모아진 경사도(gradients)들의 평균을 이용하여 모델을 변경한다. 이처럼 worker 는 한번의 반복 마다 경사도를 모두 모아서 변경하므로 모든 worker 는 언제나 같은 파라미터(weight)를 갖는다. 이를 동기(synchronous)방식이라고 하며 비동기 방식도 있으나 설명은 생략한다.

MultiWorkerMirroredStrategy 도 있는데 이는 복수의 노드(서버)에 장착된 GPU를 대상으로 한다. 기본적으로 동기 방식의 MirroredStrategy 와 같은 방식이다. 다만 복수의 노드에 소속된 GPU에 데이터가 배치되고 각 GPU worker 에서 훈련된 경사도(gradient)로부터 계산 된weight all-reduce 방식으로 전체 GPU 가 모두 같은 weight를 갖도록 실행되는 점이 다르다.

(그림2. MultiWorkerMirroedStrategy 작동 방식)


텐서플로로 분산 훈련하기

  텐서플로우 가이드(https://www.tensorflow.org/guide/distributed_training)에 명시된 분산 훈련부분에는 tf.distributed.Strategy tf,keras tf.estimator 와 함께 사용할 수 있다고 설명하고 있다. 아울러 지원하는 5가지 분산 훈련 전략도 아래와 같이 설명하고 있다

(1. 분산 훈련 전략)


  TF2.0 베타 버전에서는 케라스와 함께 Mirrored Strategy를 사용할 수 있고 CentralStoreStrategy MultiWorkerMIrroedStrategy는 아직 실험 기능이므로 추후 바뀔 수 있다고 나와있다


동일 서버 내의 복수의 GPU를 통한 분산 훈련

  
이 경우는 텐서플로의 동기화방식인 MirroredStrategy를 사용하기위해 케라스의 경우 몇 줄의 코드를 기존 머신러닝 코드 위에 추가하면 된다.

예를 들면, 모델과 옵티마이저를 만들기 전에 with mirrored_strategy.scope() 를 정의한다 던지, 입력데이터를 각 GPU worker 에 배분하는 부분과  경사도 계산을 위한 정의 등이다. 케라스를 사용한 MNIST 사용 예는 https://www.tensorflow.org/tutorials/distribute/keras 를 참고하면 된다.


복수 서버 내의 복수의 GPU를 통한 분산 훈련

  앞에 살펴본 텐서플로 분산 훈련 tf.distributed.Strategy는 텐서플로 가이드에 따르면, TF2.0 베타 버전에서는 현재 API를 개선 중에 있다고 하지만, 케라스와 함께 MirroredStrategy만 지원하고 있는 상태이다. 복수의 기계에 장착된 복수의 GPU를 통한 분산 훈련을 시행하기 위해서 호로보드 방식을 적용해보았다. 호로보드는 우버(Uber)에서 분산 훈련으로 MPI 모델과 ring-allreduce worker 간 경사도 교환 방식을 사용한 복수 GPU를 장착한 복수 서버 간의 분산 훈련에 탁월하다.

호로보드(Horovod)를 통한 복수 서버 내의 복수의 GPU 분산 훈련

  호로보드는 리눅스재단 산하의 LF AI 재단이 주최하는 머신러닝 표준으로 특히 우버 내부에서는 MPI 모델이 훨씬 간단하고 텐서플로우보다 분산 훈련을 위해 휠씬 적은 코드 변경이 필요하고 속도도 빨라서 호로보드 방식을 사용한다고 한다. 우리 회사 자체적으로 엔디비아사의 고성능 AI연구용 시스템인 DGX-1(V100 8GPU), DGX-2(V100 16 GPU)를 대상으로 tf_cnn_benchmark 수행 시 이미지 처리량을 비교한 결과, 아래와 같이 GPU 노드가 증가함에 따라 이미지 처리 성능도 일정하게 증가하는 결과를 확인하였다. Infinity band 100GPS에서 복수의 노드(서버) 테스트 수행 시, 단일 노드(서버) 수행보다 단지 1.3% 감소한 이미지 처리량을 보였다.

(그림 3. DGX-1. DGX-2를 사용한 복수 노드, DGX-1 단일 노드 수행 시 이미지 처리량)


호로보드를 통하여 복수 서버상의 복수 GPU 대상으로 분산 훈련을 하기 위해서는 기존 프로그램에 import horovod.tensorflow as hvd 를 포함한 7~8 라인 정도의 프로그램의 코드 추가가 필요하다. 이러한 코드 추가에 대해서는 여기를 참조하면 된다

AI플랫폼 치타에서의 분산 훈련 

  치타에서 분산 훈련을 사용하기위해서는 우선 프로젝트관리에서 작업추가를 선택한 후에 분산 트레이닝 타입 선택을 통해 단일노드내의 분산 GPU (Distributed GPU)를 사용할 지, 복수 노드의 분산 GPU(Horovod)를 사용할 지를 선택한다. 당연한 얘기지만, Distributed GPU 를 선택하면 단일 노드에서 사용할 수 있는 최대 GPU 개수까지 할당이 가능하다

(그림 4. 치타의 단일 서버 내의 복수 GPU 분산 훈련 선택 화면)


만약 Horovod 를 선택했다면, 복수 노드에서 사용할 수 있는 최대 GPU 개수까지 할당이 가능하다

(그림 5. 치타의 복수 서버 내의 복수 GPU 분산 훈련 선택 화면)


 이 경우, 팀들이 그룹별로 GPU 를 공유하고 있는 상태에서 한 사용자가 복수 노드의 전체 GPU를 점유하여 분산 훈련을 하려는 시도 일 수 있기 때문에 프로젝트 관리의 스케쥴링 관리로 진입하여 잡스케쥴링을 등록하게 한다. 이를 통하여 전체 관련 팀원들이 언제 얼마만큼의 GPU 작업이 예약되어 있는지 알고 대비하게 한다. 이러한 잡스케쥴링 기능이 분산 훈련이 잘 끝났는지 여부도 모니터링 할 수 있도록 기능을 제공하고 있다.

 

결언

  단일 서버의 GPU 분산 훈련은 현재 시점에서 텐서플로우의 케라스API를 통해 분산 훈련이 가능하며 기존 프로그램에 3~4 라인의 프로그램을 추가 하면 된다. 이 상태에서 치타의 Distributed GPU의 작업관리에서 테스트 버튼을 누르는 것으로 아주 쉽게 실행을 할 수 있다.

복수 서버의 GPU 분산 훈련은 호로보드를 선택하고 위와 똑 같은 경로로 실행하면 된다. 기본 프로그램에 6 라인 정도의 호로보드를 위한 코드 추가만 하면 된다. 나머지는 치타가 알아서 분산 훈련을 처리해 준다.

초보자도 사용설명서를 보고 기존 프로그램에 이러한 코드를 추가하고 치타의 자동 분산 훈련 수행 기능을 사용해보자. 어렵게 느껴졌던 복수 서버의 분산 훈련을 몸소 체험해보자.


AI는 데이터가 늘어나면 성능이 증가하기만 할까?

 

쉽지 않은 AI 성능 최적화

  만약에 스마트폰에서 찍은 사진을 웹사이트에 전송하면 고양이 인지 아닌지를 머신러닝으로 판별해주는 프로젝트를 시작한다고 하자. 훈련 및 테스트 데이터는 웹사이트의 고양이 사진을 사용한다고 할 때, 실제 프로젝트의 성능은 기대에 못 미칠 확률이 높다. 사용자의 스마트폰에서 업로드 되는 사진은 웹사이트의 고양이 사진에 비해 조명이나 선명도, 해상도 등이 다르다, 이 경우에 성능을 높인다고 웹사이트의 고양이 사진을 다운로드 받아 만든 훈련 세트를 늘리면 성능은 높아질까


데이터, 모델의 크기와 성능과의 상관관계

일반적으로 심층신경망의 규모를 늘리거나, 데이터를 늘리는 방법이 알고리즘의 성능을 높이는 보다 신뢰할 수 있는 방법으로 거론되고 있다. 그러나 위와 같은 실제 프로젝트에서는 고려해야 할 사항이 좀 더 복잡하다.

이 경우, 훈련 데이터와 다르게 개발/테스트 세트 데이터로 분리하고 가능하면 동일한 분포 데이터에서 개발 및 테스트 세트를 취득하고, 이와 더불어 단일 측정 지표를 가지는 등의 일이 필요하다. 예를 들어 정확도 혹은 F1 score 같은 하나의 지표 말이다. 이 것을 가지고 분류기 A 와 분류기 B 의 개발 세트에서의 지표를 비교하며 경우의 수를 판별해야 0.1%의 성능 향상이 어디에서 언제 일어났는지 혹은 개발 테스트 세트에서 과대적합(overfitting) 이 일어났는지 등의 평가를 할 수 있다. 이와 더불어 주기적으로 테스트 세트 평가를 같이 병행하는 것이 필요하다.

편향 과 편차

만약 알고리즘의 성능이 훈련 세트 오류 1%(99% 정확도), 개발 세트 오류 11%(89% 정확도)라고 하자. 이 경우 편향(bias)1% 그리고 편차(variance)10%( = 11% - 1%) 이다. 즉 편향은 훈련 세트 알고리즘의 오류률이다. 이는 분류기가 훈련 세트에서는 매우 작은 오류를 갖지만, 개발 세트에 적용하기에는 오류가 높은 것이다. 즉 범용적으로 일반화 하기에는 부적합한 상태, 우리는 이것을 과대적합(ovefitting)이라고 부른다.

또 다른 예를 살펴보자.

만약 알고리즘의 성능이 훈련 세트 오류 15%(85% 정확도), 개발 세트 오류 16%(84% 정확도)라고 하자. 이 경우 앞에서 배운 바와 같이 편향(bias)15% 그리고 편차(variance)1%(= 16% - 15%)이다. 이 경우 분류기가 훈련 세트에는 15% 오류로 썩 좋지 않은 성능이고 개발 세트에서의 오류율은 훈련 세트 오류율보다 약간 높다. 이 분류기는 높은 편향과 낮은 편차 이다. 우리는 이 알고리즘이 과소적합(underfitting) 되었다고 한다.

이론적으로는, 편차(variance)는 대용량의 훈련 세트를 훈련함으로써 줄일 수 있다. 그리고 편향(bias)은 심층신경망의 층(layer)과 뉴론(unit)을 증가시키는 것과 같은 모델의 크기 증가를 통해 줄일 수 있다. 그러나 이는 또한 편차를 증가시켜 과대적합의 위험을 불러온다. 이런 경우, 잘 설계된 정규화(regularization) 방식을 사용하여 과대적합 문제를 피해가는 방법을 모색한다.


홈 그라운드와 호주 원정 경기

지금까지 살펴본 내용을 국가 대항 양궁 시합에 비유해 본다면 이럴 것 같다. 양궁 선수들이 실내체육관의 환경에서 과녁에 명중시키는 훈련을 10,000번의 활시위를 당겨 거의 과녁의 중심에 맞추게 되었다면 이는 국내 훈련 환경에 과대적합 되었다고 말할 수 있다. 원정 경기에서는 일정한 방향으로 바람이 불어 한국에서는 정가운데 명중하던 활시위가 호주 원정 경기장에서는 과녁의 우상향에 일정하게 몰려있다면 이는 피할 수 없는 편향이라고 볼 수 있다. 원정 경기장의 소음에 놀라 표적 위아래로 산발적으로 펼쳐서 활시위가 퍼져있다면 이는 국내 연습 대비 편차이다.  원정 경기의 상태가 바람이 심하게 불고 소음도 무척 심한 상태인 것에 대비해서 국내에서 훈련하면서 바람이 불어 대며 소음이 있는 환경을 만들어 훈련에 대비했다면 이는 테스트 세트 평가를 같이 병행하여 데이터 변화에 대비했다고도 볼 수 있다.

  비유가 적절했는지 모르지만, 불특정 다수의 사용자로부터 이미지 입력을 받는 것과 같은 상태의 프로젝트에서는 머신러닝 알고리즘이 훈련한 데이터와, 개발 및 테스트로 나뉜 데이터의 이질성을 염두에 두는 것과 같이 성능 최적화는 여러 변수를 염두에 두고 전략을 생각해 볼 필요가 있다는 점이다.


텐서보드(TensorBoard)
  

통상 모델을 개발하고 훈련 중간에 정확도와 손실률들을 출력하여 학습의 진행과정을 모니터하거나, matplot 시각화도구등을 통해서 정확도와 손실률을 훈련이 끝나고 난 후에 시각화하여 보곤 한다. 모델을 이해하고 디버깅 및 최적화를 돕기위해 시각화도구인 텐서보드(Tensorboard)가 제공됨을 알고 있을 것이다. Pytorch 를 사용하시는 분들은 Torch.utils.tensorboard 라이브러리를 사용하여 텐서보드를 사용할 수 있다.

주위에 보면 텐서보드를 잘 쓰는 분들도 있지만 노트북 프로그램안에 몇가지 추가하는 내용이 불편해서인지 사용하지 않는 분들도 많은 것 같다. 만약 훈련 손실률과 정확도 그리고 개발용 손실률과 정확도를 비교한다면 텐서보드가 무척 깔끔하게 처리된 시각화 화면을 제공한다. 즉 여러 시도들을 비교하여 epoch 증가에 따른 변화를 관측하기에 편리하다.

예를들어, 텐서플로우 2.0 버전이 지원되는 이미지/커널환경에서는 엔쓰리엔클라우드의 Cheetah Notebook Extension 을 이용하여 별도의 어려운 처리 과정없이 쥬피터 노트북내에서 바로 임포트하여 사용할 수 있다.


간편한 텐서보드 실행

  

텐서보드를 시작하기 위하여 쥬피터 노트북이나 랩에서 Cheetah Notebook Extension을 로드하고





만약 Keras 를 사용하는 프로그램의 경우 model compile 다음에 로그 지정 디렉토리와 tensorboard_callback 을 지정하고




model.fit 에서 callbacks=[tesorboard_callback]) 을 정의한다



그리고 아래와 같이 tensorboard 를 실행하면



화면에 텐서보드가 뜬다.