Meta-001, Learning to learn by gradient descent by gradient descent (2016-NIPS)

Meta Learning에서 거의 초창기 논문이며 아주 옛날에 읽었으나 기억이 가물가물.. 다시 읽어본다.


0. Abstract

  • 이 당시(2016) machine learning 알고리즘이 상당히 발전하고 있었는데..
  • optimization algorithms 들은 여전히 손으로 디자인 되고 있었다.
    • 물론 난 지금도 사전 정의된 optimization을 쓰고는 있지만..
  • 따라서 이 논문에서는 optimization 알고리즘을 학습 문제로 푼다고 한다.
  • 그 방법론으로는 LSTM을 이용하였고 손으로 디자인된 다른 것들에 비해 일반적으로 더 좋은 성능을 보이는 것을 보인다.
  • Convex problems, training neural networks, styling images with neural art task에서 실험을 하여 보인다.

1. Introduction

  • objective function은 으로 정의하고 이는 안에서 인 theta을 찾는 것이다.
  • 미분 가능한 함수일 때 일반적인 방법론은 gradient descent을 다음과 같이 이용한다.
  • Vanilla gradient descent는 단순히 1차 미분값만 고려하고 2차 미분은 고려안하기 때문에 완벽하지 않다.
  • 일반적인 optimization 기술은 curvature information을 이용한 rescaling gradient step에 의해  해결이 가능하다.
    • curvature information은 일반적으로 Hessian matrix의 이차 편미분을 말한다.
    • Gauss-Newton matrix or Fisher information matrix또한 가능하긴 하지만 일반적으로 Hessian matrix을 쓴다고 한다.
  • 연구 분야에 따라, 문제의 성격에 따라 선호하는 update rules들이 있다고 한다.
    • Deep learning에서는 high-dimensional, non-convex optimization 문제를 특정짓는 optimization을 선호한다.
    • 대표적으로 momentum, Rprop, Adagrad, RMSprop, ADAM 등이 있다.
    • 커뮤니티에따라 다른 접근법을 가지는 경향이 있다는 보이는 논문도 있다고 함
  • No Free Lunch Theorems for Optimization 논문에서는 optimization의 조합으로는 어떠한 알고리즘도 random strategy in expectation보다 좋을 수 없다고 한다.
    • 즉 subclass의 문제에서 사실상 성능을 올리는 유일한 방법은 specialization을 하는 것이다.
    • 여기서 말하는게 general optimization으로 그냥 문제푸는 것은 한계가 있고 문제에 따른 special optimization을 설계해야한다는 것 같음..(?)
  • 이 연구에서는 hand-designed update rules을 learned update rule로 바꾸는 것이다.
    • Optimizer:  (Adam 같은 거)
    • Own set of parameters:  (를 설계할 때 필요한 파라미터)
    • Optimizee:   (Model 자체를 의미)
      • 는 즉, model의 parameter가 되겠다.
  • High level에서는 다음의 그림과 같다.
    • 여기서 는 RNN을 사용하였다고 한다. (own state을 유지하고 dynamically update)

1.1 Transfer learning and generalization

  • 특정 문제에 따라 잘 작동하는 learning algorithm을 구성하는게 목표이다.
    • 기존 방법은 문제의 특징을 분석하여 적절한 learning algorithms을 디자인 했었던 것과는 다르다.
  • 모델을 선택할 때는 generation의 의미를 고려하는게 중요하다.
    • 일반적인 statistical learning에서는 data set에 따르는 evaluation을 통해 특정 함수를 선택하게 된다.
    • 즉 모델을 선택할 때, 우리가 관찰하지 못한 포인트에서 함수가 어떻게 작동하는지에 대해 생각하고 inductive biases을 특정지어야 한다.
    • 그리고 새로운 포인트에서 target function의 behavior에 대한 예측에 따른 일반화를 해야한다.
    • (즉 를 선택할 때, 관찰하지 못한 data, target function 의 일반화를 고려하여 선택해야 한다?)
  • 이 문제에서는 examples 스스로 problem instances이며, generalization은 다른 문제들 사이에 transfer knowledge을 하는 능력이라고 한다.
    • 이러한 문제는 보통 transfer learning에서 다루는 것이나 meta-learning 관점에서 이를 generalization에서 하나인 transfer learning 문제로 연구할 수 있다.
  • (Deep-learning의 성공 스토리 중 하나는) 딥러닝 구조가 새로운 examples에 대해 일반화하는 능력에 의존한다.
  • In this work we aim to leverage this generalization power, but also to lift it from simple supervised learning to the more general setting of optimization.
    • 이 연구에서는 일반화 능력을 목표로 하는데, simple 학습에서 general 학습의 optimization까지를 목표로 한다.

