
이번 글에서는 심층 신경망(Deep Neural Network)에서의 "순전파 및 역전파 과정"에 대해서 알아보겠습니다.
일단 "순전파 과정"부터 부터 살펴봅시다.
참고)) 신경망 안에서의 계산 과정은 " 순전파 ---> 손실 계산 ---> 역전파 " 순서로 이뤄집니다.

위의 자료는 "순전파 과정"이 이뤄지는 과정을 도식화한 자료입니다.
노란색으로 강조된 오른쪽 부분에서 저희가 기억해야 할 정보는 "Z[l]"입니다.
왜 이 부분을 기억해야 할 정보라고 하는 걸까요?

그 이유는 "역전파 과정에서 Z [i]을 필요하기 때문에"입니다.
저희가 딥러닝의 정확도를 높이기 위해 사용하는 경사 하강법(=역전파 과정)에서 필요로 하는 값은
1 - 기울기 값을 의미하는 da[l]
2 - 활성화 함수의 입력값을 의미하는Z [l]
위의 2가지 값입니다.
da [l]은 순전파 과정 후에 진행하는 "손실 계산"이라는 과정을 통해서 따로 구하기 때문에,
사실상 저희가 기억해야 하는 값은 Z [l]뿐입니다.
그래서 "Cache"라는 새로운 변수를 정의하여 ZZ [l]의 값을 저장하여 기억하는 것이죠.

전체적인 과정은 이렇습니다.
손실 함수 과정에서 구한 미분 값 da [l]"과 활성화 함수의 입력값인 Z [l]을 이용하여
매개변수 W, b를 업데이트해 줍니다.
이것을 각각의 신경망 층층마다 진행하여,
최종적으로 W [1], b [1]을 업데이트해 주면 완성입니다!
이렇게 매개변수 W와 b를 1번 업데이트해 주는 것을 "역전파 과정을 1번 진행했다"라고도 표현합니다.

좀 더 나아가서, "역전파 과정"에서 이뤄지는 수학적 계산에 대해 알아보겠습니다.

위의 자료는 "역전파 과정"에서 이뤄지는 수학 계산을 나타낸 자료입니다.
흠... 갑자기 수학이 동원되니 난이도가 급상승했네요...
그렇다고 포기하지 않으셔도 됩니다.
부분 부분을 뜯어서 보면 쉽게 이해할 수 있거든요. 저를 믿어보세요!

일단은 맨 윗부분부터 살펴보겠습니다.
위 자료의 의미는 da [l]을입력하면 da [l-1], db [l]을
말로만 하면 머리에 잘 와닿지 않으니 그림과 함께 이해해 봅시다.

위 자료의 모습처럼 역전파 과정의 첫 과정을 진행한다고 생각해 보겠습니다.
위에서 언급했던 것처럼 da [l]와 Z [l] 값을

위의 4개의 퍼셉트론의 매개변수 W, b를 업데이트해준다는 이야기입니다.
그리고 아래 한 과정을 반복-반복하여,
최종적으로 첫 번째 층의 매개변수 W, b를 업데이트하면 역전파 과정이 끝나는 것입니다!
그럼 어떻게 업데이트해 줄 것이냐?
이것을 의미하는 것이 아래의 자료 내용입니다.

역전파 과정에서 L 층의 매개변수 W [l] , b [l] 값을 업데이트하는 방식은
도함수 값 dW [l] , db [l]를 구하여 업데이트해 주는 방식입니다.
ex) 새로운 W [l] = 원래 W [l] - dw [l]
또한, 그다음 신경망 층에서도 경사 하강법을 수행하기 위해서 da [l-1]의 값도 구해줘야 합니다.
저희가 구하고자 하는 da [l-1] dW [l] , db [l] 값을 구하기 위해서는 "dz [l]"의 값이 꼭 필요하기에,
순전파 과정에서 저장한 Z [l]과 손실 계산 과정에서 구한 da [l]을 통해서 dz [l]을 구하겠습니다.
---> da [l]은 오차 계산 과정에서 알 수 있는 값 + 역전파를 통해 나머지 da [1 ~ L-1 ]의 값을 구하는 것
"왜 수학적으로 저렇게 계산되는지"에 대해서는 예전 포스팅에서 자세히 설명해놓았습니다.
링크의 설명을 통해 이해해 보시고, 안 풀리시는 의문이 있으시다면 댓글로 남겨주세요!

자료의 왼쪽 부분을 살펴보았으니, 이제 빨간색빨간색으로 칠해진 오른쪽 부분을 살펴보겠습니다.
사실 저희가 한 왼쪽 부분에서의 계산은 "층마다 퍼셉트론이 1개" 일 때의 방식입니다.
저희가 사용하는 신경망에서는 " 층마다 퍼셉트론이 수백~수천 개"이기 때문에,
실제로는 왼쪽의 계산 과정에 "행렬과 벡터"를 적용하여 오른쪽 그림과 같이 계산합니다.
지금의 수준에서는 오른쪽 부분에서 이뤄지는 수학적인 과정에 대해서 깊게 이해할 필요는 없습니다.
단지 여기서 기억해야 할 몇 가지 정보만 알아보겠습니다.

