미니 배치 그라디언트 디센트는 배치에서 각 예제의 가중치를 어떻게 업데이트합니까?


12

일괄 처리로 10 개의 예를 처리하는 경우 각 예의 손실을 합산 할 수 있지만 각 예의 가중치 업데이트와 관련하여 역전 파는 어떻게 작동합니까?

예를 들면 다음과 같습니다.

  • 예 1-> 손실 = 2
  • 예 2-> 손실 = -2

결과적으로 평균 손실은 0 (E = 0)이되므로 각 가중치와 수렴을 어떻게 업데이트합니까? 우리가 조만간 "희망적으로"수렴하는 배치의 무작위 화에 의한 것입니까? 또한 이것은 마지막으로 처리 된 예제의 첫 번째 가중치 집합의 그라디언트 만 계산하지 않습니까?

답변:


15

그라데이션 하강은 제안한 방식으로 작동하지 않지만 비슷한 문제가 발생할 수 있습니다.

배치에서 평균 손실을 계산하지 않고 손실 함수의 평균 기울기를 계산합니다. 기울기는 가중치에 대한 손실의 미분이며 신경망에서 하나의 가중치에 대한 기울기는 해당 특정 예의 입력에 따라 다르며 모델의 다른 많은 가중치에도 의존합니다.

모델의 가중치가 5이고 미니 배치 크기가 2 인 경우 다음을 얻을 수 있습니다.

예 1. 손실 = 2,gradients=(1.5,2.0,1.1,0.4,0.9)

예 2. 손실 = 3,gradients=(1.2,2.3,1.1,0.8,0.7)

이 미니 배치의 그라디언트 평균은 다음과 같이 계산됩니다(1.35,0.15,0,0.2,0.8)

여러 예에 대한 평균의 이점은 기울기 변화가 적어 학습이보다 일관되고 한 예의 세부 사항에 덜 의존한다는 것입니다. 세 번째 가중치의 평균 기울기가 인 방법에 주목하십시오 .이 가중치는이 가중치 업데이트를 변경하지 않지만 다른 가중치로 계산 된 다음 예제에서는 0이 아닐 가능성이 높습니다.0

주석에 대한 응답으로 편집 :

위의 예에서 그라디언트의 평균이 계산됩니다. 각 예에 대한 손실 를 계산하는 의 미니 배치 크기의 경우 가중치 대한 손실의 평균 기울기를 얻는 것을 목표로합니다 .kLiwj

내 예제에서 쓴 방식은 다음과 같이 각 그라디언트의 평균을 구했습니다.Lwj=1ki=1kLiwj

주석에서 링크 된 학습서 코드는 Tensorflow를 사용하여 평균 손실을 최소화합니다.

Tensorflow는 를 최소화하는 것을 목표로합니다.1ki=1kLi

이를 최소화하기 위해 각 가중치에 대한 평균 손실의 그라디언트를 계산하고 그라디언트 디센트를 사용하여 가중치를 업데이트합니다.

Lwj=wj1ki=1kLi

미분은 합계 내로 가져올 수 있으므로 내 예제의 접근 방식과 동일합니다.

wj1ki=1kLi=1ki=1kLiwj


알았어 batch_size에 대한 손실을 여전히 평균화하고 싶습니까? 당신이 tensorflow에 익숙하지만이 튜토리얼에 대한 이해를 조정하기 위해 노력했는지 확실하지 않습니다 : tensorflow.org/get_started/mnist/beginners는 당신은 손실이 배치 (reduce_mean 코드)에 걸쳐 평균화 볼 수 있습니다. 텐서 플로우가 가중치의 내부 수 / 평균을 유지한다고 가정합니까?
carboncomputed

1
@carboncomputed 아 맞습니다. Tensorflow가 평균 손실의 그라디언트를 계산할 때 각 손실에 대한 그라디언트의 평균을 효과적으로 계산하도록 손실을 평균합니다. 이에 대한 수학을 보여주기 위해 답변을 편집하겠습니다.
Hugh

흥미 롭군 설명 주셔서 감사합니다. 좀 더 깊이 파고 들기 위해 순방향 패스 동안 예제 당 가중치 그라디언트가 계산되고 저장되거나 tensorflow에서 최적화 프로세스 중에 계산됩니까? tensorflow에서 이러한 그라디언트가 "어디로"누락되어 있다고 가정합니다. 순방향 패스와 손실을 볼 수 있으므로 tensorflow가 후드에서 이러한 그라디언트 계산 / 평균을 수행합니까?
carboncomputed

1
@carboncomputed 그것은 Tensorflow의 호소력으로, 상징적 인 수학을 사용하고 후드 아래에서 차별화를 수행 할 수 있습니다
Hugh

깔끔한 답변 감사합니다. 그러나, 나는 TF가 같이 평균 손실 전파를 백업하는 방법을 알고 방법을 이해하는 데 실패 , code line 170?
sinner

-1

미니 배치를 사용하는 이유는 효과를 평균화하여 가능한 노이즈를 줄이려면 충분한 양의 훈련 예를 갖추어야하지만 많은 데이터 세트의 경우 많은 양의 메모리가 필요할 수있는 전체 배치가 아닙니다. 한 가지 중요한 사실은 평가하는 오류가 항상 거리라는 것입니다예상 출력과 실제 출력 사이의 차이는 음수가 될 수 없으므로 2와 -2의 오류를 취소 할 수는 없지만 대신 4의 오류가됩니다. 그런 다음 모든 가중치와 관련하여 오류의 기울기를 평가하므로 가중치의 변화가 가장 적은 것을 계산할 수 있습니다. 그렇게하면 학습 속도 알파의 크기에 따라 해당 방향으로 "단계"를 수행합니다. (이것은 기본 개념입니다. 심층 NN의 역 전파에 대해서는 자세히 설명하지 않습니다.) 특정 수의 에포크에 대한 데이터 세트에서이 교육을 실행 한 후 학습 단계가 너무 크지 않으면 네트워크가 수렴 될 것으로 예상 할 수 있습니다. 그것을 분기 시키십시오. 여전히 지역 최소값으로 끝날 수 있습니다., 이는 다른 가중치를 초기화하고, 차등 최적화 도구를 사용하고, 정규화하려고하면 피할 수 있습니다.


추가하는 것 : 우리는 주로 계산 효율성을 위해 미니 배치를 사용합니다. 우리는 하강의 정확성과 무게의 업데이트 빈도 사이에 상충 관계가 있습니다. 메모리에 들어 가지 않으려면 데이터가 매우 커야합니다.
Łukasz Grad

각각 이해하지만 특정 배치에 대한 가중치를 어떻게 업데이트합니까? 가중치 그라디언트도 각 예제에 합산됩니까?
carboncomputed

아니요, 총 배치 오류에 대해 미분 벡터로 구성된 하나의 그라디언트 만 있습니다. 즉, 기울기를 기반으로 가중치를 한 번 업데이트합니다. 즉,이 미니 배치의 오류를 가장 많이 줄이는 업데이트 방향입니다. 기울기는 부분 미분, 즉 각 가중치에 대한 미니 배치 오류의 미분 pf로 구성됩니다. 이는 각 가중치가 더 작아 지거나 커져야하는지 여부와 그 정도를 알려줍니다. 모든 가중치는 배치에 대해 하나의 업데이트를 가져 와서 해당 미니 배치의 오류를 줄입니다. 이는 다른 미니 배치와 독립적입니다.
dante
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.