https://www.youtube.com/watch?v=2gw5tE2ziqA&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=36

Deep L-Layer Neural Network (C1W4L01)

image
image


https://www.youtube.com/watch?v=qzPQ8cEsVK8&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=37

Forward and Backward Propagation (C1W4L02)

image
image
image


https://www.youtube.com/watch?v=a8i2eJin0lY&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=38

Forward Propagation in a Deep Network (C1W4L03)

image
image

위의 그림은 위위그림과 거의 같다. 다만 layer들을 순차적으로 반복 진행하는 부분을 위해 for loop을 추가 해주고 맨위공식에 vectorization된 변수를 수정했다.


https://www.youtube.com/watch?v=yslMo3hSbqE&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=39

Getting Matrix Dimensions Right (C1W4L04)

image

위 그림은 단 하나의 데이터표본을 예로 어떻게 matrix의 크기가 유지되어야하는지 보여주고 있다. 최종공식은 우측녹색 [ 를 참조한다.

image

단하나가 아닌 여러개의 데이터표본의 경우를 예로 들고 있다. 위위의 그림과 유사하나 m이 1대신에 들어간것을 여러군데에서 확인할수 있다. 


https://www.youtube.com/watch?v=5dWp1mw_XNk&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=40

Why Deep Representations? (C1W4L05)


https://www.youtube.com/watch?v=B7-iPbddhsw&index=41&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Building Blocks of a Deep Neural Network (C1W4L06)

forward propagation할때 z값을 cache해서 저장한다음 backward propagation 계산에 사용한다.

위위 그림의 내용을 좀더 확장한 내용이다. cache할때 z값뿐만아니라 w, b값도 같이 저장해 주면 좋다.


https://www.youtube.com/watch?v=VTE2KlfoO3Q&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=42

Parameters vs Hyperparameters (C1W4L07)

최적의 parameters w , b를 구하는 것이 개발자의 최종 목적이다. parameters를 구하는 과정에서 최적의 parameters는 hyperparameter에 따라 변경된다. 위그림은 다양한 hyperparameter의 예들을 보여준다. hyperparameter 를 구하는 과정에서 많은 시행 착오를 거쳐야한다. 실질적 경험( empirical process )만이 최적의 hyperparameter 를 최단시간내에 구할수 있다. 


https://www.youtube.com/watch?v=2zgon7XfN4I&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=43

What does this have to do with the brain? (C1W4L08)

https://www.youtube.com/watch?v=fXOsFF95ifk&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=25

Neural Network Overview (C1W3L01)

image

superscript [i]는 몇번째 layer인지를 말한다. superscript (i) 는 몇번째 데이터표본인지 말한다. 


https://www.youtube.com/watch?v=CcRkHl75Z-Y&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=26

Neural Network Representations (C1W3L02)

image

a 0 layer는 input layer이며 이는 총 layer 갯수를 말할때 포함시키지 않는다.

a 는 실제로 logistic regression연산( features 와 weight간의 product연산과 sigmoid나 tanh, ReLU 연산 )을 마친 계산 결과 값이다. superscript 숫자는 layer숫자를 나타낸다. 각 layer에 있는 w matrix를 보면 행갯수는 그 layer에서의 unit갯수이며 열갯수는 앞 단계 layer의 features갯수임에 유의한다.


https://www.youtube.com/watch?v=rMOdrD61IoU&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=27

Computing Neural Network Output (C1W3L03)

image
image

위 그림에서 transpose 는 row vector를 column vector로 만들어 주기 위해 사용되었다.

image


https://www.youtube.com/watch?v=xy5MOQpx3aQ&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=28

Vectorizing Across Multiple Examples (C1W3L04)

image

vectorization을 사용하기 전의 모습이다.

image

matrix로 만들어 정리할때 좌우로는 각각의 데이터표본에 대한 값을 가지게 하고 상하로는 node(unit)에 대한 값을 가지게 한다. 일정하게 규칙을 유지하는 것에 유의한다.


https://www.youtube.com/watch?v=kkWRbIb42Ms&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=29

Explanation For Vectorized Implementation (C1W3L05)

image

우선강의의 편의를 위해서 b가 없는 상태에서 개념을 확대해 나가는 방향으로 설명했다. b는 추가로 마지막에 더해주기만 하기 때문이다. 각각의 칼럼이 하나의 데이터표본에 대한 데이터이며 이것이 계속 유지되가는 점에 유의한다.

image


https://www.youtube.com/watch?v=Xvg00QnyaIY&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=30

Activation Functions (C1W3L06)

image

activation function으로 sigmoid 대신 다른 함수를 대부분이용한다. sigmoid는 마지막 outlayer에서만 쓰거나 binary classification을 해야하는 경우만 사용한다. 대부분 tanh나 ReLU를 사용한다. 가끔 leaky relu를 사용하기도 한다. relu, leaky relu가 sigmoid보다 learning 속도가 빠르다. 

image


https://www.youtube.com/watch?v=NkOv_k7r6no&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=31

Why Non-linear Activation Functions (C1W3L07)

image

nn에서 activation func 없다면 우측 하단처럼 linear 결과가 나온다. 여러번 layer를 거치더라도 linear 결과가 나오게 되는데 그렇다면 여러겹의 layer를 만드는 이유가 없어지게 된다. 


https://www.youtube.com/watch?v=P7_jFxTtJEo&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=32

Derivatives Of Activation Functions (C1W3L08)

image
image
image

relu, leaky relu에서 z 값 0 은 0.00000 … 1 처럼 아주 작은 숫자로 생각하므로 그 점에서의 도함수 값은 1로 본다.


https://www.youtube.com/watch?v=7bLEWDZng_M&index=33&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Gradient Descent For Neural Networks (C1W3L09)

image
image

numpy.sum 에서 사용된 keepdims 옵션값을 true로 하면 명확한 사이즈의 matrix가 된다. 두번째 옵션은 axis이다.


https://www.youtube.com/watch?v=yXcQ4B-YSjQ&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=34

Backpropagation Intuition (C1W3L10)

image

derivative 참고자료 )