1.2 A brief history and related work

  • 이전 연구에서들의 meta-learning을 소개하지만.. 
    • 이러한 연구에서는 두 가지 scales을 고려한다.
    • task에서의 빠른 학습과 점진적인 것
    • 많은 다른 task들을 가로지르는 meta learning
    • In general these ideas involve learning which occurs at two different time scales: rapid learning within tasks and more gradual, meta learning across many different tasks.
    • 정확히 뭔 말인지를 안읽어봐서 모르겠..
  • 일반적인 meta-learning 접근 법은 Schmidhuber(1992,1993)을 따르고 이는 Schmidhuber(1987)에서 발전되었다고 하는데... 네트워크가 그들의 weight을 수정할 수 있다고 한다.
    • 이러한 알고리즘은 미분가능하기 때문에 end-to-end로 gradient descent로 학습 가능하다고 하다.
    • 하지만 이 방법은 위 처럼 학습을 할 수 있는 대신, 이러한 일반성 때문에 학습이 매우 어렵다고 한다.
    • 대체적으로 저 연구에서는 gradient descent 대신 search strategy을 사용한다고 한다.
    • 비슷하게 최근에 Daniel은 강화학습을 이용해서 학습도 한 것이 있다고 한다.
  • Bengio도 gradient descent 없이 학습하는 것을 제안했다고 한다.
    • Runarsson and Jonsson 도 뉴럴 네트워크로 만든 간단한 규칙에 의해 학습하는 연구를 제안했다고 한다.
  • 그 외의 연구...
    • Cotter and Conwell [1990], and later Younger et al. [1999]
    • simple multi-timescale optimizers [Sutton, 1992, Schraudolph, 1999]
    • the work of Younger et al. [2001] and Hochreiter et al. [2001]

