Pull Requests to Tomorrow Jamie Kang's weblog on computing

Neural Architecture Search with Reinforcement Learning

오늘 소개하려는 논문은 Google Brain에서 ICLR 2017에 발표한 “Neural Architecture Search with Reinforcement Learning”입니다.

이 논문은 Google의 AutoML에 대한 정보를 주는 논문이라고 할 수 있습니다. 즉, 딥러닝을 만드는 딥러닝에 대한 재미있는 내용입니다. 새로운 neural network을 설계하고 튜닝하는 것이 어려운데, 학습을 통해서 자동화할 수 있을까에 대한 첫 시도라는 점에서 의의가 있습니다.

Introduction

Figure 1

이 논문에서는 새로운 구조를 gradient 기반으로 찾는 Neural Architecture Search라는 방법을 제안합니다.

이 연구는 neural network의 structure와 connectivity를 가변 길이의 configuration string으로 지정한다는 관찰에서 시작됩니다. 예를 들어, Caffe에서는 아래와 같은 형태의 string을 사용해서 한 layer의 구조를 정해줍니다.

[“Filter Width: 5”, “Filter Height: 3”, “Num Filters: 24”]

String의 처리에는 RNN을 적용하는 것이 일반적이므로, 여기서도 RNN(“Controller”)을 사용해 그와 같은 configuration string을 generation하도록 합니다. 그렇게 만들어진 네트워크(“Child Network”)의 성능을 validation set에서 측정하고, 결과로 얻은 accuracy를 reinforcement learningreward로 사용해 Child Network의 parameter를 update합니다.

Methods

아래는 이 연구에서 사용한 방법을 한 장으로 요약한 그림입니다.

Slide 7 (그림 출처: 서기호 님의 슬라이드 “Neural Architecture Search with Reinforcement Learning”)

RNN으로 convolutional architecture를 만드는 단순한 방법부터 살펴보겠습니다. 이 RNN은 만들어진 architecture의 expected accuracy를 maximize하기 위해 policy gradient method로 training됩니다. 또한, skip connection (ResNet에서 사용한)으로 모델의 구조를 복잡하게 하고 parameter server를 도입해 분산 training의 속도를 높이는 시도에 대해서도 뒤에서 다시 설명 드리겠습니다.

Generate Model Descriptions with a Controller RNN

RNN Controller는 neural network의 hyperparameter들을 token sequence를 만들어내는 방식으로 생성합니다. 아래 그림에서, filter height, filter width, stride height, stride width, number of filters 등의 한 layer의 parameter를 생성하는 네트워크가 전체 layer 수 만큼 반복되는 구조인 것을 볼 수 있습니다.

Figure 2

Training with REINFORCE

이 논문에서 적용한 reinforcement learning 알고리즘은 Ronald J. Williams의 REINFORCE 입니다.

REINFORCE를 사용한 이유는 가장 간단하고 다른 방법들에 비해 튜닝하기 쉽기 때문이라고 합니다. 이 연구에서 하려는 실험의 스케일이 대단히 크다는 점을 감안한 것 같습니다.

사용한 loss function은 non-differentiable한 reward signal $R$을 사용해 아래의 첫 식과 같이 표현됩니다. Gradient인 아래의 두 번째 식은 계산의 편의와 너무 높은 variance를 줄이기 위해 전개를 거쳐 실제로는 마지막의 식으로 계산됩니다.

Eq. 1 Eq. 2

이 논문의 실험의 수백 개의 CPU 또는 GPU를 사용하기 때문에 분산 학습 구조를 사용합니다. 아래 그림과 같이, $S$개의 shard로 나눠진 parameter server에서 받아온 parameter에 따라 $K$개의 controller는 각각 $m$개 씩의 child architecture를 병렬로 실행합니다. 각 child의 accuracy는 기록되고 parameter server로 다시 전송됩니다.

Figure 3

Increase Architecture Complexity with Skip Connections and Other Layer Types

GoogleNet, Residual Net에서 사용한 skip connection 구조를 적용할 수 있도록, 아래 그림에 보는 것처럼 각 layer에 기준점이 되는 Anchor Point를 도입했습니다.