시그모이드 도함수   https://math.stackexchange.com/questions/78575/derivative-of-sigmoid-function-sigma-x-frac11e-x

로지스틱 리그래션 cost 함수의 도함수   https://math.stackexchange.com/questions/2585977/understanding-partial-derivative-of-logistic-regression-cost-function


https://www.youtube.com/watch?v=yXcQ4B-YSjQ&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=34

Backpropagation Intuition (C1W3L10)

image
image
image

하단부분에 elementwise product임에 유의한다.


https://www.youtube.com/watch?v=6by6Xas_Kho&index=35&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Random Initialization (C1W3L11)

weight 값을을 다 0으로 하는 경우 계산이 진행되어도 계속 같은 값들을 가지게 된다. 그러므로 초기에 랜덤으로 작은 수의 초기값을 정해 주어야 한다. 초기값이 크면 아래그림에서 처럼 z값이 커지게 되고 그렇게 되면 sigmoid의 경우 기울기가 평평한 지점에서 값을 형성하게 된다. 그렇게 되면 z값이 크게 변경이 되더라도 sigmoid계산 값은 변화가 없으므로 최적값을 구하는 과정이 길어지게 된다. 아래 그림과 같이 0.01을 추천하고 있다.

https://www.youtube.com/watch?v=eqEc66RFY0I&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=7

image

64 * 64 크기의 이미지를 data로 하는 경우 data를 vector로 바꾸는 예시를 보여주고 있다. red 값들에 이어서 green 값들을 이어서 넣어주고 blue값들도 연결해서 하나의 긴 vector를 만들었다.

image

이강의는 각각의 고양이 사진들을 가지고 고양이가 있는 사진을 찾는 알고리즘을 만드는 것이 목적이다. 각각의 고양이 사진은 x vector가 되며 이들의 rgb data가 vector에 들어가게 된다. x.shape = (nx, m) 은 python에서 vector를 만드는 것을 보여준것이다. 

n 은 features의 총갯수 (여기서는 rgb 값 총갯수)

m은 데이터 표본 갯수 (여기서는 고양이 사진 총갯수)

