MSE(평균제곱 오차)
: ( : target, : 실제 output)
신경망의 output 가 target값 와 같을 때 0이 되고,
둘의 차이가 크면 클수록 커지므로 는 벌점으로서 훌륭하다.
하지만 학습 과정 전체를 놓고 따져보면 문제가 생긴다.
단순한 신경망 예제를 살펴보자.
우선 신경망 학습 과정에서의 벌점은 오류를 줄이는 방향으로 weight와 bias를 교정하는 작업이므로,
gradient가 벌점에 해당한다고 할 수 있다.
(아래 예제에서 Activation Function으로 Sigmoid를 사용)
왼쪽 신경망에서 Sample 에 대한
target = 0.0
예측값 = 0.7503
오른쪽 신경망에서 Sample 에 대한
target = 0.0
예측값 = 0.9971
오른쪽 신경망의 오류가 더 크기 때문에 더 벌점을 받아야 하지만
오른쪽 신경망의 gradient값이 더 작아졌다.
결국 더 많이 틀린 오른쪽 상황에 더 낮은 벌점을 주는 꼴이 되었다.
왜 이런 현상이 발생했는가?
다음은 Sigmoid 함수와 도함수를 보여준다.
도함수는 입력값이 0일 때 가장 크고, 입력값이 커지거나 작아지면 0에 수렴한다.
그런데 Sigmoid 도함수 가 gradient 구하는 과정에 포함되어 있기 때문에
가 커질수록 gradient가 작아지는 것이다.
따라서 오차가 커질수록 gradient가 작아진다
이러한 현상은 느린 학습의 원인이 된다.
딥러닝에서 더딘 학습은 심각한 문제가 된다.
앞에서 설명한 바와 같이 MSE를 목적함수로 사용하면 더딘 학습 현상이 발생.
따라서 딥러닝은 MSE 대신 Cross Entropy
를 주로 사용.
Cross Entropy에 대해 Chap2에서 정리했었음
(간단히 말하면, 서로 다른 두 확률분포 P와 Q 사이의 entropy)
여기서는 신경망의 출력 = 과 정답 label = 를 이용해 목적함수를 구하므로
가 확률변수 역할을 한다.
따라서 식을 다음과 같이 바꿔 쓸 수 있다. ( 라고 가정)
label 가 0일 때와 1일 때의 의 확률분포는 다음과 같다.
위의 분포를 다음의 수식으로 통일할 수 있다
위 식을 토대로 Cross Entropy 목적함수
를 쓰면 다음과 같다.
과연 목적함수로 Cross Entropy를 사용했을 때가
MSE를 썼을 때의 단점을 해결했을까?
c개의 출력 node를 가진, 즉 출력 벡터 를 출력하는 신경망으로 확장하면 다음의 식이 된다.
지금까지는 은닉층과 출력층 모두 같은 Activation Function을 사용한다고 가정하고 수식을 유도했다.
하지만 몇 가지 이유 때문에 출력 node는 softmax
Activation Function을 사용하기도 한다.
softmax
:
다음은 출력 node가 3개인 간단한 신경망에 대해 Sigmoid
와 softmax
Activation Function을 비교
한다.
Softmax
는 최대값을 더욱 활성화하고 작은 값을 억제하는 효과를 보인다.Log Likilihood(로그우도)
: 딥러닝에서 널리 쓰이는 또 다른 목적함수인 로그우도이다.로그우도
는 모든 노드값을 고려하는 MSE나 Cross Entropy와 달리 라는 하나의 노드값만 본다.Softmax는 최대값이 아닌 값을 억제하여 0에 가깝게 만든다는 의도를 포함한다.
따라서 학습 Sample이 알려주는 부류에 해당하는 출력 node값만 보겠다는 로그우도 목적함수와 잘 어울린다.
이러한 이유로 딥러닝에서는
종종 softmax activation function과 로그우도 목적함수를 결합하여 사용한다.
물론 softmax activation function과 MSE 또는 Cross Entropy를 결합해 사용해도 된다.
어떤 목적함수가 가장 좋은 성능을 보일지 확인하려면 데이터로 실제 실험을 하는 것이 최선이다.
최저점을 아무리 빨리 정확하게 찾아도, Overfitting에 해당한다면 아무 의미가 없다.
따라서 Overfitting을 방지하여 일반화 능력을 극대화하는 전략이 필요하다.
Overfitting 방지책에 대해서는 추후 momentum
과 adaptive learning rate
기법에서 배운다.
한 가지 꼭 기억할 점은
momentum
과adaptive learning rate
기법들은
heuristic(경험규칙)
에 불과한 것이라는 사실이다.
따라서 자신에게 주어진 문제와 data에 잘 들어맞을지는 실험을 통해 신중하게 확인하는 수밖에 없다.
data가 형태로 주어졌다. 키는 , 몸무게는 단위라면
와 같은 Sample이 있다고 하자.
위 data는 feature마다 규모가 달라 문제가 발생할 수 있다.
키
라는 첫 번째 feature에서 1.855라는 값을 가진 사람과 1.525를 가진 사람은몸무게
가 65.6와 45.0이라면 20.5라는 차이가 생긴다.모든 feature가 양수만 가질 경우, 학습이 왜 느려지는가?
정규화(Normalization)
이라고 한다.남자 1, 여자 2
태양인 1, 태음인 2, 소양인 3, 소음인 4
예를 들어, (1.855, 65.5, 122, 1, 3)은
키가 1.855m, 몸무게 65.6kg, 혈압 122인 소양인 남자라는 Sample이다.
그런데 성별
과 체질
에 정수 코드를 부여한 일은 편의상 한 것에 불과하며,
이처럼 크기 개념을 가지지 않은 값을 명칭 값(nominal value)
라고 한다.
즉, 체질이 1인 사람이 체질 4인 사람보다 체질 2인 사람에 더 가깝다고 말 할 수 없다.
➡️ 따라서 명칭값을 가진 data는 one-hot
방식의 코드로 변환한다.
성별은 두 가지 값을 가지므로 두 비트,
체질은 네 가지 값을 가지므로 네 비트로 변환한다.
이 비트열은 feature값에 대응하는 한 비트만 1이고 나머지는 모두 0이다.
신경망의 가중치는 난수를 생성하여 초기화해야 한다.
대칭 파괴(symmetry break)
라고 한다.난수는 Gaussian Distribution에서 추출할 수도 있고,
균일 분포에서도 추출할 수 있다.
➡️ 여러 실험 결과 둘의 차이는 별로 없다고 보고됨
하지만 난수의 범위
는 매우 중요하다.
극단적으로 weight가 0에 가깝게 설정된다면 gradient가 매우 작아져 학습이 매우 느려지는 현상이 나타나고,
gradient가 너무 크면 Overfitting에 빠질 위험이 있다.
균일 분포를 사용할 때 난수의 범위를 결정하는 Heuristic
에는 여러 가지가 있는데,
여기서는 보편적으로 사용하는 두 가지를 제시
한다. : node로 들어오는 edge 개수,
: node에서 나가는 edge 개수
현대 기계학습은 Train Set을 가지고 gradient를 추정하므로 noise가 섞일 가능성이 크다.
따라서 gradient에 smoothing을 가하면 수렴 속도를 개선할 수 있다.
이러한 아이디어에 따른 방법이 Momentum
이다.
Momentum
은 속도를 나타내는 벡터 를 사용하여 현재 gradient를 smoothing한다.
아래의 그림에서 검은선은 momentum을 적용하지 않았을 때 Gradient Descent가 최적해를 찾아가는 과정을 보여 준다.
파란선은 momentum을 적용했을 때이다.
Overshooting
현상을 확인할 수 있다현재는 기존 momentum 기법을 개선한 Nesterov momentum(네스테로프 모멘텀)
기법이 널리 사용되고 있다.
Nesterov Momentum
은기존 momentum
을 이용한 Gradient Descent
Nesterov Momentum
을 이용한 Gradient Descent
아래 그림에서 Learning Rate가 높으면 검은 선으로,
Learning Rate가 낮으면 파란선으로 그려 비교한 것이다.
이러한 Learning Rate의 한계를 극복하기 위한 Adaptive Learning Rate(적응적 학습률)
기법이 여러 가지 개발되어 있다.
Adaptive Learning Rate
에서는 매개변수마다 자신의 상황에 따라 Learning Rate를 조절해 사용한다.
가장 오래된 기법으로는 바로 이전 Gradient와 현재 Gradient의 부호가 같은 매개변수는
값을 키우고 그렇지 않은 매개변수는 값을 줄이는 전략을 사용한다.
현대 기계 학습은 더 진보한 기법을 사용하는데, 널리 활용되는
AdamGrad
, RMSProp
, Adam
을 공부할 것이다.
AdaGrad(adpative gradient)
를 설명한다.AdaGrad는 gradient 누적 vector를 update하는 식을 살펴보면, 단순히 제곱을 더한다.
따라서 오래된 gradient와 최근 gradient가 알고리즘이 끝날 때까지 같은 비중의 역할을 한다고 할 수 있다.
결과적으로 이 점점 커져 충분히 수렴하지 못한 상황에서 adaptive learning rate가 0에 가까워질 가능성이 있다.
RMSProp
은 오래된 gradient의 영향력을 지수적으로 줄이기 위해,
weighted moving average(가중치 이동 평균)
기법을 적용한다.
이 기법을 다음과 같이 표현할 수 있다.
로 0.9, 0.99, 0.999와 같은 값을 사용한다.
Adam(Adaptive moment)
은 RMSProp에 momentum을 추가로 적용한 알고리즘이다.네 구석에서 중앙으로 급강하 하는 절벽이 형성되어 있고,
중앙에서 동서남북 네 방향으로 길쭉하게 계곡이 있는 협곡 지형이다.
중앙 부근에 saddle point(안장점)
이 있고 좌우로 절벽, 앞뒤로 고개가 있는 지형이다.
이 중 어느 것을 사용해야 할지에 대한 절대적인 기준은 없으니 스스로 실험하고 선택해야 한다.
tanh
는 전 구간에서 미분할 수 있는 장점이 있는데, 값이 어느 정도 커지면 1에 근접하는 saturation(포화)현상이 일어난다.ReLU(Rectified Linear Unit)
Activation Function이 제안된다.ReLU는 양의 영역이 선형이므로 포화 현상이 발생하지 않는다.Leakey ReLU
, PReLU(Parametric ReLU)
가 대표적이다.softplus
함수와 성능을 비교한 결과,PReLU
는 를 학습으로 알아낸다.batch normalization을 사용하는 이유 : covariate shift 현상 극복
아래 그림은 학습 도중에 각 층에 입력되는 Training Set을 보여 준다.
covariate shift
라고 한다.Batch Normalization(배치 정규화)
는 단순하면서도 매우 효과적이어서 최근 주목받는 기법이다.
앞서 공부했던 정규화를 위한 식은 학습을 시작하기 전,
Training Set 에 한 번 적용하면 됐다.
Batch Normalization
은 위의 식을 모든 층에 독립적으로 적용하는 기법이라고 생각하면 된다.
신경망의 각 node는 다음의 코드를 이용하여 정규화 변환을 수행한다.
현재 mini batch를 이라고 한다. (mini batch의 크기 : )
전방계산을 통해 가 되었다고 하자. ()
이러한 mini batch에 있는 sample 각각에 적용하여 을 얻었다고 가정.
이제 를 갖고 코드 1을 수행한다.
➡️ Batch Normalization에서는 mini batch 단위로 중간 결과를 모은 다음
평균 와 분산 을 구하고,
평균과 분산을 이용하여 정규화 변환값 를 구한다.
➡️ 그리고 와 로 선형 변환을 수행하여 얻은 를 Activation Function에 입력한다.
이처럼 를 로 변환하는 일이 batch normalization의 핵심이다.
(, 는 노드마다 고유한 매개변수로서 학습으로 알아내야 한다.)
SGD에 코드 1을 추가하여 Optimization을 마치면, 추가적인 후처리 작업이 필요하다.
코드 2는 이 작업을 수행하는데, 신경망의 각 node에 독립적으로 적용한다.
코드 1은 mini batch 단위로 처리했는데, 코드 2는 전체 Training Set을 가지고 처리한다.
Batch Normaliztion을 CNN에 적용할 때 주의할 점이 있다.
CNN에서는 node 단위가 아니라 Feature Map 단위로 코드 1과 코드 2를 적용한다.
Feature Map 크기가 라면 mini batch에 있는 sample마다 개의 값이 발생하므로
코드 1은 총 개의 값을 가지고 와 를 계산한다.
와 는 Feature Map마다 하나씩 있다.
주어진 data를 근사화하는 함수를 구하거나 주어진 data로 방정식을 푸는 등의 문제에서
model 용량에 비해 data가 부족한 경우는 불량 문제(ill-posed problem)
이 된다.
이러한 ill-posed problem을 풀기 위해서 적절한 가정을 투입할 수 밖에 없다.
티호노프는 이 해결책으로 규제를 최초 제안한 사람 중 한 명이다.
그는 문제의 성질 중 가장 보편적인 "입력과 출력 사이의 mapping은 매끄럽다"라는 성질을 사용하였다.
➡️ 이처럼 data의 원천에 내재한 정보를 사전 지식(prior knowledge)이라고 한다.
다음의 그림은 "입력과 출력 사이의 mapping은 매끄럽다"는 성질을 직관적으로 설명한다.
매끄러운 함수(smooth function)
라 할 수 있다.타호노프의 규제 기법은 이러한 매끄러움 가정에서 다음의 식을 사용하여 학습한다.
매끄러움 성질
은 현대 기계학습에서도 유용하게 사용된다.가중치 감쇠(weight decay)
는 위의 식과 비슷한 원리를 사용한다.딥러닝은 규제기법으로 인해 실용화에 안착했다고 말해도 될 정도로
아주 효과적인 규제 기법이 다양하게 개발되었다.
규제 항 로 가장 널리 쓰이는 것은 L2-norm이며,
L2-norm을 사용하는 규제 기법을 weight decay
기법이라고 한다.
R
은 L2-norm의 제곱이다.Ridge Regression
이라고 한다. (곧 이어 다룰 내용)위의 식을 미분하면(= gradient를 구하면) 다음의 식이 된다.
gradient를 이용하여 매개변수를 update하는 식을 다음과 같이 유도할 수 있다
Weight Decay(규제 항으로 L2-norm을 사용하는 규제)를 Linear Regression에 적용해보자.
Training Set을 다음과 같이 정의
{}, {}
{} 는 hyper plane을 표현하는 매개변수이다.
bias 은 0이라고 가정한다.
다시 말해, hyper plane이 원점을 지난다고 가정한다.
➡️ 행렬로 표시하면 다음과 같다
Weight Decay를 적용한 목적함수
는 다음과 같이 정의할 수 있다.
다음의 목적함수를 풀어 최적의 매개변수값을 구하는 문제를 Linear Regression이라고 한다.
➡️ 공분산 행렬 의 main diagonal이 2만큼 증가.
역행렬을 곱하므로 weight를 축소하여 원점으로 당기는 효과
예측 단계에서는 위에서 구한 최적의 매개변수값을 사용한다.
규제항에 L2-norm을 적용한, 즉 Weight Decay를 적용한 Linear Regression을
Ridge Regression
이라고 한다.
Ridge Regression의 예시를 살펴보자.
L1-norm
을 적용한 식은 다음과 같다.
L1-norm : 개별 요소의 절댓값을 모두 더한 값.
위의 식을 미분하면 다음과 같이 된다.
(는 의 부호로 구성되는 vector로서,
vector의 요소가 양수면 1, 음수면 -1을 가진다.)
위 식의 gradient를 이용하여 매개변수를 update하는 식을 유도하면 다음과 같다.
다음은 L1-norm을 이용한 weight penalty 효과를 보여준다
(a) : 이기 때문에 만큼 추가로 이동한다.
(b) : 이기 때문에 만큼 추가로 이동한다.
➡️ L1-norm은 해를 원점 방향으로 당기는 효과가 있다는 사실을 알 수 있다.
여러 문헌에서 L1-norm을 사용하면 0이 되는 매개변수가 많다는 현상이 입증되었으며,
이 현상을 희소성(saprsity)
이라고 한다.
만약 L1-norm을 Linear Regression에 적용하면 0이 아닌 항만 남으므로
L1-norm이 특징 선택을 한다고 표현한다.
신경망에 적용하는 때에는 0이 된 weight를 제거함으로써
Full-Connected 구조를 Sparsely-Connected 구조로 바꿀 수 있다.
아래 그림의 가로축을 시간, 즉 epoch 수로 바꾼 그래프이다.
따라서 Genralization 능력이 최고인 지점,
즉 Validation Set의 오류가 최저인 지점을 만나면 그곳에서 멈추는 전략이 매우 효과적이다.
이 전략은 조기 멈춤(early stopping)
이라고 한다.
다음은 과감한 early stopping
알고리즘이다 (좋지 않은 알고리즘)
이러한 문제를 다루는 방법이 여러 가지 있는데,
가장 단순한 방법은 이후에 연속으로 번 동안 성능 향상이 없으면 멈추는 것이다.
예를 들어, 으로 설정된 상황에서,
5epoch에 걸쳐
이 발생했다면
에서 멈추기로 하고 이 순간의 를 최적 매개변수로 취한다.
또는 이후 세대 동안 연속으로 성능 저하가 있어야 한다는 좀 더 강한 조건을 사용한다.
이 경우에는 52 epoch보다 53 epoch에서 더 좋은 성능이 발생했으므로 멈추지 않고 계속 진행한다.
이 방식은 epoch만큼 참을성을 가지고 지켜보는 셈이므로
를 참을성 인자라고 할 수 있다.
epoch마다 조사하였는데, epoch마다 조사하는 방식으로 수정할 수 있다.
다음은 참을성 인자로 , epoch마다 조사하는 방식의 코드이다.
만약 와 를 모두 1로 설정한다면, 과감한 조기 멈춤 알고리즘과 같아진다.
반면, 를 너무 크게 설정하면 쓸데없이 계산 시간을 낭비하여 조기 멈춤의 효과가 없어진다.
Overfitting을 방지하는 가장 확실한 방법은 충분히 큰 Train Set을 사용하는 것이다.
하지만 현실적으로 데이터를 늘리는 일은 불가능하거나 어렵다.
또한 Train Set을 아무리 모아도 방대한 Feature Space에 비하면 매우 작다.
비용을 적게 들이며 data양을 늘리는 한 가지 방안은 현재 가진 data를 인위적으로 변형하는 것이다.
따라서 데이터 확대(Data Augmentation)
는 잠재적인 변형을 program으로 구현하여 Sample 수를 강제로 늘리는 기법이라 정의할 수 있다.
예를 들어, data가 영상이라면 영상에 있는 물체에 이동, 회전, 또는 크기 변환을 가하면 된다.
이들은 모두 선형 변환으로서, affine transformation
이라고도 한다.
주의할 점은 변형 정도가 너무 커서 다른 부류로 바뀌는 상황을 배제하는 것이다.
예를 들어, '6'을 180회전하면 '9'라는 다른 부류가 되므로
변형 정도를 상황에 따라 잘 조절해야 한다.
➡️ 이러한 방식은 사람이 data를 잘 살펴본 다음 적합한 변형을 설계해야 한다.
이러한 접근방법은 일종의 수작업 특징(hand-crafted feature)
설계라 할 수 있다.
MNIST data set에서 모든 부류가 똑같은 변형 방법을 사용한다면,
0이나 8은 6이나 9 때문에 변형에 제한을 받게 된다.
➡️ 하우버그는 이러한 한계를 극복하기 위해, 같은 부류에 속하는 Sample 2개 사이의 morphing 변환
을 자동으로 알아낸 다음, morhping을 통해 더 자연스럽게 새로운 data를 생성하는 방법을 제안하였다.
맨 왼쪽 Sample을 가운데 Sample로 morphing하는 예를 보여 준다.
오른쪽 Sample은 morphing 변환과 morphing으로 얻은 새로운 Sample을 보여준다.
morphing은 비선형 변환으로서 affine transformation보다 훨씬 다양한 data를 생성할 수 있다.
이 방법은 morphing 변환을 자동으로 알아내므로
데이터 확대를 위한 비선형 변환 규칙을 학습
한다고 말할 수 있다.
이제 숫자처럼 물체가 분리된 상황을 넘어, 여러 물체가 어지러운 배경에 섞여 있는 자연영상의 개수를 확대하는 일을 생각해보자.
ILSVRC 2012년도 대회에서 우승하여 딥러닝의 가능성을 펼친 논문 [Krizhevsky2012]가 자연영상을 확대하는 데 사용한 방법
을 소개한다.
➡️ 이 논문은 Data를 확대하기 위해 두 가지 기법
을 사용하였다.
잘라내고(Cropping)
각각에 좌우반전(Mirroring)
을 시도하여 10장의 영상을 만든 다음, 10장의 예측 결과를 평균하여 최종 인식한다.PCA로 구한 eigen vector와 eigen value 정보를 이용하여 색상에 변환
(PCA color augmentation)
을 가한다.또한 입력에 noise를 섞는 기법(noise addition)
도 데이터 확대의 하나이다.dropout
기법은 매우 단순하지만, 규제 효과가 매우 강력하여 현대 기계학습에서 널리 사용된다.
dropout
이란, 입력층과 은닉층의 노드 중 일정 비율로 임의로 선택하여 제거하는 작업이다.
선택된 node는 자신에게 들어오는 edge와 나가는 edge까지 모두 제거한다.
제거하고 남은 부분 신경망으로 학습을 진행한다.
➡️ 따라서 서로 다른 부분 신경망을 아주 많이 만드는 셈이다.
➡️ Sample 하나가 학습에 여러 번 참여하므로 Sample의 개수보다 훨씬 많은 부분 신경망이 만들어진다.
Train Set에 있는 Sample 개수가 이고
한 Sample이 평균 번 학습에 참여한다면,
개의 부분 신경망이 만들어진다.
예측 단계에서는 입력 Test Sample을 학습에서 사용했던 모든 부분 신경망에 입력하여 예측 결과를 받은 다음,
투표를 통해 최종 결과를 결정하면 된다.
이처럼 여러 개의 예측기를 결합하는 접근방식을 앙상블 기법이라고 하며,
dropout을 앙상블의 일종으로 볼 수 있다.
(앙상블 기법은 Chap 12에서..)
하지만 부분 신경망이 독립적으로 동작하는 방식으로 앙상블 기법을 적용하는 데에
장애물이 있다.
dropout된 부분 신경망마다 적절한 hyper parameter를 설정하고 학습시키는 일은
힘든 작업일 뿐만 아니라, 학습된 부분 신경망을 저장하는 데에 메모리가 많이 필요.
또한 예측 단계에서 많은 시간 소요 ➡️ 실시간 동작이 필수인 응용에서는 심각한 문제
본격적으로 dropout 기법을 설계하자.
➡️ 아래의 알고리즘은 mini batch를 사용하는 version에 dropout을 적용하는데,
다른 version에도 유사하게 적용하면 된다.
서로 다른 여러 개의 model이 예측한 결과를 결합하면 Generalization 오류를 줄일 수 있다.
이처럼 model을 결합 하는 기법을 앙상블(ensemble)
기법이라 하며,
현대 기계학습에서는 emsemble기법도 규제 기법의 하나로 여긴다.
Esemble 기법에서 서로 다른 model을 결합하는 여러가지 방식이 있다.
model averaging
: 여러 model의 출력으로부터 평균을 구하거나 투표하여 최종 결과를 결정
bagging(bootstrap aggregating)
:
Train Set 를 sampling하여
개의 서로 다른 새로운 Train Set 를 구축한다.
은 에서 대치를 허용하여 임의로 개의 Sample을 sampling하므로,
와 는 크기가 같다.
대치를 허용했으므로 에는 같은 Sample이 여러 개 들어 있을 수 있다.
똑같은 신경망 model을 개의 서로 다른 Train Set 로 학습시켜
서로 다른 개의 신경망을 만든다. (개의 신경망이 가급적 서로 독립이 되도록 유지한다.)
예측 단계에서는 투표로 최종 예측 결과를 결정하면 된다.
boosting
:
번째 만든 예측기가 틀린 sample을
번째 예측기가 잘 인식할 수 있는 방식의 연계성을 가지도록 Ensemble을 구축한다.
Ensemble에 대한 자세한 내용은 Chap 12에서..
Hyper Parameter
는 학습을 시작하기 전에 미리 설정해야 하는데,Hyper Parameter 조합을 생성하는 Line 3을 어떻게 구현하느냐에 따라
세 가지 방식 수동 탐색
, 격자 탐색(Grid Search)
, 임의 탐색(Random Search)
으로 구분한다.
설정해야 할 Hyper Parameter가 2~3개인 경우에는 수동
으로 처리할 수 있지만,
그 이상이면 너무 힘든 작업이다.
따라서 격자 탐색(Grid Search)
이나 임의 탐색(Random Search)
과 같은 자동 방식을 사용한다.
아래의 그림은 , 라는 2개의 Hyper Parameter가 있는 상황이다.
예를 들어,
은 Learning Rate, 은 mini batch 크기
라고 생각할 수 있다.
Grid Search
는 각각의 paramter를 일정한 간격으로 나눈 다음,Random Search
는 난수를 이용하여 parameter 조합을 생성한다.알고리즘 5-9
로 찾은 최적값이 경계 부근에 위치한다면 건너편에 더 좋은 값이 있을 수 있다.
예를 들어, (b)에서 맨 오른쪽 점이 최적점으로 선택되었다면,
은 오른쪽 경계 너머 더 좋은 점이 있을 수 있다.
이런 식으로 의 범위를 넓혀 다시 탐색할 필요가 있다.
(이때 이외의 parameter는 찾은 최적값으로 고정하고,
의 범위만 확장하여 재차 탐색)
차원의 저주 측면에서 고려하면 Grid Search
보다 Random Search
가 유리하다.
다음은 Random Search
가 Grid Search
보다 성능이 더 좋은 이유를 설명한다.
Grid Search
는 가로축의 솟은 부분(좋은 성능)을 비껴갈 가능성이 크다.Random Search
로 최적값 를 구한 후 미세조정으로 더 좋은 값을 찾을 수 있다.
미세조정 단계에서는 을 중심으로 좁은 범위를 설정한 후
Grid Search
또는 Random Search
를 한 번 더 수행한다.
Grid Search
와 Random Search
는 모두 Heuristic한 방법론이다.