Meta-001, Learning to learn by gradient descent by gradient descent (2016-NIPS)
Meta Learning에서 거의 초창기 논문이며 아주 옛날에 읽었으나 기억이 가물가물.. 다시 읽어본다.
Reference
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로 바꾸는 것이다.
- High level에서는 다음의 그림과 같다.
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(
)가 좋다는 것은 무엇을 의미할까?
- 그것에 대한 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로 최적화 한다.
- 실험에서는 어떠한 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
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 과정이 정확히 이해가 안되는 부분이 있으나 아이디어를 기억하고 다음 논문을 읽어가보자!
댓글
댓글 쓰기