News & Events
[Machine Learning] 21. 뇌신경망을 이용한 머신러닝 (Neural Networks) Cost & BP
- 2019년 1월 14일
- Posted by: 인사이트캠퍼스
- Category: 금융/AI/IT 기사
이제 본격적으로 상세한 내용들을 알아보겠습니다.
Neural Network for Classification 은 Logistic Regression의 확장판으로 좀더 복잡하고 다양한 결과 값을 도출하기에 좋은 모델입니다. 이제부터는 간단하게 NN이라고 하겠습니다. 여기서는 NN에 대한 특성과 차이점에 대해서 알아봅니다.
아래 그림의 NN 구성도를 보면 총 4개의 Layer로 이루어져 있습니다. 총 Layer의 갯수를 L로 표현하도록 하겠습니다. 즉, 여기서는 L=4가 됩니다.
그리고, 각각의 Layer는 다수의 Units으로 구성이 되어 있습니다. 이 Unit의 갯수를 S로 표현하도록 하겠습니다. Layer 1의 units 갯수가 3개이므로 S1=3이 됩니다. 동일한 방식으로 S2=5, S3=5, S4=4가 됩니다.
Logistic Regression에서 Binary Classification을 배웠었죠. 그때 결과 y는 0 아니면 1의 값을 갖으며 1개의 결과 값을 보여주었습니다. 이 결과 값의 갯수를 K라고 하겠습니다. 즉, K=1이 됩니다. NN에서는 1개 이상의 결과 값을 Vector로 보여주는 것을 앞에서 배웠습니다. 아래 구성에서는 Output Layer인 Layer 4의 units 갯수가 4개 임으로 결과 값도 4개의 Vector가 됩니다. 즉, K=4가 되며 이것은 또 K=SL과 같습니다.
Cost Function
Logistic Regression(LR)의 Cost 함수와 비슷한데 조금 확장이 됩니다.
아래 그림의 상단에 공식이 LR의 Cost 함수와 정규화식이였습니다. 정규화식에서 세타zero는 제외되는 것은 여전히 유효하고 앞으로도 유효합니다.
NN에서도 비슷하게 Cost 함수가 하단의 공식과 같이 됩니다. 단지 차이점은 h 함수로 나타나는 결과 값이 K개의 크기를 가지는 Vector가 되어 Cost 함수가 한번더 K만큼의 합을 연산하도록만 추가 되었습니다. 뒷부분의 정규화식에서는 다수의 Layer가 생겼고, 또 각 Layer마다 다수의 Units이 존재하므로 이를 적용시켜 합을 연산하도록 추가되었습니다. 이부분을 또 다른 용어로 Weight decay 라고 합니다.
다소 복잡해 보이지만 앞으로 계속 다루게 될 내용이므로 조금 차이가 있구나 정도만 인지하고 넘어가도 좋습니다.
Cost 함수가 만들어지면 그다음으로 Gradient Descent Algorithm을 했었습니다. 마찬가지로 J 함수가 아래 그림의 상단과 같이 공식이 생성되었습니다. 그리고 우리가 원하는 것은 이 Cost 함수인 J가 minimize되는 parameter를 찾는 것이였습니다.
이제 새로이 정의된 J함수도 각각의 Weight(parameter)에 대하여 편미분을 하여 최저점을 찾아가게 하면 되겠습니다.
여기서의 세타도 역시 각 Layer별로 units별로 값을 가지고 있기에 Matrix가 된다는 것이 중요합니다.
이제 각 units에 대한 세부 표현이 어떻게 되는지 알아보겠습니다.
Input Layer인 Layer 1의 units을 a(1)로 표현하고, Layer 2의 units은 a(2)로, Layer 3의 units은 a(3), Outpur Layer이자 Layer 4인 units는 a(4)가 됩니다.
a(1)은 input 값들인 x가 되므로 a(1)=x가 됩니다.
자 이제 Layer1의 입력값들은 연결된 선들의 Weight와 연산이 되어 Layer2의 입력값이 됩니다. 그러므로 Layer2의 입력값은 세타1 * a(1)의 값이 되고 이것을 우리는 z(2)로 표현을 했었습니다.
그리고, Layer2의 units은 이 입력값을 g(sigmoid)의 함수로 감싸서 연산을 했었습니다. 즉, a(2)는 g(z(2))의 값을 가지게 됩니다. 여기서 앞에서 배운것처럼 bias term의 상수 1의 값이 더해지는 것을 기억해야 합니다.
a(2)의 값은 다시 연결되어 있는 선의 Weight와 연산이 되어 Layer3의 입력값이 되고 다시 g의 함수로 감싸져서 a(3)가 됩니다.
마지막으로 a(3)의 값은 연결되어 있는 선의 Weight와 연산이 되고 g의 함수로 감싸져서 a(4)의 값이 되는데 a(4)가 최종 결과 값이므로 아래 그림의 맨 마지막 공식과 같이 표현이 가능합니다. a(4) = h(x) = g(z(4))
여기서 중요한 개념과 용어가 나옵니다.
이처럼 왼쪽의 입력에서 오른쪽의 결과값의 방향으로 연산이 진행되어 가는 것을 Forward Propagation(FP)이라고 합니다.
그 반대로 결과값에서부터 왼쪽의 방향으로 입력값에 대하여 연산이 진행되는 것은 Back Propagation(BP)이라고 합니다.
우리가 Cost함수를 계산하는 개념과 비슷한 것이 FP이고 Gradient Descent를 통해 minimize하는 개념과 비슷한 것이 BP임으로 중요한 알고리즘들입니다.
Back Propagation
그럼 이번에는 BP에서 대해서 알아보겠습니다.
여기서 델타라는 것이 나옵니다. 델타가 가지는 의미는 i 번째 Layer에 j번째의 node(unit)가 갖는 error가 됩니다. 여기서 error라고 표현을 한 것은 우리가 지금까지 배운 Cost와 비슷한 개념입니다. 이것을 다시 말하면 예측된 결과와 실제 값의 차이를 의미합니다.
최종 결과값인 h(x)이자 a(4)에서 y의 결과를 뺀 차이가 델타(4)가 됩니다.
그리고 최종 결과 값이라는 것은 이전의 결과 값에서 영향을 받아 (연산이 되어) 최종적으로 발생한 것이기 때문에 이와 마찬가지로 error로 표현이 되는 델타의 값도 바로 이전의 것에서 비롯된 다는 것을 이해할 수 있습니다.
즉, 델타(4)는 연결된 선의 Weight와 연산이 되어 거꾸로 내려가면서 a(3)의 값과 연산이 되는데 이때 그냥 a(3)가 아니라 편미분된 a(3)와 연산이 됩니다. 아래 그림의 공식과 같이 델타(3)는 세타(3) tranpose * 델타(4)의 값과 g'(z(3)의 값이 element multiplication(개별 요소들의 곱하기로 Octave에서 .*가 연산기호)로 연산이 되어 생성이 된다는 것입니다.
그리고 이 g(z(3)의 미분값은 곧 g함수가 sigmoid이므로 실제 계산할 때에는 a(3) .* (1-a(3)) 의 값과 동일하다고 합니다. 공식인가 봅니다.
δ3 = (Ɵ3)T δ4 . *(a3 . * (1 – a3))
이와 같은 방식으로 거슬러 올라가면서 델타(2)까지 진행을 하고 델타(1)은 적용을 하지 않습니다. 왜냐하면 Layer1은 input 값임으로 주어진 데이터이기에 오류가 없기 때문에 할 필요가 없습니다. 곧 델타(1)은 의미가 없기 때문입니다.
이와 같이 BP는 결과 값에 대한 error를 적용하면서 이전의 델타들을 계산하여 이를 다시 적용하므로서 Weight를 조절하여 minimize J를 찾아가게 됩니다.
지금까지 살펴본 Backpropagation에 대한 내용을 알고리즘으로 정리한 것이 아래 그림입니다.
한가지 새로이 추가된 대문자 델타(Δ)는 앞으로 편미분 연산을 수행하기 위한 값으로서 정의하였고 이것은 J 함수를 각각의 세타로 편미분하기 위해서 사용될 것입니다.
Octave 문법을 기준으로 for loop(반복문)을 i가 1에서 부터 시작하여 m 까지 수행합니다.
초기 입력값인 x를 a(1)에 셋팅하여 FP 알고리즘이 시작이 됩니다.
그다음에는 각 Layer의 각각의 units이 연산이 되어 a(l)이 연산이 될 것입니다.
그리고 최종 예측값에 대해서 error를 구해서 델타(L-1)로 시작하여 델타(2)까지 연산을 합니다. 이때 델타(1)은 수행하지 않았습니다.
이렇게 생성된 값들을 이용해서 대문자 델타 값을 변화시킵니다.
(l : Layer, j : node, i : affected node)
위 공식을 벡터로 표현하면 다음과 같이 됩니다. 실제 구현할때 사용될 것입니다.
그 다음에는 정규화식이 있었죠
NN에서도 동일하게 적용이 가능합니다. 이때도 j=0일때는 정규화에서 제외 됩니다.
이렇게 하여 최종적으로 우리가 원하는 결과는 D의 값이 되며 이것을 계산하기 위하여 Δ와 정규화식을 아래 그림의 하단의 공식과 같이 연산만 하면 되겠습니다.
그러므로서 이제 NN에서도 우리가 이전에 배운 minimize하는 알고리즘들 (Gradient Descent or Advanced Optimization Algorithms) 중에 하나를 사용할 수 있게 되었습니다.