1118 Convolutional Neural Network
링크로 범벅된 포스트는 안정성이 매우 떨어져서(=웹의 링크는 시간이 지나면서 너무 쉽게 깨진다) 기피하는 편이지만, 두고두고 천년만년 볼것도 아니고 해서 그냥 메모삼아. 구글링하면 5분도 안걸려서 다 나온다.
-
Convolutional Neural Network
개략적인 설명. 유명한 UFLDL Tutorial - Grzegorz Gwardys ― Convolutional Neural Networks backpropagation: from intuition to derivation
제목 그대로. Back prop의 직관적인 가시화와 설명. 훌륭하다. - What does 1x1 convolution mean in a neural network?
곁다리. 1×1 convolution을 왜 쓰는가. 조금 더 디테일하게 설명해둔 포스트(Aaditya Prakash ― One by One [ 1 x 1 ] Convolution - counter-intuitively useful)도 볼만한데, 첫그림부터 약간 오해를 살만한 그림이라 내용을 다 읽고 답글까지 봐야 제대로 이해할 수 있다.
중간에 구체적으로 weight(\(w\))가 어떻게 update되는건지 궁금해서 몇시간 허비(?)하긴 했는데, 결국 \(\frac{\partial}{\partial w}\text{error}\)를 알아내는 것이 관건이다(How to update the bias in neural network backpropagation?과 Andrew Gibiansky ― Convolutional Neural Networks 참고). CNN은 \(w\)를 share하기 때문에 잘 이해가 안가는 것 같다. 어떤 신경망이든(본인이 아는 한 어떤 학습이든) 1-dimension의 값 하나, 즉 목적한 값(주로 loss=error)을 계산하는 목적 함수가 있다. Supervised든 unsupervised든 마찬가지다 (RBM의 경우 unsupervised지만, energy function을 목적으로 해서 \(w\)을 갱신한다. ‘답’이라고 부를만한 것을 알려주지 않아서 unsupervised일 뿐이지 분명히 목적이 있다. Clustering도 loss가 존재하지만 unsupervised에 속하는 것과 같은 이유). 여러개(\(n\)개) 중 하나를 고르는 multiclass classification도 목적함수의 결과값이 \(n\)-dimension일것 같지만 cross entropy[1]를 목적함수로 써서 최종 결과를 1-dimension으로 줄인다. 이 값이 감소하는 쪽으로 움직이기만 하면 되는 것이다. 정리하면, 특정 \(w\)를 갱신하는(=학습시키는) 방법은, 신경망이 어떤구조로 디자인 되어있든지, 신경망 전체를 \(f(w)\)로 보고(여기서 \(f\)는 목적함수) \(\frac{\partial f(w)}{\partial w}\)를 계산한 후 적당히 \(w\)를 갱신해 주는 것이다. 이후에 등장하는 복잡한 수식은 모두 이 과정을 조금 더 쉽고 빠르게 하기 위한 것이고, 만일 충분히 강력한 computing power가 주어진다면 모든 수식을 무시하고 순전히 numerical하게 gradient를 구해서 \(w\)를 갱신할 수 있다. Max pooling layer에서는, kernel에 연결된 모든 activation output중 최대값만 취하고 나머지를 버리므로, backpropagation할 때는 이 최대값을 output으로 준 \(w\)만 갱신하고, 나머지는 그대로 놔둔다. 어떤면에서는 Dropout과 비슷하다. Activation function중 relu도 \( 0 \geq x \)일 때 output이 \(0\)으로 고정되므로 그 영역에 대해서는 backpropagation하지 않는다.
다시 cnn으로 돌아와서, multi channel to multi channel에 관해서는 Convolutional Neural Networks (LeNet)의 Details and Notation에 나오는 그림 참고. 2d모양의 filter가 multi-feature에 대해 모두 공유되는 것이 아니고 filter자체가 3d다.
conv2d
보다가 여기까지 옴.
- ↑ cross entropy에 관해 위키피디아의 Kullback–Leibler divergence와 Cross entropy항목 참고. \(D_{\mathrm {KL} }(P\|Q) \geq 0\)를 보임으로써 Cross entropy \(H(p,q)\)가 최소가 되려면 두 확률분포 \(p, q\)가 서로 같아야 함을 보일 수 있다. \(D_{\mathrm {KL} }(P\|Q) \geq 0\) 의 증명은 이 영상(Jensen's inequality를 이용한 증명)이 쉽다. Kullback-Leibler divergence 항목에 나오는 아래 식은 외워둘 가치가 있다. $$ \begin{matrix}D_{\mathrm {KL} }(P\|Q)&=&-\sum _{x}p(x)\log q(x)&+&\sum _{x}p(x)\log p(x)\\&=&H(P,Q)&-&H(P)\end{matrix} $$