Study/ML 이론

Andrew Ng 머신러닝 기초 강의 - Neural Networks: Learning

minung14 2017. 3. 10. 14:57

1. Neural Networks - Classification

classification에서 뉴럴넷이 사용된다면 위의 그림과 같이 나타낼 수 있을 것이다.

여기서 트레이닝 데이터를 {(x(1), y(1)), (x(2), y(2)), (x(3), y(3)), ..., (x(m), y(m))} 으로 나타낸다고 할때,

L = 총 레이어 수, Sl = 레이어 l 에서의 유닛 수를 의미한다.

다시말해 위의 그림을 예로 들어본다면, L=4, S1= 3, S2= 5, S4=SL=4 가 된다.


Binary classification 과 Multi-class classification을 비교해 보면 다음과 같다.

Binary classification

 Multi-class classification

  y = 0 or 1

  1 output unit (h(x)∈R)

  ∴ SL = 1, K = 1

  y∈RK

  h(x)∈RK

  ∴ SL = K (K ≥ 3: binary classification에서는 K는 1이면 충분하니까 muliti-class classification 에서는 적어도 K는 3 이상이어야 한다.)


2. Cost function

이전에 logistic regression 에서 cost function을 아래와 같이 정의했다.


뉴럴넷의 cost function은 이것의 일반화가 될 수 있다.

기본적으로 output unit 이 1이었던 것 대신에 K를 가질 수 있다.

그리고  h(x)는 k 차원 벡터이므로 h(x)i는 뉴럴넷에 의해 출력되는 벡터의 i 번째 요소를 선택한다.

뉴럴넷의 cost function은 크게 두 부분으로 나눌 수 있는데,

앞 부분은 각 트레이닝 데이터에서 k번째 output 벡터에 대한 합이고, logistic regression의 평균값이다.

-> output layer에서 각 cell에 대해 계산된 logistic regression cost 값을 더함

뒷 부분은 정규화를 하기 위한 부분이다. weight를 감소시키는 부분이기도 하며, logistic regression 의 부분과 유사하다.

복잡해 보이는 식이지만 사실, l, i, j 의 값에 대해 해당 항의 합계를 구하는 공식이다.

-> 전체 네트워크(전체 뉴럴넷)에서 각 Θs2을 더함

3. Back propagation Algorithm

위에서 cost function에 대해 살펴봤는데 결국 우리의 목적은 J(Θ) 즉 cost function을 최소화하기 위한 파라미터 값을 찾는 것이다.

Gradient descent 나 Optimization 알고리즘을 사용하기 위해서는 입력파라미터에 Θ를 사용하고, J(Θ) 미분을 계산하는 것이다.


먼저 할 일은 트레이닝 데이터 (x,y) 가 주어지고, 주어진 입력에 따라 실제로 출력되는지를 알아보기 위해 Forward propagation을 적용해보는 것이다.


a(1)은 첫번째 레이어에 해당하는 부분이고, 이는 입력값 x이다.

x 값이 주어졌을 때, z(2) Θ(1)*a(1) 으로, a(2) = g(z(2)) 로 계산할 수 있다. 즉, activate function(시그모이드 함수)가 적용된 z(2) 이고, 이때 바이어스 값도 더한다.

위와 동일한 방법으로  a(3)a(4)에 대한 값, 각각의 중간 레이어에 대한 값들도 계산할 수 있다.

이것이 forward propagation 의 벡터화된 구현이고, 뉴럴넷에서 모든 뉴런의 activation value 를 계산할 수 있도록 한다.


레이어 l에서 노드 j의 에러값을 앞으로는 δj이렇게 표현할 것이다.

forward propagation으로 구한 activation value는 계산된 값이므로 실제 값과 차이가 있을 것이고, δ 값은 이러한 에러를 찾아낸다.

문제는 "실제 값을 어떻게 계산하는 가"이다.

뉴럴넷은 완전히 인공적인 구조이고, 우리가 가진 유일한 "실제 값"은 y이므로, y에서 계산을 시작하면 된다.


위의 그림과 같은 레이어가 동일하게 존재한다고 예를 들어보자.

각 출력 유닛에 대해(L=4) 델타값을 계산한다고 생각하면, 아래와 같을 것이다.

