미래연구소 딥러닝 2주 차
Computer Science/Deep Learning

미래연구소 딥러닝 2주 차

728x90

미래연구소 http://futurelab.creatorlink.net/

 

미래연구소

AI, 인공지능 Deep Learning beginner 미래연구소 딥러닝 입문 스터디 / 모집인원 : 25명 (선착순 마감) 수강료 : 월 15만원 / (Coursera 강의 수강료 월 5만원 개인결제)

futurelab.creatorlink.net


Image

  • Image는 0~255개의 pixel  값으로 이루어져 있다.

  • color는 3개의 channel로 나타내며 각각의 channel은 RGB(Red Green Bule)의 값을 나타낸다.

  • Grayscale(흑백)은 1개의 channel로 나타낸다.

 

지난 주 structured data와 unstructured data에 대해서 배웠다.

unstructured data는 엑셀 값으로 표현할 수 없는 data이며, 대표적으로 음성, 이미지, 텍스트 등이 있다.

컴퓨터는 structured data와 같이 숫자로 표현된 값들만 이해할 수 있다.

이미지 같은 경우, 이미지 자체가 숫자가 아니기 때문에 그대로 사용할 수 없다.

그렇다면, ML한테 이미지를 어떻게 인식시킬까?

이 과정이 바로 데이터 전처리 중 하나이다.

 

일단 이미지를 ML이 처리하기 위해서는

  1. 숫자여야 한다.

  2. 1d-array(vector)여야 한다.

따라서 ML에 이미지의 픽셀 값을 숫자로 넣어주어야 한다.

이미지의 픽셀 값을 넣어주는데, 1d-array여야 하기 때문에 flatten(하나의 열 형태)하게 넣어준다.

channel 하나 당 1d-array로 본다면 color 이미지는 3d-array이다.

하지만 DL 모델이 1d-array만 받을 수 있으므로 3d-array를 1d-array로 표현하여 flatten 하게 입력해준다.

color의 경우에는 64x64개의 픽셀을 가진 channel이 총 3개가 있으므로 총 픽셀의 개수는 64x64x3=12288이다.

따라서 feature=$n_x$=12288이다.

만약 DL 모델한테 이미지를 넣어주면 이 픽셀 값을 가지고 계산을 해서 1이나 0의 값을 출력한다.

 

정리하면,

x= data 1개의 input = feature vector (feature 개수=$n_x$)

y= data 1개의 label = 0이나 1의 값 (binary classification)

(x, y)이 training data이며 여러 개(m개)가 있다.

 

위의 내용을 행렬로 표시하면 다음과 같다.

 

Logistic regression

Logistic regression에는 5가지 과정이 있다.

 

x와 y는 주어진다.

w와 b는 우리가 선택한다. 이것이 ①initialization.

w의 shape은 ($n_x$, 1)이며, $\begin{bmatrix}W_1\\W_2\\\vdots\\W_m\end{bmatrix}$이다.

feature 별로 가중치가 다르기 때문에 위와 같은 shape이 나오며, 이 가중치를 ML이 최적의 값으로 학습한다.

feature가 여러 개일 때는 $x_1w_1+x_2w_2+\cdots+x_{nx} w_{nx}+b$이며 

$W^TX+b=\begin{bmatrix}W_1&W_2&\cdots\end{bmatrix}\begin{bmatrix}X_1\\X_2\\\vdots\end{bmatrix}+b$로 나타낼 수 있다.

 

여기까지가 regression 해결 방법이다.

하지만 binary에선 문제가 생긴다.

위의 해결 방법은 치역이 0과 1을 넘는다.

이때의 해결 방법이 sigmoid 함수를 사용하는 것이다.

sigmoid 함수로 치역을 0과 1 사이로 제한한다.

 

sigmoid 함수를 사용하면

$\hat{y}\ge0.5$는 1로 predict하고, $\hat{y}\le0.5$는 0으로 predict한다.

이때 $\hat{y}$는 $y$의 예측값을 나타낸다.

 

위의 식에 sigmoid 함수를 취한 것을 ②forward propagation 이라고 한다.

 

데이터 하나의 오차를 loss function이라고 부른다.

이때 데이터 여러 개의 loss의 평균을 우리는 cost function이라고 부르고, 우리는 다음으로 ③compute cost function 해야 한다. 

기존의 cost function을 구할 때는 $\left( \hat{y}-y \right)^2$을 이용해서 구했었다.

하지만 binary에서는 sigmoid 함수가 추가되면서 cost 함수의 그래프 모양이 달라지게 된다.

이때 local minimum이 굉장히 많이 생기게 되면서 최적화하기가 쉽지 않게 된다.

이 부분은 '미래연구소 딥러닝 2주 차 예습' 에서 자세히 다뤘다.

 

그 다음으로 cost function을 최소화 시키기 위해서 ⑤gradient descent를 해야하고

$W=W-\alpha\frac{dJ}{dW}$을 계산해야 한다.

이 식을 계산하기 위해서는 위 식의 미분 계수들을 구해야 하고, 이 과정을 ④backward propagation 이라고 한다.

 

Vectorization

위와 같은 과정들을 코드로 구현할 때 vectorization을 해야한다.

이유는 크게 2가지이다.

  1. vectorization을 하지 않고 for 문으로 구현을 했을 때 코드가 길어진다는 문제가 있다.
  2. vectorization을 하지 않고 for 문으로 구현 했을 때, 실행 시간도 길어진다. for 문보다 vectorization을 사용했을 때 속도가 더 빨라진다.
728x90