Figure 4

Generate Recurrent Cell Architectures

이번에는, LSTM과 유사한 RNN의 기본 연산 단위인 cell을 생성해봤습니다. RNN의 기본 cell은 input, output 뿐만 아니라 memory state로 구성되는데, 이 모델은 tree 형태로 일반화할 수 있습니다. 아래 그림은 왼쪽의 가장 간단한 형태의 tree 모델을 Neural Architecture Search를 거쳐 오른쪽의 기본적 unit들의 조합으로 만들어낸 예제입니다. 즉, LSTM이나 GRU와 같은 RNN의 cell을 이렇게 자동으로 만들어 내는 것이 가능합니다.

Figure 5

Experiments and Results

이 논문에서는 두 가지 실험 결과를 보여주고 있습니다. 하나는 CIFAR-10을 사용한 image classification이고, 다른 하나는 Penn Treebank를 사용한 language modeling 입니다.

Learning Convolutional Architectures for CIFAR-10

이 실험은 filter height, filter width, number of filters를 controller RNN이 찾는 문제입니다. 기본적인 search space는 convolutional architecture, ReLU, batch normalization, skip connection으로 구성되어 있습니다.

이 실험에서 controller RNN은 35개의 hidden unit으로 구성된 2계층의 LSTM 구조이고 ADAM optimizer를 사용했습니다. 분산 학습을 위해 무려 800개의 GPU ($S$:20, $K$:100, $m$:8)를 사용했다고 합니다.

아래 표의 실험 결과에서, 맨 아래 부분 Neural Architecture Search로 만든 구조들이 DenseNet을 비롯한 인간이 설계한 state-of-the-art에 근접하는 성능을 보이는 것을 볼 수 있습니다.

Table 1

위 표의 맨 아래 부분에서 “Neural Architecture Search v1 no stride or pooling”로 표시된 결과가 아래 그림과 같습니다. 이 구조는 15개의 layer만으로 구성되어 있지만 비교적 뛰어난 성능을 보이고 있습니다.

Figure 7

Learning Recurrent Cells for Penn Treebank

다음 실험은 language modeling task에 적용할 RNN cell을 생성하는 것입니다. 앞에서 보인 Figure 5에서 보인 것과 같이, [add, elem_mult] 등의 combination method와 [identity, tanh, sigmoid, relu] 등의 activation method를 조합해서 tree의 각 node를 표현하도록 합니다.

실험에는 400개의 CPU를 사용했고, 총 15,000개의 child network을 만들어 평가했다고 합니다. 실험 결과로 만들어진 RNN cell은 LSTM 대비 0.5 BLEU의 향상을 보였습니다.

아래 그림은 기본 LSTM과 이 실험의 결과로 만든 2가지 버전의 RNN cell을 보입니다.

Figure 8

지금까지 RNN을 사용해 neural network 구조를 만드는 Neural Architecture Search에 대해 설명 드렸습니다. 자동으로 neural network의 구조를 탐색하는 이런 연구가 향후 어떻게 발전해 나갈지 기대가 큽니다.

이 논문에서 사용한 코드는 GitHub TensorFlow Models 페이지에 공개될 예정이며, 앞에서 만든 RNN cell은 NASCell이라는 이름으로 TensorFlow API에 추가되었습니다.

Jamie;


References

You Only Look Once: Unified, Real-Time Object Detection

이번 논문은 2016년 CVPR에 발표된 “You Only Look Once: Unified, Real-Time Object Detection” 입니다.

Introduction

이 논문에서는 이미지의 bounding box를 실시간으로 검출할 수 있는 YOLO라는 새로운 네트워크 모델을 제안합니다.

YOLO는 object detection을 regression 문제로 접근하며, 별도의 region proposal을 위한 구조 없이 한 번에 전체 image로부터 어떤 object 들이 어디에 위치하고 있는지 예측할 수 있습니다.

YOLO는 초당 45 프레임, 단순화한 Fast YOLO는 초당 155 프레임을 처리할 정도로 매우 빠르지만, 정확도는 기존의 Faster R-CNN보다 약간 떨어지는 특성이 있습니다.

