본문 바로가기
Deep Learning Specialization

Basic Neural Network [Deep Learning Specialization #1]

by ALTERww 2022. 7. 13.
320x100

Coursera의 Deep Learning Specialization - Week 1의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

Binary Classification (이진 분류)

입력 X에 대하여 고양이인지(Y=1), 아닌지(Y=0)를 분류하는 아주 기초적인 분류기입니다.

큰 내용은 없고, 하나의 입력을 벡터로 길게 폈을 때의 크기를 nx라고 하여 차원으로 구분합니다.

그리고 x(1), x(2), .. 등 모든 training example들을 column으로 합하여 대문자 X로 표현합니다. X의 차원은 (nx x m)입니다.

Label 또한 column으로 합하여 대문자 Y로 표현합니다. Y의 차원은 (1 x m)입니다.

 

# X는 [nx x m], Y는 [1 x m]의 배열이다

 

Logical Regression (논리 회귀)

입력 X에 대하여, Y=1일 확률 Y-hat을 계산하는 알고리즘입니다.

Y-hat을 계산하는 파라미터로는 가중치(Weight) - W, 바이어스(Bias) - b가 있습니다.

W의 Transpose와 입력 X의 내적에 b를 더한 값을 z라고 정의합니다.

그리고 z값에 따라 0부터 1 사이의 선형적인 값을 부여하기 위해 sigmoid 활성 함수를 이용합니다.

매 학습마다 두 파라미터인 W와 b를 학습하여 가장 좋은 추정치 Y-hat을 계산하도록 합니다.

 

# Logical Regression (논리회귀)

 

Lost Function (손실 함수) & Cost Function (비용 함수)

Training이 진행되었을 때, 실시간으로 얼마나 잘 이루어졌는지 성능을 평가하기 위한 함수가 필요합니다.

Loss Function단일 training example에 대한 성능을 평가합니다. 클수록 안 좋다는 것을 의미합니다.

log를 이용한 L(y,y-hat)을 정의합니다.

  • y=1일 때 -log(y-hat)이 되어 이 값이 작아지려면 y-hat이 커지도록 유도되어야 합니다.
  • y=0일 때 -log(1-y-hat)이 되어 이 값이 작아지려면 y-hat이 작아지도록 유도되어야 합니다.

Cost Function전체 training set에 대한 성능을 평가하는 지표로, Loss Function의 평균값에 해당합니다.

J(w,b)를 정의하게 되고, 모든 training set에 대해 L을 모두 더한 뒤 m으로 나눈 값입니다.

 

# Cost Function (비용 함수)

 

Gradient Descent Algorithm (기울기 강하 알고리즘)

Cost Function을 최소화하는 파라미터 w,b를 학습시키고자 Gradient Descent Algorithm을 이용합니다.

매 학습 이후, 기울기가 강하(감소)하는 방향으로 w와 b를 갱신합니다. 

갱신하는 데에는 알파 값으로 학습률(Learning Rate)과 파라미터에 대한 도함수의 곱을 빼서 계산합니다.

 

# Gradient Descent (기울기 강하)

 

Computation Graph (계산 그래프)

Forward Propagation이 이루어진 후, Backward Propagation을 계산하는데, 그 작업을 이루기 위해 도함수 개념을 도입합니다다.

이 수업에서 "특정 변수(var)에 대한 최종 출력 변수(output)의 도함수"를 "dvar"로 표현하는데,

아래의 경우 output은 cost function인 J입니다. 따라서 dw는 dJ / dw를 의미합니다.

 

 

Vectorization (벡터화)

각 training example에 대해 적용되는 동일한 반복 계산을 피하기 위해, 벡터화를 적용합니다.

모든 training set을 하나의 배열에 합쳐 W, X로 표현합니다.

그리고 numpy 연산을 이용하여 W.t*X를 계산합니다. 곱하는 연산을 m회 반복하는 것보다 훨씬 빠른 효과가 있습니다.

 

 

 

 

벡터화를 이용하여 아래와 같이 연산 시간, 코드 길이를 단축할 수 있습니다.

 

 

Etc. 

np.array를 생성할 때 하나의 매개변수값을 주지 말 것.

a.shape == (5,) 처럼 생성되는 array를 "Rank 1 Array"라고 하는데, 절대 사용하지 않습니다.

대신 (5,1) or (1,5) 처럼 row vector나 column vector로 생성해서 사용합니다.

 

assert 함수를 이용하여 Rank 1 Array 함수를 체크하고, reshape하여 vector로 변환하는 코드를 활용하면 좋습니다.

 

댓글