minibatch
x,ydata를 위와 같이 하나씩 가져와서 업데이트를 진행할때의 문제점은 cost가 크다는 점이다. 만일 백만개 데이터가 있다면 이를 하나씩 접근해서 구하기엔 비효율적이다. 이를 해결하기 위해서 아래와 같이 접근할수 있다.
5개를 한번에 뽑아서 각 loss들의 평균을 구한 cost 가지고 편미분하여 theta를 업데이트한다. 5번 실행 할 것을 한번으로 끝낼수 있다는 장점이 있다.
배치를 이용하면 cost를 사용하게 되므로 위 그림과 같은 과정으로 업데이트가 이뤄진다.
dn 까지의 dataset이 있을때, 각 dataset 마다 superscript를 표시 할수 있다.
두개의 dataset 각각 loss를 구한 뒤, 평균을 내면 cost로 바뀐다. 배치 사이즈가 2라면 위 과정처럼 진행될 것이다. 이때 theta는 위 아래 동시에 같은값이 들어가게 된다.
cost는 1/n만큼 돌려주기 때문에, 각각 1/2만큼 전달된다.
super script만 바뀔뿐 값은 똑같으며, cost에선 각각 L1, L2에 대한 편미분 구하면 1/2 씩 같은 값을 얻는다. 해당 편미분(partial derivative)을 가지고 Chain rule를 이용하여 back propagation을 아래처럼 진행한다.
순서 1)
순서 2)
순서 3)
순서 4)
(정리)
두 갈래로 흩어진 편미분 값을 더해줘야 최종적인 편미분값을 구할 수 있기 때문에 위 처럼 식이 정리가 될수 있다. 따라서 2개가 아니라 배치가 5개라면 각 dataset의 편미분값을 1/5만큼 곱해준뒤 더하면 cost로 편미분 계산한 값과 동일해진다.
값을 n개로 확장한다면 위처럼 정리가 된다. cost는 전체 loss에 대한 편미분값을 1/n 씩 만큼만 반영하게 된다. 배치를 사용하게 되면 각 loss의 편미분 값의 1/n 씩 공평하게 반영한다는 개념을 알아야 한다.
이를 이용하여 gradient descent에 적용하면 위 처럼 식이 정리가 된다. theta는 각 loss의 편미분이 공평하게 반영된 값으로 업데이트가 된다. 그러면 무조건 평균으로 업데이트 해야 할까? 아니다. 각 상황에 따라 능력껏 변경하여 적용하면 나만의 딥러닝 테크닉을 만들 수 있다.
cost를 이용할 경우에 좋은 점은 학습 시 이상치에 대해서 대응이 가능해 진다. 가장 왼쪽에 위치한 노란색 점이 이상치라고 한다면 학습 시 오른쪽 그림처럼 세타값이 튀게 된다. 만일 다른 point들과의 loss 평균을 계산하게 되면 큰 값이 감소가 되어서
위처럼 다소 안정적인 학습 모습을 갖출수 있게 된다.
batch size를 더욱 더 키우게 된다면 dataset의 전체적인 특성을 잘 반영하게 된다. 아래 그림을 통해 자세히 알아보자.
x1,x3,x6은 predictor보다 위쪽에 위치해 있다. 이 세개의 개별적인 loss를 가지고 업데이트 시키면 predictor를 1,3,6 선에 맞게끔 키울 것이다. 반대로 2,4,5은 predictor 보다 낮은 위치에 있기 때문에 predictor를 아래로 끌어 내릴 것이다. 이렇게 되면 예측선이 왔다갔다 어느 장단에 맞출지 혼란 스럽게 될 것이다.
cost를 사용하여 모두가 대체로 만족할만한 특성을 반영 할수있다.(초록색)
vectorization
배치 사이즈가 n개 있을 때 위 처럼 벡터로 간단하게 표현할수있다(n개 라면 n 차원 벡터) cost는 평균이므로 스칼라 값이 된다. 이를 통해 jacobian matrices를 적용 할수 있다.
순서 1)
각 함수 별 theta를 편미분 해주면 x1~xn까지의 컬럼벡터가 만들어진다.
순서 2)
순서 3)
순서 4)
구한 jacobian matrices은 back propagation 할때 사용된다.
순서 1)
단지 곱셈만 해주면 된다. 이후에 과정도 같은 원리로써 구한 jacobian matrices를 곱셈 해주면 된다.
순서2)
순서3) 우리가 최종적으로 알고 싶은 업데이트 part
(정리)
jacobian이 적용되면서 달라진 점이 무엇이 있는지 알아 보자
파란 박스의 편미분값을 보면 빨간 벡터로 정리 할수 있겠다. 이는 각 dataset loss의 편미분 값들이다. 여기서 cost 함수가 하는 역할을
forward 일때는 전체적인 loss들의 평균값을 구해주고 back propagation 할때는 1/n 씩 반영 시키는 역할을 한다. 위 과정처럼 1*n의 row vactor가 각 loss의 편미분 값과 곱해진다. 이 점이 loss와 cost의 차이점이다.
'Data Diary' 카테고리의 다른 글
2021-08-17(딥러닝수학 9_Vectorization2 &batch Gradient Descent ) (0) | 2021.08.17 |
---|---|
2021-08-12(태블로_중급) (0) | 2021.08.12 |
2021-08-10(태블로_기초편) (0) | 2021.08.10 |
2021-08-09(딥러닝 수학 7_ gradient descent2 & learning late) (0) | 2021.08.09 |
2021-08-06(태블로 기본컨셉 이해하기) (0) | 2021.08.09 |