저번 딥러닝 수학9에서 배웠던 V 형태의 loss function들을 어떻게 합쳐서 cost function으로 만드는지와 합쳐졌을때 이상적인 학습이 어떤 모습을 보일지 자세히 알아본다.
*실습링크
2021.09.04 - [실습 note] - 딥러닝 수학 실습과제 모음 9~12
1. Cost function
두개 data sample에 대해서 각각 loss function이 왼쪽과 같이 그러져 있다. 이 두개의 loss function을 평균내서 cost function의 contour plot을 그리면 오른쪽 처럼 동글 동글한 모양을 가지게 된다. 이 contour plot은 theta0,1이 균일하게 학습되므로 가장 이상적인 모습이다. 그래서 우리가 해야 할건 여기서 정해진다. 어떤 데이터 이건 모두 평균내서 최대한 오른쪽 contour plot 처럼 동글동글한 모양을 가지도록 해야 학습에 유리하다는 것이다. 이해를 돕기 위해 다른 data sample의 cost function을 보도록 하자
X 절대값 2의 data sample들이 있을때 loss function은 왼쪽처럼 표현이 가능하고 cost function의 contour plot은 오른쪽처럼 위 아래가 쭉 늘어진 형태를 보인다. 즉, 절대값에 따라서 cost function의 모양이 결정된다.
1보다 작은 x 절대값일 경우엔 위 예시 처럼 양쪽으로 늘어진 형태를 취한다. 이번엔 여러 data sample에 대해서 보도록 해보자.
해당 data sample들은 contour plot이 최대한 동글동글하게 만들도록 해준다. loss function들을 보면 가운데를 기준으로 왼쪽과 오르쪽이 완벽하게 대칭이다. 반대로 대칭 아닐수록 동글동글한 contour plot을 만들지 못한다는 것을 알수 있겠다. 아래 내용들을 통해 좀다 자세히 정리를 해본다.
*동글동글한 contour plot을 만들기 위한 조건 2가지
1. 좌우대칭
각각 3개씩 data sample들을 가지고 있는 loss function들이다. 이 두개의 data sample들은 양수와 음수로 나뉘면서도 x의 절대값이 같다는 특징을 가진다. 이 두개를 평균내서 cost function을 그리면 완벽한 동글한 모양은 아니지만 적어도 왼쪽, 오른쪽을 같게 만들 수가 있다. 그래서 우리가 data set을 만들때 각 feature들이 0을 기준으로 대칭하도록 만들어야 한다.
현실적으로 완벽한 대칭은 만들지 못하지만 최소한 x1 = 2 가 있다면 x2 = -1 정도 있어야 한쪽으로 치우칠 모양이 최대한 동그한 모양으로 만들수 있게 된다.
미니배치 8개를 뽑을때, 그 안에는 양수 4개, 음수 4개 균일하게 있어야 최대한 동글동글한 contour plot을 만들어 낼수 있다.
data sample들을 수집했는데 0을 기준으로 분포가 되어 있지 않다면 억지로 옮길 필요가 있다.(만일 평균 170을 기준으로 분포가 형성되었다면 각각의 loss function은 양수 있을 뿐더러 값이 워낙 크기 때문에 weight만 학습 될것이다. 따라서 0을 기준으로 양수와 음수를 조화롭게 scaling 해줘야 한다.)
정리하면 평균을 0으로 맞춰주는 이유는 동글동글한 contour plot을 만들기 위함이다.
2. 대각을 기준으로 대칭만들기
X절대값이 1보다 클수록 Y축과 평행을 이루려고 한다. 반대로 X 절대값이 0에 가까울수록 X축과 평행을 이루려고 한다.
여기서 관건은 0<X절대값<1 범위에 만족하는 대각선을 기준으로 좌우 대칭을 만드는게 가장 이상적이다.
위 두개의 데이터에 대한 loss function을 합치게되면 두 loss function 가운데에 cost function이 생기지 않는다. 절대값 X가 일단 1보다 크게 되면 1보다 작은 값이 하나만으로는 상쇄시키기 어렵다(왜 상쇄를 해야할까? 위에서 말했듯이 대각선을 기준으로 좌우 대칭을 만들어야 하기 때문이다.) 다시말해서 X = 0.5의 loss function만 가지고는 X= 2의 loss function을 대각선으로 만들지 못한다. 대각선 이라 함은 y= x, or y= -x 이다. 대각선이 양쪽을 으로 대칭적으로 있어야 동글동글한 밥그릇 모양의 cost function을 만들수 있다. 그러면 학습 시 theta들이 골고루 균등하게 학습이 가능해진다.
기존 dataset 은 y= x+1에서 나왔는데 이 두개를 합치니까 x의 기울기가 1보다 커졌다는 얘기다. 절대값 X값이 큰 loss function이 cost function을 만들때 지배적인 영향력을 끼친다.
0.5 -> 0.2로 더 줄여봐도 오른쪽 그림의 기울기가 1보다 크다. 그래서 단순하게 1대1로 대응을 시킬수 없다. 해결법은 간단하다. 한개로 부족하면 여러개를 대응시키면 된다.
1보다 큰 값이 한개가 있고 (1.2)는 거의 영향력이 없다. 결국 0.1 과 0.2 이 두개가 2를 상쇄시키기 위해 달라붙은 것이다. 오른쪽 그림을 보면 완벽하진 않지만 기울기가 1과 가까워 졌음을 알수있다. 정리하면 절대값이 1보다 큰게 하나가 있으면 1보다 작은 X값들이 여러개 있어야 y=-x에 대칭인 것들을 만들수 있다.
동글 동글한 모양을 갖기 위해서는 y=x, y=-x 서로 대칭인 것들이 필요하고, 절대값 x가 1보다 큰 값들은 적어야 하며 반대로 0보다 작은 x값들은 상대적으로 더 많아야한다.
이것들을 따르는 분포가 있는데 이를 정규분포라 한다. 특히 표준정규분포는 완벽한 대칭을 이루면서 절대값 자체가 1보다 큰 값들이 적다. 그렇기때문에 dataset가 표준정규분포를 따르게 된다면 가장 이상적인 동글동글한 모양의 contour plot이 만들어진다.
많은 데이터들이 정규분포를 따른다. 그러면 이 정규분포를 잘 조절 해줘서 표준정규분포로 만들어만 준다면 딥러닝 학습에 유리하게 된다. 정규분포에서 표준 정규분포로 바꾸는 방법은 나중에 뒤에서 배우게 된다.
표준정규분포를 따르는 데이터 16개를 cost function으로 그리게 되면 상당히 동글동글한 모양을 가지고 있다.
이번엔 y=x방향쪽으로 쏠리게 되었는데, 그 이유는 음수 절대값에서 큰수가 나온 것을 loss function을 통해 확실히 알수가 있다. 0보다 낮은 값들과 상쇄해서 오른쪽과 같은 cost function이 만들어 진것이다.
이번엔 반대로 y = -x 방향쪽으로 살짝 지배적인 모습을 보인다. 이렇게 위 예시처럼 완벽한 동글동글한 모습은 아니지만 이러한 작업 자체가 상당히 딥러닝 학습에 큰 효과를 가져와준다.
loss function을 가지고 학습 시키면 지그재그로 이쁘지 않게 학습이 되는데, 이를 cost function으로 바꾸면 대체로 동글동글한 contour plot이므로 theta0,1이 균일하고 부드럽게 학습이 된다.
평균이 0이고 표편이 1인 분포가 있을때 왼쪽처럼 이쁜 밥그릇 모양을 가진다. 하지만 정규분포라고 해서 다 이와 같은 모습을 보이지 않는다.
평균이10이고 표편이 동일하게 1이라고 할지언정 뽑히는 X 값 자체가 10 언저리 이므로 cost function이 왼쪽처럼 만들어 진다. 즉, 정규분포라 할지라도 평균값을 0에 꼭 반드시 맞춰줘야 한다. 그래야지 좌우 대칭이 맞춰지기 떄문이다.(양수 음수 골고루 나오게끔)
그러면 평균이 0이고, 표편을 1보다 작게 만들면 어떻게 될까? 1보다 큰 값이 적어지게 되고 0에 가까운 값들이 너무 많아지게 되므로 기울기가 x축과 평행한 cost function이 만들어 지게 된다. 따라서 어느 한 곳으로 치우치지 않은 y= x, y= -x 즉, 대각선을 취할때가 가장 좋은 균형을 가진다.
2. Feature Scaling
Feature Scaling 식을 통해서 평균은 0, 표준편차는 1로 표준정규분포를 만들수 있다.
*평균은 같고 표편만 다를경우
파란색이 평균이 0, 표편이 10인 본래의 dataset이다. Feature scaling을 해주면 표준편차 10을 나눴기 때문에 초록색으로 변하게 된다. 원래 가지고 있던 dataset과는 다른 dataaset을 가지게 된다.
*평균은 다르고 표편은 같을 경우
Feature Scaling해주면 평균이 0으로 변화했기 때문에 왼쪽 그림처럼 다른 dataset를 갖게 된다.
*평균,표편 모두 다른경우
본래 dataset은 평균이 10이고 표편도 10정도라고 했을때 왼쪽 그림의 파란색처럼 dataa의 분포를 볼수 있겠다. 여기에 Feature scaling을 해주게 되면 표편 10으로 나눴기 때문에 기울기가 달라지고, 평균도 0으로 변경됨에 따라 이동하게 된다. 여기서 유의할 점이 있다. 자세한 내용은 아래를 통해 알아보자.
feature Scaling한 dataset을 가지고 학습을 진행하여 predictor를 생성했다고 하자. 이제 새로운 data을 가지고 predictor를 이용하여 예측값을 구하고자 넣는 행위는 틀렸다고 볼수 있다. 앞서 말했듯이 Feature scaling을 하게 되면 전혀 다른 dataset을 가진다. 즉, 분포가 기존의 data와는 다른 dataset이 만들어 지기 때문에 바로 다이렉트로 넣지 못하고, new data도 FS을 통해 같은 dataset으로 만들어 준 뒤, predictor를 이용해야 한다.
dataset 처음 수집할때 중요한 점이 있다. dataset을 대충, 적당하게 수집해서 FS 적용 후 predictor를 만들게 되면, 이 predictor는 본래 dataset에서 빠졌던 data를 잘 예측하지 못하게 된다. 즉, '너는 dataset에 없었으니까 나는 널 예측 못한다' 로 정리 할수 있겠다. 그래서 dataset을 최대한 많이 확보해야 한다.
평균:0, 표편:10 인 왼쪽 loss function(16개 data)과 오른쪽 FS을 진행 후 loss function이다. 왼쪽보다는 골고루 흩어 졌기 때문에 그나마 원에 가깝게 cost function을 만들수 있을 것이다. 아래 그림을 통해 자세히 보도록 하자.
양쪽의 cost function 모양이 다르다는 걸 확인 할수 있다. 오른쪽은 y=-x방향쪽으로 쏠려 있다. 즉 1보다 큰 절대값x가 지배적이라는 걸 알수 있다. 학습의 유리함을 보자면 당연히 오른쪽 Cost function이 그나마 theta들을 균등하게 학습할 기회를 주게 된다.
'Data Diary' 카테고리의 다른 글
2021-09-02,04(따릉이 프로젝트 완성하기 1,2) (0) | 2021.09.04 |
---|---|
2021-08-26(딥러닝 수학 12_mini batch & for one sample-Theory) (0) | 2021.08.26 |
2021-08-20,23,30,31(태블로 최종편_포트폴리오 만들기) (0) | 2021.08.20 |
2021-08-19(딥러닝수학10_Loss function & Gradient Descent) (0) | 2021.08.19 |
2021-08-18,20(태블로_고급 맛보기) 2편 (0) | 2021.08.18 |