코세라 앤드류 응 AI 강의 리뷰

[인공지능 강의 리뷰] 27 - 프로그래밍 과제. 심층 신경망 구축하기 1편

파요요요 2022. 7. 29. 19:37
프로그래밍 과제: 심층 신경망 구축 , Deeplearing.Ai

 

이번 시간에는 7주 차 내용을 마무리하는 프로그래밍 과제를 수행해 보도록 합시다.

Jupyter Notebook에서 파이썬 코딩을 통해서, 이미지를 분류하는 심층 신경망을 구축하는 과제입니다!

이번 과제를 통해서 저희가 배우는 점은 크게 3가지입니다.

 

1 - Relu와 같은 비선형 활성화 함수를 이용하여 모델의 성능을 향상하는 방법

2 - 이전 과제에서 보다 훨씬 더 깊은 신경망을 구축하는 방법

3 - 이용하기 쉬운 신경망을 구축하는 방법

목차 :

1. 패키지 - 요리로 비유하면 재료 및 요리 도구 준비

2. 개요 - 요리 레시피

3. 매개변수 초기화 - 요리 재료 손질

4. 순전파 과정 _ 요리하기

5. 손실 계산 - 요리 맛 평가받기

6. 역전파 과정 -요리 맛 개선하기

 

1. 패키지

1 - 패키지 , Deeplearing.Ai

일단, 딥러닝을 만들기 위한 사전 준비물 (Packages)를 준비해 줍시다.

 

numpy는 파이썬 코딩을 할 때, 과학적 계산을 도와주는 중요한 도구입니다..

matplotlib는 파이썬 코딩을 할 때, 수학적 수식을 이쁘게 그림으로 바꿔주는 도구입니다.

dnn_utils는 딥러닝을 만들기 위해 필요한 필수 함수들을 제공해 주는 도구입니다.

testCases는 프로그래밍 과제에서 당신의 코드가 올바른지 확인해 주는 도구입니다.

np.random.seed(1) 당신의 프로그래밍 과제를 채점하기 위해서, 모든 랜덤 함수를 일정한 값으로 바꿔주는 도구입니다.


2. 개요

2 - 개요 , Deeplearing.Ai

 

신경망을 구축하려면 몇 가지 "도우미 기능"을 구현해야 합니다.

이러한 도우미 기능은 다음 과제에서 2층 신경망과 L 층 신경망을 구축하는 데 사용됩니다.

각각의 작은 도우미 기능에는 필요한 단계를 안내하는 자세한 지침이 있습니다.

프로그래밍 과제 진행 단계 :

1단계 - 2 계층 네트워크 및 𝐿 -계층 신경망에 대한 매개변수를 초기 화합니다.(목차 3 + 코딩 연습 1,2)

 

2단계 - 순방향 전파 구현(아래 그림에서 보라색으로 표시)(목차 4 + 코딩 연습 3,4,5)

- 순 전파 LINEAR 부분 계산하기 (결과적으로 𝑍[𝑙] ).

- 활성화 함수 기능은 미리 제공됨 (relu/sigmoid)

- 이전 두 단계를 새로운 [LINEAR->ACTIVATION] 전달 함수로 결합

- [LINEAR->RELU] 순방향 함수를 L-1번(레이어 1부터 L-1까지) 쌓고 끝에 [LINEAR->SIGMOID]를 추가하고, L_mode_forward_funtion으로 통합하기.

 

3단계 - 손실 계산 (Compute the loss)(목차 5 + 코딩 연습 6)

 

4단계 - 역전파 모듈 구현 (아래 그림에서 빨간색으로 표시)(목차 6 + 코딩 연습 7,8,9)

- 역전파 LINEAR 부분 계산하기

- ACTIVATE 함수의 그래디 언트는 제공됨 (relu_backward/sigmoid_backward)

- 이전 두 단계를 새로운 [LINEAR->ACTIVATION] 역방향 함수로 결합

- [LINEAR->RELU]를 L-1 번 뒤로 스택 하고 새 L_model_backward 함수에 [LINEAR->SIGMOID]를 추가하기

5단계 - 매개변수 업데이트 (update the parameters)(목차 6 + 코딩 연습 10)

참고---> 과제 1~5단계를 1번 반복하는 것을 "신경망을 1번 학습시켰다"라고도 부릅니다.

 

이 5단계를 그림으로 표현하면 아래와 같습니다.

심층 신경망 그림 - 코세라 앤드루 응 deeplearing.Ai

3. 매개변수 초기화 (과제 1단계)

3 - 매개변수 초기화 , Deeplearing.Ai

저희는 모델의 매개변수를 초기화하기 위해 두 개의 도우미 함수를 작성할 것입니다.

첫 번째 함수는 2층으로 이뤄진 모델의 매개변수를 초기화하는 데 사용됐되고,

두 번째 함수는 이것을 L 층으로 일반화해주는 역할입니다.

 

부연 설명) ---> 쉬운 이해를 위해서 일단 첫 번째 함수로 2개의 층으로 이뤄진 신경망에서 잘 되나 시험해 보고,

두 번째 함수를 통해서 L 층으로 이뤄진 신경망으로 일반화해준다는 의미입니다.

 

코딩 연습 1 - 매개변수 초기화

2층으로 이뤄진 신경망에서 매개변수를 만들고 초기화해봅시다.

 

지침 :

- 모델의 구조는 LINEAR -> RELU -> LINEAR -> SIGMOID입니다.

