본문 바로가기
Deep Learning

Deep Learning 미래연구소 2주차 수강후기

by 자라자 2020. 7. 19.

미래연구소 홈페이지: https://futurelab.creatorlink.net/

 

*본 포스팅에 포함된 그림의 출처는 Andrew Ng 교수님의 Coursera Deep Learning specialization 입니다.

Youtube link: https://www.youtube.com/watch?v=eqEc66RFY0I&feature=youtu.be

 

[수업내용 정리]

 

지난 시간에는 딥러닝의 개요에 대해 배웠다. 이번 시간에는 Logistic regression이 무엇인지에 대해 배웠다.

 

지난시간에 배웠던 Supervised learning의 Binaryclassification의 대표적인 예로, 이미지 분류가 있다.

 

 

뀨?

 

강의에서는 고양인지 아닌지 Binary classification을 하는 과정에 대해 설명한다.

 

컴퓨터는 이미지를 어떻게 인식할까? 바로 pixel의 RGB값을 데이터로 받아온다. 컴퓨터 화면은 수많은 화소들로 이루어져 있고 각 화소에서는 빨강,초록,파랑 세 가지 빛을 출력해서 색깔을 만들어낸다. 빨강, 초록, 파랑은 빛의 3원색으로 세 가지 빛을 조합하면 어떤 색이든 만들어낼 수 있으며, (R,G,B) 값이 (0,0,0)부터 (255,255,255)까지 있다. 숫자는 빛의 세기로 255,255,255일 경우 흰 색이 된다. RGB의 경우 세 가지 채널의 조합이며 무채색(gray scale) 같은 경우 한 개의 채널이 있다. 아래의 그림을 보자.

 

위와 같이 모니터에 64x64개의 픽셀이 있다고 하자. R,G,B 세 개의 채널이 있고 컴퓨터는 이미지를 인식할 때 각 화소의 출력값(위 그림에서는 편의를 위해 16개의 값만 표시했다)을 인식한다. 이 때 각화소의 출력값은 n_x by 1 의 matrix, 즉 1-D array로 저장이 된다. (빨강 RGB 값이 차례로, 그 후 초록, 빨강 순으로)

 

 

notation에 대해 정리를 하자면 지난 시간에 배웠던 개념이 필요하다.

다시 언급하자면 DL은 (x,y)로 묶인 Traing data을 주고 컴퓨터가 f(x)를 계산하도록 하는 것인데,

이 때 input값 x를 feature 라고 하고, output값인 y를 label이라고 한다.

이 경우 labe은 y 그 자체롤 고양이인지의 여부가 되는 것이고, class는 y값의 종류로 1(고양이) 0(고양이 아님)로 2가지 가 있다. class가 두 개만 있어서 binary classification이 되는 것이다.

 

위 그림에서 64*64개의 픽셀이 있고 각 필셀 당 3가지 값이 있기 때문에 총 12288개의 input data가 생긴다.

즉 컴퓨터에는 12288개의 숫자가 12288 x 1 matrix로 저장이 되는 것이고, 이 때 12288이라는 값은 feature의 개수로

n_x로 표기된다.

 

그렇다면 Training data의 개수가 늘어나면 어떤 식으로 표기할까? 여태까지는 1개의 이미지 값에 대한 픽셀 데이터를 1D array로 표현되는 것을 봤지만, 이제 m개의 Training data 가 있는 경우에 대해 생각할 것이다. 즉, 고양이 사진이 m장 있는 경우에 대해 고려해보자.

 

이제 featrue들이 굳이 1D array로 정리되었던 것이 이해가 된다. 이제 m개의 데이터를 합쳐서 하나의 거대한 X라는 matrix로 표현을 한다. X^(1)은 앞서 다뤘던 1개 이미지에 대한 1D array로 그것이 m개가 쌓여서 m by n_x 의 matrix가 되는 것이다. 

 

그리고 m장의 고양이 사진이 있다면 output으로는 각각의 사진이 고양이인지 아닌지에 대한 결과값(1,0으로 구성된)이 1 by m matrix로 표현이 된다.

 

 

 

이제 이렇게 만들어진 X와 Y사이의 함수를 modeling할 때 logistic regression이 쓰인다. 이는 통계 기법으로, 개요를 확인하려면 위키피디아로.. https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1_%ED%9A%8C%EA%B7%80

 

로지스틱 회귀 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 로지스틱 회귀(영어: logistic regression)는 영국의 통계학자인 D. R. Cox가 1958년[1] 에 제안한 확률 모델로서 독립 변수의 선형 결합��

ko.wikipedia.org

 

DL에서 핵심은 Logistric regression을 통해서 cost function의 w,b값을 조정해서 loss를 줄일 수 있다는 점이다.

 

