![](https://blog.kakaocdn.net/dn/b3t4qi/btrCp5Q4jBV/blSnjrLyW6DMGIBB7T9cbK/img.png)
이번 시간에는 신경망(Neural Networks)을 구현하기에 앞서서,
신경망(Neural Networks)의 전체적인 개요부터 알아보겠습니다.
저번 주의 내용과 많이 겹쳐서, 겹치는 부분은 간략하게 하고 넘어가겠습니다!
![](https://blog.kakaocdn.net/dn/ceXty8/btrCpRMipV2/JaBxKOIMBvaJ9LFI04XRB0/img.png)
학습 데이터가 입력되는 층인 "입력층(Input Layer)"
결과(예측치)의 값이 산출되는 "출력층(Output Layer)"
입력층과 출력층 사이의 층을 의미하는 "은닉층(Hidden Layer)"
신경망(Neural Network)은 위의 3가지의 층으로 구성됩니다.
위의 자료에서는, X1 , X2 , X3는 입력층 , Y-hat은 출력층을 의미합니다.
![](https://blog.kakaocdn.net/dn/bY309j/btrCp7g2RXK/1DfdFstPFKYHgtIKwdl2t1/img.png)
수학적으로 표현할 할 때,
입력 측을 [0]으로, 2번째 층부터 [1]로 표현합니다.
![](https://blog.kakaocdn.net/dn/QRUWI/btrCqbjlYqQ/EpcTwkoUZpWhD1rZD1GXmK/img.png)
각 층에 해당하는 변수들을 표현할 때에도,
변수들 위에 [ ]를 붙여서, 각 층에 해당하는 변수들(z, w, b, a)을나타내 줍니다.
이와 반대로,
역전파 과정을 통해서 구한 도함수 값들은 끝에서부터 시작하여 나타냅니다. ex) dz [1] , dz [2]
![](https://blog.kakaocdn.net/dn/y93Ln/btrCpVA4xxp/VKecw1jL7hVYRTq6eXHsQ1/img.png)
이어서, 더 많은 신경망 표현 방법들을 알아보겠습니다.
![](https://blog.kakaocdn.net/dn/oJxCp/btrCn63V7kJ/VEhaKSx0UFfCyxHBKc0kJk/img.png)
위의 하얀 동그라미를 퍼셉트론(Perceptron) 또는 뉴런(Neuron)이라고 부르겠습니다.
--> 저는 퍼셉트론(perceptron)으로 통일하겠습니다!
a [0]는 입력값 X를 나타내고,
a [1]는 1번째 층의 결괏값 ( 시그 로이드 함수의 값)을 나타내고,
a [2]는 Y-hat (예측치)를 나타냅니다.
![](https://blog.kakaocdn.net/dn/WbKbX/btrCoW1ns9x/2aCdmw33yKvAvJHatVnng0/img.png)
각각의 층의 맨 위 퍼셉트론부터 ~ 맨 아래의 퍼셉트론까지,
순서대로a [1]1 , a [1]2 , a [1]3 , a [1]4라고 표현하겠습니다.
![](https://blog.kakaocdn.net/dn/bfcaRS/btrCj3mPi5O/nq1Y86pWxkNbgSwJ2RSLb0/img.png)
즉, (4 * 1 행렬) a [1] = ( a [1]1 , a [1]2 , a [1]3 , a [1]4 ) 이런 식으로 구성되는 것이죠.
![](https://blog.kakaocdn.net/dn/cynWkk/btrCoVBpGWD/PXiIVCmYbThrqDrkkBIGk1/img.png)
신경망의 결과가 산출되는 과정을 보면서, 위의 표현들이 어떻게 쓰이는지 봅시다.
![](https://blog.kakaocdn.net/dn/bHw8WQ/btrCqoQopyk/SQDkqCWpE1if4NvI5WvyR1/img.png)
--> 위의 과정을 좀 더 구체화해보겠습니다.
![](https://blog.kakaocdn.net/dn/lNmHc/btrCmQUT4jW/LxcK90yTCDbP4qZkzVYkL0/img.png)
위와 같이, 퍼셉트론 하나하나 계산해 주는 과정을 거쳐서 결과를 산출해냅니다.
이 과정을 벡터화 과정(Vectorizing)을 통해서, 아래의 자료의 형태로 표현할 수 있습니다.
![](https://blog.kakaocdn.net/dn/bIceq7/btrCok9fKH9/3WyGaEHqfst3FoXStnBmxK/img.png)
i 번째 층이라고 가정하면,Z [i] = W [i]. T * X [i] + b [i]로 표현할 수 있습니다.
또한, 각각의 행렬의 차원 수를 알아보면,
W [1]의 차원 수는 4( 1층의 퍼셉트론의 수)* 3( 훈련 데이터 x의 수)
b의 차원 수는 4(1층의 퍼셉트론의 수) * 1 ( 편향 b는 퍼셉트론 하나당 1개이므로)로 표현됩니다.
![](https://blog.kakaocdn.net/dn/bXibSf/btrCkKHRxzr/767JHRG2bSKMIOYQhin7r1/img.png)
마찬가지로, 다른 변수들의 차원 수도 살펴보겠습니다.
---> 행렬의 곱에서, 차원 수가 브로드캐스팅(BroadCasting)을 통해서 변한다는 걸 명심해 주시길 바랍니다.
![](https://blog.kakaocdn.net/dn/EIclB/btrCoXlJ7sH/HNXPd1Hv69ExJzO6WBzSlk/img.png)
벡터화 구현에 대해 잠깐 알아보겠습니다.
참고*
--> 벡터화(Vectorizing)를 하는 이유는, 프로그래밍 과정에서 비 효율적인 계산을 하는 for 구문을 안 써서 알고리즘 성능을 향상하기 위해서라고 지난주에 배웠습니다.
![](https://blog.kakaocdn.net/dn/du8YaO/btrCmftSOVz/fJWJXaUtoyiMnWaU0KO2n1/img.png)
위 그림을 보면서 , W [1] * X 행렬을 나타낸 부분을 살펴봅시다.
![](https://blog.kakaocdn.net/dn/Jz7Qd/btrClmfLy8l/8DiKfc5qjRujdRuT106uLK/img.png)
행렬의 열은 입력 데이터 x의 갯 수를 나타내고 ,
행렬의 행은 입력데이터 x의 차원 수 m을 나타냅니다. -->x는 m * 1 벡터(=행렬) 입니다.
![](https://blog.kakaocdn.net/dn/pNA7w/btrCoWmN6yG/verqq0Tl3j2xipwRm3QkN1/img.png)
다시 여기에 , b [1]만 더해주면 z[1] 벡터(=행렬)이 만들어 지는 것이죠.
대략적으로 벡터화가 어떤 식으로 쓰이고 활용되는지 알아봤으니 ,
다음 시간에는 , 활성화 함수에 대해 조금 구체적으로 알아보겠습니다.
이 내용들은 모두 coursera에서 앤드루 응 교수님의 강의를 요약정리 및 쉽게 재 풀이하여 적은 글이며,
내용에는 생략되거나 변형된 부분이 많으니 직접 강의를 들어보시는 걸 추천드립니다!
이 글은 상업적 목적이 아닌, 한국에서 인공지능을 배우고 싶은 분들을 위해 적은 교육적 목적에서 작성하였습니다.
'코세라 앤드류 응 AI 강의 리뷰' 카테고리의 다른 글
[인공지능 강의 리뷰] 18 - 하나의 숨겨진 레이어를 사용한 평면 데이터 분류. 프로그래밍 과제 (2) | 2022.05.17 |
---|---|
[인공지능 강의 리뷰] 17 - 총정리 퀴즈. 얕은 신경망(Shallow Neural Network) (0) | 2022.05.17 |
[인공지능 강의 리뷰] 16 - 왜 활성화 함수에 비선형 함수를 써야할까? (0) | 2022.05.17 |
[인공지능 강의 리뷰] 14 - 프로그래밍 과제 . 신경망 사고방식을 이용한 로지스틱 회귀 모델 만들기3 (고양이 사진 분류기) (0) | 2022.05.16 |
[인공지능 강의 리뷰] 13 - 프로그래밍 과제 . 신경망 사고방식을 이용한 로지스틱 회귀 모델 만들기2 (고양이 사진 분류기) (0) | 2022.05.16 |
[인공지능 강의 리뷰] 12 - 프로그래밍 과제 . 신경망 사고방식을 이용한 로지스틱 회귀 모델 만들기 (고양이 사진 분류기) (0) | 2022.05.16 |
[인공지능 강의 리뷰] 11 - 신경망 기초 테스트 (Neural Network Basic Quiz) (0) | 2022.05.16 |