본문 바로가기

유니티 ML Agents/머신러닝과 강화학습 코딩

3. 텐서플로우 개념

구글에서 개발한 텐서플로우는 데이터 플로우 그래프를 사용하는 수치 연산용 오픈소스 소프트웨어 라이브러리이다.

텐서플로우는 개념적으로 인공신경망에 알맞게 설계되어 있다. 그렇다고 회귀분석과 분류분석과 같은 기본적인 머신러닝 기능을 지원하지 않는 것은 아니다. 하지만 텐서플로우에서 제공하는 아키텍쳐는 인공신경망 기반 알고리즘을 활용하기에 적합한 구조로 되어있다.


텐서플로우는 성능향상을 위해 GPU 사용을 지원한다. 컴퓨터에 장착된 CPU에는 많아야 8개 정도의 중앙처리장치가 있지만 게임용 GPU만 해도 수백 개 이상의 중앙처리장치가 있어 병렬처리에 유리하기 때문이다.


텐서플로우의 가장 큰 장점은 텐서 보드를 활용해서 학습 과정을 시각화할 수 있다는 것이다. 딥러닝에는 수많은 노드와 레이어를 사용되고 알고리즘마다 튜닝해야다는 다양한 하이퍼파라미터가 존재한다. 이러한 모든 것을 머릿속에서 개념적으로만 이해한다면 딥러닝 모델 설계에 많은 어려움이 있을 것이다. 텐서플로우에서는 텐서 보드를 제공해서 노드, 레이어, 하이퍼파라미터의 동작을 실시간으로 시각화 해서 모니터링할 수 있다.


텐서플로우 구성


텐서플로우는 크게 텐서(Tensor), 노드(Node), 엣지(Edge), 그래프(Graph) 그리고 세션(Session)으로 구성된다.


텐서는 동적 크기를 갖는 정형화된 다차원 배열이다. 텐서플로우에서 사용하는 모든 데이터는 텐서 구조로 표현된다. 텐서에는 플레이스홀더(Placeholder), 변수(Variables) 그리고 상수(Constants) 이렇게 3종류의 데이터 타입이 있다. 상수는 말 그대로 정수, 실수와 같은 상수를 저장하는데 사용한다. 변수는 프로그램 흐름에 따라 변화하는 데이터를 담는 저장 공간으로 사용된다. 플레이스홀더는 학습용 데이터를 담아 놓는 저장소와 같은 역할을 한다. 1000개의 데이터가 있을 때 학습 과정에서 데이터를 하나씩 꺼내 학습하고 결과를 확인하고 모델을 조정하게 가는데 중간에 학습 데이터를 저장하는 공간을 플레이스홀더 타입으로 지정한다.


그래프는 연산과 데이터에 대한 모든 정보를 가지고 있다. 그래프는 노드(Node)와 에지(Edge)로 구성되는데 노드는 수학적 연산, 입력과 출력의 위치 그리고 저장된 변수 읽기와 쓰기 기능을 담당한다. 에지는 입력과 출력으로 연결된 노드 사이의 관계를 표현하는 기능을 하며 텐서 운반의 통로가 된다.


세션은 그래프에 대한 감독을 책임지며, 그래프를 실행하기 위한 기본적인 인터페이스를 제공한다.