2. Learning to learn with recurrent neural networks

  • 마지막(최적화된) optimizee parameters:  
    • optimizer parameters: 
  • 여기서 optimizer()가 좋다는 것은 무엇을 의미할까?
    • 그것에 대한 loss는 다음과 같이 적을 수 있다.
    • 이것이 왜  loss가 되는지 생각해보면, gradient descent 식에서 은 의 model parameter가 주어질 때, loss의 개념(BP할 신호)이다.
    • 즉 모델 f와 가 주어졌을 때 최적의 을 찾고 이것이 주어졌을 때의 f()에 대한 기댓값이 최소가 되면 된다.
  • 앞에 말했던 것과 같이 다음의 식으로 업데이트를 하게 된다.
    • m은 LSTM을 의미한다.
    • 는 에 의해 학습이 되는데, 는 LSTM의 output이 되는 것이다.
    • h는 hidden state의 값을 의미하는 것
    • LSTM의 입력은 가 되는 것이다.
    • 또한 L은 원래 (2)식처럼 expectation 값인데, 이거 대신 전체 trajectory of optimization으로 T(끝 지점)까지의 summation으로 처리한다.
    • 여기서 T는 설정해주는 값인 듯?
    • 간단히 개를 분류하는 그림을 그려보았다.
    • t=1에 대해서 그렸고 입력의 label은 1, 출력이 0.8이라고 하자. 
    • 따라서 MSE loss=0.004이다.
    • 그 후 초록색 선을 따라 processing이 진행되는 식이다.
    • 기존의 학습 방법은 에 대해서 loss가 나오고 이로 인해 미분을 통해 원래 을 업데이트하는 방법인 gradient descent였다.
    • 하지만 여기서는 그 값을 LSTM의 입력으로 넣어주고 나오는 g값으로 을 업데이트 하겠다는 것이다.
    • 또한 이때 LSTM의 parameter인 도 업데이트가 필요하다.
    • 이는 time step 1~T(=4)까지의 loss f들의 가중치 합(그림에서 w=1로 생각)을 가장 최소화하는 을 찾아주면 된다.
    • 여기서 가중치 w는 뒷 부분에서 다른 값을 주는게 더 효과적임을 보여준다고 한다.
    • 궁금증은 어떻게 을 업데이트할까? 이 부분은 ADAM 이런 것을 사용하는가? (바로 나옴)
  • 는 에 대한 gradient descent을(ADAM) 사용해서 최소화한다.
    • 위 그림처럼 학습이 진행되는데, 계산 가능한 위의 그림처럼 backpropagation을 random function f의 샘플링에 계산된 으로 gradient을 구한다.
    • 은 생각해보면, chain rule에 의해  로 생각할 수 있고 이는 LSTM 편미분, 덧셈 편미분, optimizee 편미분을 통해 구하면 될 것 같다.
    • 근데 을 계산할 때를 생각해보면 문제점이 있다. (x는 입력 phi는 LSTM parameter)
      • 이해하기 쉽게 하기위해 LSTM 대신 (입력 x h)라는 함수를 썼다고 생각하자.
      • 그러면 미분식은 다음과 같이된다.
      •  
      • 즉 step t에서 미분을 할 때, step t-1에서의 미분 결과가 입력이 되는 알고리즘이기 때문에 f의 2차 미분이 관여하는 개념이란 것이다!!
      • 따라서 가정을 하나하는데, 그림에서 점선은 gradient을 무시하겠다는 것이고 식으로 말하자면  으로 처리한다는 것이다. (곱미분 2nd term을 날린다는 것)
      • 위에서 예시든 것에서보면 t-1 step에서의 미분 결과가(1차 미분) 입력으로만 작동하는 것이다.
      • 따라서 결론은 그림에서 점선 부분을 masking하여 gradient가 안흐르게 하여 2차 미분을 해야하는 것을 방지하겠다!!
  • (3) objective function에서는 wt가 0이 아니어야만, gradient을 알 수가 있다.
    • 위에서 미분식이 마지막에 f을 theta로 편미분을 해야하므로 wt가 0이면 학습이 안 됨을 알 수가 있다.
    • original problem에서((2) obj function을 말하는 듯) gradients of trajectory의 앞 step은 0이고 final optimization step만 학습에 쓰인다고 한다. (그 위에서 second derivatives of f을 0으로 하고 처리해서, final step의 loss에만 의존한다는 것 같음)
    • wt > 0으로 objective 조건을 완화함으로써 문제를 해결한다.
    • (결론은) 이 논문에서는 간단하게 wt=1 for every t로 처리하여 실험을 한다.
  • 정리하면)
    • 학습할 때 모델 구조상 2nd, 3rd 미분을 처리해야 되는 상황이 발생한다.
    • 따라서 모델 그림에서 점선은 gradient가 안흐르게 처리한다.
    • 만약 objective function이 (2)를 따른다면 final step에서의 loss만 고려하게 된다. (미분값이 안흐르기 때문에)
    • 따라서 objective function을 (3)처럼 각 step에서의 expectation으로 바꿔서 한다!

2.1 Coordinatewise LSTM optimizer

  • RNN의 수많은 parameters을 우리는 학습하고 싶다.
  • 하지만 너무나도 많은 parameters을 가지는 RNN의 scale을 학습하는 것은 현실적으로 불가능하다.
  • 이러한 어려운 점을 피하기 위해, 여기서 optimizer m은 ADAM, RMSprop과 같은 일반적인 update rules와 유사하게 objective function의 parameters은 coordinatewise 방향으로 작동한다.
  • coordinatewise network을 사용하면, small network을 사용할 수 있는데 
    • only looks at a single coordinate to define the optimizer 
    • share optimizer parameters across different parameters of the optimizee.
    • 정확히 무슨 뜻이지? → 밑에서 정리해봤음..
  • objective function parameter을 위해 separate activation을 사용함으로써 각각의 coordinate에서 다른 behavior을 하게 된다.
    • small network을 사용할 수 있다.
    • 네트워크의 파라미터의 순서에 불변하게 optimizer을 강인하게 만들 수 있다.
    • 왜냐하면 update rule이 각 coordinate와 독립적으로 되기 때문이다.
  • 여기서 각 coordinate의 update rule은 다음과 같이 두 개의 LSTM을 사용하였다.
    • The network takes as input the optimizee gradient for a single coordinate as well as the previous hidden state and outputs the update for the corresponding optimizee parameter.
    • 즉 네트워크는 optimizee gradient을 입력으로 받을 뿐만 아니라, previous hidden state을 받는다.
    • 출력은 optimizee parameter에 따르는 update이다.
  • 여기까지 읽어보니 coordinate의 느낌이 왔다.
    • 위에서 예시를 든 개를 분류하는 것을 생각해보자.
    • LSTM 구조를 생각해보면, 입력에 대해 fully connected, 즉 matrix 곱을 통하여 진행이 된다.
    • 즉 LSTM 입력은 101차원이므로 hidden 차원이(=출력 차원) 101이라고 하면, 101x101와 같이 matrix 등등이 필요할 것이다.
    • 하지만 coordinate network는 101차원을 각각 따로 입력으로 넣어주겠다는 것이다.
    • 그러면 LSTM의 입력은 1차원이고 1x101의 matrix 등등으로 small network을 사용할 수 있다는 것이다.
    • 즉 coordinate는 objective function의 파라미터 101차원의 각각의 좌표축을 의미하는 것이다.
    • 이 좌표축으로 분리해서 서로 연관성이 없게 각각 LSTM의 입력으로 넣어서 dependent을 줄이고 이는 RMSprop와 ADAM과 비슷한 방법이라고 한 것이다.
    • 이렇게 하면, coordinate끼리 독립적이기 때문에 파라미터의 순서에 불변하게 optimizer을 강력하게 만들 수 있다.
    • 즉, update을 할 때는 optimizee(f) 파라미터들과 LSTM의 parameters은 공유하고 hidden state는 분리되는 형태이다.