다소 설명이 복잡할 수 있으니 수업내용에 쉽게 예시를 들어서 내 방식대로 적어보려 한다.

 

Logistic regression은 아래와 같이 5개의 step으로 나누어진다.

1. initialization

2. forward propagation

3. compute cost function

4. backward propagation

5. gradient descent

 

 

우선, 상황을 가정해보자. 앞서 들었던 예시처럼 고양이인지 아닌지를 판별하는데, feature값으로 한 개의 pixel값만 받아들이고 output으로 고양이인지의 결과가 출력된다(1 혹은 0). 여기에 한 가지 전제를 덧붙이면 이해하기 쉬운 상황을 만들 수 있는데, 실제 고양이인지 판단하는 기준이 되는 진리값이 있다고 가정해보자. 즉, 모든 고양이 사진은 실제로 100이 넘는 X값을 가지고 있다고 생각해 보자.  

 

그렇다면 고양이 사진은 위와 같은 분포를 따를 것이다. 그리고 딥러닝의 역할은 이 100이라는 기준값을 찾아내는 것이다. 그러기 위해서는 어떤 함수가 모델링이 되어야 할 것이고 이 모델링되는 메커니즘이 logistic regression이다.

 

1. initialization

 

지난 시간에 언급된 것처럼 실제로는 다변수함수이겠지만 w,b에만 의존하는 최적의 직선을 찾는다고 해 보자. 그 최적의 직선이 되는 일차함수를 z=f(w,b)=wx+b라고 놓자. 그러면 여기서 w값과 b값을 정해주어야 하는데, 처음에 이 값을 정해주는 작업이 initialization이다. (0,0)으로 잡을 경우 zero initialization이라고 하며, initialization을 어떻게 하는지에 따라 모델의 효율이 달라진다.

각각의 initialization에 대한 모습들, 노란색 z3 line은 zero initialization의 경우이다. logistic regression 을 통해 w,b값을 개선시켜 나간다.

 

 

 

 

2. forward propagation

 

앞서 intialization을 통해 생긴 초기 직선에는 두 가지 문제가 있다. 

 

1) 치역이 실수 전체이다.

2) 실제 y값은 0또는 1로 discrete한 반면 z값은 continuous하다.

 

1번 문제는 함수를 변환해서 해결한다. sigmoid function을 통해 치역을 0에서 1사이로 만들 수 있다.

sigmoid function은 아래와 같이 표현되며, 여기에 z를 넣어서 치역을 맞춰준다.

이 때 y_hat 값은 고양이인지 아닌지 추측하는 확률함수가 된다. 

 

 

 

 

 

2번 문제는 반올림을 통해 해결한다. y_hat이 0.5이상일 경우 1로, 미만일 경우 0으로 판단하면 된다.

 

왜 'forward' 인지는 후술하겠다.  

 

 

 

3. compute the cost fuction

y_hat을 구했다면 그 확률모델이 좋은 모델인지 판단해야 한다. 즉 그 w,b값이 좋은지를 판단해야 한다.

지난 시간에 말했던 것처럼 cost function을 통해서 판단할 수 있다.

어떤 cost function을 채택하는지에 따라 또 달라질 수 있는데, MSE(Mean Square Error)를 채택하면 문제가 발생한다. MSE는 non-convex function이기 때문에 global minimum을 보장하지 않기 때문이다.

 

따라서 logistic regression은 cost function으로 Binary Cross Entrophy를 채택한다.

이에 대한 내용은 이 블로그에 아주 잘 나와있으니 참조하면 좋을 듯 하다!

https://curt-park.github.io/2018-09-19/loss-cross-entropy/

 

[손실함수] Binary Cross Entropy

확률, 정보이론 관점에서 살펴보는 Binary Cross Entropy 함수

curt-park.github.io

 

4. backward propagation

 

이제 cost function을 구했으니, gradient descent를 하면 된다. 그런데 dJ/dw값을 구하기 위해서는 chain rule을 써야 하고, 그 과정에서 4번과정인 backward propagation이 진행된다.

 

전체적인 흐름이 아래와 같다.

 

 

아래 그림을 보면 왜 forward propagation과 backward propagation이 진행되어야 하는지 알 수 있다.

 

마지막으로 5번 gradient descent 과정을 반복하면 w,b값이 개선되어 최솟값을 찾을 수 있다. 

 

 

 

 

 

 

logistic regression 외에도 numpy를 이용하여 간단한 연산을 해보고 for문과 vectorization이 연산시간이 얼마나 차이나는지 등을 비교해볼 수 있었다.

 

 

 

 

이번 수업은 여기까지!