Neural Networks and Deep Learning - 4 week
Deep L-layer Neural Network
deep nural network가 무엇일까?
1 week에 한 로지스틱 회귀 모델이 shallow 하다면 hidden layer가 많은 모델은 deep 하다
얕은 신경망이 학습하지 못하는 무언가를 깊은 신경망은 학습 가능하다
얼마나 deep 한 모델을 구축해야 하는지 예측하는 것은 쉽지 않다
강의에서 그냥 단일층, 한두 개의 히든 레이어 모두 시도해 보라 한다
나중에 자세히 보자 하니 이것도 마법이라 생각하자
표기법들은 지난 3주 차에 본 것과 동일하다
\(A^{[레이어 번호](예제 번호)}_{노드 번호}\)
Forward Propagation in a Deep Network
FP는 다음 두 식이 반복된다
\(z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}\) \(a^{[l]}=g^{[l]}(z^{[l]})\) |
모든 훈련 세트에 대해서는 column 벡터를 행렬로 바꾸면 된다
대문자로 바꾼 동일한 식이니 반복은 하지 말자
Getting your Matrix Dimensions Right
버그 없는 코딩은 중요하다
당연한 소린가
행렬의 차원을 맞추는 것은 간단하면서 효과가 좋다
()가 행렬의 차원이라 보면
(a, b) = (a, c) * (c, b)이다
따라서 각 변수의 차원은 아래와 같아야 한다
\(Z^{[l]} : (n^{[l]},m)\) \(A^{[l]} : (n^{[l]},m)\) \(W^{[l]} : (n^{[l]},n^{[l-1]})\) \(b^{[l]} : (n^{[l]},1)\) |
Why Deep Representations?
딥러닝은 hidden layer 가 많아야 잘 작동한다
그래서 또 궁금한 게 딥러닝은 왜 잘 작동하는 걸까?
딥러닝의 hidden layer가 많아지는 게 대체 무슨 의미일까
이미지가 input으로 들어와 사람을 판단하는 NN을 만들었다 하자
첫 hidden layer은 단순히 선의 끝나는 지점의 정보를 저장한다
다음 정보는 선들의 위치, 이전 노드의 정보로 이목구비를 저장한다
세 번째 layer는 이목구비로 얼굴의 모습 등을 결정한다
마지막 layer에서 판단을 한다
즉 여러 개의 hidden layer를 가진다면, 낮은 layer에선 low level의 정보를 다룬다면 깊은 layer에선 high level의 복잡한 정보를 다룬다
그렇기에 더 많은 정보를 얻을 수 있는 것이다
알고리즘에서 구간의 정보를 tree를 통해 모아 보는 것과, 브루트 포스로 보는 느낌..?
이 부분은 사실 잘 와 닺지 않으니 넘어가자
Building Blocks of Deep Neural Networks
여러 레이어를 가진 NN에선 FP와 BP가 반복되어야 한다
어떤 형태로 반복이 일어나는지 살펴보자
FP에선 입력으로 \(a^{[l-1]}\), 출력으로 \(a^{[l]}\)을 가지는 함수를 구현하면 된다
이때 \(z^{[l]}\)을 캐시에 저장해 두면 BP에 유용하게 사용된다
BP 과정에선 입력으로 \(da^{[l]}\), 출력으로 \(da^{[l-1]}, dw^{[l]}, db^{[l]}\)을 가지는 함수를 구현하면 된다

Forward and Backward Propagation
대충 어떤 형태로 구현해야 하는지는 알았다
상세한 식들을 살펴보자
FP과정 , 오른쪽으로 나아가는 과정은 아래 식을 이용한다
iunput : \(a^{[l-1]}\)
output : \(a^{[l]}\), cache : \(Z^{[l]}\)
\(z^{[l]}:w^{[l]}a^{[l-1]}+b^{[l]}\) \(a^{[l]}:g^{[l]}(z^{[l]})\) |
첫 입력은 \(a^{[0]}, X\)이다
BP 과정 , 왼쪽으로 나아가는 과정은 아래 식을 이용한다
input : \(da^{[l]}\)
output : \(da^{[l-1]}, dw^{[l]}, db^{[l]}\)
\(dz^{[l]} = da^{[l]}\times g^{[l] '}(z^{[l]})\) \(dw^{[l]} = dz^{[l]} a^{[l-1]^{T}}\) \(db^{[l]}=dz^{[l]}\) \(da^{[l-1]}=w^{[l]^{T}}dz^{[l]}\) |
캐시 한 z^{[l]}이 보인다
벡터화할 경우 1/m을 곱해줘야 한다
Parameters vs Hyperparameters
파라미터는 W, b와 같은 변수다
하이퍼 파라미터는 learning late \(\alpha \), num of iterations, num of hidden layers \(L\), num of hidden units \(n_{[l]}\), choic of activation function(렐루, 시그모이드 등)과 같은 것이다
하이퍼 파라미터가 파라미터를 컨트롤하기에 하이퍼 파라미터라 한다
그렇기에 하이퍼 파라미터 값을 정하는 것은 중요하다
미리 어느 값이 최적의 하이퍼 파라미터 값인지 아는 것은 어렵기에, 반복해서 찾아보자
이 반복 과정을 Empirical process라는 멋있는 말로 부른다