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)$
$$\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
로 나타내기로 함
-> 결국에 $ \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
로 표현한다
'인공지능 > DLS' 카테고리의 다른 글
[1.3.] Shallow Neural Networks(1) (0) | 2022.06.26 |
---|---|
[1.2.] Neural Networks Basics - Python and Vectorization (0) | 2022.06.26 |
[1.2.] Neural Networks Basics - Logistic Regression as a neural network(3) (0) | 2022.06.26 |
[1.2.] Neural Networks Basics - Logistic Regression as a neural network(2) (0) | 2022.06.25 |
[1.1.] What is a Neural Network? (0) | 2022.06.24 |