Curaai00's Deep Learning Blog

CAM, Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

딥러닝/시각화
Grad-CAM

Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

기본적으로 Deep Neural Network는 black box이다. network가 output을 어떻게 만들었는지 모른다. 그래서 우리는 통계적인 방법을 이용하여 분석을 한다. 예를들어 precision, recall, acucracy, confidence, loss 등등 다양한 meausre를 통해 결과를 분석하고 네트워크의 문제점을 알아낸다.

하지만 결과를 바탕으로 네트워크가 어떻게 판단을 하는지 추정은 할수 있지만, 우리는 정확히 네트워크의 forwarding 과정을 알지 못한다. 그것을 해결하기 위한 분야가 visualization 이다.

Class Activation Mapping

classification에서 사용하는 visualzing method이다. CNN은 low level의 feature에서는 edge나 color등등 단순한 특징을 학습한다. 하지만 high level에 가까워 질수록 물체를 인식한다. 일반적으로 마지막 conv feature에는 어떠한 물체를 인식하여 디테일한 spatial information을 가지고 있다. 하지만 fully-connected layer를 거치며 정보가 사라진다.

위의 문제를 해결하기 위해 output layer 전의 conv layer에서 fully-connected layer를 global average pooling을 실행한 후에 사용한다. global average pooling을 하면 무엇을 activation한 각각의 channel의 정보량을 압축한다.

network를 통과한 feature $f_k(x, y)$는 $k$번째 unit의 $(x, y)$ spatial location의 activation을 나타낸다. $k$번째 unit에 대한 global average pooling의 결과는 $F_k = \sum_{x, y} f_k(x, y)$이다. class $c$에 대한 softmax의 input은 $S_c = \sum_k w^c_k F_k$이다. 이때 weight $w^c_k$는 class $c$에 대한 가중치로 대응된다. 즉 $w^c_k$는 class $c$에 대한 $F_k$의 중요도를 나타낸다고 다시 말할수 있다. 최종적으로 softmax의 output $P_c$는 $\frac{exp(S_c)}{\sum_c exp(S_c)}$로 구한다. 이때 bias term은 무시한다.

class activation mapping을 하는 방법은 각 feature map에 대해 class $c$에 대한 중요도 $w^c_k$를 곱해준다.

class $c$에 대한 Class Activation Map $M_c$는 Eqn (1)로 표현된다.


Grad-CAM

CAM은 좋은 성능을 보여줬지만, deep neural network는 CNN classification model만 있는 것이 아니다. CNN + RNN, object detection, face recognition 등등 cnn이 wide하게 사용된다. 하지만 CAM은 가중치 $w^c_k$를 softmax와 연결된 fully-connected에서 왔지만, 일반적인 CNN은 fully connected를 사용하지 않는 경우가 많다. 이때는 CAM을 사용하지 못한다. 또한 classification model에서도 마지막 fully connected layer를 교체하여 재학습 해야한다. CAM은 general 하게 사용할 수 없다.

그 해결방안이 Grad-CAM이다. Deep Learning을 이용한 neural network는 한가지 공통점이 있다. 바로 gradient이다. 모든 neural network는 gradient를 back propagation해서 학습을 하기 때문에, 이 공통적인 gradient를 visualizing하고 싶은 Layer의 feature에 가중치로서 사용한다.

weight $\alpha ^c_k$는 neuron importance를 나타낸다. 여기에 $k$번째 unit의 feature map $A^k$와 $\alpha ^c_k$를 weighted combination한뒤, gradient이다 보니 다른 class에 대한 gradient가 포함될수 있는데, 이때 positive한 gradient는 class $c$이고, negative gradient는 다른 class이므로, ReLU 연산을 통해 class $c$에 대한 Gradient-Class Activation Map 을 만든다.

수식으로 표현하자면 Eqn (3)과 같다.


Guided Back Propagation은 positive gradient만을 visualizing 한 것이다.Grad-CAM은 feature 사이즈 이므로 bilinear interpolation을 사용하여 source image로 resize한다.

위의 그림은 Visual Question Answering에서 사용한 Grad-CAM이다.

Temperature Scaling, Calibration: On Calibration of Modern Neural Networks

딥러닝/이미지 인식
temp

딥러닝을 사용한 분류 문제에서는 흔히들 softmax를 사용해 가장 큰 값(probability)이 나온 것을 해당 class라 판단하고 그때의 확률 값을 confidence로 사용한다. confidence가 낮게 나오면, 해당 data에 대해 model이 학습이 더 필요하거나, 잘못 됐다고 해석할 수 있다. 가장 높은 confidence의 class를 predict class로 선정하듯 confidence는 모델을 해석하는데 아주 유용하게 쓰인다.

Annotation

classification neural network $h$는 input $ x \in X$, $K$개의 class를 가진 label $y \in Y = {1, \dots, K}$에 대해 $h(x) = (\hat y, \hat p)$, class prediction $\hat y$ 와 $\hat y$에 해당하는 probability confidence $\hat p$ 를 예측한다. confidence $\hat p$에 대해 설명하자면, model이 100개를 predict하고, confidence가 전부 0.8일 경우 80개가 맞게 분류되었을 것이라고 예상 할 수 있다. 하지만 confidence에 대해 확실한 measure를 원한다.

한정된 sample에서 1을 $M$개의 bin으로 나눈다. $m$번째 bin에는 $I_m = (\frac{m-1}{M}, \frac{m}{M}]$ 에 해당하는 prediction result index가 들어가 있다. 이때 $m$번째 bin의 accuracy와 confidence는 다음과 같다.

  • $m$번째 bin의 $accuracy$는 label과 prediction 같은 경우 / bin의 size이다
  • $m$번째 bin의 $confidence$는 bin의 prediction confidence의 평균이다.

$acc(B_m) = conf(B_m)$인 경우를 well/perpectly calibrated라 한다.

Calibration Error

calibration이 얼마나 잘 되었는지를 ECE(Expected Calibration Error), MCE(Maximum Calibration Error)로 측정한다.

첫번째로 ECE는 accuracy와 confidence의 distribution의 차이를 측정한다. $n$은 총 sample 개수이며, 각 bin의 차이값을 gap라고 부른다.

두번째는 MCE이다. MCE는 bin중에서 가장 큰 gap을 측정한다. gap이 high-risk한 경우에 사용하는 measure이다.

Modern Neural Networks are Mis-Calibrated

deep neural network는 많은 곳에서 사용된다. 옛날에 비해 성능도 많이 상향됐으며, model 또한 deep & wide해졌다. 하지만 model이 커진 만큼 classification error는 감소하였지만, mis-calibrate됐다.


