Binary Classification

 

- Logistic regression -> binary classification

- output label = y

- 컴퓨터에서 이미지를 저장할 때 세 개의 matrics 저장(RGB)

     - pixel intensity values 를 feature vector 로 변환

     => pixel 값들을 unroll 해서 input feature vector x 로 변환

     - 64x64 사이즈 이미지라면 64x64x3 = 12288 차원

     - $n = n_{x} = 12288$ : input feature vector 의 차원

     - feature vector x 로 나타내지는 이미지를 입력으로 받고, 그에 대해 0, 1을 예측

 

[Notation]

- single training exmaple : $(x, y)$

- $x$ is an x-dimensional feature vector : $x\in R^{ n_{x} } $ (선 두 개 있는 큰 R)

- 라벨 $y$는 0 아니면 1 : $y \in \{0, 1\}$

- 데이터셋 개수 $m$, 즉 $\{(x^{1}, y^{1}), (x^{2}, y^{2}), ...., (x^{m}, y^{m})\} $

- $m_{train}$, $m_{test}$ 

$$X = \begin{bmatrix}| & | &  & | \\ x^{(1)} & x^{(2)} & ... & x^{(m)}\\ | & | &   & |\end{bmatrix} $$

     - $x^{1}$, $x^{2}$ 등 input 데이터를 칼럼으로 쌓은 것

     - 가로로 $m$개 학습셋 개수, 세로로 $n_{x}$

     - 학습 데이터를 행으로 쌓은 것을 주로 보았을 텐데, 신경망에 적용할 때는 칼럼으로 쌓는 것이 훨씬 쉬울 것

- matrix의 크기를 찾기 : x.shape = $(n_{x}, x)$

- $Y = [y^{1}, y^{2}, ..., y^{m}]$ --> $y\in R^{1 \times m } $

     - y.shape = $(1, m)$

 

 

Losgistic Regression

- supervised learning, output is 1 or 0

- 주어진 입력 이미지 $x$, 예측값 $\hat{y} $ (= $y$의 추정값)

- $\hat{y}=P(y=1\mid x) $ : 이미지 x 가 주어졌을 때, 이것이 고양이 이미지일 확률은 무엇인가?

- $x\in R^{ n_{x} } $ : $x$는  $n_{x}$ 차원의 vector

      - logistic regression parameter $w\in R^{ n_{x} } $ 또한 $n_{x}$ 차원의 vector, 

      - $b\in R $ : b는 real number

--> 입력 $x$, 파라미터 $w$, $b$ 가 주어졌을 때, $\hat{y} $를 어떻게 생성할 수 있을까?

- $\hat{y} = w^{T}x + b$ (linear function) <-- 선형 회귀할 때 사용하는 방법

      - binary classification에 좋지 않은 방법

      -  $\hat{y} $ = $y$가 1일 확률이므로 0과 1 사이어야 함

      - $w^{T}x + b$는 1보다 크거나 마이너스일 수 있음

- 따라서 $y$는 시그모이드를 적용한, $y = \sigma(w^{T}x + b)$

sigmoid function

$$\sigma(z) = \frac{1}{1+e^{-z}} $$

- $z$가 매우 커지면 $e^{-z}$가 0에 가까워지므로 $\sigma(z)$은 1에 가까워진다

- $z$가 매우 작아지면 $e^{-z}$ 가 매우 커지므로 $\sigma(z)$은 0에 가까워진다

 

*notation

- 신경망을 구성할 때 보통 parameter $W$와 파라미터 $b$를 별개로 본다

- 한편 어떤 convention에서는 extra feature $x_{0}=1$을 정의한다

- 그렇게 되면,  $x\in R^{ n_{x+1} } $ 이며 $y = \sigma(\theta^{T}x)$

- 이 경우에 vector parameters $\theta $ 는

$$\theta = \begin{bmatrix}\theta_{0} \\ \theta_{1} \\ \theta_{2}\\ ... \\ \theta_{n_{x}} \end{bmatrix} $$

     - $\theta_{0}$ 은 $b$의 역할을 하고, $\theta_{1}$, $\theta_{2}$, ..., $\theta_{n_{x}} $ 는 $W$의 역할을 함

- 신경망을 프로그래밍할 때는 parameter $W$와 파라미터 $b$를 별개로 보므로 위와 같은 notation은 사용하지 않음

 

Logistic Regression Cost Function

logistic model 의 파라미터 $W$와 $b$를 학습시키기 위해서는 cost function를 정의한다

 

 

[Logistic Regression cost function]

 

$$\hat{y} = \sigma(w^{T}x + b),\ where\ \sigma(z) = \frac{1}{1+e^{-z}}$$

$$Given\ \{(x^{(1)}, y^{(1)}), ..., (x^{(m)}, y^{(m)})\},  want\  \hat{y}^{i} \approx y^{i}.$$

