TEAMLAB

Human knowledge belongs to the world . -AntiTrust

KCC2018 정보과학회 - 이현주

KCC2018 정보과학회 후기

2018년 6월 20일부터 6월 22일까지 3일간 ICC JEJU(제주국제컨벤션센터) 에서 2018 한국컴퓨터종합학술대회(KCC 2018)이 열렸습니다. 많은 주제와 발표가 있었고, 제가 관심있는 분야나 재미있어 보이는 발표 주제를 체크하며 발표 세션에 참석하였습니다. 제가 듣고 싶었던 주제가 같은 시간에 다른 공간에 배정되어 듣지 못한 주제의 발표가 많아서 안타깝게도 듣지 못한 발표도 있었고, 세션장에 사람이 너무 많아 바닥에 앉거나 서서 듣기도 했으며 세션장 안으로 사람들이 들어오지 못하는 상황이 벌어지기도 했습니다. 그럼에도 불구하고 이번 학회에서 많은 포스터 및 발표 세션을 들으며 제가 좀 더 공부해야 할 내용 및 개념에 대해서 확인하고, 발표된 연구에서 사용한 방법에 대해서 나중에 적용해봐겠다고 아이디어를 얻을 수 있었던 유익한 시간이었습니다. 제가 들었던 여러 발표 중 중 인상깊게 들었던 두 개의 논문 발표에 대해서 소개드립니다.

노이즈 워드 임베딩을 통한 인공신경망 언어 모델과 기계 번역 모델의 성능 향상

언어 모델과 기계 번역 모델 등을 다루는 연구에서는 성능을 효율적으로 향상시키기 위해서 대부분 좋은 성능을 보이는 word embedding 을 이용하는데, 이 발표에서는 기존 word embedding 을 통하여 추출된 단어 벡터 값에 noise 를 더하여 더 좋은 Representation 을 갖도록 하는 방법을 제안합니다.

이 연구에서 제안하는 word embedding 에 noise 를 더하는 방법에 대해서 설명드리면

  1. 입력으로 주어진 문장(n개의 단어로 구성)을 word embedding 이 적용된 값(vector 형태)으로 변환힙니다.
  2. embedding 된 단어 매트릭스에 인위적으로 normal Distribution 으로 noise 를 생성한 다음에 더해줍니다. 기계 번역 모델은 Encoder - Decoder, Bidirectional RNN, Attention 을 함께 구성하여 설계되었고, 성능은 BLEU score 로 평가하였습니다. (이 때, normal distribution 에서 분산 값은 파라미터로 지정합니다.)

실험으로 데이터셋은 Penn Tree Bank 와 번역 데이터로 WMT’15를 사용하여, 영어 -> 핀란드어, 핀란드어 -> 영어로 번역하는 기계 번역 모델을 만들었습니다. 이 연구에서 말하고자 하는 바는 word embedding 을 그냥 사용하는 것보다 embedding 값에서 noise 를 추가하면 기계번역 모델에서 더 좋은 성능을 낼 수 있으며, noise 의 양은 여러 번의 실험을 통해 적절한 범위를 찾아야 한다는 것입니다.

실험에서 영어 -> 핀란드어로 기계번역하는 모델의 경우 noise 의 표준편차 값을 0.05 로 주는 것이, 핀란드어 -> 영어로 번역하는 모델의 경우에는 표준편차를 0.1 일 경우 더 좋은 결과를 냈습니다. 이 이유로는 의도적으로 추가한 noise 로 인해 다른 값에 간섭하지 않도록 해야 하기 때문이라고 합니다.그래서 이 발표에서 제시하는 방법으로 다른 데이터에 적용하여 모델을 만들고자 할 때에는 noise를 만들 때 어떤 표준편차 값이 우리의 데이터와 모델에 가장 적합한지 찾는 실험도 함께 필요합니다.