np. sum은 "행렬들의 총합 " 의미하는 파이썬 프로그래밍 코드이며,
수학 기호 시그마 ∑와 같은 역할을 수행합니다.

dW, db, da를 구하는 과정에서 "m"을 나눠주는 이유는 무엇일까요?
그 이유는
" z [l]을 구하는 과정 자체가 각각의 퍼셉트론의 산출 값을 총 합하여 구하기 때문에"
입니다.
각 퍼셉트론의 총합 z [l]를 이용하였으니,
각각의 퍼셉트론의 매개변수를 업데이트하는 상황에서는 다시 "m"으로 나누어서 평균값을 만들어주는 것이죠.
---> m은 퍼셉트론의 개수를 의미합니다.

지금까지 배운 내용을 요약 보겠습니다. 위의 자료에서 빨간색 부분을 봐주세요!
맨 처음 입력 데이터 X를 입력하게 되면,
각각의 신경망 층을 거치면서 가공되어 최종적으로 Y-hat (기계의 예상치)가 나오게 됩니다.
이 과정을 "순전파 과정"이라고 부릅니다.
참고) ----->
Relu는 신경망의 층층을 쌓는 이유를 만들어주는 "활성화 함수"이며,
sigmoid는 최종 가공된 숫자 값을 저희가 원하는 "확률 값"으로 바꿔주는 "로지스틱 함수"입니다.

"순전파 과정"을 수행한 뒤,
입력 데이터의 진짜 정답 값인 y( 정답 1 , 오답 0)과
기계가 입력 데이터를 정답이라고 예상하는 확률인 y-hat을 비교하여 da [l]의 값을 구해줍니다.
이 과정을 "손실 계산 과정"이라고 부릅니다.

손실 계산 과정을 통하여 da [l]을 구했다면, 경사 하강법을 이용하는 역전파 과정을 진행해 줍시다.
손실 계산 과정에서 구한 da [l]와 순전파 과정에서 저장한 Z [l] 값을 이용하여
매개변수dW [l], db [l] , da [l-1]의 값을 구해해 주고,
다시 신경망 층층마다 이 과정을 반복하여 최종적으로dW [1] , db [1]을 구해줍니다.
이렇게 구한 dW, db로 매개변수 W, b을 업데이트해 주면 끝입니다!
이러한 과정을 "역전파 과정"이라고 부릅니다.
오늘날에도 딥러닝 알고리즘을 구현할 때,
내 학습 알고리즘 구현이 제대로 작동된다는 것이 놀랍게 느껴지곤 합니다.
머신러닝의 복잡성은 코드 라인이 아닌 데이터에서 비롯되고,
학습 알고리즘의 많은 복잡성은 수천 줄의 코드를 작성하는 것이 아니라 데이터에서 비롯되기 때문입니다.
일단 저는 프로그래밍 과제를 진행하기 전에,
다음 비디오에서 하이퍼 매개 변수와 매개 변수에 대해 논의하고 싶습니다.
심층 신경망을 훈련할 때 하이퍼 매개변수를 잘 구성할 수 있으면 신경망 네트워크를 더 효율적으로 계발 수 있기 때문입니다.
그렇기에 다음 시간에는 "하이퍼 매개변수와 매개변수"에 대해 배워보도록 하겠습니다.
이 내용들은 모두 coursera에서 앤드루 응 교수님의 강의를 요약정리 및 쉽게 재 풀이하여 적은 글이며,
내용에는 생략되거나 변형된 부분이 많으니 직접 강의를 들어보시는 걸 추천드립니다!
이 글은 상업적 목적이 아닌, 한국에서 인공지능을 배우고 싶은 분들을 위해 적은 교육적 목적에서 작성하였습니다.
읽어주셔서 감사드리며,
혹시 궁금증이나 의문이 있으시다면 댓글로 남겨주시면 성심성의껏 답변드리겠습니다!
'코세라 앤드류 응 AI 강의 리뷰' 카테고리의 다른 글
| [인공지능 강의 리뷰] 27 - 프로그래밍 과제. 심층 신경망 구축하기 1편 (0) | 2022.07.29 |
|---|---|
| [인공지능 강의 리뷰] 26 - 총정리 퀴즈. 신경망의 주요 개념 (0) | 2022.07.29 |
| [인공지능 강의 리뷰] 25 - 매개변수와 하이퍼 매개변수의 차이점 +뇌와 딥러닝의 관련성 (0) | 2022.07.29 |
| [인공지능 강의 리뷰] 23 - 왜 신경망의 층을 깊게하는 걸까? ( why deep repretations?) (0) | 2022.07.05 |
| [인공지능 강의 리뷰] 22 - 딥러닝에서 행렬의 크기 알아보기(Getting your matrix dimensions right) (0) | 2022.06.01 |
| [인공지능 강의 리뷰] 21 - L층의 뉴럴 네크워크(Deep L-layer Neural Networks) (0) | 2022.05.31 |
| [인공지능 강의 리뷰] 20 - 하나의 숨겨진 레이어를 사용한 평면 데이터 분류. 프로그래밍 과제 (0) | 2022.05.19 |