Keras의 batch_size가 결과 품질에 영향을 줍니까?


38

2-3 백만 개의 기사로 큰 LSTM 네트워크를 훈련하려고하고 메모리 오류로 어려움을 겪고 있습니다 (AWS EC2 g2x2large 사용).

한 가지 해결책은을 줄이는 것 batch_size입니다. 그러나이 매개 변수가 메모리 효율성 문제와 관련이 있는지 또는 결과에 영향을 미치는지 확실하지 않습니다. 사실, 나는 또한 batch_size예제에서 사용되는 것이 보통 2의 거듭 제곱이라는 것을 알았습니다.

내 네트워크가 훈련하는 데 시간이 더 걸리더라도 신경 쓰지 않지만 batch_size예측을 줄이면 예측 품질이 저하 되는지 알고 싶습니다 .

감사.


이 질문은 케 라스에만 국한된 것은 아닙니다. 일반적인 합의는 더 작은 표본 크기가 느리게 수렴하지만 지역 최소 점에 갇히는 경향이 적다는 것입니다.
Alex

배치 크기가 너무 크면 동일한 수의 훈련 시대에도 수렴을 방지 할 수있는 경우를 보았습니다.
커티스 화이트

답변:


43

1 년 반 후, 이전 답변이 잘못 되었기 때문에 답변으로 돌아옵니다.

배치 크기는 학습에 큰 영향을 미칩니다. 네트워크를 통해 배치를 배치하면 그라디언트를 평균화한다는 것입니다. 배치 크기가 충분히 크면 전체 데이터 세트의 기울기가 무엇인지에 대한 안정적인 추정치를 제공한다는 개념입니다. 데이터 세트에서 샘플을 가져 와서 계산 비용을 크게 줄이면서 기울기를 추정 할 수 있습니다. 갈수록 낮을수록 추정치의 정확도는 떨어지지 만 시끄러운 그라디언트는 실제로 로컬 최소 점을 피하는 데 도움이 될 수 있습니다. 데이터가 너무 낮 으면 데이터에 노이즈가 있고 학습 할 수 없거나 매우 느리게 수렴되어 전체 계산 시간에 부정적인 영향을 미치면 네트워크 가중치가 급격히 증가 할 수 있습니다.

일괄 처리의 또 다른 장점은 GPU 계산의 이점이며 GPU는 계산의 일부가 동일한 경우 (예 : 네트워크의 동일한 가중치 행렬에 대해 반복 된 행렬 곱셈) 신경망에서 발생하는 계산을 병렬화하는 데 매우 유용합니다. 즉, 배치 크기 16은 배치 크기 8의 두 배보다 적습니다.

더 큰 배치 크기가 필요하지만 GPU에 맞지 않는 경우 작은 배치를 공급하고 기울기 추정값을 저장하고 하나 이상의 배치를 공급 한 다음 가중치 업데이트를 수행 할 수 있습니다. 이 방법으로 가상 배치 크기를 늘 렸기 때문에보다 안정적인 그라디언트를 얻을 수 있습니다.

잘못되고 오래된 대답 : [[[아니요, batch_size는 평균적으로 학습 속도가 아니라 학습 속도에만 영향을 미칩니다.) batch_sizes는 2의 거듭 제곱 일 필요는 없지만 특정 패키지는 2의 거듭 제곱 만 허용한다는 것을 이해합니다. 가능한 최대 속도를 얻으려면 여전히 GPU의 메모리에 맞는 가능한 가장 높은 batch_size를 가져와야합니다. .]]]]


32를 감당할 수는 없지만 16을 감당할 수는 있지만 너무 느립니다. 16-32 또는 16을 고수해야한다고 생각합니까?
hipoglucido

몇 가지 가치를 시도하고 시간을 정할 것입니다. 모든 신기원은 같은 시간에 있어야하므로 너무 오래 걸리지 않습니다. 이 17의 힘은 GPU 및 / 또는 Keras의 백엔드에 달려 있기 때문에 내가 관심이 있기 때문에 더 빠르거나 느린 지 먼저 17 번 시도하십시오. 그러나 나는 단지 그것을 테두리에 채우는 것이 가장 좋을 것이라고 생각한다
Jan van der Vegt