2.1.1 Preprocessing and postprocessing

  • Optimizer은 입력과 출력의 크기에 상관없이 잘 작동한다.
  • 그러나 뉴럴 네트워크는 너무 크지 않고 너무 작지도 않은 입력, 출력에 대해서만 강인하다. (요즘은 그렇지 않은 듯)
  • 여기서 제안한 LSTM optimizer의 입력과 출력을 rescaling 해서 이 문제를 피하려고 한다. (즉, 다양한 입력과 출력 크기에 대해서 성능을 내기 위함? Appendix A 참고해보자)

3. Experiments

  • 옛날 논문은 이미 실험에서 분석된 문제점을 발판으로 추가적으로 발전된 논문들이 수없이 나왔을텐데 깊게 봐야할까 싶긴하다..
  • 모든 실험은 2개의 LSTM with 20 hidden units을 가지는 layer들로 구성되어 있다.
  • truncated BPTT을 이용한 (3)식을 최소하하는데 ADAM을 사용한다.
  • Overfitting을 피하기 위해 early stopping을 사용하였다.
    • 한 epoch 지날 때마다, test sample로 성능을 측정해서 best optimizer을 고른다고 한다.
  • SGD, RMSprop, ADAM, 과 Nesterov’s accelerated gradient (NAG)와 비교를 한다.

3.1 Quadratic functions

  • 매우 간단한 class을 구별하는 것에 대해 실험을 한다.
  • 10차원의 quadratic 함수를 다음과 같은 loss로 최적화 한다.
    • 즉 데이터는 10차원 quadratic 함수에서 샘플링 한것으로 사용한 것
  • 실험에서는 어떠한 preprocessing과 postprocessing 없었고 결과는 다음과 같다.
  • MNIST로도 실험을 하였는데 100 step 까지는 optimizer을 같이 학습하고 100~200 step은 학습된 optimizer을 사용하여 학습해도 잘 된다!

3.2 Training a small neural network on MNIST

  • Quadratic 같은 인위 데이터 말고 MNIST을 가지고도 실험을 해보았다.
  • 그림 4에서 MNIST에서도 좋은 성능을 보여줌을 확인한다.

3.2.1 Generalization to different architectures

  • 다른 네트워크들에서도 잘 작동하는지 확인을 해보는 실험들이다.
  • 학습된 LSTM optimizer과 비교를 하는 것인데, 여기서 학습된 optimizer이라함은 위 실험에서 MNIST에서 100 step 까지 학습한 optimizer을 말하는 것인듯
    • (1)에서는 20개 units에서 40개 units로
    • (2)에서는 1-layer에서 2-layers로
    • (3)에서는 sigmoid에서 ReLU로 변경을 하였다.
    • (1), (2)는 sigmoid 활성화 함수를 사용한 것이고 이 때 MNIST에서 기존 optimizer보다 더 좋은 성능을 보였다.
    • 하지만 (3) optimizee 모델에서 ReLU을 사용했을 때(LSTM안의 활성함수는 계속 sigmoid), optimizer은 일반화를 시키지 못하였다.
    • 즉 optimizer을 학습한 모델과 비슷한 모델에서는(층을 늘리거나, hidden units의 변화) 잘 작동하지만 ReLU를 이용한 아예 새로운 네트워크에서는 잘 작동하지 않는다.
    • 위 LSTM 그림에서는 네트워크의 hidden units을 변경시키면서 optimizer을 계속 이어서 학습하는데, 빨간 line과 수직축과 만나는 점에서(hidden 20) optimizer 학습을 멈춘다.
    • 그 후 optimizer은 고정시키고 optimizee 학습은 계속이어간다
    • 그 결과 LSTM optimizer가 계속 학습을 잘시키고 더 좋았다.

