Backpropagation / Neural Networks
https://jaejunyoo.blogspot.com/2017/01/backpropagation.html
classifier (분류er)
f(x) = Wx + b -> score vector
손실함수 = total loss term
가장적은 loss를 가지는 W를 찾고 싶다.
∇W (gradient W)를 구했음
Numerical gradient : slow :(, approximate :(, easy ro write :)
h를 정해서 구하는 방식
Analytic gradient : fast :), exact :), error-prone :(
도함수를 구해서 계산하는 방식 (원본함수를 정확히 알기 힘듬)
복잠한 함수를 통해 Analytic gradient를 구하자
computational graph를 사용 -> Backpropagation 사용 가능
모든 변수에 대해 chain rule을 사용
CNN -> 입력 이미지 -> 많은 레이어 -> loss funtion
엄청나게 복잡한 함수를 가질것으로 예상됨
예시) f(x,y,z) = (x+y)z
1) computational graph 사용
q = x+y -> 편미분 사용
f= qz -> 편미분 사용
체인룰을 사용해 뒤에서부터 계산함.
웅성웅성
각노드는 입력을 받고 출력을 냅
입력에 대한 출력의 기울기를 계산
Loss L 은 이미 계산되어있으므로, 이로부터 체인룰을 통해서
입력방향으로 돌아갈 수 있다.
gradient를 구한것으로 가중치를 어떻게 변경하는가?
각 여러가지 변수들의 편미분 값들을 거함
야코비안 행렬(행렬식 안에 편미분만 들어있는 다변수 벡터 도함수 행렬)
좌표계 변환 등에 사용함
으로 나타내면, 모든 변수에 대한 편미분 팩터를 곱할 수 있다.
각 변수들의 대각선만 의미있는 대각행렬의 형태로 나타남
Caffe : 딥러닝 프레임 워크
Layer : computational node 들이 정리되어 있음
forward pass -> 함수를 미분
backward pass -> 미분한 함수들을 통해 값을 역산
Neural Network
f = Wx (linear 함수) -> 첫번째 (선형) 레이어
f = W_2max (0, W_1x) 두번째 (비선형) 레이어
2 layer Neural Network
ex) f = W_3max (0, W_2max(0, W1x)) 세번째 (비선형) 레이어
3 layer 추가 (의미는 없음, 깊은 신경망!)
보통 입력층은 세지않고 출력층과 히든레이어만 세므로
3레이어라고 하면 2개의 히든레이어를 가진다고 할 수 있음
여러 계층을 통해 복잡한 네트워크를 만들 수 있음.
(선형 네트워크라 행렬 곱셈으로 연결되어 있음)
뉴런 -> 서로 연결된 많은 뉴런을 가지며
수상돌기로부터 신호를 받아서 세포체에서 정보를 종합.
이후 축색을 통해 다른 뉴런에 전달하는 구조를 가짐
이것은 노드가 x0~ x1~ x2의 신호들을 받아서 sum(w_ix_i+b) 해서
다음 노드로 보내는 것과 유사함
뉴런은 활성화 / 비활성화 두가지 상태를 가지기 때문에
자극이 음수일때는 항상 0, 양수일때는 선형을 나타내는
ReLU 함수를 사용한다.
그렇지만 생물학적 뉴런은 더 복잡!
단일 가중치가 아니라 복잠한 비선형 함수를 가짐
ratecode, rate fire