Slide 2

Unified Detection

기존의 Faster R-CNN을 비롯한 object detection 모델들은 Bounding Box (BBox)를 먼저 찾고 (region proposal), 각 BBox에 대해 classification을 하는 다단계 방식이었습니다.

하지만, YOLO는 모든 class에 대한 모든 BBox를 동시에 예측하기 때문에 매우 빠르고 global reasoning이 가능합니다.

Figure 1

  • 입력 이미지는 $448 \times 448$의 해상도를 가집니다.
  • 각 이미지마다 출력은 $S \times S \times \left(B \times 5 + C \right)$ 개의 값으로 이뤄집니다.
  • $S$는 grid size (default: 7)입니다. 각 이미지는 $S \times S$개의 cell로 나눠집니다.
  • $B$는 각 cell 마다 테스트되는 Bounding Box (BB)의 개수이며 기본 값은 2입니다.
  • 모델은 각 BB마다 위치 (x, y)와 크기 (height, width), 그리고 confidence value를 예측합니다.
  • confidence value는 grid cell에 물체가 없으면 0, 있으면 예측된 BB와 실제 BB 사이의 IoU 값이 됩니다.
  • $c$는 dataset의 class 개수로, Pascal VOC에서는 20이 됩니다.

Figure 2

Network Design

이 논문에서 사용한 neural network (YOLO) 는 Google이 ImageNet Large-Scale Visual Recognition Challenge 2014 (ILSVRC 2014)에서 사용했던 GoogLeNet 을 변형한 구조입니다. 이 네트워크는 24개의 convolutional layer와 2개의 fully connected layer로 구성되어 있습니다. $1 \times 1$ reduction layer를 여러 번 적용한 것이 특징입니다.

Figure 3

이 논문에서 사용한 또 하나의 neural network인 Fast YOLO는 9개의 convolutional layer와 더 적은 수의 filter만을 사용해 속도를 더 높이고 있습니다. 기타 training과 testing을 위한 파라미터는 YOLO와 동일합니다.

Linear activation function으로는 leaky ReLU ($\alpha = 0.1$)를 사용했습니다. Loss function은 기본적으로 sum-of-squared-error 개념이지만, object가 존재하는 grid cell과 object가 존재하지 않는 grid cell 각각에 대해 coordinates ($x$, $y$, $w$, $h$), confidence score, conditional class probability의 loss를 계산하기 때문에 아래와 같이 복잡한 식이 됩니다.

Eq 3

Training

이 논문의 실험에서 training은 먼저 ImageNet으로 pretraining을 하고 다음에 Pascal VOC에서 finetuning하는 2단계 방식으로 진행됐습니다. 학습에는 앞의 20개의 convolutional layer만을 사용했고 (feature extractor), 마지막 4개의 convolutional layer와 2개의 fully connected layer를 추가해서 (object classifier) 실제 object detection에 사용할 system을 구성합니다.

한 가지 특이한 점은, 저자들이 자신들이 직접 만든 Darknet이라는 framework를 사용했다는 점입니다.

Pascal VOC를 사용한 training에는 135번의 epoch, batch size 64, momentum 0.9, decay 0.0005, dropout rate 0.5를 각각 적용했습니다. Learning rate은 $10^{-3}$, $10^{-2}$, $10^{-3}$, $10^{-4}$으로 epoch에 따라 바꿔가며 사용했습니다.

Inference

이 논문에서 불필요한 중복 BBox들을 제거하기 위해 Non-maximal suppression이라는 개념이 중요하게 사용됩니다. Non-maximal suppression을 포함해 전체 YOLO 시스템의 동작은 Deepsystem.io슬라이드와 아래 동영상에 가장 잘 설명되어 있습니다.



Limitations of YOLO

YOLO가 사용하는 grid cell은 2개까지의 BBox와 1개의 class만을 예측할 수 있기 때문에 그에 따른 약점을 가지고 있습니다. 예를 들어 새 떼와 같이 작은 object들의 그룹이나 특이한 종횡비의 BBox는 잘 검출하지 못한다고 합니다.

