미래연구소 홈페이지: https://futurelab.creatorlink.net/
*본 포스팅에 포함된 그림의 출처는 Andrew Ng 교수님의 Coursera Deep Learning specialization 입니다.
이번주에 배운 내용에 대해서 간략하게 정리해보겠다.
-Broadcasting
Broadcasting이란 파이썬의 행렬 연산에서 꼴이 맞지 않을 때 작은 행렬이 큰 행렬에 뿌려지듯이 계산되는 방식이다.
바로 예를 살펴 보자.
위의 예에서 좌변의 첫번쨰 항은 2X3 행렬인 반면 두번째 항은 그냥 상수이다. 원래는 shape가 맞아야 행렬 연산이 진행되지만 파이썬에서는 이런 경우 자동적으로 broadcasting을 통해 연산이 진행된다. 결과값을 보면 유추할 수 있듯이 2가
\[\left[ {\begin{array}{*{20}{c}}
2&2&2\\
2&2&2
\end{array}} \right]\] 수정이 되어 연산이 진행된 것을 알 수 있다. 몇 가지 예를 더 살펴보자.
\[\left[ {\begin{array}{*{20}{c}}
1&2&3\\
4&5&6
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
1\\
2
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
1&2&3\\
4&5&6
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
1&1&1\\
2&2&2
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
2&3&4\\
6&7&8
\end{array}} \right]\]
\[\left[ {\begin{array}{*{20}{c}}
1&2&3\\
4&5&6
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
3&4&5
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
1&2&3\\
4&5&6
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
3&4&5\\
3&4&5
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
4&6&8\\
7&9&{11}
\end{array}} \right]\]
그렇다면 어디서 쓰이는가?
forward propagation 에서 Z에 관한 식을 만들 때 쓰인다. numpy.dot을 이용하여 만든 \[{\bf{z}} = {{\bf{w}}^T}{\bf{X}} + b\]는 (feature number , number of training data) 의 shape 을 가진 matrix가 되는데(이전의 cat-classification을 예로 들면 feature의 수는 64*64*3=12288, training data는 학습을 위해 준비된 이미지 수), 여기에서 상수 b를 결합될 때 b가 broadcasting된다.
14강에서는 gradient descent가 python에서 어떤 느낌으로 구현되는지 수식으로 살펴봤다. 도함수를 나타내기 번거롭기 때문에 dJ/dw를 그냥 dw로 표기한다.
그리고 Neural Network의 구조에 대해 배우기도 했다. Logistic regression에서는 w와 a를 한 번씩만 수행하고 cost를 구했지만, NN에서는 z와 a를 여러 번 계산하고, 신경망에 layer가 생기게 된다.
Hidden layer가 1층인 신경망의 구조는 위와 같다. 입력값이 있는 곳이 입력층(Input layer) 이고 출력값이 있는 곳이 출력층(Output layer)이다. Neural network에서는 입출력층과 중간의 hidden layer들로 이루어져있지만, Blackbox처럼 컴퓨터가 어떤 방식으로 연산하는지 정확히 알 수 없다. 그래서 Hidden layer인 것이다.
Notation에 관해서도 배웠는데, activation의 약자를 따서 각 층에 넘버링을 한다.
\[Notation\_of\_i - th\_layer : {a^{\left[ i \right]}}\]
특이한 점은 이런 구조를 2층 신경망이라고 한다는 점이다. 0,1,2층 총 3개의 layer가 있는 것 같지만 input layer는 세지 않는다고 한다.
수업은 이정도 배웠고, Jupyter lab을 통해 과제를 진행했다. 이번 과제는 cat-classification이었다. 그동안 배운 logistic regression을 통해서 cat인지 non-cat인지 학습하고 판별하는 모델을 구현해봤다.
100번의 iteration마다 cost를 출력하는데 최종적으로 train accuracy가 99%가 나왔다. 그러나 test accuracy는 현저히 떨어지는 것으로 나타났다.
learning rate=0.0025일 때 iteration에 대해서 cost가 낮아지는 것을 위 그래프가 보여준다.
끝으로, PIL과 open cv를 통해서 만든 모델을 시험해볼 수 있었다.
성공적!!으로 잘 작동하는 것 같다.
이번주는 여기서 끝!!! 다음주에 만나요
'Deep Learning' 카테고리의 다른 글
CNN(Convolutional Neural Network) (0) | 2020.08.25 |
---|---|
[데이콘]컴퓨터 비전 학습 경진대회에 참가 결정 (0) | 2020.08.23 |
Normalization, Standardization, Initialization, optimization (1) | 2020.08.18 |
Softmax, One-hot encoding, Regularization, Dropout의 이해 (0) | 2020.08.15 |
Deep Learning 미래연구소 5주차 수강후기 (0) | 2020.08.02 |
Deep Learning 미래연구소 4주차 수강후기 (0) | 2020.07.26 |
Deep Learning 미래연구소 2주차 수강후기 (0) | 2020.07.19 |
Deep Learning 미래연구소 1주차 수강후기 (2) | 2020.07.10 |