발표 후 ‘단순하게 기존 word embedding을 이용하여 추출된 값과 이 값에서 noise 추가한 값을 함께 데이터셋으로 사용해 보았는지?’ 라는 질문이 있었는데 발표자는 이 질문에 대한 실험을 해보지는 않았다고 합니다. 이 질문을 듣고 각 단어 벡터가 가지고 있는 범위를 해치지 않는 선에서 잘 noise를 조정한다면 데이터를 늘리는 효과도 있고, 데이터가 학습 데이터에만 치우치지 않도록 학습하는 효과를 함께 볼 수 있을 것 같다는 생각이 들었습니다.

다수의 딥러닝 프레임워크를 사용하는 환경에서의 도커를 활용한 이미지 분석 시스템 설계 및 성능 비교

딥러닝 개발자들은 딥러닝 프레임워크의 특징이나 개발자의 선호도나 기존 딥러닝 프레임워크를 통해 개발된 아키텍처의 존재 등 여러 이유로 프레임워크를 선택하는데, 딥러닝 프레임워크는 주로 GPU 를 사용하여 학습을 진행하기 때문에 GPU 라이브러리가 사용되어야만 합니다. 하지만 딥러닝 프레임워크 별로 GPU 라이브러리에 의존성을 가지는데, 이 문제는 동일한 프레임워크에서도 버전 별로 일어나기도 합니다. 그래서 이 발표에서는 Docker 를 사용하여 다수의 딥러닝 프레임워크를 사용하는 환경에서의 안정적인 학습 및 결과 계산을 위한 시스템을 제안합니다.

Docker 는 물리적으로 구성된 하나의 Host 컴퓨터 위에 다수의 논리적 시스템인 Container 를 실행하기 위한 가상화 기술 중 하나를 뜻하는데, 이 연구에서는 Docker 와 NVIDIA GPU 를 사용하기 위해서 NVIDIA Docker 두 가지를 모두 사용합니다.

이 연구에서 제안하는 시스템은

  1. 주 서버 컨테이너 : 외부의 네트워크와 연결되어 이미지 수신, 다른 컨테이너에 이미지 발신, 결과를 취합하는 웹서버
  2. 저장소 컨테이너 : 데이터베이스 및 이미지 저장용
  3. 분석 컨테이너 : 딥러닝 모델을 사용하여 이미지 분석, 주서버 컨테이너가 요청을 하면 저장소 컨테이너에서 데이터를 가져와 분석

등으로 구성되며 여러 컨테이너는 docker 에 가상의 network bridge로 연결됩니다.

Docker 로 구축된 시스템의 성능을 측정하기 위해서 모델은 VGG-19(연산의 양, 파라미터 수 많음) 와 Incetion-v3(연산의 양, 파라미터 수 적음), 데이터 셋은 CIFAR-10 을 사용합니다. 실험 결과, 전체적으로 컨테이너에서의 수행시간이 더 적었지만 Host 와 차이는 평균 1% 내외로 학습 및 인퍼런스에서의 속도 차이는 거의 없었다고 합니다.

제안한 시스템의 안정성과 성능을 평가하기 위해서 이미지 1000장을 순차적으로 입력하여 시스템을 실행해본 결과 어떠한 문제도 발견되지 않았고, 처리 속도 또한 이미지 인퍼런스 시간과 유사한 속도로 측정되었습니다. 제안된 방법을 사용할 경우 하나의 시스템에서 다수의 딥러닝 프레임워크를 실행할 수 있기 때문에 개발환경의 독립과 효율적인 GPU 자원 활용이 가능하다고 합니다.

이 발표를 들으면서 저는 다수의 개발자가 만든 각자 다른 기능의 딥러닝 모델로 하나의 서비스로 구축하고자 할 때 모든 개발자들이 사용하는 프레임워크나 패키지가 다를 수 있는데, 이 연구에서 제안하는 방법을 사용하면 여러 대의 머신을 두지 않아도 되기 때문에, 제한된 자원으로 효율적으로 서비스를 운영할 수 있을 것이라고 생각했습니다.