Comparison to Other Detection Systems

현재까지 발표된 다양한 object detection system과 비교한 실험 결과가 아래 표에 정리되어 있습니다. Fast YOLO는 155 fps로 가장 빠른 처리 성능을 보이고 있고, 표준 YOLO는 Fast YOLO보다 약간 느리면서 한편, 정확성을 나타내는 mAP 값이 Faster R-CNN과 유사한 수준을 보이고 있습니다.

Table 1

아래 그림은 Pascal VOC 2007에서 Fast R-CNN과 YOLO의 error를 분석한 것입니다. Fast R-CNN의 error는 background 영역에서 대부분 발생하는 한편, YOLO의 error는 localization에서 대부분 일어나는 것을 알 수 있습니다.

Figure 4

이와 같은 서로의 단점을 보완하기 위해, 두 모델을 함께 사용한 실험에서는 mAP 값이 71.8%에서 75.0%로 대폭 향상되었습니다.

Table 2

아래의 VOC 2012 테스트 표를 보면, 정확도 측면에서 Fast R-CNN과 YOLO의 조합은 최상위권에 위치하고 있는 것을 볼 수 있습니다.

Table 3

실제 환경은 dataset과 다를 수 있으므로, 다른 distribution을 가지는 환경에 이 모델이 얼마나 잘 일반화하는지 알아보기 위해 이 논문에서는 artwork (Picasso, People-Art) dataset에서 실험을 했습니다.

정확도가 크게 감소하는 다른 object detection system과는 달리, YOLO는 높은 AP 값을 보이면서 다양한 BBox들을 검출할 수 있었습니다.

Figure 5

Figure 6

지금까지 unified object detection 모델인 YOLO에 대해 소개 드렸습니다. YOLO는 이후 YOLOv2로 발전되어 정확도가 대폭 향상되었습니다. 이 논문에 대해서는 추후 다른 posting에서 다시 설명 드리겠습니다.

Jamie;


References

Convolutional Neural Networks for Sentence Classification

이번 논문은 2014년 EMNLP에 발표된 “Convolutional Neural Networks for Sentence Classification”입니다.

이 논문은 문장 수준의 classification 문제에 word vector와 CNN을 도입한 연구를 다루고 있습니다.

Introduction

이 논문을 이해하기 위해서는 Word EmbeddingWord2vec에 대한 사전 지식이 필요합니다.

Word Embedding

Word embedding은 NLP (Natural Language Processing, 자연어 처리) 분야에서 컴퓨터가 인식할 수 있도록 수치적인 방법으로 단어를 표현하는 방법입니다. 초기의 NLP는 one-hot encoding을 많이 사용했는데, 간단하고 적용하기 쉬웠지만 단어들 간의 관계를 표현할 수 없는 한계가 있었습니다.

Word2vec

단어 자체의 의미를 multi-dimensional vector로 표시하기 위한 연구는 1980년대부터 있었다고 합니다. 하지만 2000년대 들어 NNLM (Neural Network based Language Model)과 RNNLM (Recurrent NNLM)을 거쳐 2013년 Google이 발표한 Word2vec이 현재 가장 state-of-the-art 기술로 각광받고 있습니다. Word2vec의 학습 결과를 시각화해보면 아래 그림처럼 벡터들의 방향과 단어들의 의미가 연관성이 있는 것을 확인할 수 있습니다.

Word2vec (그림 출처: TensorFlow의 word2vec tutorial)

Model

이 논문에서 사용한 아키텍처 모델은 Collobert의 JLMR 2011 논문 “Natural Language Processing (almost) from Scratch”에서 사용한 CNN 모델에 기반한 구조입니다 (아래 그림).

Figure 1

이 그림에서 $n$은 문장에 나오는 단어의 개수, $k$는 word vector의 dimension, $h$는 filter window size를 의미합니다. 길이 $n$의 문장은 word vector 를 연결해 아래 (1)식과 같이 표현됩니다.

