이번 주 초기의 비디오는
지난 몇 주간의 비디오와 마찬가지로
정방향 전파와 역전파의
기본 구성 요소들을 살펴보았습니다
심층 신경망을 구현하기 위한
중요한 요소들이었죠
이제 깊은 망을 만들기 위해
이 요소들을 어떻게 이용할지 알아봅시다
여기 적은 수의 층을 가진
네트워크가 있습니다
하나의 층을 골라서
그 층에 집중하여 계산을 해봅시다
층 L에 대해서 매개변수
W^[l]과 b^[l]이 있습니다
그리고 정방향 전파에 대해서는
입력으로
이전 층의 활성값인 a^[l-1]을
주게 됩니다
그럼 출력은 a^[l]이 됩니다
우리가 전에 했던 것입니다
z^[l]은 W^[l]×a^[l-1]+b^[l]과 같습니다
그럼 a^[l]은
g^[l](z^[l])과 같습니다
g^[l](z^[l])과 같습니다
g^[l](z^[l])과 같습니다
이것이 입력 a^[l-1]에서
출력 a^[l]을 얻어내는 방법입니다
나중에 사용할 경우를 대비해
z^[l]의 값을 저장하는 것이 유용합니다
왜냐하면 z^[l]의 값을 저장하면
역전파의 단계에서
유용하게 쓰일 수 있기 때문입니다
그리고 역전파의 단계에서 다시
층 L에 대한 계산에 집중합니다
함수를 구현하게 되는데
입력으로 da^[l]을 받고
출력으로 da^[l-1]이 나옵니다
그리고 자세한 것은 생략했지만
사실 입력은 da^[l]과
저장해 놓은 z^[l]을 사용합니다
그리고 da^[l-1]과
경사 하강법 학습을 위한
그래디언트를 출력합니다
따라서 이것이 정방향과 역방향 단계를
구현하기 위한 기본 구조입니다
정방향 함수와
역방향 함수라고도 합니다
요약하자면 층 l에서
정방향 단계, 전파
혹은 함수가 있습니다
입력으로 a^[l-1]이 들어가면
출력으로
a^[l]이 나옵니다
계산을 위해서
W^[l]과 b^[l]을 사용해야 합니다
또한 z^[l]이 포함된 캐시도
출력됩니다
그럼 역전파 단계를 사용하는
역방향 함수는
또 다른 함수가 되는데
또 다른 함수가 되는데
입력으로
da^[l]을 넣으면
출력으로
da^[l-1]이 나옵니다
따라서 이 활성에 대한
도함수 da^[l]을 주면
어떤 도함수를 원할까요?
이전 층의 활성에 대한
도함수를 계산합니다
이 박스에서는
W^[l]과 b^[l]을 사용합니다
계산 과정에 따라
dz^[l]도 얻습니다
그리고 이 역방향 함수는
dW^[l]과 db^[l]을 출력합니다
그리고 이 역방향 함수는
dW^[l]과 db^[l]을 출력합니다
그러나 역방향 반복을 나타내기 위해
가끔 빨간색 화살표를 사용할 것입니다
이 두 함수를 구현할 수 있다면
신경망의 기본 계산은
다음과 같을 것입니다
입력 특성 a^[0]를 가져와서
집어넣습니다
이것이 첫 번째 층의 활성을 계산할 것입니다
a^[1]이라고 부릅시다
그리고 이것을 위해
W^[1]과 b^[1]이 필요합니다
또한  z^[1]을 캐시에 저장합니다
또한  z^[1]을 캐시에 저장합니다
이 과정이 완료되면 이 값을
두 번째 층에 집어넣고
W^[2]와 b^[2]를 사용해서
다음 층의 활성인 a^[2]를
계산하게 됩니다
이런 식으로 계속합니다
최종적으로
a^[l]을 출력하게 됩니다
이 값은 y의 예측값과 같습니다
그리고
이 과정에서
모든 층의
z 값을 캐시에 저장합니다
따라서 이것이 정방향 전파 단계입니다
이제 역전파 단계에서 대해
우리가 할 것은
이 반복을 역순으로 하는 것입니다
이 반복을 역순으로 하는 것입니다
역방향으로 가면서
이렇게 경사를 계산합니다
따라서 여기에 집어넣는 값은
da^[l]이고
그럼 이 박스는
da^[l-1]을 출력합니다
이런 식으로
da^[2]
da^[1]
da^[1]
da^[0]를 계산하여
하나의 출력을 더 얻을 수 있습니다
그러나 이것은 입력 특성에
대응하는 도함수이고
최소한 지도 신경망의 가중치를 학습하는
것에는 유용하지 않습니다
따라서 이 지점에서 멈춥니다
역전파의 과정에서
dW^[l]과 db^[l]을 출력합니다
이 위에는 W^[l]과 b^[l]입니다
여기는 dW^[3]와 db^[3]를 출력합니다
이런 식으로 계속합니다
따라서 필요한 도함수는
모두 계산하게 됩니다
이 박스 역시 이 매개변수들을 사용합니다
W^[l], b^[l]
그리고 나중에 살펴볼 dz^[l]도
박스 안에서 계산하게 됩니다
따라서 신경망의 하나의 학습 반복은
x값인 a^[0]로 시작해서
이렇게 정방향 전파를 따라서
y의 예측값을 계산하고
이 값으로 da^[l]을 계산하고
역전파를 거쳐서
이 모든 도함수를 얻게 됩니다
따라서 W^[l]의 값은 학습률을 곱해
W^[l]-αdW^[l]로 업데이트됩니다
각각의 층에 대한 값입니다
b에 대해서도 마찬가지로 역전파를 계산해서
이 모든 도함수 값을 알 수 있습니다
따라서 신경망에 대한 경사 하강법의
하나의 반복이었습니다
넘어가기 전에 구현에 관한
세부사항 하나를 말씀드리겠습니다
개념적으로 여기 있는 캐시를
역방향 함수에 대한
z 값을 저장하는 곳이라고
생각하는 것이 유용합니다
그러나 프로그래밍 예제에서
이것을 실제로 구현할 때
캐시가 매개변수 W^[1]과 b^[1]의 
값을 얻어 역방향 함수에 넣기에
편리한 방법이라는 것을
알게 될 것입니다
따라서 프로그래밍 예제에서
실제로 z^[1] 뿐만 아니라
W^[1]과 b^[1]도 캐시에
저장하게 될 것입니다
여기는 z^[2], W^[2], b^[2]입니다
따라서 구현의 관점에서
이 매개변수들의 값을 저장하고
나중에 있을 역전파의 계산에서 필요한 곳에
복사해 사용하는 것이 유용합니다
따라서 프로그래밍 예제에서 필요한
구현의 세부사항이었습니다
따라서 심층 신경망에 영향을 주는
기본 구성 요소들을 알아보았습니다
각각의 층에서 정방향 전파 단계와
대응하는 역전파 단계가 있고
한 곳에서 다른 곳으로
정보를 전달하는 캐시가 있습니다
다음 비디오에서는 실제로 이 구성 요소들을
어떻게 구현하는지 알아보겠습니다