LeNet과 달리 ResNet은 gap이 크다. ResNet의 accuracy, avg confidence line을 봤을 때 우리가 일반적으로 생각하던 confidence 0.5 threshold가 실제로는 안전하지 않을수도 있다. 또한 모델의 mis-calibration에 영향을 주는 요인이 model의 크기에만 있는 것이 아니다. Depth, Width, Batch norm, Weight decay 등 여러 요소가 model의 mis-calibration에 영향을 준다.


training progress에서 test error와 loss를 분석한 그래프이다. epoch 250에서 learning rate가 10배 줄어들며, error와 loss가 함께 줄어들었다. epoch이 300이 넘어서기 시작하면서 NLL이 overfitting을 하기 시작한다. network는 well-modeled probability를 희생하여 classification accuracy를 높이기 위해 학습한다(classification accuracy overfitting).

Temperature Scaling

classification accuracy overfitting, mis-calibration을 해결하기 위해 'temperature scaling'이라는 calibration method를 사용한다. 이를 사용하기 위해선 validation set이 필요하다.

temperature scaling은 모든 class에 대해 single scalar parameter $T$를 logit vector $z_i$에 나눠주는 방법이다.

$\hat q_i$는 calibrated probability이다. $T$가 무한대로 발산할수록 $\hat q_i$는 1/K에 근사한다. T가 0에 근사할 수록 $\hat q_i$은 1에 가까워질 것이다. $T$는 validation set에서 NLL으로 학습한다. 이 방법의 장점은 parameter $T$는 softmax output의 최대값을 바꾸지 않는다. 기존의 model의 accuracy에 영향을 주지 않는다. 그래서 이미 학습되어 있는 model에 사용할 수도 있다.

Experiment


첫번째 그래프는 mis-calibration된 CIFAR-100 Dataset 원래의 ResNet-110 model이다. 2번째는 temperature scaling을 사용한 ResNet이다. 3, 4번째 그래프는 다른 calibration method를 적용한 것으로서 temperature scaling이 가장 좋은 성능을 보여주고 있다.

Attention, RNNsearch: Neural Machine Translation by Jointly Learning to Align and Translate

딥러닝/기계 번역
Attention

Neural Machine Translation by Jointly Learning to Align and Translate

Attention Mechanism이 처음으로 소개된 논문이다. 논문 내에서는 attention보다 soft-alignment라는 용어를 더 사용한다. 기계번역에 attention을 이용하여 network가 alignment을 학습한다. 기존의 기계번역에서 사용한 알고리즘, 딥러닝 모델보다 더 좋은 성능을 냈다.

용어 정리

시작하기전, 이 포스트와 논문에서 사용하는 용어들을 정리하겠다.

  • Soft-alignment(attention): source word => target에 대한 정보를 스스로 alignment를 학습하여 사람이 직접 알려주지 않는 방법이다.

  • Hard-alignment: source sentence의 word를 target sentence의 word로 사람이 직접 지정해준다. Ex)'I am hungry.', '나는 배고프다.'를 I=>나, am => 는, hungry => 배고프다

  • context vector c: 문장의 의미를 담고있는 fixed length vector이다.

  • Annotation: Encoder의 hidden state를 annotation이라고 부른다. 수식에선 Encoder의 hidden state를 h로 표현한다.

  • hidden state: t번째 input에 대한 정보를 담고 있는 vector이다. 아무런 얘기 없이 hidden state라고 나와있을 경우 Decoder의 hidden state를 말하는 것이다. 수식에서는 Decoder의 hidden state를 s로 표현한다.

  • source sentence $ x^T $, target sentence $ y^T $: 길이가 T인 input, target sequence이다. 여기서 sequence는 word vector의 sequence를 말한다. $T_x$는 x의 길이, $T_y$는 y의 길이이다. $ \boldsymbol{x} = (x_1, \cdots, x_{T_x}) $

기존의 방법들

딥러닝을 이용한 기계번역은 x가 주어졌을 때, Neural Network(Model)로 conditional probability를 최대화 하는 y를 찾는 것이다. Model은 Encoder-Decoder 방식에 base를 두고 있는데, RNN, LSTM, GRU를 네트워크로서 사용한다. RNN을 사용할 경우 아래의 이점을 얻을 수 있다.

  1. input & output length에 제한이 없다.
  2. sequential한 data에 대해 순서(alignment)를 학습할 수 있다. 단어를 번역하여 문장을 번역하는 것이 아니라, 문장 전체를 읽고, 의미를 파악하여 다른언어로 변환한다.
  3. 예외 상황에 강하다 => dictionary을 이용한 알고리즘은 dictionary 외의 단어나 입력이 들어오면 정확도가 떨어지지만, 딥러닝의 경우 Dataset의 분포가 다양하다면 작은 예외 상황에 대해서는 유연하다.

Basic RNN Encoder-Decoder는 다음 수식으로 정의한다.

$$ \begin{align} h_t = f(x_t, h_{t-1}) \label{eq:1} \tag{1} \\ c = q(\{h_1, \cdots, h_{T_x}\}) \label{eq:2} \tag 2 \\ p(y_t | \{ y_1, \cdots, y_{t-1}\}, c) = g(y_{t-1}, s_t, c) \label{eq:3} \tag 3 \\ p(\boldsymbol y) = \prod_{t=1}^T p(y_t | \{ y_1, \cdots, y_{t-1}\}, c) \label{eq:4} \tag 4 \\ \end{align} $$

(1),(2)는 Encoder이고, (3),(4)는 Decoder이다.

  1. nonlinear function인 LSTM을 f로 사용하여, 이전 annotations와 input으로 현재 annotation을 구한다.
  2. Annotations sequence(각각의 annotation $h_t$는 $x_t$의 정보를 가지고 있기 때문에 정보가 encoding된 sequence라고 봐도 무방하다.)는 q함수로 fixed length vector c로 생성된다. 여기서는 $h_T$가 c이다.
  3. (문장의 의미를 담고 있는 c, 이전에 예측한 단어 $y_{t-1}$, 현재의 hidden state)을 입력으로 하여 다음으로 올 단어의 확률을 예측한다.
  4. T까지 예측을 하면 한 문장에 대한 기계번역이 완료된다.

h는 x와 $h_{t-1}$로 구할 수 있고, c는 encoder에서 나온 hidden state sequence에서 생성된다. 이전의 방식은 LSTM을 f로 사용하고, q($h_1$ ~ $h_T$)는 $h_T$로 사용했다.

decoder는 Multi-layer인 g로 (이전의 예측한 단어, 현재 hidden state, c)를 입력으로 하여 다음단어의 확률을 예측한다. 1부터 T까지의 단어를 에측하면 한 문장이 되는 것이다.

Attention, Learning to Align

Encoder

