https://datasheet.tistory.com/47

손실 줄이기(Reducing Loss)

모델을 학습하려면 모델의 손실을 줄이기 위한 좋은 방법이 필요합니다. 반복 방식은 손실을 줄이는 데 사용되는 일반적인 방법 중 하나로 매우 간편하고 효율적입니다.

To train a model, we need a good way to reduce the model’s loss. An iterative approach is one widely used method for reducing loss, and is as easy and efficient as walking down a hill.

학습 목표(**Learning Objectives)**

  • 반복 방식을 사용하여 모델을 학습하는 방법을 알아봅니다.

  • Discover how to train a model using an iterative approach.

  • 전체 경사하강법과 다음과 같은변형된 방식을 이해합니다.

  • Understand full gradient descent and some variants, including:

  • 미니 배치 경사하강법

  • mini-batch gradient descent

  • 확률적 경사하강법

  • stochastic gradient descent

  • 학습률을 실험합니다.

  • Experiment with learning rate.

드디어 손실 줄이기(Reducing Loss) 단원의 마지막 강의인 확률적 경사하강법까지 왔네요.

글 밖에 없어 지루해 보이지만, 같이 살펴보도록 하겠습니다.

확률적 경사하강법(Stochastic Gradient Descent)

먼저 배치(batch) 에 대해서 설명하네요.

경사하강법에서배치는 단일 반복에서 기울기를 계산하는 데 사용하는 예의 총 개수입니다. 지금까지는 배치가 전체 데이터 세트라고 가정했습니다. 하지만 Google 규모의 작업에서는 데이터 세트에 수십억, 수천억 개의 예가 포함되는 경우가 많습니다. 또한 대개 Google 데이터 세트에는 엄청나게 많은 특성이 포함되어 있습니다. 따라서 배치가 거대해질 수 있습니다. 배치가 너무 커지면 단일 반복으로도 계산하는 데 오랜 시간이 걸릴 수 있습니다.

In gradient descent, abatchis the total number of examples you use to calculate the gradient in a single iteration. So far, we've assumed that the batch has been the entire data set. When working at Google scale, data sets often contain billions or even hundreds of billions of examples. Furthermore, Google data sets often contain huge numbers of features. Consequently, a batch can be enormous. A very large batch may cause even a single iteration to take a very long time to compute.

배치(batch) 는 용어집(Gloassary) 에서 더 쉽게 풀어 써놔서, 용어집에 있는 내용을 가져와 보겠습니다.

배치(batch)

모델 학습의 반복 1회, 즉 경사 업데이트 1회에 사용되는 예의 집합입니다.

The set of examples used in one iteration (that is, one gradient update) of model training.

제 나름 더 풀어보자면, 그래프 상에서 1회 이동 하는데 사용되는 데이터, 엑셀로 따지자면 행의 갯수라고 할 수 있습니다.

사진1. 처럼 딱 한 번 이동하는데 쓰이는 데이터라는 말이죠.

사진1. 기울기 벡터

이걸 여러번 해야하는데, 그때마다 데이터를 굉장히 많이 불러온다면 시간이 엄청 오래걸리겠죠.

다음 내용으로 넘어가 보겠습니다.

무작위로 샘플링된 예가 포함된 대량의 데이터 세트에는 중복 데이터가 포함되어 있을 수 있습니다. 실제로 배치 크기가 커지면 중복의 가능성도 그만큼 높아집니다. 적당한 중복성은 노이즈가 있는 기울기를 평활화하는 데 유용할 수 있지만, 배치가 거대해지면 예측성이 훨씬 높은 값이 대용량 배치에 비해 덜 포함되는 경향이 있습니다.

A large data set with randomly sampled examples probably contains redundant data. In fact, redundancy becomes more likely as the batch size grows. Some redundancy can be useful to smooth out noisy gradients, but enormous batches tend not to carry much more predictive value than large batches.

앞서 배치에 전체 데이터를 사용하는 것에는 문제가 있다는 것을 이야기 했습니다.

그래서 여기서는 무작위로 데이터를 일부 뽑아냈을 경우의 문제점을 이야기하고 있습니다.

무작위로 데이터를 뽑아 낼 때 중복 데이터를 뽑아낼 가능성이 있고, 적당한 중복은 도움이 될 수 있다고 합니다.

하지만, 무작위로 뽑아낸 데이터가 너무 많아지면 정확도를 높이는데 영향을 미칠 수 있는 유의미한 데이터의 비중이 낮아지게 된다고 하네요.

중복에 관한 내용은 특성이 한 개 일때를 가정하고 설명한 내용입니다.

강의 자료 제일 밑에 있는 글을 미리 보겠습니다.

간단한 설명을 위해 단일 특성에 대한 경사하강법에 중점을 두었습니다. 물론 경사하강법은 여러 개의 특성을 갖는 특성 세트에도 사용 가능합니다.

