Neural network#
Linear regression에서의 NN#

행렬의 역할을 아주 잘 활용한 전형적이 예시가 NN이다.
X 행렬에서 데이터를 모아둔다. W에서는 X의 데이터를 다른 차원으로 보내주는 역할을 한다.
b 행렬은 y 절편을 열벡터에 한꺼번에 더해주는 역할을 한다.
본래 (X, d) 차원이었던 X 행렬은 (n, p) 차원으로 변환된다.
해석#

d차원이었던 X를 p차원으로 연결.
하나의 화살표는 W 벡터의 하나의 변수를 뜻한다. xd는 p개의 o를 가르키기 때문에 화살표는 d x p개만큼 존재하는데 이는 W 행렬의 차원과 동일하다.
Classification에서의 NN#
Softmax#
 
classification에서는 softmax를 벡터와 결합해 확률벡터로 표현한다. 즉, 선형 모델에 softmax를 결합하여 선형 모델의 결과를 원하는 형식대로 해석 가능하다.
Softmax 구현#
def softmax(vec):
denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
numerator = np.sum(denumerator, axis=-1, keppdims=True)
val = denumerator / numerator
return val
np.max를 추가해서 overflow를 방지한다. 기존의 softmax 연산결과는 보장된다.
Prediction#
Prediction에서는 softmax를 사용하지 않고 onehot과 같은 메서드만을 사용한다. 이미 NN의 출력으로 확률이 나왔기 때문이라고 생각한다.
def one_hot(val, dim):
return [np.eye(dim)[_] for _ in val]
def one_hot_encoding(vec):
vec_dim = vec.shape[1]
vec_argmax = np.argmax(vec, axis=-1)
return one_hot(vec_argmax, vec_dim)
Activation function#
- 활성화함수는 선형함수의 출력을 비선형으로 바꿔준다.
- 활성화 함수로 변형된 벡터 = Hidden 벡터, 잠재 벡터, 뉴런
- 신경망(NN) = 뉴런으로 이루어진 모델
- Perceptron = 뉴런으로만 이루어진 전통적인 모델 
softmax와의 차이점은 softmax는 모든 변수값을 고려하지만 활성화함수는 본래 실수에 대해서만 적용된다고 한다. ?? softmax도 활성화 함수인줄 알았는데 내가 잘못 알고 있었다.
정의#
실수에서 정의되는 비선형 함수. 활성화 함수를 쓰지 않은 NN은 선형모델과 전혀 차이가 없다!
종류#

전통적으로는 sigmoid와 tanh를 사용. 최근에는 relu와 relu 변형 사용.
NN(Neural network)#
정의#
선형모델과 활성함수를 합성한 함수 
신경망 내에서의 입력 z를 잠재 벡터 h로 변환하는 과정을 반복하여 신경망의 layer를 쌓는다. 위 그림은 two layer NN이다. 이를 일반화하면 아래와 같다.

활성화 함수가 적용될 때는 위에서 언급했듯이 하나의 벡터 내의 실수에 개별적으로 적용된다.
layer를 2개 이상 쓰는 이유#
universal approximation theorem
- 2층 신경망으로도 임의의 연속함수 근사 가능
- 실현이 어렵다.
층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 급감한다.
따라서 보통 깊은 층의 NN을 사용한다. 하지만 최적화는 어려워진다.
forward propagation(순전파)#
NN의 layer를 쌓는 과정을 그대로 따라가며 가중치를 조정하는 것.
back propagation(역전파)#
고전파 ㅋㅋ ..
선형모델의 parameter update#
선형모델은 어찌보면 1개의 layer라고도 생각할 수 있다. 즉, 모든 parameter들이 한번에 모두 업데이트된다.
NN의 parameter update#
반면 NN은 여러 개의 layer로 구성된다. 즉, 한꺼번에 모든 parameter들을 업데이트할 수 없다. 순차적으로 진행해야 한다.
원리#
 최종 목표 : L개의 모든 층에 사용된 모든 paratmer를 업데이트

미분의 연쇄작용을 사용하여 출력단에서 입력단까지 거꾸로 거스르면서 parameter를 업데이트한다.
chain-rule기반 자동미분(audo-differentitaion)#
미분의 chain-rule은 고등학교 때 배웠던 내용 그대로이다. 
이 때, 컴퓨터가 각 node의 텐서들을 알고 있어야지 chain-rule을 통한 계산이 가능하다.
반면 forward propagation은 단순히 순차적으로 계산하면 되기 때문에 메모리적으로 back propagation보다 유리하다.

위 그림에서 파란색 화살표가 forward propagation, 빨간색 화살표가 back propagation이다. W1에 대한 gradient vector를 구하기 위해 chain-rule을 사용한 과정을 보여주고 있다.

Reply by Email