Generative Models 소개

What I cannot create, I do not understand. - Richard Feynman

생성 모델을 학습한다는 것에 대해서 가장 처음에 생각하는 것은 그럴듯한 문장 혹은 이미지를 만드는 것이라고 생각한다. 하지만 이것이 전부가 아니라, 생성모델은 그것보다 많은 것을 포함하는 개념이다.

Generation: 강아지와 같은 이미지를 만드는 것도 생성모델이 하는 일이지만, Density estimation 어떤 이미지가 들어왔을 때 확률값 하나가 튀어나와서 이미지가 고양이 같은지 강아지 같은지 강아지가 아닌 것 같은지 구분하고 싶은 것임. 이상행동감지로 활용될 수 있다. 엄밀히 생성모델은 Discrimity 모델을 포함하고 있다. 즉 생성해내는 것만 아니라 구분하는 것까지 포함하고 있다.

이러한 모델을 보통 explicit model 이라고 한다. 확률값을 얻을 수 있는 모델을 뜻함.

Unsupervised representation learning 이라고 강아지가 있으면 강아지는 귀가 두개고 꼬리가 있고 등의 특성이 있을텐데 이것을 feature learning 이라고 한다. 이 feature learning이 생성모델이 할 수 있는 것으로 표현하기도 함.

Basic Discrete Distributions

  • Bernoulli distribution
    • 이것을 포함하는 확률분포에는 숫자가 하나 필요함. 동전을 던졌을 때 앞 뒤가 나오는 것. 카테고리면 n개가 필요한 것. 주사위를 던졌을 때 n개가 필요한 것이 아니라 n - 1개가 필요함.
  • Categorical distribution

RGB 이미지 하나를 픽셀로 표현할 때 (r, g, b) ~ p(R, G, B) 는 256 256 256 가지가 있다. 그렇다면 이것을 표현하는 파라미터는 256 256 (256 - 1) 개가 필요함.

자세히 보기

Transformer 소개

What makes sequential modeling a hard problem to handle?

문장은 항상 길이가 달라질 수도 있고 문장 어순을 바꾸는 등 문법에 항상 완벽하게 대응하는 문장을 만들지 않듯이 중간에 뭐 하나가 빠져있을 수 있음. 또한 permuted sequence라고 뭐 하나가 밀리거나 하는 등의 문제가 있을 수 있어서, 중간에 무언가가 바뀐 시퀀셜 데이터가 들어간다면 모델링이 굉장히 어려워진다. 이것을 해결하기 위해 Transformer가 등장하였고, self-attention 이라는 구조를 사용하게 된다.

Attention is all you need - Transformer is the first sequence transduction model based entirely on attention.

RNN이라는 구조에서 (하나의 입력이 들어가고, 다른 입력이 들어갈 때 이전 뉴런에서 가지고 있던 cell state가 다음 뉴런으로 들어가는 재귀적 구조) Transformer에는 재귀적인 구조가 없고, attention 구조를 활용했다는 것이 가장 큰 변화이다.

From a bird’s-eye view, this is what the Transformer does for machine translation tasks.

트랜스포머 방법론은 시퀀셜한 데이터를 처리하고 인코딩하는 문제이기 때문에 NMT에만 적용되지 않고, 이미지 분류, detection, 이미지분류, Dall-e(문장에 맞는 이미지 생성) 등 여러 태스크에서 활용되고 있다.

어떠한 문장이 주어졌을 때 (불어문장) 그것을 다른 문장으로 바꾸는 것을 하려고 하는 것임. 시퀀셜 데이터를 넣었을 때 시퀀셜 데이터가 나오게 하는 것.

입력 시퀀스와 출력시퀀스의 단어 숫자가 다를 수 있고, 입력 시퀀스와 출력 시퀀스의 도메인이 다를 수 있는 하나의 모델구조임.

원래 RNN에서는 세 개의 단어가 들어가면 세 번의 작동을 했는데, 트랜스포머에서는 세 개든 백 개든 한 번에 인코딩을 할 수 있게 된다. 이렇듯 self-attention 구조에서는 n개의 단어를 한 번에 처리할 수 있다.

자세히 보기

RNN 소개

Sequential Model

  • 일상에서 다루는 대부분의 데이터가 시퀀셜 데이터다. (말, 영상 등)
  • 시퀀셜 데이터를 다루는 가장 큰 어려움은, 우리가 가장 얻고 싶은 것은 어떤 영역에 어떤 정보가 있다와 같은 것인데, 시퀀셜 데이터는 길이가 얼마나 될지 모르는 것이다. 즉 데이터가 몇개의 차원으로 되어있을지 모른다는 것인데, 이것은 시퀀셜 모델은 몇 개의 데이터가 들어오든 동작할 수 있어야 한다.
  • 이전에 어떤 데이터가 들어왔을 때 다음에 어떤 데이터가 들어올 지 예측하는 것이 가장 기본적인 모형이다.
  • 과거에 고려해야 하는 정보량이 계속 늘어난다는 것이 가장 큰 어려움이다.