이 때, $\oplus$는 concatenation 연산자를 의미합니다. Convolution 연산은 윈도우 크기 $h$ 단위로 이뤄지며, filter의 weight $\mathbf{w}$에 대해 feature $c_i$는 아래 식과 같이 계산됩니다.

위 식에서 $b$는 bias, $f$는 non-linear (ReLU) 함수입니다. 모든 word window 에 필터를 적용해 아래 (3)식과 같이 feature map을 계산합니다.

여기에 max-pooling 연산을 거쳐 얻은 최대 값을 fully-connected layer에 집어 넣습니다. Fully-connected layer에는 dropout을 적용하고 마지막 단에서 softmax 출력을 얻습니다.

이 논문의 실험에서는 staticnon-static 두 가지 채널을 구분하고 있습니다. Word vector가 training 중에 변하지 않는 것이 static 채널이고, word vector를 backpropagation을 통해 fine-tune하는 것이 non-static 채널입니다.

Dataset과 실험 환경

실험에서 사용한 hyper-parameter들과 training 조건은 아래와 같습니다.

  • convolution layer: 1 layer with ReLU
  • filter window size ($h$): 3, 4, 5 with 100 feature maps each (total 300)
  • regularization: dropout (rate 0.5), $L_2$ norm constraint
  • mini batch size: 50
  • SGD with Adadelta

실험에는 word2vec의 pre-trained embedding을 가져와 사용했습니다. word2vec은 Google News의 1000억 개 단어로 훈련된 vector입니다.

또한, 실험에서는 4가지의 변형된 CNN 모델을 사용했습니다.

  • CNN-rand: word2vec을 사용하지 않고 모든 단어를 random 초기화
  • CNN-static: word2vec으로 pre-train, 모든 word vector를 static하게 유지.
  • CNN-non-static: word2vec으로 pre-train, word vector를 학습하며 fine-tune.
  • CNN-multichannel: static 채널과 non-static 채널 모두 사용

실험 결과

아래 그림은 실험 결과를 요약한 테이블입니다.

Table 5

간단히 정리하면 다음과 같습니다.

  • CNN-rand: word2vec 없이는 성능이 그다지 좋지 않다.
  • CNN-static: word2vec 덕분에 성능이 많이 개선되었다.
  • CNN-non-static: fine-tuning이 도움이 되기는 하지만 큰 개선은 아니다.
  • CNN-multichannel: static 채널과 non-static 채널 모두 사용해도 큰 차이는 없다.

이 밖에, 실험 결과에서 다음과 같은 관찰을 할 수 있었습니다.

  • Dropout이 regularizer로써 잘 동작하며 2~4%의 개선 효과가 있었다.
  • word2vec에 없는 단어의 경우 초기화가 중요하다: variance를 pre-trained와 동일하게 하면 성능 향상
  • 어떤 word vector를 사용하는 지도 중요하다: word2vec이 다른 word vector보다 훨씬 성능이 뛰어났다.
  • Adadelta는 Adagrad와 비슷한 결과를 내지만 더 적은 수의 epoch로 충분했다.

비록 실험 모델이 단순하고 결과에 대한 깊은 분석이 부족한 감이 있지만, 이 논문은 NLP에 CNN을 적용했을 때 모델이 단순하더라도 word2vec으로 pre-training하면 높은 성능을 낼 수 있음을 보였다는 점에서 의미가 있다고 하겠습니다.

Jamie;


References

On Human Motion Prediction Using Recurrent Neural Networks

이번 논문은 2017년 CVPR에서 발표될 예정인 “On Human Motion Prediction Using Recurrent Neural Networks”입니다.

이 논문은 RNN을 써서 1초 미만의 human motion을 예측할 때, 단순한 모델을 사용하더라도 state-of-the-art 수준의 성능을 낼 수 있는 3가지 개선 방안을 제시합니다.

Motion forecasting (Motion prediction) 문제는 인간의 과거의 동작으로부터 가까운 미래의 가장 가능성이 높은 3D 자세(pose)를 예측하는 것입니다.