- 가중치 행렬에 대해 다음과 같은 무작위 초기화를 사용해야 합니다. np.random.randn(shape)*0.01을 활용합시다.

-편향을 0으로 초기화 사용하는 코드는 np.zeros(shape)  입니다.

 

https://blog.naver.com/dg3625/222828425877

과제에서 지침 한 내용을 참고하여, 파이썬 코딩을 통해 매개변수를 초기화하는 기능을 구현해야 합니다.

저희가 코드를 작성해야 되는 부분은

이 부분입니다.

W1 =?, b1=? , W2 =? , b2=?

여기서? 부분을 채워줘야 하는 것이죠.

글을 보시는 독자분들께서도 어떤 코드를 넣어줘야 할지 저와 함께 고민해 보며 과제를 진행해 봅시다!

문제에서 나와있길,

 

이렇게 결과가 나와야 한다고 합니다.

흠... 매개변수들이 어떤 모양인지는 알겠는데... 어떻게 파이썬 코드를 해야 할지 감이 안 잡힙니다.

 

이럴 때, 아까 과제에서 알려준 이 부분을 참고하면 손쉽게 코딩을 진행할 수 있습니다.

이걸 참고하여 코드를 작성하면, 아래의 코드가 되겠네요.

 

코드를 작성해 주고 나서, 작성한 코드가 정답인지 아닌지 한번 실행해서 확인해 보겠습니다!

정답이네요! 이제 다음으로 넘어가 봅시다.

아까 설명했듯이, 이번에 저희가 한 코딩은 2층으로 구성된 신경망에서 매개변수 초기화를 구현한 것이기 때문에,

이제 일반화하여 L 층의 신경망에서 매개변수 초기화를 구현해야 합니다.

 


 

L 층으로 이뤄진 신경망에서의 매개변수 초기화 - deeplearing.Ai

 

일반화한 과정을 수학적으로 표현하면 위의 그림과 같습니다.

더 깊은 L 층 신경망의 초기화는 더 많은 가중치 과 편향이 있기 때문에 훨씬 더 복잡합니다.

하지만, 위의 과정에 대해 깊이 이해하지 않아도 충분히 과제를 진행할 수 있으니 걱정 마세요!

L 층으로 이뤄진 신경망에서의 매개변수 초기화 - deeplearing.Ai
 
코딩 연습 2 - L 층의 신경망에서의 매개변수 초기화

L-계층 신경망에 대한 초기화를 구현합니다.

지침 :

- 모델의 구조는 [LINEAR -> RELU] × (L-1) -> LINEAR -> SIGMOID입니다. 즉, ReLU 활성화 함수를 사용하는 𝐿−1개의 층과 시 그 몸이 드 활성화 함수가 있는 출력층이 있습니다.

- 가중치에 대해 무작위 초기화를 사용합니다. np.random.randn(shape) * 0.01을​ 사용합니다.

- 편향에 대해 0 초기화를 사용합니다. np.zeros(shape)를​ 사용합니다.

- 변수 layer_dims에 서로 다른 레이어의 단위 수인 𝑛[𝑙]을 저장합니다. 예를 들어 지난주 과제에서 나온 분류 모델의 layer_dims는 [2,4,1]이었습니다. 2개의 입력, 4개의 은닉 유닛이 있는 히든 레이어 1개, 출력 유닛 1개의 출력 레이어가 있었습니다. 즉, W1의 모양은 (4,2), b1은 (4,1), W2는 (1,4), b2는 (1,1)입니다. 이제 이것을 𝐿 레이어로 일반화합니다!

- 다음은 𝐿=1(1 계층 신경망)에 대한 구현입니다. 일반적인 경우(L 계층 신경망)를 구현하도록 영감을 줄 것입니다.

L == 1인 경우:

매개변수["W" + str(L)] = np.random.randn(layer dim [1], layer dims [0]) * 0.01

매개변수["b" + str(L)] = np.zeros((layer_dims [1], 1))

 

https://blog.naver.com/dg3625/222828425877
 

아까 1번째 과제와 마찬가지로, 아래의 빈칸을 코딩해 줘야 합니다.

흠.... 수학 수식도 엄청 복잡하고, 이것저것 설명이 길어서 코딩이 복잡해 보이기도 합니다.

하지만, 문제에서 알려준 힌트들을 모아 보면 쉽게 코딩할 수 있습니다.

 

문제에서 언급된 위의 2가지 힌트를 참고해 보겠습니다.

아래의 L ==1인 경우를 나타낸 자료에서 1을 L로만 바꿔서 코딩하면 됩니다!

이것을 참고하여 코딩하면,

 

이런 형태가 되겠네요. 저번처럼 실행을 통해 정답인지 아닌지 확인해 보겠습니다.

정답이네요! 이제 매개변수 초기화 구현이 끝났습니다.

매개변수를 초기화하였으니, 이제 순 전파 단계를 구현해야 합니다.

 

글이 너무 길어져서, 여기서 한번 끊고 다음 글에 이어서 알아보도록 하겠습니다!


위 글은, 교육적 목적으로 코세라 딥러닝 강좌의 프로그래밍 과제의 내용을 쉽게 풀이한 글입니다.

혹시 글의 내용이 맘에 드셨다면, 댓글이나 공감 부탁드립니다...! 많은 도움 됩니다! (글 하나 작성하는데 6시간 정도 걸려요.. 속닥속닥)

---> 내용에 관한 궁금증 , 글에 대한 피드백이나 아쉬운 점, 개인적인 궁금증 등등... 다 환영합니다!

반응형