Learning the network: Part 1/Lec3

2021. 1. 1. 11:34딥러닝 강의 정리

The Perceptrone Rules for Perceptrone

MLP는 전 강의에서도 말했듯이 universal이여서 모든 것을 표현할 수 있다. 그렇다면 어떻게 MLP를 만들 수 있을까? 

우선 손으로 직접 만들어보자. 전시간에도 했듯이 Decision Boundray를 각 선마다 하나의 퍼셉트론을 잡고 만들 수 있다.

이방식은 모든 방법에서 사용할 수는 없지만 가장 간단한 방법이긴 하다. 

이런 방법도 있다.  f(x)로 g(x)를 구성하는 경우를 보자.

이때 f(x;W)가 g(x)와 같을 경우는 아래와 같다. 

 

여기서 div는 divergence function을 이야기하고 만약 f(x;W)와 g(x)가 같다면 div는 0이 되게 된다. 위의 네트워크에 의하면 Y는 f(X)의 함수이고 이 X는 weight가 추가되서 결정되게 된다. 따라서 weight에 따라 Y가 다르게 결정되는데 결정될 때 마다 생성된 Y와 목표인 g의 차이(div)를 다 더한다(integral). 그리고 차이를 더한 것이 최소화되는(argmin) W를 찾는 것이 목표이다. 

하지만 이방법은 g(X)가 명확히 모든 X에 대해 결정되었을 때 이다. 하지만 실제로는 모든 경우를 알 수 없음으로 g(X)가 명확하지 않다. 그래서 g(X)를 sampling을 한다. (X_i,d_i)의 샘플들을 가지고 만드는데 d_i = g(X_i)+noise라고 할 수 있고 아래 그림으로 구성된다. 

그리고 결국 이것들은 training data를 이야기 하고 우리는 이 한정된 샘플들을 가지고 trainnig을 해야하는 것이다. 

이런 training의 목표는 위에서 정한 샘플링 포인드들을 noise를 unique하게 결정하고 정확히 g(X)에 대입시키는 것이다.  긜고 training 샘플들이 없는 부분들도 정확히 맞추는 것 또한 목표이다. 

 

이제 Learning이라는 것을 살펴보자. laerning은 결국 각각의 퍼셉트론에 weight와 bias를 결정하는 것을 이야기한다. 아래의 classification문제를 보자.

오른쪽 퍼셉트론에서 y는 threshold를 벗어나면 1 아니면 0을 출력하게 된다. 이것을 수학적으로 표현하면 아래와 같다. 

여기서 X_N+1=1인 이유가 W_N+1을 bias로 삼았기 때문이다(위의 퍼셉트론에서 X_N+1을 추가하면 된다).

그리고 우리가 찾아야할 것은 

일때

을 찾는 것이다.

y를 평면의 방정식이라고 생각하면

는 이 평면에 대한 법선벡터이다. 

아래 그림을 보자.

여기서 빨간 선은 weighted sum으로 구성된 면이고 

는 이 면에 대한 법선벡터를 나타냄을 알 수 있다.

 

learning이라는 것은 이 법선벡터를 업데이트하는 과정이다. 예를들어 classification이 잘 못되어 파란 점이 빨간점으로 분류 되었다면 그 잘못 분류된 파란점의 벡터를 W에 더해주기만 하면 된다(파란색이 1이라고 가정). 

 

위에 잘못 분류된 파란점의 벡터를 W에 더해주면 

 

이렇게 새로운 법선벡터가 만들어지면서 새로운 면이 생성된다. 하지만 이렇게 되니 빨간색 점이 이제 파란점으로 분류가 되었다. 이때는 빨간색은 0인데 1로 분류 되었음으로 반대로 W에 이 빨간점을 빼주면 된다. 

이렇게되면 모든 점이 완벽히 분류가 된다. 

이 방법은  이내에 다 끝날 것이다. 여기서 R은 가장 먼 training point이고 r은 best case일때 면과의 마진이다. SVM에서 마진이 클수록 더 빠르게 분류를 잘 할 수 있다. 이와 같은 것이다. 

위에는 하나의 퍼셉트론에 대해 learning할 때를 보여준 것이다. 그렇다면 이것을 MLP에 적용하면 어떻게 될까? 전시간에 했던 오각형 두개를 가지고 와 보았다. 

이것을 위의 방법을 이용하면 각 뉴런마다 조정을 해주어야 한다. 

이렇게 모든 뉴런에 대해 학습을 해야 하나는데 너무나도 많은 시간이 걸릴 뿐더러  하나라도 다른 값이 들어오게 되면 이 네트워크는 틀린 것이 되게 된다. 따라서 퍼셉트론 learning 알고리즘은 MLP에 사용하기 적합하지 않다. 

 

Learning Through Empirical Risk Minimization

 

이 방법의 문제는 무엇일까? 우선 퍼셉트론은 threshold를 activation으로 삼았기 때문에 0을 제외한 부분의 미분값이 0이다. 미분값은 에러의 정도를 알려주는데 0이면 어느 정도의 에러가 발생했는지 파악이 불가능하다. 또한 실생활에서 사용할 때는 모델들이 linear하게 구분되지 않는 문제도 있다. 