전통적으로 이 분야의 연구는 Markov 모델에 기반한 것이었는데, 비교적 최근인 2015년부터 RNN을 활용하는 연구들이 등장했습니다. 이 논문에서는 특히 K. Fragkiadaki의 CVPR 2015 논문 “Recurrent Network Models for Human Dynamics”과 A. Jain의 CVPR 2016 논문 “Structural-RNN: Deep Learning on Spatio-Temporal Graphs”를 언급하고 있습니다.

K. Fragkiadaki의 “Recurrent Network Models for Human Dynamics”

  • LSTM-3LR: joint angle들의 sequence를 받아 sequence를 출력하기 위해 3계층의 LSTM 네트워크를 사용.
  • ERD (Encoder-Recurrent-Decoder): Motion data를 raw input 그대로 사용하지 않고 encoder를 거친 feature를 input으로 사용.
  • Error가 축적되므로 training할 때도 noise를 점점 늘림 (noise scheduling).
  • short-term prediction에서는 LSTM-3LR이 제일 잘함.

A. Jain의 “Structural-RNN: Deep Learning on Spatio-Temporal Graphs”

  • 움직임이 비슷한 팔끼리, 다리끼리 따로 네트워크를 구성.
  • aperiodic한 움직임은 잘 예측하지 못함.

Evaluation Criteria

이들 최근 연구의 performance validation 방법은 두 가지입니다.

(1) quantitative prediction error

  • 단기 (short-term) 예측
  • mean-squared loss로 측정 (angle-space)

(2) qualitative motion synthesis

  • 장기 (long-term) 예측
  • 적당한 (feasible) motion 생성

하지만 최근의 연구들은 (1)(2)의 관점에서 성능이 만족스럽지 않았습니다.

Problems

이 논문에서는 최근 연구들의 문제를 크게 네 가지로 들고 있습니다.

First frame discontinuity

  • 기존 연구에서는 ground truth와 첫 번째 prediction된 frame 사이에 큰 차이(discontinuity)가 발생합니다(아래 그림).

Figure 1

Hyper-parameter tuning

  • 특히 Noise scheduling이 어렵습니다. Noise scheduling은 test time에 점점 noise가 커질 것에 대비해서 training time에도 점점 더 큰 noise를 주고 학습시키는 것입니다 (일종의 curriculum learning).

Depth and complexity of the models

  • Depth가 깊고 복잡한 모델은 training이 어렵습니다.

Action-specific networks

  • 기존 연구에서는 특정한 작은 action에 특화된 training을 해왔는데, 반면 deep learning은 다양한 dataset을 사용하는 것이 성능이 좋은 것으로 알려져 있습니다.

바로 다음에 말씀드리겠지만, 요약하자면 이 논문은 문제들을 이렇게 해결합니다.

  • First frame discontinuity: residual architecture로 개선.
  • Hyper-parameter tuning: 명시적 noise scheduling이 필요 없는 architecture
  • Depth and complexity of the models: simple한 model 사용.
  • Action-specific networks: 특정 action에 무관하게 전체 data로 training

Solutions

이 논문에서는 해결 방안으로 네 가지 아이디어를 제시합니다.

Sequence-to-sequence architecture

  • machine translation과 유사한 형태의 seq2seq 아키텍처를 사용.

Sampling-based loss

  • 기존에는 training의 각 time-step에서 ground-truth를 입력으로 집어 넣었지만, 대신 prediction한 결과를 입력으로 넣는 구조를 사용 (sampling-based loss).
  • Prediction에 의한 noise가 반영되므로 별도의 noise scheduling이 필요 없어짐.
  • 아래 그림에서 green 색 모형은 ground truth, blue 색 모형은 prediction을 의미하며, decoder 출력 값이 다음 step의 입력으로 들어가는 것을 확인할 수 있음.

Figure 2

Residual architecture

  • RNN cell의 input과 output 사이에 residual connection을 연결.
  • 위의 그림의 decoder 부분에서 residual connection을 볼 수 있음.

Multi-action models

  • Action specific한 모델을 여러 개 만들지 않고, 여러 action을 prediction하는 하나의 모델을 만들어 전체 dataset으로 training함.

Experimental Setup

