미래연구소 http://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이 처리하기 위해서는
-
숫자여야 한다.
-
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가지이다.
- vectorization을 하지 않고 for 문으로 구현을 했을 때 코드가 길어진다는 문제가 있다.
- vectorization을 하지 않고 for 문으로 구현 했을 때, 실행 시간도 길어진다. for 문보다 vectorization을 사용했을 때 속도가 더 빨라진다.
'Computer Science > Deep Learning' 카테고리의 다른 글
미래연구소 딥러닝 4주 차 (Numpy 특강 3) (0) | 2020.08.02 |
---|---|
미래연구소 딥러닝 4주 차 (0) | 2020.08.02 |
미래연구소 딥러닝 3주 차 ( Numpy 특강 2) (0) | 2020.07.25 |
미래연구소 딥러닝 3주 차 (0) | 2020.07.25 |
미래연구소 딥러닝 2주 차 예습 (0) | 2020.07.15 |