- $m$개의 training examples

- 파라미터 $W$와 $b$를 찾아, 최소한 학습셋에 대한 예측값에 있어서 $\hat y^{(i)}$ 가 학습셋에 있는 ground truth label $y^{(i)}$에 가깝도록 해야 함

- 위 내용대로 수식을 살짝 정리한다면

$$\hat{y}^{(i)} = \sigma(w^{T}x^{(i)} + b),\ where\ \sigma(z^{(i)}) = \frac{1}{1+e^{-z^{(i)}}}$$

이때 $z^{i} = w^{T}x^{(i)}+b$

- 윗첨자 $(i)$는 $(i)$번째 데이터를 가리킴

 

Loss (error) function

- $L(\hat{y}, y) = \frac{1}{2} (\hat{y} - y)^{2}$ <--- logistic regression에서는 사용하지 않음

- "제곱"이 gradient descent 에서 그다지 효과적이지 않고 global optimum을 찾기 어려움 (최적화에 있어서 어려움)

Logistic Regression Loss Function:

$$L(\hat{y}, y) = -(y \log \hat{y} + (1-y) \log (1-\hat{y})) $$

- loss를 최소화해야 함

If $y=1 $ : $L(\hat{y}, y) = - \log \hat{y} $ 

     - $- \log \hat{y}$ 를 최소화해야 하므로, $\hat{y}$ 를 최대화 해야 함 (1에 가깝게)

If $y=0 $ : $L(\hat{y}, y) = - \log (1-\hat{y}) $

     - $\log (1- \hat{y}) $ 를 최소화 해야 하므로, $ \hat{y}$ 를 최소화 해야 함 (0에 가깝게)

- loss function이 single training example에 대한 것임

--> 전체 데이터셋에 대한 cost function 을 정의할 것임

 

Cost function

- $J(W, b) = \sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)}) $

     - average!

     - 각 training sample에 대한 loss function의 sum

     - 물론 $\hat{y}$ 은 특정 집합의 파라미터 $W$, $b$의 logistic regression을 사용했을 때의 예측값

용어 주의!

*loss function : single training example 에 대한 lost function

*cost function : 파라미터 $W$, $b$에 대한 cost function

 

cost function $J$를 최소화하는 logistic regression parameter를 찾아야 함!

logistic regression도 매우매우 작은 NN모델로 볼 수 있다.

 

Gradient Descent

gradient descent algorithm to train the paramteres $W$ on training set

$$ \hat{y} = \sigma(w^{T}x + b) ,\ \sigma(z) = \frac{1}{1+e^{-z}} $$

$$ J(w, b) = -\frac{1}{m} \sum_{i=1}^{m} y^{(i)} \log \hat{y}^{(i)} + (1-y^{(i)}) \log (1-\hat{y}^{(i)})$$

want to find $w$, $b$ that minimize $ J(w, b) $

 

*실제로 $w$는 훨씬 고차원일 수 있지만, 지면에 나타내기 위해 $w$를 single real number, $b$를 single number로 우선 가정

 

이 cost function $J$는 convex function(볼록함수)

(*non-convex function은 local optimum이 여러개 존재함)

 

파라미터 $w$, $b$를 initialize 한 후 (저 그래프 위 특정 지점이 될 것임)

그 initial point로부터 steepest downhill direction(가장 가파른 방향)으로 step을 밟을 것임

여러 iteration 후에 global optimum에 수렴하게 됨

 

(편의를 위해 $b$는 무시하고 1차원으로 표현)

수렴할 때까지 다음 update 를 반복한다.

($:=$는 업데이트한다는 의미)

 

Repeat {

$$ w := w - \alpha \frac{dJ(w)}{dw} $$

}

 

- $ \alpha $ : learning rate (iteration마다 얼마나 큰 step을 밟을 지)

- $ \frac{dJ(w)}{dw} $ : 미분값, $w$를 수정하는 값 --> 코드상으로는 dw 로 나타내기로 함

 

keep updating!

-> 결국에 $ \frac{dJ(w)}{dw}$ 는 slope of the function으로 볼 수 있음

 

실제적으로는 $b$도 있으므로,

 

$$ w := w - \alpha \frac{dJ(w, b)}{dw} $$

$$ b := b - \alpha \frac{dJ(w, b)}{db} $$

 

*notation

사실은 $J$가 두 개 이상의 variables를 가지기 때문에 $d$ 대신에 편미분 기호 $\partial$를 사용한다

그러니 그냥 보통 미분과 크게 다르게 생각하지 않아도 된다

마찬가지로 코드상으로는 $\frac{\partial J(w, b)}{\partial w} $ 를 dw로 $\frac{\partial J(w, b)}{\partial b} $를 db로 표현한다

복사했습니다!