9
배치 크기가 학습 품질에 영향을 미치지 않습니까? 작은 배치가 큰 배치보다 노이즈가 더 적다고 말한 블로그 / 종이 (?)를 읽은 것을 기억합니다. 그래도 이것이 LSTM에 적용되는지 확실하지 않습니다.
stmax

완전히 확신하지는 않았지만 충분한 경험이 없었지만 이것이 내가 읽은 것입니다. 그라디언트가 덜 안정적이어서 꺼져있을 수 있습니다.
Jan van der Vegt

2
1 년 반 후에 지금은 훨씬 더 많은 지식을 가지고 있으며 동의합니다. 나는 대답을 바꿀 것입니다
Jan van der Vegt

11

나는 대답이 틀렸다고 생각한다. 그라디언트 하강 알고리즘 에는 변형이 있습니다 .

  1. 바닐라 그라디언트 하강 : 여기서 그라디언트는 모든 데이터 포인트에서 한 번의 샷으로 계산되고 평균이 취해집니다. 따라서 우리는 더 부드러운 그라디언트 버전을 배우기까지 시간이 오래 걸립니다.

  2. 확률 적 그라디언트 디센트 : 여기에서 한 번에 하나의 데이터 포인트로 인해 그라디언트는 공격적이므로 (노이즈 그라디언트) 많은 진동이 발생합니다 (모멘텀 매개 변수-예 : Nesterov를 사용하여 제어). 따라서 진동으로 인해 알고리즘이 로컬 최소값에 도달하지 못할 수도 있습니다 (분할).

  3. Mini-Batch Gradient Descent : 이전 배치 의 특권을 취하는 작은 배치의 평균 경사도. 따라서 SGD와 같이 너무 공격적이지 않으며 바닐라 GD가 절대 허용하지 않은 온라인 학습을 허용합니다.

미니 배치가 작을수록 모델의 성능이 향상 될 수 있으며 (항상 그런 것은 아님) 물론 학습 속도가 너무 빠릅니다. 대규모 데이터 세트에 대한 교육을 받고 있다면 우수한 성능으로 더 빠른 수렴을 원하므로 Batch-GD를 선택하십시오.

SGD는 학습 매개 변수가 고정되어 있으므로 Adam, AdaDelta, RMS Prop 등과 같은 다른 적응 형 최적화 프로그램을 시작하여 그라디언트의 역사에 따라 학습 매개 변수를 변경합니다.


3) 일반적으로 미니 배치
Alex

@Alex : 변경 사항이 추가되었습니다.
Jil Jung Juk

1
배치 크기 매개 변수에 관한 규칙이 없다는 데 동의합니다. 그러나이 진술은 "미니 배치가 작을수록 모델의 성능이 더 나을 것입니다"는 일반적인 규칙에 위배됩니다. 일반적으로 배치 크기를 최대화하려고합니다.
MonsieurBeilto

4

이상하게도, 케라 스가있는 더 큰 배치 크기는 수렴하는 데 더 많은 에포크가 필요하다는 것을 알았습니다.

예를 들어, 출력 이 스크립트 keras '를 기반으로 통합 테스트 입니다

epochs 15   , batch size 16   , layer type Dense: final loss 0.56, seconds 1.46
epochs 15   , batch size 160  , layer type Dense: final loss 1.27, seconds 0.30
epochs 150  , batch size 160  , layer type Dense: final loss 0.55, seconds 1.74

관련

너무 큰 배치 크기를 사용하면 기울기 하강의 확률을 감소시키기 때문에 훈련 중 네트워크 정확도에 부정적인 영향을 줄 수 있습니다.

편집 : 대부분의 시간, 증가 batch_size연산을 빠르게하는 것이 바람직하지만,을 통해 작은 풋 프린트의 데이터 유형을 사용하는 것과 같이,이 작업을 수행하는 다른 간단한 방법이 있습니다 dtype에서 인수 여부 keras 또는 tensorflow 예를 들어, float32대신에이float64


배치가 클수록 (에포크 당 수가 적을수록) 에포크 당 그라디언트 업데이트가 줄어 듭니다. "epoch"는 "훈련 중 데이터를 한 번만 통과"하는 ML 전문 용어입니다. 훈련 속도를 높이려면 벽 시간을 측정하고 신기원을 무시하십시오.
앤드류 바그너
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.