https://www.youtube.com/watch?v=hjrYrynGWGA&index=8&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

image

우상단의 알고리즘은 b를 x0로 생각한 경우이다. 결과적으로 좌측과 같은 내용이다. 다만 이 강의에서는 좌측 알고리즘을 이용한다. 


https://www.youtube.com/watch?v=SHEPb1JHw5o&index=9&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Logistic Regression Cost Function

image

loss function은 데이터 표본 하나에 대한 loss를 구한다.

cost function은 데이터 표본들 전체에 대한 총 loss를 구한다.

위그림에서 -log y hat , -log(1-y hat) 과 y 값을 비교하는데 y hat이라는데 주의한다. x가 아니고 y이다. 일반 log 함수 그래프가 아닌 log 함수를 y=x축에 대칭한 그래프라는 것에 유의한다.


https://www.youtube.com/watch?v=uJryes5Vk1o&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=10

Gradient Descent

image
image

위그림에서 하단의 알고리즘은 b를 x0가 아닌 따로 때어내서 생각하는 경우를 보여주고 있다.


https://www.youtube.com/watch?v=GzphoJOVEcE&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=11

Derivatives

image


https://www.youtube.com/watch?v=5H7M5Vd3-pk&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=12

More Derivative Examples

image
image


https://www.youtube.com/watch?v=hCP1vGoCdYU&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=13

Computation Graph 

image


https://www.youtube.com/watch?v=nJyUyKN-XBQ&index=14&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Derivatives With Computation Graphs

image

각각의 값들이 cost 함수에 최종적으로 어느 정도로 영향을 미치는지 계산하는 과정을 보여주고 있다. 

dj/dv를 구하기 위해서는 v를 일단 0.001증가 했을때 최종적으로 J가 얼만큼 변화하는지 확인한다. 위의경우에 0.003만큼 증가했다. 즉 dj/dv는 3이 된다. 또 dj/da를 구하기 위해서는 우선 a가 0.001변화하는 동아 dv가 얼만큼 변화하는 지를 본다. 위의경우 0.001변화했다. 즉 dv/da는 1일된다. 그리고 chain rule 을 이용 dj/dv 와 dv/da의 곱을 통해서 dj/da를 구한다. 위의경우 3 * 1이 된다. 

코딩할때의 팁으로 dj/da의 값을 저장하는 변수의 이름을 간단하게 da로 한다. 모든 경우 dj를 공통으로 들어가므로 생략하기로 한다.

image


https://www.youtube.com/watch?v=z_xiwjEdAC4&index=15&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Logistic Regression Gradient Descent 

image

적당한 w1, w2, b를 구함으로써 최종적으로 L 함수값을 최대한 낮추는 것이 개발자의 최종 목적이다. 그렇게 하기 위한 과정을 순서대로 아래에 보여준다.

image

우선 L함수에 대해 da를 구한다. a 값이 L에 미치는 정도를 구한다.

image

dJ/dz 를 구한다. 

참고자료) https://math.stackexchange.com/a/78578

참고자료 ) https://math.stackexchange.com/questions/2585977/understanding-partial-derivative-of-logistic-regression-cost-function

image

이번엔 dJ/dw1, dJ/dw2 등등을 구하고 이를 gradient descent에 이용한다.


https://www.youtube.com/watch?v=qsIrQi0fzbY&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=17

Vectorization

image

vector 연산을 이용한 방법 – 오른쪽

일반 for loop을 이용한 방법 – 왼쪽 

vector를 이용한 방법이 훨씬 빠르다.

image

python을 이용한 두 가지 연산의 속도 비교

image

vector를 이용한 연산은 SIMD single instruction multiple data를 이용하기 때문에 속도가 빠르다. 

또 vector는 병렬 처리가 가능하기 때문 빠르다.


https://www.youtube.com/watch?v=pYWASRauTzs&index=18&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

More Vectorization Examples

항상 vector연산으로 표현가능하다면 vector 연산을 최대한 사용해서 for loop 이용을 줄인다. 

image

좌측과 우측의 내용은 같다. 우측은 다만 vector로 표현된것이다.

image