δj= ajyj : 마지막 레이어에서의 δ 값은 activation value aj4(이때, aj4 값은 L=4이므로 hƟ(x)j와 같다) 에서 실제 값 y를 뺀 값이다.

각 노드가 아닌 레이어에 대해 식을 정리한다면 δ= ay 이렇게 된다.

δ값을 사용하여 다른 레이이어에 대한 에러값을 정의할 수 있다.

Ɵ3: 레이어 3에서 레이어 4로 갈 때 파라미터 벡터

δ4: 레이어 4에서의 에러 벡터

g'(z3)z(3)에 의해 주어진 입력값에 의해 계산된 activation function의 미분값 (g'(z3) = a. * (1 - a3))

따라서 다시 풀어쓰면 δ= (Ɵ3)δ. *(a. * (1 - a3)) 와 같은 공식이 나온다.

(δ에 대해서도 동일하게 계산하면 된다. δ= (Ɵ2)δ. *(a. * (1 - a2)) )

δ1 의 값은 입력값이기 때문에 존재하지 않는다.


이러한 과정은 매우 복잡하다. 그러나 정규화를 무시한다면 이 계산 과정은 단순해질 수 있다. (밑의 식 처럼)

back propagation을 수행하고 δ 값을 계산함으로써, 편미분 값을 계산할 수 있다.

(우리는 cost function을 최소화하기 위해 이 편미분 값이 필요하다.)



만약 트레이닝 셋이 많다고 가정해보자.

먼저 δ 값을 0으로 두자.(이 값은 편미분을 계산한 값으로 사용할 것이다.)



1부터 m까지 즉, 트레이닝 셋의 수 만큼 위의 과정을 반복한다.

a(1) (input 레이어에 대한 activation)의 값은 x(i)(입력값)으로 두고, 각 레이어에 대해 forward propagation을 수행한다.

그리고 실제값 y(i) 를 사용하여 마지막 레이어에 대한 δ(L) 값을 계산한다.

계산한 δ(L)값을 이용하여 각 레이어에 대한 δ(l) 을 구한다. (δ(1) 은 없음) (back propagation)

마지막으로 편미분 값을 계산하기 위해 δ 값을 사용한다.

 δ 값도 벡터로 나타낸다면, 이와 같이 표현할 수 있다.

위의 과정 반복이 모두 끝났다면, δ 값을 사용하여 편미분 값을 축적한다. (j=0 일때, 정규화 값(bias)은 고려하지 않는다.)

결론적으로  δ 값을 사용해서 모든 D 를 계산할 수 있고, 아래와 같이 성립한다는 것을 알 수 있다.

각 파라미터에 대한 편미분 값을 갖고 있고, 이것을 gradient descent 나 최적화 알고리즘에 사용될 수 있다.


4. Back propagation Intuition

forward propagation을 그림으로 나타내면 아래와 같이 그릴 수 있다.

첫번째 레이어에는 input 값이 들어가고 두번째 레이어에서는 첫번째 레이어에서 전달받은 input값을 이용하여 z값과 g(z) 즉, 시그모이드 activation function을 거친 a 값이 계산된다.

또한 이 a 값은 다음 레이어로 전달되어, 마지막 레이어까지 동일한 방식으로 계산된다. 이 과정이 forward propagation 이다.


back propagation 도 이와 유사한 과정으로 진행된다. 대신 진행과정이 back propagation은 오른쪽에서 왼쪽으로 진행되는 것이다.

binary classification 같은 하나의 output에 대한 cost function 은 아래와 같다. 

만약 정규화 항을 고려하지 않는다면 람다값은 0가 되므로 뒤쪽 항은 고려할 필요가 없다.

각 항마다 이 cost function이 반복되고, 하나의 항에 대한 cost값은 아래처럼 나타난다.

한 유닛에 대한 δ 값은 해당 유닛과 관련된 activation value에 대한 cost의 에러로 생각할 수 있다.

공식으로 나타낸다면 이렇게 나타낼 수 있다.

이런 과정을 그림으로 나타내면 아래처럼 그려진다.

정리하자면, back propagation 은 δ 값을 계산하고 이 δ값은 다음 레이어의 δ값의 weighted sum 이다.

그리고 이렇게 구한 δ 값은 gradient descent 나 optimize 알고리즘에서 사용할 수 있다.

forward propagation은 activation value를 계산한다.