728x90

1. Gradient Descent

하나에 대한 세타가 아니라 2개이상의 세타를 구하게 되면 아래와 같은 과정을 거치게 된다.

 

gradient descent를 구하는 방법은 Loss와 Cost 방법이 있다. 각각에 대하여 2차원(세타0,세타1)의 gradient를 구할수있게 된다. 이를 이용하여 gradient descent를 구하게 된다. 

x축: 세타1 업데이트 방향, y축: 세타0 업데이트 방향 

각각 편미분을 이용하여 최적점을 찾아가는 과정이다. 하지만 현실적인 모양은 위 시각화처럼 이쁜 모양이 아니다. 

한쪽이 긴 형태를 보이는 것이 현실적인 시각화이다.

이렇게 되면 문제점이 뭐냐면 세타1,세타0에 대한 업데이트 속도 차이가 많이 나게 된다. 세타1은 초반에 빠르게 업데이트가 되고 세타0은 처음부터 천천히 업데이트가 되는 것을 볼수있다. 

딥러닝에서 학습이 잘 안될때가 있는데 위 처럼 각각의 세타의 업데이트가 속도가 다르기 때문이기도 하다.

 

이 개념을 확장하여 세타가 n개가 있을경우를 보겠다.

params의 세타0은 bias값으로써 따로 표기를 했으며, 기존의 방법대로 Loss와 Cost를 위처럼 적용 시킬 수 있다.

n+1개의 gradient를 만들수 있다. gradient descent는 각각세타에 대한 편미분값에만 관심이 있다.

각각의 세타들이 최적점에 도달하기 위해서 따로 계산이 되어 지는 것이다. 즉, 오직 자신이 Cost or Loss에 영향을 미쳤는가 에만 관심을 두고 있는 것이다. 위 이미지는 Loss에 대한 식이지만 Cost도 같은 원리로 이용할수 있다.

gradient가 1차원이든 100차원이든 구해지는 원리는 똑같다

 

 

2. learning late

learning late는 gradient를 얼만큼 반영할건지 결정하는 요소이다. lr = 0.02이라는 것은 gradient의 0.02배 만큼만 반영한다는 의미이다. lr을 크게 설정하면 어떻게 되는지 아래 그림을 통해 알수가 있다.

보라색을 보면 초기값과 바로 마주보는 위치에 있다. gradient의 절대값이 비슷하다는 의미이다. 보라색이 위치한곳에서 gradient을 구하면 다시 초기값 제자리로 돌아 올것이다. 빨간색은 초기값보다 높은 높은 곳에 위치해 있다. gradient가 상당히 높은데, 빨간색 위치에서 gradient를 구하면 반대쪽으로 더 높은 위치로 이동하게 되면서 발산하게 된다.

 

가운데 점은 최적점으로 향해 가지만 문제점이 있다. 첫번째는 학습 속도가 느리게 된다는점이다. 좌우 왔다갔다반복하게 되면 최적점으로 내려오는 시간이 오래 걸린다는 것이다. 두번째는 발산할 여지가 있다는 점이다. 맨 오른쪽과 괕이 발산하게 되어서 학습이 전혀 안될 가능성이 있다. 따라서 가장 이상적인 학습 형태는 맨 왼쪽의 형태이다.

 

lr 이 커질수록 세타 1에 대한 업데이트가 불안정한 모습을 보인다. 즉 세타끼리의 학습속도가 맞지 않고, 불안정한 모습을 보이는 것이다. 세타0(y축)입장에서는 '나는 학습을 잘하고 있다' 세타1 입장은 '불안 불안하게 학습 하고있다' 

만일 lr이 더 커지면 어떤 모양을 보일까요

세타1은 발산하는 모습을 보이고 세타0은 최적점으로 업데이트가 되는 모습을 볼수가 있다. 각자 따로 노는 모습을 볼수 있다. 수 많은 변수들을 상대로 학습을 진행시킬때 단 하나라도 변수가 발산하게 되면 위 그래프처럼 다른 변수가 최적점을 찾아 간다 해도 우리가 원하는 정답에 가까워 질수가 없으며 오히려 loss 값이 커지고 만다. 

728x90

+ Recent posts