x의 각 단어들을 다른 언어로 바꾸는 과정에서 여러 단어를 하나로 포현할 수도 있고, 하나를 여러 단어로 표현할 수도 있다. 또한 앞뒤 문맥상 단어의 의미가 변질될 수 있다. RNN을 통과한 x인 annotation이 각 단어의 의미를 나타내는 것 뿐만아니라, 앞뒤 근처의 단어들까지 요약한 정보를 가지고 있어야한다. 이점을 Bidirectional RNN을 통해 forward RNN, backward RNN으로 해결한다. 그래서 Encoder의 output은  자세한 것은 Bidirectional RNN을 참고하길 바란다. $h_j = \left \lbrack \overrightarrow{h^{\intercal}_j} ; \overleftarrow{h^{\intercal}_j}\right \rbrack$

Decoder

우리의 목표는 soft-alignment로 Decoder가 번역을 좀더 잘하도록 하는 것이다. 그래서 현재 annotation_t가 y_t와 얼마나 연관이 있는지 알려줘야한다. 사람의 손 없이 말이다.

$$ \begin{align} e_{ij} = v_a^\intercal \ tanh(W_a s_{i-1} \ + \ U_a h_j) \label{eq:5} \tag 5 \\ e_{ij} = a(s_{i-1}, h_j) \label{eq:6} \tag 6 \\ \alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{T_x} exp(e_{ik})} \label{eq:7} \tag 7\\ c_i = \sum_{j=1}^{T_X} \alpha _{ij}h_j \label{eq:8} \tag 8 \\ s_i = f(s_{i-1}, y_{i-1}, c_i) \tag 9 \\ v_a \in \mathbb R^{n'}, W_a \in \mathbb R^{n' \times n}, U_a \in \mathbb R^{n' \times 2n} \end{align} $$

annotation $h_j$의 중요도를 반영하는 energy e는 n' size의 matrix v, W, U로 만들어진다. 이 matrix도 학습이 가능하기 때문에 현재 annotation을 y에 대해 네트워크(matrix)로 soft-alignemt를 줄 수 있다. e는 softmax로 확률값으로 바뀌게 되어 각 annotation이랑 합쳐져 context vector c가 만들어진다. 임의로 attention을 만들어본다면

'나는 라면을 먹는다.' => 'I eat ramen' 일때, ramen을 예측한다면,

context vector c = 0.1(alpha) * ([나는]의 hidden state) + 0.7(alpha) * ([라면을]의 hidden state) + 0.2(alpha) * ([먹는다]의 hidden state)

과 같이 나타낼 수 있다.

결과

논문 저자들은 English-to-French 번역으로 모델을 측정하였다. ACL WMT14를 사용했고 BLEU라는 predict setence가 target sentence와 얼마나 같은지를 나타내는 성능측정지표이다.

기존의 모델인 RNN Encoder-Decoder(RNNencdec)과 논문에서 새롭게 제시한 모델인 RNNsearch를 비교하였다. 학습할 때 sentence의 word length에 제한을 두어 학습했다. (RNNencdec-30/50, RNNsearch-30/50)

모델

RNNencdec, RNNsearch 모두 Encoder와 Decoder의 hidden units(hidden state)이 각각 1000개씩 이다. target word에 대한 conditional probability를 계산하기 위해 두 모델 모두 single maxout hidden layer를 사용했다.

Adadelta로 minibatch는 80sentence로 학습시켰다고 한다.

분석

attention, soft-alignment의 장점은

  1. 사람의 word2word labelling이 필요없다.

  2. matrix이기 때문에 네트워크로서 학습할 수 있다.(모델의 component로서 추가적인 처리가 필요없음, gradient를 공유함)

  3. 언어모델에 대해 적합한 특성을 가지고 있다.

    Soft-alignment가 hard-alignment와 다르게 좋은점은, 언어는 유연하다는 점 때문이다. 예를들어 한국어와 영어를 예를 들어보자면 "My grandfather have dinner."이 문장하나를 한국어로 바꿔보면

    • "할아버지가 저녁을 먹는다"
    • "할아버지께서 저녁을 먹는다"
    • "할아버지가 저녁을 드신다"
    • "할아버지가 밥을 먹는다"
    • "할아버지가 진지를 드신다"
    • "우리 할아버지가 저녁을 먹는다"

    등 언어별로 문법이나 번역 형태가 다르다. network는 예외 상황에 대해 스스로 학습한다. 또한 x와 y의 길이가 달라 hard alignment가 불가능해도 soft-alignment는 가능하다.

이 3가지 정도가 있다.

그림은 attention(annotation weight alpha_ij)을 visualization한 것이다(0: black, 1:white). x축은 source sentence(English)이고 y축은 예측번 번역 문장이다(French). 보다시피 matrices의 diagonal이 대부분 강한 weight를 띄고 있다.

(a)는 문장의 attention을 visualization한 것이다. (b),(c),(d)는 test set에서 sample로 뽑힌 setences이다.

YOLO v1: You Only Look Once

딥러닝/Object Detection
YOLOv1

YOLO v1: You Only Look Once

yolo는 한때 ssd, faster r cnn과 함께 object detection에 대표적으로 사용되던 모델이다. object detection이란 이미지에서 물체(object)를 인식하여 해당 물체를 찾아 사각형으로 크기, 위치를 표현하는 것이다(detection). 이는 여러 분야에 사용할 수 있다. 예를들어

  • 카메라 앱에서 사람의 손과 얼굴을 인식
  • 자율주행 자동차에서 도로의 자동차와 자전거, 사람, 신호등 등을 인식
  • 방범 cctv에서 사람을 인식

등등 다양한 분야에 사용된다.

Unified Detection

기존의 object detection 네트워크들은 하나의 모델이 아니라 여러 부분들이 합쳐져서 전체 시스템을 만들었었다. roi(region of interest, 물체라고 인식한 영역/box)를 추출하는 부분 따로, feature를 추출하여 detection하고 분류하는 부분이 따로 되어있는 경우도 있다.

yolo는 네트워크를 통과한 feature를 S * S 개의 사각형(grid)으로 분할한다. 이 사각형은 grid cell이라고 부르는데, 이 grid는 물체를 찾고, 인식(분류)하는 역할을 가지고 있다.


  • 각 grid cell은 B개의 bounding box와 box안의 object를 예측한다.
  • 각 bounding box는 (x, y, w, h, confidence)로 구성되어 있다. x, y는 box의 중심좌표를 나타내고 w, h는 전체 이미지에 비한 너비와 높이를 나타낸다. 이 confidence score는 해당 box에 object가 있는지를 나타낸다. 이는 Pr(object) * IOU로 정의할 수 있는데, Pr(object)는 물체가 있을 확률, IOU(Intersection over union)는 예측한 box와 실제 object가 있는 box가 얼마나 같은지를 나타낸다.
  • 또한 각 grid cell은 C개의 conditional class probabilities, Pr(class_i | object)를 이용하여 object중에서도 어떤 class의 object가 존재하는지 예측한다.
  • YOLO를 Pascal VOC로 검증할때에는 S =7, B=2, C = 20으로 7 * 7 * 30 개의 tensor를 예측했다.


위 그림과 같이 (S(7), S(7), 5 * B(2) + C(20))의 shape를 가진다.

Network Design

network 구조는 GoogLeNet에서 영감을 받아 24 conv layer, 2 fully connected layer를 사용했다. Inception module을 사용하는 것 대신에 3 x 3 conv 뒤에 따라오는 1 x 1 reduction conv layer를 추가했다.


Training

fully connected layer전의 conv layer 20개를 미리 ImageNet 1000-class dataset으로 pretrain 시켰다. final layer는 class probabilities 와 bounding box coordinates 둘다를 예측한다. bounding box의 너비와 높이를 0 ~ 1 사이로 normalize 한다. x,y좌표 grid cell 안에서 0~1사이의 값을 가져 파라미터화? 했다.

bounding box coordinates 예측이 box가 object를 포함하지 않는 것을 막기위해 λcoord , λnoobj를 파라미터화 시켜 안정성을 더욱더 강화시켰다. 일반적으로 예측하는 box에는 object가 없는 경우가 많아 네트워크가 obj가 없는 background class를 찾는 것이 object를 찾는 것보다 더 효율적이라고 판단했기 때문이다.

yolo는 여러개의 box를 예측하기 때문에 한 object에 여러 box가 반응하는 경우가 있다. 이때는 box중 가장 높은 IOU를 가진 box를 사용한다.

Loss Function

1^obj_ij 는 obj가 존재하는 i번째 grid cell에 j번째 bounding box를 나타내고, noobj는 obj가 존재하지 않는 경우를 말한다.

위에서 부터 차례로 식 1, 2, 3, 4, 5 이라고 할때

  • 1과 2는 각 box에 대한 loss이다. 하지만 2에서는 w와 h에 square root를 사용했다. 그 이유는 sum-squared errorsms box의 크기에 상관 없이 동일한 weight를 가진다. 작은 box보다 큰 box에서 적은 편차를 가지는데 loss가 이를 반영하여 w와 h를 직접적으로 사용하는 것보다 squared root가 더 좋은 결과를 낸다.
  • 3에서는 confidence score에 대한 loss이다.
  • 4에서는 object가 없는 box에 대하여 loss를 구하였다. 추가적으로 no obj 파라미터를 사용하였다.
  • 5에서는 cell에서의 class를 predict한 loss를 구하였다.


GRU: Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

딥러닝/자연어처리
[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

기존의 Statistical Machine Translation은 통계와 확률 기반으로 문장을 번역했습니다. 하지만 Deep Learning을 도입하였더니 더 좋은 성능을 보이기 시작했습니다. RNN을 이용한 새로운 방식의 Translation을 선보이고 더욱더 간편한 RNN hidden cell 구조를 선보였습니다.

RNN Encoder-Decoder

새로운 Encoder-Decoder 방식의 RNN은 variable-length input sequence를 encode하여 고정된 길이의 vector로 표현하여 다시 variable-length output sequence로 decode합니다. 이때 vector c는 각각의 단어 혹은 문장의 의미를 가지고 있다고 할수 있겠죠. Decoder는 vector c에서 번역할 언어로 decoding 하며 재표현한다고 볼수 있습니다.


Encoder는 x_1 부터 x_t까지 읽으며 RNN cell을 업데이트하고 RNN의 hidden state는 summary c가 됩니다.

Decoder는 input sequence의 context를 담고 있는 c와 이전의 hidden state, y를 이용하여 hidden state를 다음과 같이 업데이트 합니다.

또한 Decoder는 이전의 y값들과 context c, 현재 hidden state를 이용하여 t번째 y 값의 확률을 예측(softmax)합니다.

RNN Encoder-Decoder는 합쳐져 conditional log-likelihood를 최대화하는 Network로 표현될수 있습니다. n번째 x에 대해 n번째 y를 최대로 하는 확률을 maximize 하는 network Θ를 찾는 것입니다.

이 RNN 아키텍쳐를 두가지 방법으로 사용할 수 있습니다.

  • 하나는 input sequence로 target sequence를 생산하는 것입니다.
  • 또 하나는 input과 output sequence를 줬을 때 모델이 한쌍에 대한 score를 얻을 수 있습니다. (4)의 x에 대한 y의 확률을 이용해서 말입니다.

Gated Recurrent Unit



GRU는 reset gate와 update gate가 있습니다. sigma 기호는 sigmoid function을 나타내고, phi 기호는 tanh function을 나타냅니다. 그리고 W와 U는 weight matrices입니다. x는 input, h는 hidden state를 나타냅니다.

  • reset gate는 수식 (5)로 계산되며, 이전의 hidden state가 무시될지 결정합니다.

  • update gate는 수식 (6)으로 계산되며, hidden state가 h^hat으로 update될지 결정합니다.

  • reset gate가 0에 가까워질수록 hidden state가 이전 hidden state를 무시하도록 하며, 현재의 input만을 reset하도록 합니다. update gate는 이전의 hidden state의 정보가 현재의 hidden state까지 전달되도록 조종합니다.

Statistical Machine Translation

우리의 목적은 original source e를 줬을 떄 번역 f를 찾는 것입니다. 식으로 표현한다면 다음과 같겠죠. 즉 source로 번역(target)을 찾을 확률과 source가 target으로 완전히 번역되는 확률을 비례하려합니다.

이를 log 선형 모델로 나타낼수 있습니다. f_n과 w_n은 n번째 feature와 weight입니다.

Z(e)는 w에 의존하지 않는 normalization 상수입니다. w는 BLEU score를 최적화하기 위해 종종 최적화됩니다. log p(e | f)는 source와 target에 매칭되는 구(phrase)를 맞추는 확률들로 분해될 수 있습니다. 이 확률이 추가적인 feature로 표현된다면 (9)와 같습니다.

RNN Encoder-Decoder를 학습할때에는 corpus(말뭉치?)에서 각 구(phrase) pair가 얼마나 자주 나오는지에 대해서는 무시합니다.

  1. large phrase frequency table(큰 구 빈도 테이블)에서 일반화된 빈도수의 phrase pair를 선택하여 연산량을 막기 위함입니다.
  2. RNN Encoder-Decoder가 phrase pair의 translation probability가 이미 phrase fair의 빈도수를 반영하고 있기 때문에 쉽게 학습되지 않기 때문입니다.


ResNet: Identity Mappings in Deep Residual Networks

딥러닝/이미지 인식

ResNet Identity Mappings in Deep Residual Networks

ResNet: Identity Mappings in Deep Residual Networks


Residual Unit에서 사용되는 Identity Mapping이 단순히 더하는 연산일 뿐인데 왜 잘 작동하고, 오히려 기존의 것들 보다 더 좋은 성능이 나오는지 알아보려고 합니다.

Residual Function

ResNet은 여러 "Residual Unit"이 쌓여있습니다. 이를 수식으로 표현한다면 F는 residual function, h(x)는 Identity mapping, W는 해당 l번째 layer의 Weight, f는 ReLU function입니다.



그리고 저희는 이러한 Residual Unit의 residual function + identity mapping 방식을 shortcut connection, skip connection라고 부릅니다.

이 shortcut connection의 ReLU는 아무 영향을 미치지 않고, h(x)는 identity function이기 때문에



과 같이 바꿔 쓸수 있습니다. 하지만 이것을 재귀적으로 바꿔쓴다면 (2)와 같이 쓸수 있겠죠



그래서 L번째 unit은 l번째 unit으로 표현할 수 있습니다.(L > l)


Pre-Activation

h(x)인 identity mapping과 f: relu나 batch norm 같은 activation은 기존의 방식에서는 layer(weight)를 거친 후에 적용하였지만, 연구를 하던 도중 다양한 identity mapping을 시도하던 중 post-activation보다 pre-activation이 더 좋은 성능을 나온 다는 것을 알아냈습니다.



Why Identity Mapping

근데 여기서 왜 Identity Mapping이 필요한가 생각할 수 있습니다. Residual Unit은 전파 정보를 직접적으로 전달하는데 집중합니다. h(x)나 f(x)같은 identity mapping이 포워드 패스(forward pass, 네트워크의 input을 end로 전파시키는 것)와 역전파시 한 Unit에서 다른 Unit으로 전달하도록 합니다!

Back Propagation

E(Epsilon)을 loss function으로 나타냈을 때, chain rule에 의한 역전파시 다음과 같은 식을 얻을 수 있습니다. gradient는 두가지 항으로 나눌 수 있습니다. 첫번째 항은 다른 어떤 weight layer의 방해 없이 정보를 직접적으로 전파할 수 있습니다. 두번째 항은 weight layer를 거쳐 전파를 하게 됩니다.

또한 (4)는 mini batch의 모든 sample이 두번째 항을 -1로 만들경우는 거의 없기 때문에 gradient가 0이 돼 취소돼지 않습니다.

Several types of Skip Connection

일반적인 skip connection이 아닌 여러 버전의 skip connection을 시도하였습니다.



여러가지 skip connection 방식을 시도해봤지만 역시 original skip connection이 정확도가 가장 높았습니다.


Domain Transfer Network: Unsupervised Cross-Domain Image Generation

딥러닝/GAN
Domain Transfer Network Unsupervised Cross-Domain Image Generation

Domain Transfer Network: Unsupervised Cross-Domain Image Generation

요즘 Deep Learning이 여러 분야에 사용되고 있는데, Deep Learning을 이용한 여러 사용사례에서 학습을 실제 환경의 데이터가 아닌, web 혹은 정제돼있는 데이터를 가지고 학습을 한다음 학습한 것을 실제 환경에 그대로 사용하였더니 정확도도 떨어지고 위험도가 너무 높았습니다. 그런 것을 방지하기 위해 다른 도메인에 적용할 수 있도록 하는 것을 Transfer Learning이라고 합니다.

이 Domain Transfer Network는 두 도메인(비슷하고 본질적으로는 같은 의미를 가짐, Source domain S & Target domain T) S, T를 학습하여 S의 이미지를 T의 이미지로 바꿉니다.

Domain Transfer Network


DTN(Domain Transfer Network)는 다음과 같은 구조를 가지고 있습니다. 보시다시피 일반적인 GAN에 base를 두고있는데, basic GAN과 다른점은 바로 function f와 g입니다. f와 g가 Generator G를 구성하고 있습니다. (G == g*f)

Function f & g

함수 f는 S, T의 feature를 만드는 부분입니다. 이게 무슨말이냐 하면 위 그림의 남자와 G를 통과한 후의 남자는 본질적으로 같은 사람이란 것입니다. 물론 domain(하나는 real, 하나는 emoji)은 다릅니다만. 이 남자를 james라 한다면 실제 james(S)도, emoji의 모습을 한 james(T)도 사실은 똑같은 james란 말입니다. 그래서 funciton f는 그 james라는 사람의 특성(브라운 색 머리카락, 하얀색 피부, 선명한 눈과 눈썹 등)을, 사람을 feature로 압축해내는 함수입니다.

function g는 그 압축된 feature, f(x)를 다시 T의 이미지로서 재변환시키는 함수입니다.

D Loss

D는 각각의 의미를 가진 세가지 loss가 합쳐져 있습니다.

  1. D1은 S에서 sampling한 x가 G를 거치며 T같은 이미지를 만들어내는 것을 D가 잘 구별하느냐를 나타냅니다.
  2. D2는 보기에는 진짜 이미지(Target domain의 이미지)를 G에 넣은 바보처럼 보이지만, f가 어떠한 이미지를 잘 feature화 시키느냐, g는 그 feature를 잘 target domain의 이미지처럼 만들어내는가를 나타냅니다. 심지어 Target domain의 이미지 x가 들어와도 말이죠!
  3. D3는 진짜 이미지 x를 넣었을 때 진짜 이미지인지 잘구별하느냐를 나타냅니다.

G Loss

G도 기존의 basic GAN의 G처럼 D를 이용하여 학습을 진행합니다.

 

  1. 첫번쨰 항은 S에서 sampling된 x가 G를 통하여 T의 이미지처럼 보이도록 만듭니다.
  2. 두번쨰 항은 T에서 sampling된 x가 G를 통하였어도 여전히 진짜 이미지처럼 보이도록 만듭니다.

Consistency Loss

Const Loss에서는 G의 f를 통해서도 여전히 같은가? 같은 feature, 같은 의미, 같은 것, 불변성을 가지고 있는가를 distance 함수를 통해 측정하고 요구합니다.

그래서 S에서 sampling된 x를 f(x), f(G(x))의 두 feature 사이의 거리를 측정하여 최적화합니다.

Identity Loss

Consistency Loss 처럼 같은 feature를 나타내는가 + Target Domain 이미지를 성공적으로 만들어 내는가를 다음과 같은 Loss를 통해 distance를 측정하고 최적화합니다.

TV Loss

TV Loss는 anisotropic total variation loss로서 이미지를 조금더 부드럽고 자연스럽게 만들어 준다고 합니다. G가 만들어낸 이미지 G(x)를 z라고 합니다.

논문의 저자들은 B를 1로 했다고 하네요.

위 Loss들은 L_D와 L_G = L_GANG + alpha * L_CONST + beta * L_TID + gamma * L_TV로 이루어져 있으며 alpha, beta, gamma는 parameter입니다. distance loss들은 여러가지 loss(MSE, Hinge, cosine, triplet)들을 실험했었는데, MSE가 가장 smiple하고 좋았다고 합니다.

Experiment

DTN은 두가지 실험을 하였는데 하나는 SVHN에서 MNIST, 다른 하나는 real face에서 emoji face로 domain을 transfer 하였습니다.



왼쪽그림은 real face에서 emoji face로 transfer, 오른쪽 그림은 SVHN에서 MNIST로 transfer한 것입니다.


Compare


다른 Domain Adaptation Method를 비교해보니 DTN이 더 좋은 성능을 나타냈습니다.

Limitation

DTN이 만능처럼 보여도 두가지 문제점이 있습니다.

  1. 두 도메인이 비슷해야 한다. 도메인이 완전히 다르거나 의미자체가 틀리다면 transfer는 당연히 안되겠죠?
  2. source domain이 더 많은 feature, 의미, data를 가지고 있어야한다. source에서 더 많은 feature를 가지고 있어야 변환하기도 쉽고, target domain의 feature가 복잡하다면 source의 부족한 feature를 가지고 transfer하기가 어려울 것입니다.

References

 Arxiv 논문: https://arxiv.org/abs/1611.02200

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

딥러닝/이미지 인식
AlexNet ImageNet Classification wtih Deep Convolutional Neural Networks

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

2012년에 쓰여진 논문으로서 그때 작은 크기의 Dataset에서는 Deep Neural Network가 좋은 성능을 보였지만, 실제 Real world에 적용하기에는 무리가 있었습니다. 그래서 큰 Dataset(ImageNet, 15m images&22k labels)를 가지고 이를 적용하고자 하였습니다.

Dataset

ImageNet을 만들기위해 Web에서 이미지를 모으고, 사람들이Amazon’s Mechanical Turk crowd-sourcing tool을 이용해 labeling 작업을 하였습니다. 이렇게 만들어진 ImageNet Dataset으로 Real world의 문제를 해결하기 위해서 두가지 대회를 열었습니다. 바로 PASCAL VOCILSVRC입니다.



ReLU

실제 인간의 뇌처럼 신경망을 구성한다면 활성화 함수는 tanh, sigmoid가 되어야 하는데, 왜 ReLU가 성능이 좋을까요? 그 이유는 ReLU가 non-saturation하기 때문입니다. 그래서 이때 non-saturation이 무엇일까요?

saturation

sigmoid, tanh 함수는 어떠한 값이 들어와도 -1~1, 혹은 0~1 사이의 값을 배출합니다. 그렇다면 큰 값이 들어왔을 때도, 저 사이의 값을 내놓아 saturation(포화)됩니다. 하지만 ReLU는 max(0, x)이므로 어떠한 값이 들어와도 제한이 없습니다. 값이 크면 클수록 더큰 gradient를 가지게 됩니다.

그리고 ReLU의 non-saturation이 stochastic gradient descent와 결합되어 더욱더 효율이 증대됩니다. feature가 큰 값을 가지고 큰 gradient를 가지고 있을 경우 관성이 생겨 더욱더 네트워크가 빨리 최적화합니다. 또한 ReLU는 미분하기에도 단순하여, 연산량의 면에서도 충분한 이점을 가지고 있습니다. 


위 그림을 보시면 실선이 ReLU를 사용했을 때이고 점선이 tanh을 사용한 경우입니다.

Local Response Normalization

lateral inhibition이란 것을 아십니까? 실제 뇌 세포의 증상인데, 강한뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상입니다. 그래서 아래 그림을 보시면 검은 네모들 사이에 회색 점?부분? 이 보일텐데 이는 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분(약한 뉴런)에 반응하여 회색이 조금 보이게됩니다.


그래서 이것이 왜 나왔냐하면, Neural Network의 Feature에서 한 세포가 유별나게 강한 값을 가지게 된다면, 근처의 값이 약하더라도 convolution 연산을 한다면 강한 feature를 가지게 되는것입니다. 그렇다면 over-fitting이 잘 일어나게 되겠죠(training dataset에만 feature가 크게 반응하니까)

그래서 어떠한 filter가 있을 때, 그 주위 혹은 같은 위치에 다른 channel의 filter들을 square-sum하여 한 filter에서만 과도하게 activate하는 것을 막습니다.

  • a^i_x,y는 i번째 kernel의 x,y값입니다. 그리고 정규화가 적용되어 b^i_x,y로 바뀌게 되는 것입니다.
  • n은 해당 a의 위치에 spatial position한 kernel들의 개수를 말합니다. N은 총 kernel 개수입니다.
  • k, alpha, beta는 normalization을 위한 하이퍼 파라미터입니다.

저희는 이 normalization을 ReLU후에 적용하였습니다.

Data Augmentation

over-fitting을 막는 가장 단순한 방법은 데이터셋의 크기를 많이 늘이는 것입니다. 그래서 Data Augmentation이란 것을 통해 dataset을 더 크게만드는 방법을 제시하였습니다.

  • 256x256으로 만들어진 이미지에서 랜덤으로 224x224로 이미지를 여러장 crop하고, 이미지를 filp(좌우반전)한 상태에서도 crop하여 이미지를 2048배 늘였습니다. 테스트시에는 이미지의 가장자리 4개와 정가운데에서 patch를 만들어 네트워크를 통과시킨후 softmax를 평균냈습니다.
  • 이미지 데이터셋에 PCA 분석을 하여 데이터를 학습하기 쉽도록 변환하였습니다.

Dropout

Dropout이란 hidden layer의 몇몇 뉴런의 값을 0으로 바꿔버립니다. 그래서 neuron이 "dropped out(탈락)"되어 forward pass, back propagation시 아무런 영향을 미치지 않습니다. 이 drop out은 뉴런들 간의 복잡한 상호의존도를 낮춰 over fitting을 막습니다. 테스트 시에는 모든 뉴런을 사용하되 output에 0.5를 곱하여 사용하였습니다.


참조

 Alexnet paper

DCGAN: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

딥러닝/GAN
DCGAN

Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, DCGAN

기존의 GANs에서는 단순히 fully connected layer를 사용한 Model을 정의하였습니다. 그래서 여기서는 GAN의 문제점을 Deep Convolutional한 문제로 풀고, 새로운 장점과 방법을 연구하였습니다.

기존의 GAN의 문제점

Low Resolution

기존의 GAN에서는 단순한 fully connected를 사용하였기 때문에 Generator가 High Resoulution한 즉 높은 화질의 이미지를 생성해낼 수 없었습니다. 그래서 MNIST와 같이 단순한 (28,28)사이즈의 이미지 밖에 생성해 낼수 없었습니다.

Memorizations

Generator가 정말로 이미지를 만들어 내는 것이 아닌 학습한 데이터를 기억하여(Memorization) 하나를 골라내는 것이 아니냐? 라는 의문점이 있기도 하였습니다.

Unstable Train

학습이 항상 잘 되는것이 아니라, 어떤 때는 진짜같은 이미지를 만들어 내지못하기도 하고, 한가지 이미지만을 계속 만들어내는 등 안정적이지 못한다는 단점이 있었습니다. 흔히들 이 문제를 Mode collapsing(GANs이 실제 데이터의 분포를 따라 만들어 가지 못할 때 일어납니다)

Deep Convolution의 장점

Network에 convolution을 사용하게 되면서 아래와 같은 장점들을 얻을 수 있게됐습니다.

  • deconvolution을 통한 high resolution한 이미지를 생성할 수 있습니다.
  • filter visualization 통해 시각화하여 어떻게 만들고, 구별하는지 인지하며, 기존의 Black Box라는 문제점을 해소 할수 있습니다.
  • convolution을 통해 이미지의 특징을 학습하여 다양하고 실제같은 이미지를 학습 할 수 있다.
  • 안정적인 학습이 가능합니다.

Model Structure

All Convolution net

  • D의 max pooling과 같은 pooling function를 strided convolution으로 대체합니다.
  • G는 spatial upsampling(Deconvolution)을 적용합니다.

Eliminate Fully Connected Layer

  • G의 맨위 Fully Connected layer는 없애고, global average pooling으로 바꿉니다.
  • D의 flatten된 last convolution layer는 single sigmoid를 output으로 합니다.

Batch Normalization

DCGAN에서는 모든 Layer를 Batch Normalization을 사용합니다. D의 input layer와 G의 output layer는 batch norm을 사용하지 않습니다.

Experiment

Train Examples

  • epoch(1) 결과


  • epoch(5) 결과


위 결과들을 보면 epoch(1)에서는 bedroom이 성공적으로 만들어졌지만, 자세히 보시면 구조나 object들이 이상한 점을 발견할 수 있습니다. 하지만 epoch(5)에서는 그런 object의 불안정한 부분을 조금 완화시킨 것을 볼수 있습니다.

Walking on latent space

앞에서 얘기했던 GAN의 문제점인 Memorization은 학습을 할 때 학습의 데이터를 기억해서 generation할 때 그 학습한 데이터를 그대로 만들어내는 것이 아니냐는 의문점이 있었습니다.

Z(noise)를 천천히 변화시키면서 Data Distribution에 따른 Generation하는 이미지들이 천천히 변하는 것(walking on latent space)을 관찰합니다. 하지만 만약 generated 된 이미지가 noise를 따라 천천히 변하는 것이 아니라거나(sharp transition), 제대로 generate가 되지 않는다면 GAN이 이미지를 순수히 generate하는 것이 아니라 memorization한것이라고 할수 있습니다.


위의 이미지를 보면 noise를 천천히 변화시키며, generated 된 이미지들이 walking on latent space가 되는 것은 볼수 있습니다.

Discriminator Filter Visualizing

Discriminator의 Filter를 학습시키기 전과 학습시킨 후를 비교하였습니다. (Bedroom Dataset)


  • Random Filter는 주어진 이미지에 대해 아무런 반응이 없습니다.
  • Trained Filter는 Bedroom의 구조나 모형 같은 것에 반응을 하여 activate합니다.

Vector Arithmetic


DCGAN 논문에서는 noise Vector간에 연산이 가능하다는 새로운 연구가 있었습니다.

Vector(Smiling Woman) - Vector(Neutral Woman) + Vector(Neutral Man) = Vector(Smiling Man). 이런식으로 {Smile Woman - Neutral Woman} = Smile, Smile + Neutral Man = Smiling Man 이런식으로 미소짓는 남자를 만들어내는 Vector 연산을 했습니다.

Data Distribution에서 각각(남자, 여자, 선글라스, 미소)에 해당하는 부분(노이즈)를 찾아 그를 연산하며 만들어 낸것 같습니다.

참고

DCGAN 한글 설명 : http://jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-1.html

Arxiv 논문 : https://arxiv.org/abs/1511.06434

 


'딥러닝 > GAN' 카테고리의 다른 글

Domain Transfer Network: Unsupervised Cross-Domain Image Generation  (0) 2018.06.25

ResNet: Deep Residual Learning for Image Recognition

딥러닝/이미지 인식
Deep Residual Learning for Image Recognition

ResNet: Deep Residual Learning for Image Recognition

ResNet 논문을 읽고 번역&재정리 한 글입니다. 부족한 점이나 실수가 있다면, 댓글 혹은 이메일(curaai00@gmail.com)로 보내주시면 감사하겠습니다. 

Abstract

요즘 그래픽카드와 딥러닝의 발전으로 네트워크는 더욱 더 깊어지고 커집니다. 그래서 논문은 Residual Learning 프레임워크를 제시하여 네트워크가 더 깊어지고 커져도 학습하기 쉽게 도와줍니다. 그리고 실험 결과를 통해 이 ResNet(Residual Networks)이 optimize하기 쉽고, depth가 증가해도 정확도가 더 높은 모습을 증명합니다.

Introduction

CNN은 지금 현재 이미지 인식 분야에서 선구자적인 역할을 맡고있습니다. CNN과 End-to-End Network가 합쳐며 depth(stacked layers)란 단어가 생기기까지 하였는데, 이를 네트워크를 "아주 깊게" 쌓으면서 기존보다 훨씬 좋은 성능이 나온다는 것을 여러 대회(ImageNet Challenge)를 통해 보여줬습니다. 그래서 "과연 네트워크의 Depth를 늘이는 것만으로도 쉽게 성능을 향상 시킬 수 있을까?"라는 의문이 생기기 시작하였습니다. 하지만 실제로는 Depth가 어느 부분까지 상승하다가 그 이상은 vanishing/exploding gradient라는 문제 때문에 오히려 성능을 더 떨어트리는 원인이 되었습니다. 이 현상을 degradation problem이라고 하는데, depth가 깊은 상태에서 학습을 이미 많이 진행한 경우 weight들의 분포가 균등하지 않고, 역전파시 기울기가 충분하지 않아 학습을 안정적으로 진행할 수 없는 문제가 있습니다. over-fitting 문제라고 착각할 수도 있겠지만 실제로 그것이 원인은 아닙니다.




Deep Residual Learning

Residual Learning

H(x)를 기존의 네트워크라고 할때 (x는 layer의 input입니다) 이 H(x)는 여러 비선형 layer로 이루어져 천천히 복잡한 함수에 근사된다고 가정할 때, F(x) := H(x) - x 로 바꿔 F(x) + x를 H(x)에 근사하도록 하는 것(Residual mapping)이 더 쉽다고 가정합니다. 이를 feed-forward neural network에 적용한 것이 "Shortcut connection"*(Fig.2)입니다. 


Identity mapping by Shortcuts

Residual Learning의 중점은 degradation 문제를 어떻게 해결하느냐 인데, 위(Fig. 2)에 나왔던 것처럼 F(x) + x를 H(x)에 근사하게 합니다. shortcut connection을 Neural Network에 사용하여 역전파(back propagation)할 때, identity mapping(x)를 미분하면 적어도 1이상의 값이 나와 최소한의 기울기를 만들어서 학습이 제대로 일어나지 않는 현상을 최소화했습니다. H(x)와 F(x) + x가 천천히 근사하는 방식은 같더라도 학습의 속도나 안정성으로 보았을 때 Shortcut connection이 훨씬 더 효율적입니다.

기본적인 residual block을 다음 수식과 같이 정의합니다. 이때 σ는 ReLU이고, biases는 표기상 생략되었습니다. 위의 경우에서는 x와 F와 dimension이 동일해야 하는데, 만약 dimension이 바뀔 경우 Linear projection W_s를 적용할 수 있습니다.

여기서 W_s는 x의 dimension을 맞추기 위해서만 사용됩니다.

(2)을 projection shortcut connection이라고 부릅니다. 

Network Architecture


Plain Network

Residual block을 사용하지 않고, 단순히 쌓은 네트워크(Fig. 3, middle)입니다. 이 네트워크는 VGG Net(Fig. 3, left)에서 영감을 받아 만들었습니다. plain network는 두가지 design rule이 있습니다.

  • 각 layer들은 같은 크기의 feature map output size를 만들고, 동일한 number of filters를 가집니다.
  • feature map size가 반으로 줄어들 경우, layer당 complexity를 유지하기 위해 number of filters를 2배로 늘입니다. convolution layer의 stride를 2로 하여 down-sampling을 직접 수행합니다.

convolution layer(34개)를 통과한뒤, global average pooling, 1000-way fully-connected layer with softmax로 끝납니다. 또한 이 모델은 VGG Net보다 fewer filters, lower complexity를 가지고 있고, layer baseline은 3.6 billion FLOPs로서 VGG의 18%(FLOPs)입니다.

Residual Network

plain network에 base를 두고 shortcut connection을 추가한 ResNet(Fig. 3, right)입니다. shortcut connection(Fig. 3, solid line)은 input과 output이 같은 dimension일 때 사용됩니다. dimension이 증가할 때(Fig. 3, dotted line)는 두가지 경우를 고려하였습니다.

  • identity shortcut connection을 계속 실행하는 경우, dimension을 증가시키기 위해 나머지를 zero padding 하였습니다.
  • projection shortcut connection은 dimension을 맞추기 위하여 1x1 convolution을 사용합니다.

양쪽 옵션 모두 stride는 2를 사용합니다.

Implementation

모델 전부 ImageNet Challenge를 위해 사용하였습니다.

  • weight decay 0.00001 & momentum 0.9
  • drop out X
  • image는 [256, 480] 중 가까운 방향으로 resize됨
  • per-pixel mean subtraction 과 함께 224x224로 랜덤 crop
  • standard color augmentation 사용
  • Batch Normalization을 convolution 후, activation 전 사용
  • batch size 256으로 SGD 사용
  • learning rate는 0.1 부터 시작, local minimum을 만나거나 loss가 진동하는 경우 1/10씩 감소시킴
  • iteration: 60 * 10^4

테스트시 대회를 위해 standard 10 crop testing을 적용하였습니다. fully convolutional을 적용하였습니다.

Experiment

ImageNet Classification

ImageNet classification dataset에서 model을 평가하였고, 학습이미지는 1.28 백만장, 평가는 5만장을 이용하였습니다. 그리고 서버로 보내는 최종 테스트시에는 10만장을 이용하였고, top-1, top-5 에러율을 평가하였습니다. 

Plain Network


위 그림은 ImageNet 참가시 사용한 Network Architecture Implementation detail입니다.


Fig. 4, left를 보시면 plain-18이 34보다 전체적인 error가 적은것을 보실 수 있습니다.

Residual Network


ResNet-18, 34모두 plain network에 base를 두고 있고, 첫번째 비교(Table 2 and Fig. 4)에서 identity shortcut connection을 사용하였습니다(zero padding). 그리고 Table 2와 Fig. 4로 부터 3가지 요점을 찾을 수 있습니다.

  1. ResNet을 사용할 경우 네트워크의 depth가 증가하여도 error가 감소합니다. (degradation 문제 해결)
  2. 같은 depth여도 ResNet이 성능이 더 좋습니다. (Table 2)
  3. plain 보다 ResNet이 더 빨리 solution을 찾아갑니다. (Fig. 4)

Deeper Bottleneck Architectures


ResNet 50/101/152 부터는 Fig. 5, right와 같은 bottleneck architecture를 사용하였습니다. 이 아키텍쳐를 통해 네트워크를 더 깊게 쌓을 수 있었고, dimension이 바뀌는 경우에는 projection shortcut connection을 사용하였다고 합니다.

ResNets


위 Table 들을 보시면 전반적으로 ResNet이 성능이 더 우수하다는 것을 알수 있습니다. 또한 Network가 더 깊어질 수록 성능을 향상 시킬수 있다는 것 또한 보여줍니다.

CIFAR-10 and Analysis


CIFAR-10 test set을 이용하였을 때 각 layers 별로 성능을 체크하였고, layer가 너무 깊을 경우(1202) 다시 error가 증가하는 것을 볼수 있습니다. Fig. 6

Fig. 6는 CIFAR-10에서 학습을 진행할 때 plain network 같은 경우에는 깊을 수록 학습이 잘 진행되지 않지만 ResNet의 경우에는 반대의 양상을 띄게 됩니다. ResNet-1202는 제외합니다.

Analysis of Layer Responses


각 3x3 convolution layer(Batch Norm 후, ReLU 전)의 표준편차입니다. ResNet이 plain network에 비해 small response를 보이는 것으로 보아, 좀더 안정적으로 학습을 진행한다고 할수 있습니다.

Exploring Over 1000 layers

위의 Figure, Table 들을 보시면 layer의 수가 1000이 넘어가는 ResNet이 있는데 이 ResNet들은 아무리 residual function도 layer가 너무 과도하게 높으면 제대로 발휘하지 못한다는 것을 보여줍니다.

ResNet on Object Detection


기존의 VGG를 사용하던 Faster R-CNN에 ResNet을 이용하여 Object Deteciton을 사용하였더니, 성능이 크게 향상된 것을 확인할 수 있습니다.

Reference

Arxiv: Deep Residual Learning for Image Recognition

Arxiv: Identity Mappings in Deep Residual Networks

Identity Mappings in Deep Residual Networks 블로그 포스팅