본문 바로가기

전공공부

[Deep Learning] Shallow Neural Network

Neural Network란?

logistic regression에서 봤듯이 단순한 수식으로 표현하기 힘든 걸 여러개의 node를 통해 예측하는 것이다. 간단한 구조는 다음 그림과 같이 설명된다.

2-layer Neural Network

여기서 2-layer Nueral Network를 수식적으로 좀 더 표현하면 다음과 같다.

Neural Network

여기서 각 기호의 의미는 다음과 같다.

기호 의미 (b는 그냥 제가 이해 하기에 상수로 정도로 이해 했습니다!! 계속 업데이트 되는 값이기 때문에 완전 상수는 아님.)

Node

Neural Network를 표현한 그림에서 각 layer에서 동그라미가 의미하는 것은 node이며, 각각의 node는 이전 layer node값에 각각의 weight를 곱한 후 active function을 이용해 값을 얻어낸다.

따라서 각 노드를 다음과 같이 나타낼 수 있다.

node에서의 연산

여기서 n = 1일 일 때 node는 input layer의 값들을 받게 되며, g(x)는 activaton function을 의미한다. 일반적으로 active fuction은 output layer를 도출 할 때는 sigmoid function을 사용한다.

Activation Function

각 노드가 다음 layer에 영향을 끼치게 할건지, 없게 할건지 결정하는 함수로 logistic regression에서는 sigmoid가 있다. 

Activation Fuction을 사용하는 이유

activation fuction을 사용하지 않을 경우 각 node에서 다음과 같이 식이 전개 된다.

activation fuction이 없는 경우

이 상황에서  식을 다 풀어 써 보면, 결국에는 logistic regression과 같은 식이 나온다는 것을 알 수 있고, 이는 여러 layer를 만드는 의미가 없어지기 때문에 activation fuction이 필요하다.

Sigmoid

sigmoid는 logistic regression에서 쓰인 식으로 값이 0 ~ 1을 가지게 된다. 하지만 이러한 특성은 여러 layer와 node가 존재 할 때, gradient descent가 잘 작동하지 않는다는 특성이 있다. 따라서 output layer를 도출할 때만 사용한다.

sigmoid
Hyperbolic tangent (tanh)

sigmoid와 상반되게 값이 -1 ~ 1을 가지게 된다. ReLU와 같이 많이 쓰이는 activation function이다.

Hyperbolic tangent
ReLU (Rectified Linear Unit)

각각의 node에서 -를 값을 가진 걸 모두 0으로 바꿔버리는 activation fuction이며, 많이 사용된다.

ReLU
Leaky ReLU

ReLU와 비슷하지만 node에서의 - 값을 완전 무시하는게 아닌 특성을 어느 정도 남겨 놓은 것이다.

Leaky ReLU

Gradient Descent

2-layer Neural Network에서의 gradient descent를 식을 세우면 다음과 같이 세울 수 있다.

parameter 설정

먼저 Loss function을 표현하면 다음과 같다.

loss function

또한, output layer는 sigmoid를 사용하므로, sigmoid를 미분하면 다음과 같다.

이제 2'th layer에서의 Gradient descent parameters update를 하기 위해 Partial Derivatives를 하면 다음과 같다.

이를 이용해 1'st layer에서의 Gradient descent를 하기 전에 1'st layer에서 사용한 active fucntion을 미분하면 다음과 같다.

이제 이를 이용하여 Partial Derivatives를 하면 다음과 같다.

이제 이 내용들을 토대로 Gradient Descent를 하면 다음과 같다.

하지만 여기서 weight가 같은 값으로 시작할 경우 각 node의 값이 같아지기 때문에 의미가 없어져서 random한 값으로 시작하는게 좋다.

Code 구현

model 구현
train 구현

이를 가지고 logistic regression으로는 구할 수 없어 던 XOR을 학습시키고 예측을 하면 다음과 같이 된다.

결과 값

 

'전공공부' 카테고리의 다른 글

[Deep Learning] Logistic Regression  (0) 2021.03.24