이번시간에는 신경망에 대해서 알아보는 시간이다.
⎣⎢⎢⎢⎡−x1−−x2−:−xn−⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡w11w21:wd1w12w22:wd2......:...w1pw2p:wdp⎦⎥⎥⎥⎤+[b1b2b3…bp]=⎣⎢⎢⎢⎡−o1−−o2−:−on−⎦⎥⎥⎥⎤
- 입력 데이터 X행렬, 다른 차원으로 표현하도록 하는 연산자 W행렬과 편향 B로 이루어져 있다.
softmax
softmax(Wx+b)=(∑k=1pexp(Wxk+bk)exp(Wxi+bi))
- 소프트맥스 함수는 모델의 출력을 확률로 해석할 수 있게 변환해준다.
denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
numerator = np.sum(denumerator, axis=-1, keepdims=True)
val = denumerator / numerator
return val
-
numpy로 구현 시 분자에 np.max
연산이 있는데 오버플로우 현상을 방지하기 위해 max값을 빼주게 된다.
-
추론을 하는 경우 가장 큰 값(원-핫벡터)만 필요하기 때문에 소프트맥스를 사용하지 않는다.
-
보통 softmax는 분류문제에서 사용할 수 있다.
-
신경망은 이처럼 선형모델과 비선형함수인 활성함수(activation function)을 합성한 함수이다.
활성함수
활성함수 종류
σ(x)=1+e−x1
tanh(x)=ex+e−xex−e−x
ReLU(x)=max{0,x}
활성함수를 적용한 신경망
z=Wx+bσ(z)=σ(W(1)x+b(1))H=(σ(z1),...,σ(zn))O=HW(2)+b(2)
- 위와 같이 활성함수를 적용한 H에 W(2)를 통해 다시 선형변환을 하게 되는 구조를 2개의 layer를 가진다는 의미로 2층 신경망이라 한다.
층을 여러개 쌓는 이유
-
이론적으로 2층 신경망으로도 임의의 연속함수를 근사할 수 있다.(universal approximation theorem)
-
위는 이론적으로는 보장해주지만 실제론 무리가 있다.
-
층을 깊게 쌓을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 빨리 줄어들어 좀 더 효율적으로 학습이 가능하다.
-
층이 얇으면 한 층에 필요한 뉴런의 숫자가 기하급수적으로 늘어나 넓은(wide) 신경망이 되어야 한다.
-
주의할것은 층이 깊다고해서 최적화가 잘된다는 것은 아니다.
역전파(backpropagation)
위에서 설명한 흐름은 순전파(forward)라고 표현하기도 한다.
-
딥러닝은 역전파 알고리즘을 통해 각 층(layer)에 사용된 파라미터(W,b)를 학습한다.
-
딥러닝 모델은 비선형모델이기 때문에 한층씩 역전파 알고리즘을 적용해야 한다.
-
역전파 알고리즘은 출력층부터 입력층으로 흐름이 역순으로 계산되기 때문에 역전파라고 부른다.
역전파의 원리
- 역전파 알고리즘은 합성함수 미분법인 연쇄법칙(chain-rule) 기반을 사용한다.
z=(x+y)2w=x+yz=w2
∂x∂z=∂w∂z∂x∂w=2w⋅1=2(x+y)
∇W(1)L=(∇W(1)z)(∇zh)(∇ho)(∇oL)
∂Wij(1)∂L=l,r,k∑∂ol∂L∂hr∂ol∂zk∂hr∂Wij(1)∂zk
- 역전파는 순전파와 달리 미분값을 저장해야하기 때문에 메모리 측면에서 더 많은 메모리를 요구한다.