Home 딥러닝의 학습법
Post
Cancel

딥러닝의 학습법

신경망(Neural network)

신경망은 선형 모델과 활성함수를 합성한 함수이다.


Softmax

소프트맥스 함수는 모델의 출력을 확률로 해석할 수 있게 변환해준다. 분류 문제를 풀 때 선형 모델과 소프트맥스 함수를 결합하여 예측한다.

선형 결과인 Wx + b에 softmax함수를 사용하면 확률벡터로 변환되어 특정 벡터가 어떤 class에 속할 확률을 계산할 수 있다.

\[softmax(o) = (\frac{exp(o_{1})}{\Sigma{exp(o_{k})}},...,\frac{exp(o_{p})}{\Sigma{exp(o_{k})}})\]
1
2
3
4
5
6
7
def softmax(vec):
	denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True)) 
	# softmax함수가 지수 연산을 취하기 떄문에 너무 큰 값을 들어오면 overflow가 발생할 수 있다.
	# overflow를 방지하기 위해 max를 빼준다음에 계산한다.
	numerator = np.sum(denumerator, axis=-1, keepdims=True)
	val = denumerator / numerator
	return val

학습을 할 때는 softmax함수를 사용해 각 class별로 확률을 모두 확인하지만 실제 추론을 할 때는 one-hot벡터로 최대값을 가진 주소만 1로 출력하는 연산을 사용한다.


softmax함수를 사용하는 이유(생각해보기)

위의 softmax함수의 계산을 보면 각 결과를 그대로 사용하는것이 아닌 지수함수를 사용해 계산하게된다. 예를들어 (1,1,3)라는 결과가 있을 때 단순 확률로 계산하게되면 (0.2, 0.2, 0.6)라는 결과가 나오지만 softmax함수를 사용하여 확률을 보면 (0.10650698, 0.10650698, 0.78698604)이 나오게된다. 지수함수의 특성을 사용해 모두에게 똑같은 가중치를 주고 확률을 구하는것이 아니라 높은 값일 수록 더 가중치를 주어 확률을 구함으로써 학습을 효율적으로 하기 위함이 아닐까 싶다..


활성함수

활성함수는 보통 선형 모델이나 행렬곱을 사용하지 않고, 비선형 함수로써 선형 모델로 나오는 출력물 각각의 원소에 적용된다. (softmax는 출력물의 모든 값을 고려해 출력한다..) 활성함수는 주소에 해당하는 출력값만 고려해 출력하기 때문에 확성함수는 벡터를 input으로 받지않고 어떠한 값을 input으로 받게된다.

이러한 활성함수를 사용해 선형모델로 나온 출력물을 비선형 모델로 변형할 수 있고 이러한 변형된 벡터를 잠재벡터라고 한다.

시그모이드(sigmoid)함수, tanh함수는 전통적으로 많이 사용한 활성함수지만 딥러닝에서는 ReLU함수를 많이 쓰고 있다.

dl1

dl2

위의 그림처럼 선형모델과 활성함수를 반복적으로 사용하는것이 딥러닝의 기본적인 모형이다.

이렇게 layer를 많이 늘리면 다층(multi-layer) 퍼셉트론(MLP)라고 한다. 각 선형모델을 연결하는 사이에 활성함수를 사용해야한다.

dl3

forward propagation는 학습이 아니라 주어진 입력이 왔을 때 출력물을 출력하는 과정을 표현하는 연산이다.


layer를 여러개 사용하는 이유

이론적으로는 2층 신경망으로도 임의의 연속함수를 근사할 수 있지만 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훤씬 빨리 줄어들어 더 효율적으로 학습이 가능하기 때문이다.

층이 깊을수록 적은 파라미터로 학습이 가능하다. 하지만 층이 깊어지면 깊어질 수록 최적화가 어려워 학습이 어려울 수 있다.


역전파 알고리즘(backpropagation)

각각의 가중치 행렬에 대해 손실함수에 대한 미분을 계산할 때 역전파 알고리즘을 사용한다. (경사하강법을 사용해 학습을 하기위해)

dl4


역전파 알고리즘 원리

역전파 알고리즘은 합성함수 미분법인 chain-rule기반 자동미분을 사용한다.

dl5

z를 x로 편미분하였을 때 결과물은 2(x+y)이다 이 값을 알기 위해서는 x, y값을 모두 알고있어야한다.

따라서 역전파 알고리즘에서 각각의 tensor값을 메모리에 가지고 있어야한다. forward보다 메모리 사용이 더 많다.

dl6

This post is licensed under CC BY 4.0 by the author.