[Ⅱ. Deep Neural Network] Practical Aspects of Deep Learning (2)
Practical Aspects of Deep Learning
Setting up your Machine Learning Application
Bias/Variance
저는 거의 모든 정말 좋은 기계 학습 편향 및 분산이 실무자는 편향과 분산에 대해 매우 수준높은 이해를 하는 경향이 있습니다. 쉽게 배울 수 있지만 마스터하기 어려운 개념 중 하나라는 것을 알아 차렸습니다. 편향과 분산의 기본 개념을 봤다고 생각하더라도, 항상 여러분이 예상하지 못했던 새로운 부분이 있습니다.
딥러닝 오류에서, 또 하나의 트렌드는, 편향/분산 트레이드 오프라고 불리는 것에 대한 논의가 적습니다. 딥러닝 오류에서는 트레이드 오프가 더 적습니다. 그래서 우리는 여전히 편향에 대해 이야기하고 있습니다. 우리는 여전히 분산에 대해 이야기하고 있죠. 하지만 우리는 편향/분산 트레이드 오프에 대해 덜 이야기 할겁니다. 이게 뭘 의미하는지 보시죠.
다음과 같은 데이터 세트를 살펴보겠습니다. 만약 여러분이 데이터에 직선을 맞추면, 아마도 그것에 맞는 로지스틱 회귀를 얻을 수 있습니다. 이것은 데이터에 매우 적합하지 않으니, 그래서 이것은 높은 편향에 대한거죠 그래서 이것이 데이터에 적합하지 않다고 가정해 봅시다.
반대로, 엄청나게 복잡한 분류기를 맞추면, 아마도 심층 신경망이될 수도 있고, 또는 은닉 유닛을 가진 신경망이, 여러분은 데이터를 완벽하게 맞출 수 있습니다. 하지만 그것도 아주 잘 맞는 것 같지는 않아요. 따라서 고분산 분류기가 있으며 이는 데이터에 과적합됩니다.
그리고 중간 수준의 복잡성을 가진 분류기가, 그 사이에 있을 수 있습니다. 그래서, 여러분도 아시다시피, 어쩌면 이러한 곡선에 맞을 수 있습니다. 데이터에 훨씬 더 합리적으로 적합해 보입니다. 그래서 우리는 그것을, 아시다시피, 딱 맞는 것이라고 부릅니다. 그 사이 어딘가에 있어요.
따라서 이와 같은 2D 예에서는, 단 두가지 특지이으로, $x_1$과 $x_2$라는 두 가지 기능만 있으면 데이터를 플로팅하고 편향과 분산을 시각화할 수 있습니다. 고차원 문제에서는 데이터를 플롯하고 분할 경계를 시각화할 수 없습니다. 대신 편향과 분산을 이해하기 위해 살펴볼 몇 가지 다른 메트릭이 있습니다.
고양이 사진 분류의 예를 계속하겠는데요. 여기서 긍정적인 예와 부정적인 예는, 편향과 분산을 이해하기 위해 살펴봐야할 두 가지 주요 숫자는 다음과 같습니다. 훈련 세트 오류와 개발 세트 또는 테스트 세트 오류입니다.
그래서 논쟁을 위해 여러분이 사진에서 고양이를 인식하고 있다고 가정해 보면 사람들이 거의 완벽하게 할 수 있는 일이죠. 그래서 훈련 세트 오류가 1%이고 개발 세트 오류는 논쟁을 위해 11%라고 가정해봅시다.
이 예제에서는 훈련 세트에서는 매우 잘 하고 있지만, 개발 세트에서는 상대적으로 저조합니다. 그래서 이것은 여러분이 훈련 세트를 과적합한 것 같습니다. 어떻게든 개발 세트와 함께 이 홀드아웃 교차 검증 세트를 잘 일반화하지 못하고 있다는 것입니다.
따라서 이와 같은 예가 있는 경우, 우리는 이것에 분산이 높다고 말할 수 있습니다. 따라서 훈련 세트 오류와 개발 세트 오류를 보고, 분산이 높은 알고리즘의 진단을 렌더링할 수 있습니다.
이제 훈련 세트와 개발 세트 오류를 측정하고 다른 결과를 얻었다고 가정해 보겠습니다. 이제 훈련 세트와 개발 세트 오류를 측정하고 다른 결과를 얻었다고 가정해 보겠습니다. 훈련 세트 오류가 15%라고 가정해 보겠습니다. 맨 윗줄에 훈련 세트 오류를 쓰고 있는데, 개발 세트는 16%입니다. 이 경우 인간이 대략 0%의 오차를 달성한다고 가정하면, 인간은 이 사진을 보고 고양이인지 아닌지 알 수 있습니다. 그러면 알고리즘이 훈련 세트에서 잘 작동하지 않는 것처럼 보입니다.
따라서 잘 보이는 것처럼 훈련 데이터에도 적합하지 않은 경우, 그러면 데이터가 과소적합됩니다. 그래서 이 알고리즘은 높은 편향을 가지고 있습니다 그러나 이와는 대조적으로 이것은 실제로 합리적인 수준을 개발 세트로 일반화하고, 반면 개발 세트의 성능은 훈련 세트의 성능보다 1%만 안좋습니다. 따라서 이 알고리즘은 훈련 세트에도, 적합하지 않기 떄문에 바이어스가 높다는 문제가 있습니다. 이것은 이전 그림에서 가장 왼쪽에 있는 플롯과 유사합니다.
여기 또 다른 예가 있습니다. 15% 훈련 세트 오류가 있다고 가정해 보겠습니다. 따라서 그것은 상당히 높은 편향입니다. 그러나 여러분이 개발 세트로 평가하면 더 나빠집니다. 아마도 여러분도 아시다시피 30% 정도 일것입니다. 이 경우 이 알고리즘은 훈련 세트에서 잘 수행되지 않고 편향이 높기 때문에 높은 편향으로 진단됩니다. 그래서 이것은 최악의 상황을 모두 가지고 있습니다.
그리고 마지막으로 한 가지 예를 들면 만약 0.5%의 훈련 세트 오류가 있고 1%의 개발 세트 오류가 있다고 하면, 이 경우에 사용자는 꽤 만족할 수도 있습니다. 만약 1%의 오차만 있는 고양이 분류기가 있으면, 그러면 이는 낮은 편향과 분산을 가지고 됩니다.
미묘한 부분은 간단히 언급하겠습니다. 추후 자세히 다루겠습니다.
이 분석은 인간 수준의 성능이 거의 0% 오류를 얻거나 더 일반적으로 최적의 오류가 15%라는 가정에 기반을 두고 있다는 것입니다. 때로는 Bayes 오류라고도 합니다. 그래서 Bayes의 최적 오차는 거의 0% 입니다. 만약 최적의 오류나 Bayes 유류가 훨씬 더 높다면 15%가 실제로 훈련 세트에 대해 완벽하게 합리적이며 그것이 높은 편향이고 또한 상당히 낮은 분산이라고 말하지는 않을 것입니다.
예를 들어 분류기가 잘 할 수 없을 때, 편향과 분산을 분석하는 방법의 경우 만약 여러분에게 흐릿한 이미지가 있는 경우 심지어 인간이든 또는 어떠한 시스템도 잘 할 수 없습니다. Bayeㄴ 에러가 훨씬 더 높을 수도 있죠. 그러면 이 분석이 어떻게 변할 것인지에 대한 몇 가지 세부사항이 있습니다.
하지만 지금은 이 미묘함을 제쳐두고 가지고 가실 내용은 훈련 세트 에러, 얼마나 잘 맞는지에 대한 감각을 얻을 수 있습니다. 적어도 훈련 데이터는 그러한 편향 문제가 있는 경우 그런 다음 훈련 세트에서 개발 세트로 이동할 때 오류가 얼마나 더 높아지는지 살펴보고 훈련 세트와 분산 문제가 얼마나 심각한지를 이해해야 합니다.
따라서 훈련 세트에서 개발 세트로 일반화하는 작업을 잘 수행하고 있어 분산을 느낄 수 있습니다. 이 모든 것은 Bayes 오류가 상당히 많다고 가정하고 있습니다. 개발 세트가 동일한 분포에서 가져온 것임을 알 수 있습니다.
이 가정들이 부합하지 않는 경우에는 할 수 있는 조금 더 정교한 분석이 있습니다. 이 부분은 나중에 다루겠습니다. 이전 그림에서는 높은 편향과 큰 변수를 가진 것이 어떻게 생겼는지 보았는데요. 그리고 좋은 분류기가 어떤지에 대한 감을 지녔다고 생각합니다. 높은 편향과 높은 분산은 어떤 모습일까요? 최악의 경우 2가지를 합친 것인데요.
기억하시겠지만 우리는 분류기가 다음과 같다고 말했는데요. 선형 분류기는 높은 편향을 가지며, 데이터에 과속적합하기 때문입니다. 그래서 이것은 대부분 선형인 분류기일 것이고, 따라서 데이터에 적합하지 않습니다. 그래서 보라색 선을 그립니다. 그런데 만약 여러분의 분류기가 이상하게 작동하여 그러면 실제로 데이터의 일부도 과적합됩니다. 이렇게 보라색으로 그린 선을 보면 큰 편향과 큰 변수의 값을 갖게됩니다.
큰 편향을 갖는 부분은 대부분 선형 분류기이므로 단지 맞지 않는다면, 여러분도 아시다시피, 이 2차 선모양은 잘 맞습니다. 그러나 중간에 너무 많은 유연성을 가지고 있기 때문에 어떻게든 이 예를 얻습니다. 그리고 이 예와 같은 두 가지 예에도 너무 적합합니다. 그래서 이 분류기는 높은 편향을 가지고 있는데요.
왜냐하면 대부분 선형적이기 때문입니다. 하지만 곡선 함수나 이차 함수가 필요할 수 있습니다. 또 큰 변수를 갖습니다. 두 개의 잘못된 레이블 또는 중간에 정렬된 예를 맞추기에는, 너무 많은 유연성이 있었기 때문입니다. 이것이 억지로 짜 맞춘것 같이 보이면, 이 예는 2차원에서 약간 고안되었지만 매우 높은 차원 입력을 포함합니다. 당신은 실제로 덜 인위적으로 보이는 일부 영역에서의 높은 편향 및 일부 영역의 높은 분산이죠. 따라서 다음과 같은 분류기를 얻을 수 있습니다. 고차원 입력에서 이를 얻습니다.
요약하자면 알고리즘의 오류를 살펴봄으로써 훈련 세트와 개발 세트에 대한 알고리즘의 오류, 진단을 시도할 수 있습니다. 큰 편향이나 분산이 있는지 여부를 진단할 수 있다는 사실을 직접 보았습니다. 둘다 일수도 있고, 둘다 아닐수도 있겠죠. 여러분의 알고리즘이 편향이나 변수의 악영향을 받고 있는 경우에 따라 알고보니 시도할 수 있는 여러 방법이 있습니다. 다음에는 머신러닝을 위한 기본 레시피라고 부르는 높은 편향 또는 높은 분산 문제가 있는지 여부에 따라 알고리즘을 보다 체계적으로 개선하는 것을 다루겠습니다.
Basic Recipe for Machine Learning
훈련 오류와 깊이 오류를 살펴보면 알고리즘에 편향이나 분산 문제가 있는지 또는 둘 다 있는지 진단하는데 어떻게 도임이 되는지 보았습니다. 이 정보는 머신러닝을 위한 훨씬 더 많은 그들이 기본 레시피라고 부르는 것을 체계적으로 사용한다는 것입니다. 레시피를 제공하고 알고리즘 성능을 훨씬 더 체계적으로 개선할 수 있게 해줍니다.
신경망을 훈련할 때 사용할 기본 레시피는 다음과 같습니다. 초기 모델을 훈련한 이후 시점에 먼저 높은 편향이 있는지 살펴봅니다. 따라서 높은 편향이 있는지 평가하려면 보셔야 할게 실제로 훈련 세트나 훈련 데이터 성능을 살펴봐야 합니다. 따라서 높은 편향이 있는 경우 훈련 세트에 잘 맞지 않거나 더 오래 훈련할 수 있고 시도할 수 있는 몇 가지 방법은 네트워크를 선택하는 것입니다.
예를 들어, 더 많은 은닉층이나 더 많은 은닉 유닛이 있고 훈련을 더 오래 실행하거나 더 고급 최적화 알고리즘을 시도할 수 있습니다. 그러나 나중에 신경망 아키텍처가 매우 다양하고 이 문제에 더 적합한 새로운 네트워크 아키텍처를 찾을 수 있다는 것을 알게 될 것입니다. 이것을 괄호 안에 넣으면 그 중 하나이기 때문에 단지 시도해야 합니다. 어쩌면 그것을 작동하게 할 수도 있고 아닐 수도 있습니다.
더 큰 네트워크를 얻는 것이 거의 항상 도움이 되고 더 오래 훈련하는 것이 항상 도움이 되는 것은 아닙니다. 확실히 좋지 않을 것은 없습니다. 하지만 그래서 학습 알고리즘을 훈련할 때 적어도 편향 문제를 제거할 수 있을 때까지 이것을 시도한 후 되돌아가서 맞출 수 있을 때까지 그것을 계속합니다. 적어도 훈련 세트에 꽤 잘 맞을 때까지 이러한 것들을 시도할 것입니다.
그리고 만약 네트워크가 충분히 크면 일반적으로 훈련 데이터를 잘 맞출 수 있어야 하므로 누군가 할 수 있는 문제니까요. 이미지가 흐릿하다면 적합하지 않을 수 있습니다. 그러나 최소한 사람이 작업을 잘 수행할 수 있고, bayes오류가 너무 높지 않다고 생각한다면, 충분히 큰 네트워크를 훈련함으로써 가능해야 하는데 최소한 훈련 세트에 적합하거나 과적합되도록 적어도 훈련 세트에서 잘 하시기 바랍니다.
편향을 허용 가능한 정도로 줄이면, 다음과 같이 묻고싶어요, 분산 문제가 있나요? 그리고 평가하기 위해 개발 세트 성능을 살펴보겠습니다. 꽤 좋은 훈련 세트 성능에서 꽤 좋은 개발 세트 성능까지 일반화할 수 있나요? 그리고 분산이 높으면 고분산 문제를 해결하는 가장 좋은 방법은 더 많은 데이터를 얻는 것이며 이것은 여러분도 아시다시피 도움이 될 수 있습니다. 그러나 때때로 더 많은 데이터를 얻을 수 없습니다. 또는 여러분은 정규화를 시도할 수 있지만 과적합을 줄이려 할 것입니다. 그리고 가끔은 시도해야만 하는 경우도 있습니다. 하지만 더 적절한 신경망 아키텍처를 찾을 수 있다면 때로는 여러분의 분산 문제도 줄일 수 있습니다. 편향도 함께 줄일 수도 있죠. 하지만 어떻게 하면 그렇게 할 수 있을까요? 완전히 시스템적인 접근을 찾는 것은 생각보다 어렵습니다. 하지만, 그래 이러한 것들을 시도하고 희망적으로 낮은 바이어스와 낮은 분산을 가진 것을 찾을 때까지 계속 되돌아갑니다. 기 시점에 도달했으면 완성했다고 볼 수 있습니다
몇 가지 주목해야 할 점이 있습니다.
첫째, 높은 바이어스 또는 고분산이 있는지 여부에 따라 시도해야 하는 항목의 집합은 상당히 다를 수 있습니다. 그래서 저는 일반적으로 훈련 개발 세트를 사용하여 바이어스 또는 분산 문제가 있는지 진단하려고 시도합니다. 그런 다음 시도할 항목의 적절한 하위 집합을 선택하는 데 사용합니다.
예를 들어, 실제로 높은 바이어스 문제가 있는 경우, 더 많은 훈련 데이터를 얻는 것은 실제로 도움이 되지 않습니다. 또는 적어도 가장 효율적인 방법은 아니에요. 따라서 바이어스 문제 또는 분산 문제가 얼마나 많은지 명확하게 알 수 있죠 둘 다 시도할 가장 유용한 항목을 선택하는 데 집중하는 데 도움이 될 수 있습니다.
둘째로, 머신러닝 초기에는 편향 분산 트레이드오프라는 것에 대한 많은 논의가 있었습니다. 여러분이 시도할 수 있는 여러 가지 방법 중에 편향을 늘리면서 동시에 변동을 줄이거나 편향를 줄임과 동시에 변동을 늘릴 수 있기 때문이죠. 하지만 딥러닝 이전 시대로 돌아가서 우리에게는 도구가 많지 않았고 우리는 감소시키는 도구가 그리 많지 않았죠. 편향 또는 다른 하나를 치지 않고 분산을 줄이는 것입니다.
하지만 현재 딥러닝은 빅 데이터 시대에 맞게 더 큰 네트워크를 계속 훈련할 수 있고 더 많은 데이터를 계속 얻을 수 있는 한, 항상 그런 것은 아니지만, 하지만 만약 그렇다면, 그런 다음 적절하게 정규화하는 한 반드시 여러분의 분산을 손상시키지 않으면서 편향을 줄입니다. 거의 항상 더 큰 네트워크를 얻을 수 있습니다 그리고 더 많은 데이터를 얻으면서 거의 항상 분산을 줄이고 편향를 크게 해치지 않습니다.
그래서 실제로 일어난 일은, 이 두 단계를 통해, 훈련시키는 능력, 네트워크를 고르는 능력, 데이터를 더 얻음으로써, 우리는 이제 다른 것을 크게 해치지 않으면서 편향을 낮추고 편향를 낮추거나 분산을 낮추고 분산을 줄이는 도구를 가지고 있습니다. 그리고 이것이 딥러닝이 지도 학습에 매우 유용한 큰 이유 중 하나라고 생각하는데요. 편향와 분산의 균형을 신중하게 맞춰야 하는 이 절충안이 훨씬 적습니다 그러나 때로는 다른 하나를 반드시 증가시키지 않고도 바이어스를 줄이거나 분산을 줄이기 위한 더 많은 옵션이 있습니다.
그리고 사실 마지막으로 여러분에게는 잘 정규화된 네트워크가 있습니다. 다음은 정규화에 대해 이야기하겠습니다.
댓글남기기