하지만 activation을 미분가능한 모델로 바꾸면 해결된다. 우선 아래의 1차원문제를 살펴보자.

 

위의 문제는 liear model로는 절대로 해결할 수 없다. activation을 sigmoid로 사용한다면 boundary는 0~1사이로 제한되게 되고 이것은 확률을 의미하기도 한다. 그렇다면 확률을 이용해보자. 각각의 샘플중 y=1(빨간색)일 확률을 살펴보면 아래처럼 나타낼 수 있다.(파란점이 그 조건부 확률이다.)

이때는 빨간색점이 없음으로 P(Y=1|X)=0이다. 

이제 Y=1일때와 0일때가 섞이게 된다. 따라서 조건부 확률이 증가하기 시작한다. 

이때는 모든점이 빨간색임으로 조건부 확률이 1이다. 위의 점들을 합치면 아래와 같이 나타낼 수 있다. 

 

이렇게 activation을 sigmoid로 사용하면 linear하지 않은 문제도 풀 수 있게 된다. 

또한 activation function이 미분가능하기 때문에 output역시 미분가능한 함수로 나오게 된다.

이렇게 된다면 x나 w가 조금만 바뀌어도 그에 대한 output을 바로 알 수 있다. 미분이 변화하는 정도를 의미하기때문이다. MLP에 적용해도 마찬가지 이다.

  

이제 에러를 줄이는 방법을 생각해보자. 맨 위에서 optimal 한 W를 찾을때 아래의 공식을 사용하면 된다고 했다.

하지만 이것은 g(X)가 모든 X에 대해 완벽하게 결정되어있을 때만 사용할 수 있고 실제 학습시킬때는 몇개의 샘플들로만 학습을 시킨다. 따라서 여기에 X가 random variable이라는 조건을 추가하면

다음과 같이 Expectation으로 나타낼 수 있다. 여기서 argmin을 때면 expected error를 알 수 있게 된다. 하지만 실제로는 몇개의 샘플들만 사용한다. 따라서 실제 사용하는 추정치(empirical estimate)의 expected error는 아래와 같게 된다. 

그리고 이 기대값을 Loss라고 한다. 그러므로 우리가 실제로 찾아야하는 W값은 이 Loss의 최소값을 만드는 W를 구하면 된다.

그렇다면 이 Loss function을 미분해서 구하면 되는 것이다. 그전에 몇개의 용어를 집고 가보자.

위의 mulivariable function에서 delta y는 각각에 variable x가 변하는 정도에 따른 y의 변화의 정도이다. 

또한 minimum 을 구하려면 first derivative가 0이 되어야 하고 sencond derivative는 양수가 나와야 한다. 

이것을 multivariable function에 적용해보자.

위의 함수가 있다면 df(X)는 아래와 같이 표현할 수 있다. 

여기서 는 X가 변화하는 것에대한 f(X)가 변화하는 정도이다. 

그리고 이것의 transpose가 gradient이다.

위의 식들을 이렇게 정리할 수 있다. 

위의 식은 다르게 생각하면 와 dX의 내적으로 생각 할 수 있다. 내적이라는 것은 두 백터의 크기와 cos(사이각)의 곱이므로 df(X)가 가장 클때는 두 사이각이 0일때 즉 일직선일때이다. 그러므로 gradient와 x가 움직이는 방향(dX)가 일직선일때 df(X)는 가장 빠르게 변화하게 된다. 아래 그림을 보면 어느 방향으로 움직여야 빠르게 증가 또는 감소할지 알 수 있다.

마지막으로 Hessian of function은 2nd derivative의 집합체라고 생각하면 된다. 

 

다시 optimal한 W를 찾는 과정으로 돌아가 보자. Loss function을 미분하면 된다고 하였다. 그리고 그 미분값(gradient) 이 0일때를 이야기한다. 또한 Hessian function의 eigenvalue가 양수이면 된다. 일일이 수학적으로 미분값을 구하고 eigenvalue를 구하여 계산할 수 있지만 이것은 안될 가능성이 더 크다. 그래서 iterative한 방법을 사용한다. 그 방법은 아래와 같다. 

어느 한 점을 잡고 positive derivative이면 에러가 상승하는 방향임으로 그 반대방향인 에러를 줄이는 방향으로 가고 negative derivative이면 에러가 감소하는 방향임으로 그 방향으로 스텝을 밟는다. 이를 아래의 수도코드로 나타낼 수 있다. 

이것을 multi variable로 확장하면 아래와 같다. 

그리고 이 과정을 f(x)의 전스텝과 현제 스텝의 차이가 어느 기준보다 작다면 converge하다고 보고 멈추면 된다.

 

 

출처 : www.youtube.com/watch?v=tO3xU2t_wTY&list=PLp-0K3kfddPzCnS4CqKphh-zT3aDwybDe&index=10