3.3 Training a convolutional network on CIFAR-10

  • Convolution + max-pooling + fully-connected layer (32 hidden units) + ReLU + batch normalization을 사용했을 떄의 결과이다.
  • 원래는 하나의 LSTM으로 weight를 공유하고 hidden state을 분리하여 학습한 후, optimizee parameter을 업데이트 하였다.
  • 하지만 이러한 decomposition은 fully connected와 convolutional layer의 다른 특성 때문에 충분하지 않다고 한다.
    • 따라서 2개의 LSTM을 구성하여 하나는 fully-connected layer을 다른 하나는 convolutional layer의 파라미터를 업데이트 하는 식으로 변경하였다.
    • 이렇게 2개의 LSTM을 쓸 때도 앞의 방법과 같이 coordinatewise decomposition으로 구성하지만, 2개의 LSTM끼리는 weight는 공유하는 것이 아니다.
    • 이것이 과연 generalization 이라 할 수 있는가???
  • 그림 7에서 왼쪽 CIFAR-10은 optimizer과 optimizee을 같이 학습하는 그래프를 그린 것이다.
  • CIFAR-5와 CIFAR-2는 optimizer의 성능을 보기 위함이다.
    • 즉 optimizer은 train할 때 고정시키고 보겠다는 것이다.
    • 따라서 optimizer은 미리 학습을 하고 이것에 대한 성능을 그린 그래프 같은데...
    • We also see that the optimizers trained only on a disjoint subset of the data is hardly effected by this difference and transfers well to the additional dataset.
      • 예를 들어) CIFAR-2는 기존의 10개 클래스 데이터에서 두 개의 클래스만 뽑아서 데이터를 추출하였다.
      • 추출한 데이터를 train과 validation(held-out) 로 나눈 뒤, validation으로만 LSTM optimizer을 학습하고 train 데이터로 optimizee을 학습할 때는 optimizer은 안건드렸다?
    • LSTM-sub은 단지 held-out labels으로만 학습이 되고 transferring novel dataset이 된 것이라고 한다. (정확히 어떻게 했다는 것인지?)
    • 그 결과 훨씬 더 빠르게 학습이 되었다는 것을 보여주고자 하는 것 같다.

3.4 Neural Art

  • Convolutional networks을 이용한 style transfer 혹은 Nerual Art에도 적용해보았다.
  • Optimization 함수는 다음과 같다.

4. Conclusion

  • Optimization algorithm을 학습 문제에 적용함으로써 함수의 특정 클래스를 특정짓는 optimizer을 학습할 수 있다.
  • 딥러닝에 쓰이는 다른 SOTA optimization보다 더 좋다.
  • MNIST task에서 다른  구조로 transferring 할 때, 인상적인 결과를 도출하였다.
  • CIFAR 이미지 task에서 같은 데이터 분포에서 가져온 datasets으로 transferring할 때, LSTM optimizer은 다른 optimizer보다 좋음을 보였다. (Figure 7 실험을 말하는 듯)
  • 정리하면)
    • 어떤 모델을 학습할 때, LSTM optimizer을 이용해서 학습하면 test 데이터의 도메인이 training과 비슷하다고 가정하면, 성능이 hand-optimizer보다 좋다!
      • 이는 MNIST, CIFAR 실험에서 보여주었다.
    • 또한 task 별로 optimizer을 학습하는 개념이다.
      • 즉 MNIST에서 학습한 optimizer을 CIFAR 데이터에 적용시키고 이런 건 아닌 듯
    • LSTM optimizer을 학습할 때는, optimizer & optimizee을 train 데이터로 같이 학습하고 일정 step(MNIST 기준 100)까지 학습한 optimizer을 가지고 optimizee는 추가 학습을 한다. 그 뒤에 validation으로 성능평가 하는 방법과
    • 데이터를 train / validation을 나눈 뒤, validation으로만 LSTM optimizer을 학습하고 train 데이터로는 optimizee을 학습하면서 optimizer의 성능을 보는 실험이 있었다.(?)
    • 총평: 실험 부분에서 optimizer의 transferring 과정이 정확히 이해가 안되는 부분이 있으나 아이디어를 기억하고 다음 논문을 읽어가보자!
Reference

댓글