To simplify the explanation, we focused on gradient descent for a single feature. Rest assured that gradient descent also works on feature sets that contain multiple features.

특성이 여러 개 있을 때는 중복 데이터는 그냥 제거하면 되죠.

특성이 한 개 일때는 특히나 카테고리컬 데이터라면, 중복되는게 엄청 많아지겠죠.

이 내용은 추후에 실습을 하면서 직접 해봐야 잘 느껴질 것 같습니다.

여기까지의 내용은 결국배치크기가 너무 크면 안좋다!라는걸 말하고 있습니다.

배치 크기가 너무 크면 안좋다는 걸 알았습니다.

그러면 배치 크기를 조절해서 학습하는게 경사하강법 변형된 방식의 핵심이겠네요.

다음 내용을 보겠습니다.

만약에 훨씬 적은 계산으로 적절한 기울기를 얻을 수 있다면 어떨까요? 데이터 세트에서 예를 무작위로 선택하면 (노이즈는 있겠지만) 훨씬 적은 데이터 세트로 중요한 평균값을 추정할 수 있습니다.**확률적 경사하강법(SGD)**은 이 아이디어를 더욱 확장한 것으로서, 반복당 하나의 예(배치 크기 1)만을 사용합니다. 반복이 충분하면 SGD가 효과는 있지만 노이즈가 매우 심합니다. '확률적(Stochastic)'이라는 용어는 각 배치를 포함하는 하나의 예가 무작위로 선택된다는 것을 나타냅니다.

What if we could get the right gradient on average for much less computation? By choosing examples at random from our data set, we could estimate (albeit, noisily) a big average from a much smaller one.**Stochastic gradient descent (SGD)**takes this idea to the extreme--it uses only a single example (a batch size of 1) per iteration. Given enough iterations, SGD works but is very noisy. The term "stochastic" indicates that the one example comprising each batch is chosen at random.

특별히 어려운 내용은 없네요.

특징만 정리해 보겠습니다.

확률적 경사하강법(SGD, Stochastic Gradient Descent)

- gradient 를 구하는데 1개의 데이터만 사용(=배치 크기1)

- 데이터는 무작위로 선택(그래서 확률적이라는 단어가 붙음)

- 반복이 충분할 경우 효과 있음(=반복을 많이 해야함)

- 노이즈가 심함

- 각 반복마다 무작위로 선택

이것도 역시 추후에 실습으로 해보는게 제일 이해가 잘 될 것 같습니다.

그래도 조금 더 와닿게 하기 위해 GD 와 SGD 를 비교한 사진 하나 보고 가겠습니다.

사진2. SGD 와 GD 비교(출처:링크)

노이즈가 많아서 기울기가 최소값이 되는 구간까지 가는데 여러번 반복이 필요하지만, 계산이 빨라서 더 빨리 도착하겠네요.

일단은 이런게 있구나 하면서 넘어가도록 하겠습니다.

**미니 배치 확률적 경사하강법(미니 배치 SGD)**는 전체 배치 반복과 SGD 간의 절충안입니다. 미니 배치는 일반적으로 무작위로 선택한 10개에서 1,000개 사이의 예로 구성됩니다. 미니 배치 SGD는 SGD의 노이즈를 줄이면서도 전체 배치보다는 더 효율적입니다.

**Mini-batch stochastic gradient descent (mini-batch SGD)**is a compromise between full-batch iteration and SGD. A mini-batch is typically between 10 and 1,000 examples, chosen at random. Mini-batch SGD reduces the amount of noise in SGD but is still more efficient than full-batch.

1개는 너무 작은거 아니야? 했는데, 절충안이 있군요.

확률적 경사하강법(SGD)과의 차이점은 배치 크기가 더 크다는 점

미니 배치 SGD 는 어떻게 움직일지 한 번 상상해 보시고, 사진을 보시죠.

사진3. SGD 와 mini-batch SGD 비교(출처: 링크)

노이즈가 확률적 경사하강법(SGD) 보다는 많이 줄었네요.

마무리

특별히 어려운 내용은 없지만, 직접 해보지 않으면 잘 와닿지 않을 내용들이네요.

이번에는배치가 뭐고, 대략 어떤 변형된 방식들이 있구나라는 것만 얻어가면 되겠습니다.

파이썬 코드로 쉽게 GD 와 SGD 비교한 글이 있어서 링크 남겨둡니다.

Difference between Batch Gradient Descent and Stochastic Gradient Descent [WARNING: TOO EASY!]

계산은 Tensor Flow 에서 알아서 해주니 우리가 직접 구현 할 일은 없어서 참고해 보는 것도 좋겠습니다.

다음 강의인 실습을 하면서 조금 더 이해하시기 바랍니다.

실습 중에 에포크(Epochs) 가 나오는데 직감적으로 아셨을 겁니다.

누를 때 마다 올라가는 걸 보면, 반복 횟수라는걸 알아차리셨겠죠?

+ Recent posts