이 논문에서는 실험에서 다음의 세 가지를 확인하고자 합니다.

  1. Seq2seq architecture and sampling-based loss: ground-truth 대신 prediction을 decoder의 입력으로 넣는 효과 확인
  2. Residual architecture: residual connection의 효과 확인
  3. Multi-action models: 여러 action을 데이터 전체로 training하는 효과 확인

실험에서 dataset으로는 Human 3.6M을 사용했고, 구현에는 1024개의 GRU (Gated Recurrent Unit)를 사용했습니다. 또한, 마지막 frame에서 움직이지 않는 경우(zero-velocity)를 baseline으로 함께 실험해 비교대상으로 삼았습니다.

Results

아래 그림은 ERD, LSTM-3LR, SRNN과 함께 zero-velocity와 이 논문에서 제안하는 Residual sup. (MA)의 결과를 보입니다. Figure 3

실험 결과에서 몇 가지 알 수 있는 사실을 정리했습니다.

  • 제안하는 검은 색 Residual sup. (MA) 라인이 가장 좋은 성능을 보임.
  • 의외로 회색 zero-velocity baseline의 성능이 매우 높음.
  • Sampling-based loss의 효과로, noise scheduling이 필요 없으며 뛰어난 short-term motion prediction error와 plausible한 long-term motion generation을 달성.
  • Residual connection으로 성능 향상.
  • single action data를 사용하는 것보다 모든 action data를 사용하는 것이 효과적임 (data quality < data quantity).
  • RNN으로 aperiodic motion의 모델링은 어려움.

아래의 동영상은 저자가 공개한 비교 실험 결과입니다.


이 논문은 400ms ~ 1s 수준의 매우 짧은 시간에 대한 prediction을 하는 점이 한계라고 볼 수 있습니다. 즉, 시간이 짧기 때문에 RNN으로 어느 정도 prediction이 가능한 것으로 보입니다. 그 이상의 시간에 대해서는 전혀 다른 차원의 접근 방법이 필요할 것 같군요.

Jamie;


References

Domain-Adversarial Training of Neural Networks

이번 논문은 2016년 JMLR에서 발표된 “Domain-Adversarial Training of Neural Networks”입니다.

이 논문은 training time과 test time의 data distribution이 다른 경우, domain adaptation을 효과적으로 할 수 있는 새로운 접근 방법을 제시합니다.

Domain Adaptation

Domain Adaptation (DA)은 training distribution과 test distribution 간에 차이가 있을 때 classifier 또는 predictor의 학습 문제를 다루는 연구 분야입니다. 즉, source (training time)과 target (test time) 사이의 mapping을 통해 source domain에서 학습한 classifier가 target domain에서도 효과적으로 동작하는 것을 목표로 합니다. DA는 아래 그림에서 보는 것처럼 Transfer Learning에 속하며, source domain에서만 labeled data가 존재하는 경우를 다룹니다.

Taxonomy

DA의 이론적 배경은 2006년 S. Ben-David의 논문 “Analysis of Representations for Domain Adaptation”에 기반하고 있습니다.

이 논문에서 풀려고 하는 문제는, input space $X$에서 가능한 label의 집합인 로의 classification task입니다. 이 때 source domaintarget domain을 각각 $\mathcal{D}_S$와 $\mathcal{D}_T$로 정의합니다.

이 논문에서 제안하는 알고리즘의 목표는 target domain 의 label에 대한 정보가 없더라도 target risk $R_{\mathcal{D}_T}(\eta)$가 낮도록 classifier 를 만드는 것입니다.

먼저, 두 도메인 간의 거리는 아래 식과 같이 $\mathcal{H}$-divergence로 계산할 수 있습니다.

여기서 $\mathcal{H}$가 symmetric하다고 가정하면 empirical $\mathcal{H}$-divergence는 아래 식과 같이 계산됩니다.

그런데, 일반적으로 이 값을 정확하게 계산하는 것이 어렵기 때문에 아래의 식으로 근사하고 Proxy A Distance (PAD)라고 부릅니다. 이후 이 논문의 실험들에서는 이 PAD 값을 사용합니다.

