*실습링크
2021.08.26 - [Data 일기] - 2021-08-26(딥러닝 수학 11_mini batch & for one sample-Theory)
1.Single-variate Linear Regression (y= ax+b)
-딥러닝 수학 1~8까지는 y =theta*x에 대한 내용을 학습했다. 지금부터는 y= theta1*x+theta0에 대한 학습을 진행한다. 오늘은 그 중에 Loss function의 변화와 그에 따른 Gradient Descent를 알아본다.
bias term이 추가가 되면서, loss에 대한 하나의 theta 함수가 아니라 theta1,0에 대한 함수 즉, 편미분과 gradient가 필요해진다.
loss 자체가 theta1,0에 대한 함수이기 때문에 gradient를 적용한다. gradient는 각각의 편미분을 벡터로 만든 형태이기 때문에 위 처럼 만들수 있다. cost도 theta1,0에 대한 함수이기때문에 같은 과정을 거친다.
각 theta로 미분했을 때, 차이점은 x가 있느냐 없느냐 이다. 앞으로 x가 어떤 차이를 보여주는지 배우게 될 것이다.
Loss를 이용한 theta 업데이트 식 같은 경우에는 위 와 같이 표현이 된다. theta0은 x가 없는 상태에서 업데이트가 된다는 걸 인식해야 한다.
cost도 각 partial Derivatives를 구하면 위와 같다.
cost의 partial Derivatives를 이용하여 gradient Descent method까지 구할수 있다.
Parameter 가 어떻게 update되는지 loss 부터살펴보겠다.
예전에 배웠던 내용과 흡사하다. 단지 bias가 추가 되었을 뿐인데, 왼쪽처럼 x가 없기 때문에 더 간단한 모양을 가진다. 이를 자세히 살펴보겠다.
실제값이 예측값보다 큰 경우, y^ = theta1*x+ theta0 에서 x는 변하지 안하고 theta0만 증가하므로 결국 예측값도 커져서 실제 y값과의 차이가 줄어들게 된다. 반대로 theta0이 줄어 들면 예측값도 줄기 때문에 y<y^ 인 경우에선 y-y^의 차이가 줄어들게 된다.
2.Loss function
y=x+1이 있을때, 가장 이상적인 모양은 왼쪽 그림일 것이다. 어떠한 initial theta가 주어지든간에 (1,1)로 예쁘게 수렴되는 형태를 바란다. 하지만 현실은 그렇지 않다
이쁜 종 모양을 가질려면 theta1**2 + theta0**2의 형태의 이차식을 가져야 한다.
하지만 현실은 크게 다르다. 위 식을 전개하면 복잡한 형태를 볼수가 있게 되는데 일단은 파란색 박스가 쳐진 곳을 집중적으로 보도록 해본다.
(1,2)일때는 이쁜 모양을 갖지만, 본격적으로 x**2가 1이상의 값을 가지게 될수록 위아래가 길쭉한 모양을 갖게 된다. 즉, theta1**2 에서 x**2만큼 곱해지기 때문에 theta1에 더 민감한 반응을 하게 된다. 그림에서 가로가 theta1을 나타내는데, 그림에서 보듯이 가로에 변화가 더 심한 걸 알수 있다.
산과 비교하자면 등고선이 일정한 간격으로 펼쳐진 산 정상에서 지상까지 가는데 큰 무리가 없이 내려갈수있다. 왜냐면 간격이 일정하고 급격한 경사가 없기 때문이다. 하지만 오르녹 그림을 보면 땅에 갈수록 등고선의 간격이 점점 좁아진다. 즉 급경사, 변화가 많아진다는 의미이다.
그래서, theta0이 변화해서 얻는 loss양보다는 theta1의 변화에 따라 얻는 loss양이 더 크다(민감하다).
x=1 일 경우 어느쪽으로도 기울어져 있지 않은 예쁜 모양을 갖고 있다.
x=2 일 경우, 한쪽으로 길쭉한 모양이 만들어 지면서 균형을 이뤘던 모양이 점차 변형되기 시작한다.
theta1에 대해서 -2 -> -1 로 갈때 급격한 변화가 발생한다.
반면 theta0에 대해서도 -2 -> -1로 변화가 일어나도 거의 같은 선상에서 움직이는 걸 알수가 있다. 즉 loss 변화량이 적다는 것이다. 이번엔 극단적으로 x값을 늘려보겠다.
theta1이 변화할때는 급격하게 떨어지지만 theta0이 변화할땐 거의 변화가 없게 된다. 결론적으로 theta들의 학습 속도의 차이가 나버리게 된다는 것이다. 아래 그림을 통해서 이해해보자.
왼쪽처럼 최적의 경로로 빠르게 학습 되는 것이 아닌 오른쪽 처럼 theta1이 빠르게 먼저 학습이 된 후에야 theta0이 천천히 학습이 된다. theta1은 민감한 부분이기 때문에 먼저 반응을 하게 된것이다. 이런 상황이되면 전체적인 학습 속도가 느려지게 된다.
더 극단적인 예시를 통해 알아보자
왼쪽그림처럼 두 theta간의 차이가 두드러진다. 어쨌든 최종적으 학습이 잘 진행되어 가고 있기 때문에 다행이라 볼수 있다. 진짜 문제는 오른쪽 그림과 같을 것이다. weight 와 bias의 학습속도 차이가 난다는 것은 같은 lr이라 하더라도 theta1이 발산 될 확률이 커지게 된다. (위 두 예시그림은 lr이 동일하다)
문제점은 여기서 그치지 않는다.
-2xytheta1, -2ytheta0과 같은 것은 평행이동과 관련 된 것이라서 큰 영향을 주지 않는다. 바로 2xtheta1 * theta0이 큰 영향을 준다. 구체적으로 어떤 영향을 미치는지 살펴본다.
x의 변화에 따른 cost 함수의 모양을 비교해 본다. theta1*theta0 같은 경우는 길쭉한 형태의 축을 결정하는 요소이다. 그래서 값이 커질수록 한쪽 방향으로 길어지는 모습을 볼수 있다. 극단적인 예시를 통해 자세히 알아본다.
값이 더욱 커질수록 극단적인 cost fuction을 갖는다. 이해를 돕기 위해 차례대로 3차원 그림을 살펴보자.
theta1*theta0이 아예 없을 경우엔 균형잡힌 밥그릇이 된다.
0.6을 줬을때 한쪽 방향으로 눕는 형태로 변하게 된다.
1.0을 줬을때 한쪽 방향으로 더욱 눕는 형태로 변하게 된다.
2가 됐을땐 아예 드러 눕는 형태가 된다. 일직선으로 보이는 것이 한쪽방향으로 펴진 축을 나타낸다. 여기서 알수 있는 점은 학습의 방향이다. 이는 스케이드 보드를 타는 것과 같다. 스케이드 보드는 U모양이며 사람들은 맨 위에서 출발한다. 각자 출발점의 위치는 다르겠지만 결국은 모두 쭉 펴진 축 선 안에 빨리 도달하게 된다. 쉽게 말해서 U의 바닥부분(기울기가 없는곳)이다. 이는 딥러닝에도 똑같이 적용된다. 기울기가 가파른 곳 방향으로 먼저 학습이 되며, theta들간의 학습 차이가 발생하면 발산할 확률이 커지게 된다.
모양을 변하게 만드는 theta1*theta0이 어떤 문제점을 야기 시키는지 자세히 알아보자.
0.2만 줘도 다이렉트로 찾아 가는데, 1만 되어도 오른쪽 처럼 차이가 난다.
1.6인 왼쪽 그림은 점점더 가파른 형태를 보이며, 오른쪽은 정사영 시키는 모습을 보인다. 정사형 처럼 일직선으로 학습된 것은 target theta1,0 에 가까워 지지 않는다. 오른쪽 그림을 보면 모두 대각방향을 일직선이다. 즉, 가운데로 보이는 등고선이 없다는 점이 큰 차이점이다. 오른쪽은 비록 target theta1,0 정중앙에 미치치는 못했지만 등고선, 즉 기울기가 있기 때문에 어찌됐든 target을 향해 가고 있다.
이번엔 파란박스을 모두 제대로 적용했을 때 cost function 모양을 보겠다.
x가 커질수록 거의 일차식에 가까운 모양을 보이게 된다. 100은 U모양에서 더울 폭이 좁은 형태가 될것이다. 그래서 위에서 바라 봤을때 마치 일직선 처럼 보일수 있다.
x 절대값이 커질수록 y축과 같은 방향을 보고 있는 형태로써 V 모양으로 점점 변하게 된다. 따라서 실제는 위 처럼 V모양으로 띄는 cost function 이며 projection되는 방향으로 학습이 진행 된다.
8가지를 모두 합쳐봤을때 위 와 같이 볼수가 있게 되며 x를 많이 늘리게 되면 아래와 같은 모습을 볼수 있다.
모두 가운데 축을 지는 V형태를 가지고 있다.
x가 0~1까지 해당되는 것은 오른쪽 삼각형, x가 -1~0까지 해당되는 것은 왼쪽 삼각형이 된다. 1보다 커질 경우엔 위, 아래에 축이 생긴다. 즉 x의 절대값이 커질수록 theta0축에 가까워지고, 절대값이 작을수록 theta1축에 가까워진다.
3.Gradient Descent
x가 작을수록 그나마 U형태를 보이는데 x가 커질수록 V형태로 더욱 좁아지는 모양을 가진다.
평행이동에만 관심있는 두 파란 박스를 다뤄보자. D 데이터는 y =x+1 함수를 따르는 data이다.
x가 커질수록 theta0축에 가까워 지며 U에서 V 형태로 점점 변하게 된다.
각 data에 따른 loss function을 모두 그려본 이미지이다.
표준정규분포의 데이터를 가지고 loss function은 왼쪽과 같다(100개) 또한 아웃라이어들이 theta0 축과 그나마 가장 가까운 것들일 것이다.
mean=3이므로 theta0축에 가까운 loss function들이 위처럼 생길 것이다. 이로써 알수있는 것은 어떤 데이터가 주어지든 loss fucntion을 예상할수 있다.
이 세개 이미지중 가자 좋은 것은 표준정규분포 loss function인 가장 왼쪽 그림이다.값이 커질수록 V형태를 가지므로 발산할 우려가 더욱 커지게 될것이다.
Gradient Descent
-평행이동을 관할하는 term은 제외한 후, 나머지에 대해 gradient descent먼저 보겠다.
각 theta별로 gradient descent를 할수 있겠다.
x가 커질수록 theta0과 가깝게 변하게 되며 초기 theta는 projection되는 방향으로 학습이 진행된다. 이때 학습 속도를 보면 x=10일때 파란 point의 간격이 넓직하게 움직인 걸 볼수 있다. 왜냐면 기울기가 더욱 급하기 때문이다.
x의 크기별로 학습의 속도가 어떤지 아래 그림을 통해 알아보자.
x=1은 균형잡힌 밥그릇이라 했을대 theta1,0 에 대한 학습속도와 방향은 위 하늘색처럼 대각선 방향으로 진행되었다. 그리고 x가 커짐에 따라 project 방향이 갈색처럼 눕는 형태를 보였다.
또한 눈여겨 볼게 점의 간격이다. theta1에 대한 학습이 지배적으로 변하게 된다. 왼쪽 theta1 식을 보면 theta1에 x가 곱해져 있다. x의 크기에 따라 얼만큼 업데이트 될건지 정해진다.
initial theta를 각각 -2씩 주었을때, interation 10의 theta1은 약 1만큼 증가한 반면 theta0은 미미하게 업데이트가 되었다. x가 있고 없고의 차이가 분명하게 드러난다. 더욱이 Loss가 144 -> 50으로 감소했기 때문에 가뜩이나 theta0 느린 학습속도가 더욱 느려지게 된다. loss 50에 대해서도 theta1의 업데이트로 넘어가기 때문에 theta0은 더더욱 느려지게 되는 것이다. 따라서 theta1이 먼저 학습하게 되면 loss가 확 줄기 때문에 전체적인 학습속도가 늦어 진다. 그래서 theta0 같은 경우엔 학습할 기회 조차 없어진다.
0<x<1인 경우를 보면, x가 작아질수록 theta1방향으로 눕게 된다. projection이 될수록 theta0의 0으로 학습이 되어 가는데 theta1의 0으로는 학습될 기미조차 없다. 여기서는 반대로 불균형이 생기게 된다. 수식으로 살펴보면 이해가기 쉽다.
x가 0.1이라면 theta1은 2*(0.01)^2 만큼 업데이트 양이 결정된다. 소수점이므로 theta0보다 훨신 적게 업데이트가 된다는 걸 알수가 있다.
아까와는 반대로 업데이트가 되어가고 있다.
여기서 알수 있는 점을 간추려 보자면, 입력되는 절대값x의 값이 크면 weight가 bias보다 압도적으로 학습속도가 빠르게 진행된다. 이와 반대로
절대값 x가 1보다 작고 0보다 크다면 bias의 학습속도가 빠르게된다.
위 내용은 x가 양수일때를 살펴봤다. 반대로 x값이 음수가 들어왔을때 어떻게 변하는지 알아보도록 한다.
x의 절대값이 커질수록 y축과 같은 모양을 띈다고 앞서 배웠다. 따라서 x의 값이 증가 할수록 theta1은 빠르게 학습 할 것이며 theta0은 느리게 학습하게 된다.
(수정: 왼쪽이 -0.8, 오른쪽이 -0.5)
절대값이 1보다 점점더 작아지게 만든 경우이다. 눕는 형태가 되므로 theta0만 학습이 되고 theta1는 점점 학습이 느려지게 된다.
정리를 하자면, 절대값x가 0에 가까울수록 bias만 거의 학습이 되고, 절대값 x가 클수록 weight만 거의 학습이 된다.
결국 weight, bias 두개의 학습속도를 맞추기 위해서 feature scaling이 필요하게 된다. 표준정규분포처럼 0과 1로 맞추는 것도 좋지만 만일 0으로 대부분 맞춰진다면 bias 만 학습이 되는 불균형은 사라지지않게 된다. 따라서 스케일링을 할때에도 절대값 1에 가깝게 최대한 맞춰줘야 weight와 bias의 학습속도를 맞출수가 있다.
'Data Diary' 카테고리의 다른 글
2021-08-24(딥러닝 수학11_Cost function & Feature Scaling) (0) | 2021.08.24 |
---|---|
2021-08-20,23,30,31(태블로 최종편_포트폴리오 만들기) (0) | 2021.08.20 |
2021-08-18,20(태블로_고급 맛보기) 2편 (0) | 2021.08.18 |
2021-08-13(태블로_고급 맛보기) 1편 (0) | 2021.08.18 |
2021-08-17(딥러닝수학 9_Vectorization2 &batch Gradient Descent ) (0) | 2021.08.17 |