시퀀셜 모델을 가장 간단히 만들 수 있는 방법은, Fix the past timespan 과거의 데이터를 몇 개만 보겠다고 정해두는 것이다.

  • Autoregressive model
  • Markov model (first-order autoregressive model) 가장 큰 특징은 가정을 할 때 바로 이전 과거에만 dependent 한다는 것이다. 이러한 마르코프 모델은 과거의 많은 정보를 버릴 수밖에 없다는 단점이 있다.

Latent autoregressive model

  • 위의 모델들은 과거의 많은 정보를 사용할 수 없기에 대안으로 나온 것이 Latent autoregressive model이다.
  • 중간에 Hidden state가 들어가 있는데, 이것은 과거의 정보를 요약하고 있다고 생각하면 됨.
  • 즉 바로 직전 과거에 의존하는 것이 아닌 hidden state에 의존하는 구조이다.

Recurrent Neural Network

자기 자신으로 돌아오는 구조가 하나 있다. 나의 h_t 에서의 t에서의 hidden state는 x_t에 의존하는 것이 아니라 t - 1에서 얻어진 cell state에 의존하는 구조임.

Recurrent 구조를 시간순으로 풀게 되면 입력이 많은 FC Layer로 표현할 수 있다.

자세히 보기

Computer Vision Applications (Semantic Segmentation and Detection

Semantic Segmentation

이미지 픽셀 별 분류 과제이다. Dense Classification, Perl Pixel 등으로 불리기도 한다.

  • Fully Convolutional Network

    • output이 1000개의 채널이라고 하면, Dense Layer를 없애고 Fully Convolutional Network 로 변경하려는 것임.

    • Fully Connected (Dense) Layer를 사용하는 것과 결과적으로 똑같음. 파라미터도 완전히 똑같음.

    • 이러한 과정을 convolutionalization 이라고 한다.

      • Transforming fully connected layers into convolution layers enables a classification net to output a heat map.
    • While FCN can run with inputs of any size, the output dimensions(special dimension) are typically reduced by subsampling. So we need a way to connect the coarse output to the dense pixels.

  • Deconvolution (conv transpose)

    • 직관적으로 보았을 때 Convolution의 역 연산이다.

    • special dimension을 키워주는 역할을 하게 된다.

    • 엄밀히 말하면 convolution의 역 연산은 존재할 수 없다. 원래의 값으로 완전히 복원할 수는 없기 때문이다. 하지만 이렇게 생각하면 좋은 이유는 네트워크 구조를 짤 때 파라미터 크기와 네트워크 입출력을 계산할 때 역으로 생각하면 편하기 때문이다.

Detection

Semantic Segmentation 이랑 비슷하지만, 퓨어픽셀을 이용한 히트맵을 찾는 것이 아니라 객체들의 bounding box를 찾는 과제로 만든 것이다.

  • R-CNN
    1. R-CNN takes an input image,
    2. extracts around 2,000 region proposals (using Selective search),
    3. compute features for each proposal (using AlexNet),
    4. and then classifies with lenear SVMs.
  • SPPNet
    • RCNN의 가장 큰 문제는 이미지에서 2000개의 바운딩박스를 뽑았을 때, 2000개의 이미지 혹은 패치를 모두 CNN에 통과시켜야 한다. 즉 하나의 이미지를 처리하는데 CPU에서는 1분의 시간이 소요되었었다.
    • 이미지 전체에 대한 컨볼루션 피쳐맵을 만들고, 뽑힌 바운딩박스 위치에 해당하는 컨볼루션 피쳐맵의 텐서만 뽑아온 것으로 CNN에 통과시킴으로써 훨씬 빨라지며, 한 번의 CNN으로 결과를 얻을 수 있다.
  • Fast R-CNN
    • 기본 컨셉은 SPPNet과 굉장히 유사하지만, 뒷단의 Neural Net(RoI)을 통해서 바운딩박스 리그레션과 분류를 진행했다.
  • Faster R-CNN
    • 이미지를 통해 바운딩박스를 뽑아내는 Region Proposal 역시 학습을 시키자는 것임.
    • Region Proposal Network
      • 이미지가 있으면 이미지 속 특정 영역(패치)이 바운딩박스로서 의미가 있는지 없는지(즉 영역에 물체가 있는지)를 판단하는 것이다.
      • anchor boxes가 필요한데, 이것은 미리 정해놓은 바운딩박스의 크기이다. 내가 이 영역에 어떤 크기의 물체가 있을 것 같다라는 예상을 전제로 만들어 놓은 것임.
      • Fully Conv 레이어가 사용됨.
    • YOLO
      • extremely fast object detection algorithm
      • It simultaneously predicts multiple bounding boxes and class probabilities.
        • No explicit bounding box sampling (compared with Faster R-CNN)
        • 이미지 안에 찾고싶은 물체의 중앙이 그리드 안에 들어가면, 그 그리드 셋이 해당 물체의 바운딩 박스와 해당 물체가 무엇인지 같이 예측을 해야 한다.
        • 이 때 B개의 바운딩 박스를 예측하게 된다. 이후 바운딩박스의 refinement(x/y/w/h)를 예측하고, 각각의 그리드셋이 속하는 중점의 오브젝트가 어떤 클래스인지 예측한다.
        • 이 두 가지 정보를 취합하게 되면 박스와 박스가 어떤 클래스인지 예측할 수 있다.
자세히 보기

Convolution 소개

파라미터 수 손으로 직접 계산해보기

알렉스넷의 파라미터 수 구하기

input = 224 224 3
filter = 11 11 3
fisrt param = $11113482 ~= 35k$

Modern CNN

AlexNet

네트워크가 두 개로 나뉘어져 있다. 당시 GPU가 부족했기 때문임. 두 장의 GPU로 학습하고 합쳤다. 인풋에 $11 * 11$ 필터를 사용했는데, 파라미터 관점에서 좋진 않다. 상대적으로 많은 파라미터가 필요하기 때문. 이후 5개의 Convolution 레이어와 3개의 Dense 레이어를 사용한다. 최근 200-300개 네트워크를 가진 신경망에 비하면 Light한 편이다.

Key Ideas

  • Rectified Linear Unit(ReLU) 활성화 함수를 사용했다. $ReLU = max(0, x)$
    • 리니어 모델이 갖는 좋은 성질들을 가질 수 있게 한다.
    • 리니어 모델들의 성질을 가지고 있기 때문에 학습하는 SGD나 Gradient Descent로 학습을 용이하게 한다.
    • 활성화함수를 사용할 때 이전에 많이 활용하던 Sigmoid나 tanh 같은 경우 값이 커지면 슬로프가 줄어들게 된다. 슬로프가 결국 기울기니까, 뉴런의 값이 많이 크면(0에서 벗어나면) Gradient Slope는 0에 가까워진다. 이 때 Vanishing Gradient 문제가 발생할 수 있는데, ReLU를 사용하면 해당 문제를 해소할 수 있음
  • GPU Implementation (2 GPUs)
  • Local Response Normalization(어떠한 입력 공간에서 Response가 많이 나오는 부분을 죽이는 것임. 최근엔 많이 사용되지 않음), Overlapping pooling
  • Data Augmentation
  • Dropout
자세히 보기

Optimization 소개

“Language is the source of misunderstandings” - Antoine de Saint-Exupery (1900-1944)

용어에 대한 정리를 하고 넘어가야 이후에 오해가 생기지 않는다. 용어 통일이 가장 중요하기 때문에 용어에 대한 명확한 컨셉을 잡아볼 것임.

Introduction

Gradient Descent

  • First-order iterative optimization algorithm for finding a local minimum of a differentiable function.
  • 찾고자 하는 파라미터에 대해서 손실함수를 미분한 편미분값을 가지고 학습을 하겠다는 것임.
  • Local minimum: 손실함수를 미분했을 때 극소적으로 좋은 로컬 미니멈을 찾는 것을 목적으로 함.

Important Concepts in Optimization

  • Generalization (일반화)

    • 대부분의 경우 일반화 성능을 높이는 것이 목적이다.
    • 일반화 성능을 높이기만 하면 좋은 것인가?
      • 일반적으로 학습을 시키게 되면 Iteration이 지나면서 Training Error를 줄이게 되는데, Training Error가 0이 되었다고 해서 우리가 항상 원하는 최적값에 도달했다는 보장이 없다.
      • 일반적으로 Training error가 주어지지만, 어느정도 시간이 지나고 나면 Test Error가 커짐, 즉 학습에 사용하지 않은 데이터에 대해서는 성능이 오히려 떨어지게 된다.
      • 즉, 일반적으로 일반화는 테스트에러와 트레이닝 에러의 갭을 줄이는 것을 의미한다.
      • 만약 우리 네트워크가 안좋아서 학습데이터에 대한 성능이 안좋으면, 일반화의 퍼포먼스가 좋다고 해서 테스트 데이터의 성능이 좋다고 말할 수 없다.
      • 일반화의 성능은 테스트와 트레이닝 에러의 갭을 말하기 때문이다.
  • Under-fitting vs. over-fitting

    • 학습데이터에 대해서는 잘 동작을 하지만 테스트데이터에 대해서 잘 동작하지 않는 것을 OverFitting이라고 한다.

  • Cross validation

    • 일반적으로 데이터가 분리되어 있음 (Train, Test, Validate)
    • 보통은 학습 데이터로 학습시킨 모델이 학습에 사용되지 않은 밸리데이션 데이터를 기준으로 학습이 잘 되었는지 확인하는 과정이다.
    • 하지만, 트레인과 테스트를 반반으로 했을 때, 트레인을 80 테스트를 20으로 했을 때 등 Split 범위에 따라서 학습의 퍼포먼스가 달라질 수 있다. 이러한 것을 해결하고자 하는 것이 Cross Validation이다. (혹은 K-Fold Validation)
    • 네트워크를 학습할 때 수많은 파라미터가 존재한다. 또한 Hyper Parameter들에 대한 기준이 없다. 따라서 Cross-validation을 통해 최적의 Parameter Sets 을 찾고, 파라미터를 보정한 상태에서 모든 학습데이터를 학습에 사용해야 더 많은 데이터를 사용할 수 있다.
    • Test Data는 어떠한 방법으로든 학습에 사용되어서는 안된다. 즉, 학습에는 Train과 Validate 데이터만을 이용해야 한다.
  • Bias-variance tradeoff

    • 사격을 할 때 항상 같은 곳에만 찍히면 (원점이 아니더라도) 좋은 것이다. 전체 모델을 어느정도 평준화 시키면 최적값에 도달할 가능성이 많기 때문이다. 이것을 Low Variance라고 한다. (출력이 얼마나 일관적으로 나오는 지)

    • 이것에 반해 Variance가 크면 비슷한 입력이 들어와도 출력이 많이 달라지는 것을 의미한다.

    • Bias라는 것은 출력에 따른 평균적으로 True Target에 접근하는 정도를 의미하며, Bias가 크면 Mean에서 많이 벗어나는 것을 의미한다.

    • 학습 데이터에 Noise가 껴있다고 가정했을 때 내가 이 노이즈가 껴있는 타겟 데이터를 미니마이즈하는 것에 대하여 세 파트로 나뉘어진다. 내가 미니마이즈하는 것은 하나의 값(cost)이지만, 그 값은 세 파트로 나뉘어져 있어서 한 파트를 줄이면 다른 파트가 커질 수밖에 없는 Trade-off 관계이다.

      위 식에서 cost를 minimize한다는 것은 bias와 variance, noise를 minimize 한다는 것을 의미한다.

  • Bootstrapping

    • 신발끈을 말하는 것이며, 그 뜻은 신발끈을 들어올려 하늘을 날겠다라는 허황된 뜻임.
    • 딥러닝에서는 학습 데이터가 100개가 있다고 하면, 100개 중 80개를 사용하겠다 등 일부만 뽑아서 사용한다는 것을 의미한다.
    • 이렇게 했을 때 하나의 입력에 대해서 각 모델들의 출력이 달라질 수 있다. 이 때 각 모델들의 예측값들이 얼마나 일치를 이루는지 보고 전체 모델들의 특성을 알고자 하는 것이다.
    • 학습데이터가 고정되어 있을 때 subsampling을 통해 여러 학습데이터를 만들고 그것을 이용하여 여러 모델 혹은 metric을 만들겠다는 것임.
  • Baggin and boosting

    • Bagging(Bootstrapping aggregating)
    • 학습데이터를 여러 개를 만들어서 (Booststrapping) 여러 모델을 만들고 그 모델의 output들을 가지고 평균을 내겠다는 뜻임.
    • 학습데이터가 고정되어 있으면 이것을 모두 이용하여 하나의 결과를 내는 것이 좋을 것 같지만 사실은 그렇지 않다. N개의 모델을 만들고, N개의 모델의 출력값의 평균이나 Voting을 통해 나오는 결과를 사용하는 것이 보통 성능이 더 좋다.
    • Boosting: 학습데이터를 시퀀셜하게 바라봐서 간단한 모델을 만들고, 모델에 학습데이터를 다 넣어본다. 모델에서 80개는 잘 예측을 했지만 20개는 잘 안되었다. 이 때 모델을 하나를 더 만드는데 전에 안되었던 20개에 데이터를 잘 예측하는 모델을 만든다. 이렇게 모델들을 만들고 합친 이후에 하나의 struct learner를 만들고, 그 weight를 찾는 방식을 말한다.

Practical Gradient Descent Methods

Stochastic gradient Descent

  • 하나의 샘플을 이용
자세히 보기

뉴럴 네트워크 - Multi Layer Perceptron

Neural networks are computing systems vaguely inspired by the biological neural networks that constitute animal brains.

자세히 보기