여기서 $\epsilon$은 classification error입니다. 즉, sample의 출처가 source domain인지 target domain인지 classifier가 정확히 구분할 수 있으면 $\epsilon = 0$ 입니다.

S. Ben-David의 논문에서 target risk $R_{\mathcal{D}_T}(\eta)$의 upper bound를 아래 식과 같이 계산했습니다.

복잡해 보이지만, 요약하자면 결국 target risk 을 줄이려면 source risk 와 domain 간의 distance $\hat{d}_{\mathcal{H}}(S,T)$를 모두 줄여야 하는 것을 알 수 있습니다.

Domain-Adversarial Neural Networks (DANN)

앞의 수식들의 의미를 정리하면 이렇습니다. 도메인이 달라지더라도 충분히 일반화할 수 있도록 모델을 학습하려면, source domain에서의 classifier 성능을 높이면서 한편 domain을 구분하는 성능은 낮아지게 훈련해야한다는 것입니다.

즉, 다른 말로 하면 label classifier의 loss를 minimize하면서 동시에 domain classifier의 loss를 maximize하도록 optimize하는 문제를 푸는 것이 되기 때문에 이 논문에서 adversarial이라고 표현하고 있습니다.

이 논문에서 제안하는 DANN의 구조는 다음과 같습니다.

Figure 1

그림은 크게 green 색의 feature extractorblue 색의 label predictor, red 색의 domain classifier로 구성되어 있습니다. 앞에서 설명한 것처럼 domain을 구분하는 성능을 낮추기 위해 추가된 부분이 domain classifier인데, 앞 단의 feature extractorgradient reversal layer (black)를 통해 연결되는 것을 볼 수 있습니다.

일반적인 neural network에서는 backpropagation을 통해 prediction loss를 줄이는 방향으로 gradient를 계산하는데, DANN에서는 domain classifier가 prediction을 더 못하게 하려는 것이 목적이므로 gradient reversal layer에서 negative constant를 곱해 부호를 바꿔 전달하는 것입니다.

아래는 더 보기 편하게 정리된 유재준 님의 그림입니다. Architecture 2 (그림 출처: 유재준 님의 슬라이드 “Domain-Adversarial Training of Neural Networks”)

이 구조를 간단한 SGD로 구현한 알고리즘은 다음과 같습니다.

Algorithm 1

GRAAL-Research의 GitHub “GRAAL-Research/domain_adversarial_neural_network”와 유재준 님의 GitHub “jaejun-yoo/shallow-DANN-two-moon-dataset”에 각각 pythonMATLAB으로 구현된 코드가 있으니 참고하시기 바랍니다.

Experiments

이 논문에서는 앞에서 보인 알고리즘을 inter-twinning moons 2D problem라고 하는 초승달 모양의 distribution을 가지는 dataset에 적용하고 그 결과를 보입니다.

아래 그림에서 red 색의 upper moon이 source distribution의 label 1이고, green 색의 lower moon이 source distribution의 label 0입니다. black 색의 target distribution은 source distribution을 35도 회전시키고 label을 제거해서 만들었습니다.

Figure 2

위 그림의 첫 번째 “Label Classification” 컬럼을 보면, (a) 일반 NN의 경우 target sample (특히 D 부분)을 완전히 분리하고 있지 못하지만 (b) DANN은 훨씬 잘 분리하고 있는 것을 볼 수 있습니다.

또한, 위 그림의 세 번째 “Domain Classification” 컬럼을 보면, (a) 일반 NN의 경우도 source와 target을 잘 분리하지 못하지만 (b) DANN은 훨씬 더 구분하지 못하는(이 논문에서 원하는 대로) 것을 확인할 수 있습니다.

다음은 MNIST와 SVHN 데이터셋을 사용한 실험 결과를 보여주는 그림입니다.

Figure 5

그림에서 blue 색은 source domain의 example이고, red 색의 target domain의 example을 보여줍니다. (a) DA를 거치기 전에는 두 색깔이 분리되어 있는 반면, (b) 거친 후에는 분리되지 않고 잘 섞여 있는 것을 확인할 수 있습니다.

Jamie;


References