좌측과 우측 상단은 같은 내용이다. 우측 하단은 numpy에서 제공하는 유용한 method의 예시를 보여준것이다. 우선 라이브러리에서 유용하게 사용할 수 있는 vector 연산 method가 있는지 확인해 보는 것이 팁이다.

image

for loop으로 표현된 코드이다.

image

vector를 이용 하나의 for loop 를 없애는 과정이다.


https://www.youtube.com/watch?v=okpqeEUdEkY&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=19

Vectorizing Logistic Regression (C1W2L13)

image

x superscript는 하나 하나의 데이터표본 이다. 이들을 X matrix로 만든다. w는 weight들을 모아논 vector이다. 이를 transpose해서 row vector로 만든다. 이들를 numpy의 dot 연산 한다. 그리고 b는 모든 elements에 더해지는 biased constant 이다. 이를 꼭 vector의 상태로 만들지 않고 그냥 더하기만 해도 numpy가 알아서 vector로 교환해서 각각의 elements에 더해준다.z 는 결과 vector이고 이를 sigmod 함수처리하면 결과는 a 로 이루어진 vector가 나오게 된다.


https://www.youtube.com/watch?v=2BkqApHKwn0&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=20

Vectorizing Logistic Regression’s Gradient Computation (C1W2L14)

image

위 그림에서 a는 y hat 즉 계산된 예상 y값이다. 

image


https://www.youtube.com/watch?v=tKcLaGdvabM&index=21&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr

Broadcasting in Python (C1W2L15)

python에서 기본적으로 matrix, vector연산할때 행,렬의 갯수가 안 맞는 경우 스스로 크기를 맞추어서 연산 가능하게 해주는 기능을 broadcastin이라고 한다.

image
image


https://www.youtube.com/watch?v=V2QlTmh6P2Y&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=22

A Note on Python/Numpy Vectors (C1W2L16)

python의 broadcasting 기능으로 때때로 bug발견하기 힘들때가 있다. 원래 사이즈가 달라서 연산이 불가능하면 에러가 나야 하지만 스스로 사이즈를 변경하므로 에러가 발생하기 않고 계속 진행된다. 이런경우 버그를 찾기 힘들다. 그래서 이런 문제를 줄이기 위한 팁을 알려준다.

image

(5, ) 와 같은 rank 1 array 를 사용하지 않는다. 명확하게 (5, 1) 형태이든 (1, 5) 이런 형태이든 벡터라도 명확하게 표기되게 사용한다. 중간 중간에 assert를 이용 사이즈를 확인한다. 진행중에 rank 1 array가 만들어 진다면 그림 하단 처럼 reshape를 이용 명확하게 바꾸어 준다.


https://www.youtube.com/watch?v=k_S5fnKjO-4&list=PL1w8k37X_6L9t36xF0lt0kpHWJemk3uwr&index=24

Explanation of Logistic Regression’s Cost Function (C1W2L18)

image
image
image

deep learning 전체 courses는 총 5개로 이루어져 있다. 

image
image

ReLU 는 특정 부분에서는 0의 값을 가지고 나머지 부분은 시그모이드와 비슷한 부분을 가진다. 우측 하단의 그림은 하나의 뉴런 ( perceptron )을 보여준다.

image

여러개의 뉴런을 구성하는 모습을 보여주고 있다. 

image

흔히 생각하기에 size, bedroom의 결과를 family size activation 으로 묶을 것으로 생각하지만 activiation에서는 전단계의 모든 뉴런으로 부터 데이터를 받는다.

image

위 그림은 각각의 neural network의 종류별 사용예시이다.

image
image

위그림은 왜 최근 deep learning이 비약적으로 발전할수 있었는지에 대한 설명이다.

데이터의 양과 발전관계를 보여주고 있다.

image

deep learning의 비약적 발전의 이유로 알고리즘의 개선, 데이터의 양, 하드웨어의 성능 개선을 들고 있다. ( 알고리즘 개선의 예로 sigmoid 대신에 ReNU를 사용하는 것을 들고 있다. ) 

위 그림은 course 1에 대한 개요이다.

Understanding LSTM Networks — colah’s blog