Neural Network
์ ํต์ ์ธ ML ํ์ต ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ ๊ตฌ์ฑ
- ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋๋ก ๋๋ฉ์ธ ์ง์ ๋ฐ ํต๊ณํ์ ์ง์์ ๋ฐํ์ผ๋ก ํผ์ฒ๋ฅผ ๊ตฌ์ฑํด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑ
⇒ ๋๋ฉ์ธ ์ง์์ ๊ฐ์ง ์ ๋ฐ์ฌ๊ธ ์ธ์ฌ ํ์
- ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋๋ก ๋๋ฉ์ธ ์ง์ ๋ฐ ํต๊ณํ์ ์ง์์ ๋ฐํ์ผ๋ก ํผ์ฒ๋ฅผ ๊ตฌ์ฑํด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑ
- ์๊ณ ๋ฆฌ์ฆ ํ์ต
๋ฅ๋ฌ๋
- ํน์ง
- ์ค์ํ Feature ๋ฅผ ์ค์ค๋ก ๊ตฌ๋ถํ์ฌ weight ๋ฅผ ๋ถ์ฌ
⇒ ์ฌ๋์ด ์ง์ ํ ํผ์ฒ : over-specified, incomplete ์ํ์ฑ + ์์ฑ์ ๋ง์ ์๊ฐ ์์ - ์ฌ๋ฌ ์ธต์ ๊ฑธ์น ๋ด๋ถ parameter ๋ฅผ ์ค์ค๋ก ํ์ต • ์ ์ฉํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค.
- Raw data ๋ฅผ ๊ฑฐ์ ๊ทธ๋๋ก ์ฌ์ฉ – computer vision, ์ธ์ด์ฒ๋ฆฌ ๋ฑ (ex, image, sound, characters, words)
- Unsupervised, supervised learning ๋ชจ๋ ๊ฐ๋ฅ
- ์ด๋ฏธ์ง ์ธ์, ๋ํ/์ธ์ด ๋ฌธ์ ์ ํ์ํ ์ฑ๋ฅ
- ์ค์ํ Feature ๋ฅผ ์ค์ค๋ก ๊ตฌ๋ถํ์ฌ weight ๋ฅผ ๋ถ์ฌ
Artificial Neural Network
- Artificial Neuron (perceptron)

- ๋ชจ์ : ์ธ๊ฐ ๋๋์ ์ ๊ฒฝ๋ง์ ๋ชจ๋ฐฉ → ์ค์ ์ ์ฉ๋ฐฉ์์ ๋๋์๋ ๋ค๋ฆ
- ๊ตฌ์ฑ : Pre-Activation ๋ถ๋ถ(์) + Activation ๋ถ๋ถ (๋ค)
- Pre-Activation : linear regression์ด ๊ทธ๋๋ก ๋ค์ด๊ฐ
(X : ํผ์ฒ๋ค ๊ฐ๊ฐ, output : ์์ธกํ๊ณ ์ ํ๋ ๊ฒ, w : ์ฐพ์์ผํ๋ ๊ฒ)
$$a(x) = b+ \sum_i w_ix_i= b + w^TX$$ - Activation : sigmoid ๋ฑ์ ํ์ฑํ ํจ์๊ฐ ๋ค์ด๊ฐ
( W : connection weight, b : bias, g : activation function )
$$h(x) = g(a(x)) = g(b+ \sum_i w_ix_i)$$
- ํ์ฑํ ํจ์ :
- sigmoid : \(\sigma \left( x\right) =\dfrac{1}{1+e^{-x}}\)
→ 0~1์ฌ์ด์ ๊ฐ์ด ๋์ด - Tanh : \( tanh(x) \)
→ -1~1์ฌ์ด์ ๊ฐ์ด ๋์ด - ReLU : \( max(0,x) \)
→ ํ๋ ๋ฅ๋ฌ๋์ ๋๋ถ๋ถ ์ฌ์ฉ - Leaky ReLU : \( max(0.1x, x) \)
→ ReLU์์ ์์์ผ๋ ๊ธฐ์ธ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ๊ฐ์ ํ์ฌ ์กฐ๊ธ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋ถ์ฌ - ELU : \( x \ \ (x≥ 0) \\ \ \ \ \ \ \ \ \ \alpha(e^x -1) \ \ (x <0) \)
- Softmax : \( \sigma(z)j = \frac{e^{zj}}{\sum^{K}{k=1}e^{zk}} \) (for j =1,…, K)
→ ์ถ๋ ฅ๊ฐ์ ๋ค์คํด๋์ค ๋ถ๋ฅ๋ฅผ ์ํด ์ถ๋ ฅ๊ฐ์ ๋ํด ์ ๊ทํํ์ฌ (total =1)ํ๋ฅ ๋ถํฌ๋ฅผ ์ถ๋ ฅ
Linear : pre-Activation, Softmax : Activation
→ \( \frac{e^{2.0} }{e^{2.0} + e^{1.0}+e^{0.1}} = 0.7 \ (y๊ฐ \ 0์ผ \ ํ๋ฅ ์ด \ 0.7 \ (70\%)) \)
- sigmoid : \(\sigma \left( x\right) =\dfrac{1}{1+e^{-x}}\)
- ์๋ ์๋ฆฌ

- ๊ตฌ์ฑ
- input feature (2 : ์ฒด์ค, 9 : ํ์), output : ๋น๋จ๋ณ ์งํ๋ฅ (1๊ฐ)
- ํ๋ ๋ ์ด์ด 1๊ฐ๊ฐ 3๊ฐ์ ๋ด๋ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์ ๊ฒฝ๋ง
- ๊ฐ์ค์น : ํ์ต์ ํตํด ์ค์ค๋ก ๋ถ์ฌ๋จ
- ์ฒด์ค์ด๋ผ๊ณ ํ๋ ํผ์ฒ๋ ํ๋ ๋ ์ด์ด์ ๋ด๋ฐ 3๊ฐ์ ์ฐ๊ฒฐ๋จ → ์ฐ๊ฒฐ์, ๊ฐ์ค์น๊ฐ ๋ถ์ฌ๋จ
- pre-activation : 7.6 (2 * 0.2 + 9 * 0.8)
- activation : 0.9994 (ํ์ฑํ ํจ์์ 7.6์ ๋ฃ์ด์ ๋์จ ๊ฐ)
- ํ๋ ๋ ์ด์ด → output : 1.79 (0.4 * 0.9994 + 0.5 * 1.000 + 0.9 * 0.9984)
- output ํ์ฑํ ํจ์
- linear regression → ๊ทธ๋๋ก
- ์ด์ง ๋ถ๋ฅ → sigmoid
- ๋ค์ค ๋ถ๋ฅ → softmaxNeural Network
Neural Network ํ๋ จ์๋ฆฌ
๊ฒฝ์ฌํ๊ฐ๋ฒ (gradient descent)
- ๋ชฉ์ : ์ค์ ๊ฐ๊ณผ ์์ธก๊ฐ์ ์ฐจ์ด๋ฅผ ์ต์ํํ๋ parameter(๐) ๋ฐ๊ฒฌ
- ๋ฐฉ๋ฒ : ์์คํจ์๋ฅผ ์ ์ํ์ฌ ์์คํจ์์ ๊ฐ์ด 0 ์ผ๋ก ์๋ ดํ๋๋ก parameter(๐) ์กฐ์
→ ๋ฏธ๋ถ์ ํตํด ๊ฒฝ์ฌ๋๋ฅผ ๋ฐ๋ผ ๋ฐ์ผ๋ก ๋ด๋ ค๊ฐ๋, ์ต์๊ฐ์ ์ฐพ์๊ฐ - Derivative (๋ํจ์, ๋ฏธ๋ถ, ์ ์ ์ ๊ธฐ์ธ๊ธฐ)

- ์๋ฏธ : x๊ฐ ์ผ๋งํผ ์ฆ๊ฐํ ๋, y๊ฐ ์ผ๋งํผ ์ฆ๊ฐํ๋ค
- J(w) (=L(w)) : W๊ฐ ํ๋ผ๋ฏธํฐ์ธ ์์คํจ์ → ex) MSE
- Optimization : ์์คํจ์๋ฅผ ์ต์ํํ๋ w์ b
- ๋ฐฉํฅ : Gradient (derivative of Cost Function)
: ์์ค์ด ์ต์ํ ๋๋ w๋ฅผ ์ฐพ์์ผํ ๋, gradient๊ฐ +, - ์ ๋ฐ๋ผ ๋ฐฉํฅ์ ์ ์ ์์- gradient < 0 : ํ์ฌ์ w๊ฐ์ ํค์์ผ๊ฒ ๋ค
- gradient > 0 : ํ์ฌ์ w๊ฐ์ ์ค์ฌ์ผ๊ฒ ๋ค
- ์ด๋ ์๋ : Learning Rate
→ ์ต์ ์ ๊ฐ์ค์น๋ฅผ ์ง๋๊ฐ์ง ์๋๋ก ์๊ฒ ํด์ผํ๋ค. - ๊ฐ์ค์น ๊ฐฑ์ ๊ณต์ : New W = old W – (Learning Rate) * (Gradient)
- ๋ฐฉํฅ : Gradient (derivative of Cost Function)
- ์ ํ ํ๊ท์์์ ํ๋ผ๋ฏธํฐ ์
๋ฐ์ดํธ → ์๋์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์ต์ ์ ๊ฐ์ ์ฐพ์๊ฐ
- \( y = ๐_0 + ๐_1๐ฅ \) (= y=b+wx)
- Loss Function → (์ ๋ต- ์์ธก)^2 ์ ํ๊ท : MSE
\( ๐ฟ (๐_0, ๐_1) = \frac{1}{m}\sum^{m}_{i=0} (y_i - (๐_0 + ๐_1x_i))^2 \) ( \( y_i \) : ์ ๋ต ๋ ์ด๋ธ) - Gradient : ์์คํจ์ ํธ๋ฏธ๋ถ
\( \frac{d๐ฟ (๐_0, ๐_1)}{d๐_1} = -2\frac{1}{N}\sum^{m}_{i=0}x_i (y_i - (๐_0 + ๐_1x_i)) \)
\( \frac{d๐ฟ (๐_0, ๐_1)}{d๐_0} = -2\frac{1}{N}\sum^{m}_{i=0} (y_i - (๐_0 + ๐_1x_i)) \) - Update : b, w๋ฅผ ์
๋ฐ์ดํธ
\( ๐_1 := ๐_1 -\alpha \frac{d๐ฟ (๐_0, ๐_1)}{d๐_1} \)
\( ๐_0 := ๐_0 -\alpha \frac{d๐ฟ (๐_0, ๐_1)}{d๐_0} \)
- \( y = ๐_0 + ๐_1๐ฅ \) (= y=b+wx)
์์คํจ์(= ๋น์ฉํจ์, ๋ชฉ์ ํจ์)
: ๊ฒฝ์ฌํ๊ฐ๋ฒ, ์ค์ฐจ์ญ์ ํ๊ฐ ์๋ํ๋๋ก ๋์์ด ๋๋ ํจ์ / ๋ฏธ๋ถ ๊ฐ๋ฅ ํจ์
→ ๋ง๋ค์ด์ ์ธ ์๋ ์๊ณ , ๋ง๋ค์ด์ง๊ฑธ ์จ๋ ๋จ. (๊ฑฐ์ ๋ง๋ค์ด์ง๊ฑฐ ์)
→ ํ๋ ค๋ ๋ฌธ์ ์ ๋ฐ๋ผ ๊ฑฐ์ 3๊ฐ๋ก ๋๋์ด์ง
- Linear Regression (์ ํํ๊ท) : MSE (Mean Squared Error)
$$MSE = \frac{1}{n} \sum_{i=1}^{n} (\hat Y_i - Y_i)^2$$
→ Mse๋ฅผ ์ต์ํํ๋ w์ b๋ฅผ optimize - Binary Classification (์ด์ง๋ถ๋ฅ / Logistic Regression) : Binary-Cross-Entropy
$$J(\theta) = -\frac{1}{m} \left[ \sum_{i=1}^{m} \left( (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) + y^{(i)} \log(h_\theta(x^{(i)})) \right) \right]$$
์ ๋ต์ ๋ฐ๋ฅธ ์์ค๊ฐ ํ์ธ ๊ทธ๋ํ - \( If \ \ ๐ฆ^{(๐)} = 1 : J(๐) = −๐๐๐ \ โ_๐ (๐ฅ^{(๐)})\)
where โ๐ (๐ฅ(๐)) should be close to 1 - \( If \ \ ๐ฆ^{(๐)} = 1 : J(๐) = −๐๐๐ \ (1-โ_๐ (๐ฅ^{(๐)}))\)
where โ๐ (๐ฅ(๐)) should be close to 0
- \( If \ \ ๐ฆ^{(๐)} = 1 : J(๐) = −๐๐๐ \ โ_๐ (๐ฅ^{(๐)})\)
- Multi-Class Classification (๋ค์ค๋ถ๋ฅ) : Categorical-Cross-Entropy

(\(t_i\) : 0์ด ์๋ ํ๊ฒ C : multi-classes) - softmax : ํ์ฑํํจ์ f
- CE = softmax ํจ์์ ์ถ๋ ฅ๊ฐ์ธ ํ๋ฅ ๋ถํฌ์ log๋ฅผ ์ทจํ ๊ฒ * t ์ sum
- ์์

- True value : ํ๋๋ง 1์ด๊ณ ๋๋จธ์ง 0
- prediction : ๋ชจ๋ธ์ด ์์ธกํ ๊ฐ
- ํ์ฌ : 7์ผ ํ๋ฅ ์ด 60% → ๋์ค ์ต์ข ๋ชฉํ : 7์ผ ํ๋ฅ ์ด 100% ์ ๊ฐ๊น๊ฒ๋๋๋ก
- LCE = -log 0.6 - true value๊ฐ ์๋ ๊ฐ์ 0์ด ๊ณฑํด์ง
- ํ์ฌ ์ฐ๋ฆฌ๋ชจ๋ธ์ด ์์ธกํ ๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ ์์ค๊ฐ
Backpropagation (์ค์ฐจ์ญ์ ํ)
: ์์คํจ์๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ผ๋ก ์ ๊ฒฝ๋ง ์ ์ฒด์ ํ๋ผ๋ฏธํฐ๊ฐ ์ ๋ฐ์ดํธ ๋๋๋ก ํ๋ ๊ธฐ๋ฒ
→ ๋ด๋ด ๋คํธ์ํฌ๋ฅผ ํ๋ จ์ํค๋ ๋ฐฉ๋ฒ
→ ์ฌ๋ฌ ์๋์ธต์ ๊ฐ์ค์น ๊ฐ์ ์ต์ข ์์ธก ๊ฐ์ด ๋ ์ด๋ธ๊ฐ๊ณผ ๊ทผ์ฌํ ๊ฐ์ ๊ฐ์ง๋๋ก ์กฐ์ ํด์ผํจ
Forward Propagation : ์์ ํ
: ๋ด๋ด๋คํธ์ํฌ์ ์๋๋ฐฉ์๊ณผ ๋์ผ

Backward Propagation : ์ญ์ ํ
- ์์ด๋์ด : ๋ณตํฉํจ์ ์ด๋ฏ๋ก ๋ฏธ๋ถ์ chain rule (์ฐ์ ๋ฒ์น)์ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
- chain rule

- w1์ ์ผ๋งํผ ๋ฐ๊ฟจ์ ๋, p๊ฐ ์ผ๋ง๋ ๋ฐ๋์์์ง ๊ณ์ฐํ ์ ์์ ⇒ P์ ๋ํ w1์ ๋ณํ์จ ๊ณ์ฐ ⇒ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ ๊ฒ - ํ๋ฒ๋ง ๊ณ์ฐํ๋ฉด ์ฌ๋ฌ๋ฒ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ (๊ณ์ฐ๋์ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์์)
- ์ด๋ฅผ ํตํด ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ํ ์ ์๋ ๊ฒ - EXAMPLE) 2๊ฐ์ ํผ์ฒ / ํ๋ ๋ ์ด์ด 1๊ฐ / ์๊ทธ๋ชจ์ด๋ ํจ์

<์๋ฐฉํฅ>
- w1, x1์ ์ด์ฉํด pre-activation๊ฐ์ธ z๊ฐ์ ๊ณ์ฐ
- z๊ฐ์ ํ์ฑํํจ์์ธ ์๊ทธ๋ชจ์ด๋ ํจ์์ ๋ฃ์
- ์์ ๊ฒฐ๊ณผ๋ก output์ด ๋์ด → ์์ธก์น๋ผ๊ณ ๊ฐ์
- ์์ค ๊ณ์ฐ : loss function์ธ cross entropy ํจ์์ a, y(์ ๋ต)์ ๋ฃ์
<์ญ๋ฐฉํฅ>
: ์์ค์ ์ค์ด๊ธฐ ์ํ w ์กฐ์ (๊ธฐ์ธ๊ธฐ <0 ⇒ ํ์ต๋ฅ ๋งํผ ๋ํจ / ๊ธฐ์ธ๊ธฐ > 0 ⇒ ๋บ

- binary cross-entropy ํจ์ ๋ฏธ๋ถ
$$(\frac{dL}{da} ) : -[y\frac{1}{a} - (1-y)\frac{1}{1-a}] $$ - sigmoid ํจ์ ๋ฏธ๋ถ
$$ (\frac{da}{dz}) : \sigma(z)(1-\sigma(z)) $$
⇒ a, b๋ก (\ \frac{dL}{dz}\) ๊ณ์ฐ ๊ฐ๋ฅ - \( \frac{dz}{dw_1} \) ๊ณ์ฐ : ax2+bx+c=0
\( z=w_1x_1+ w_2x_2 + b \) ์ w1์ผ๋ก ํธ๋ฏธ๋ถ ⇒ x1
$$ \frac{dL}{dW_1} = \frac{dL}{dz} \ \frac{dz}{dW_1} = -[y\frac{1}{a} - (1-y)\frac{1}{1-a}] * \sigma(z)(1-\sigma(z)) * x_1 $$ - ๋ฐฉ๋ฒ
- ๊ฐ๊ฐ์ input data ์ ๋ํ์ฌ, ์ฌ๋ฌ๊ฐ์ ํ๋ ๋ ์ด์ด๊ฐ ์์ ๋, ๊ฐ layer ๋ณ๋ก forward pass output ๊ฐ์ ๊ณ์ฐ
- ๋ฐฉ๋ฒ : ๊ฐ ๋ด๋ฐ์ pre-activation์์ wx+b๋ฅผ ๊ตฌํจ ⇒ activation ์์ ํ์ฑํ ํจ์๋ฅผ ํต๊ณผ ⇒ ์ถ๋ ฅ๊ฐ ๋์ด - Output layer์ ๋๋ฌ์, ์์ธก ์ํ
- ์์ธก๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ cost function ๊ณ์ฐ
- Backpropagation ์ ํตํด ์์คํจ์์ ์์ค๊ฐ์ ์ ๋จ๊ณ์ layer ๋ก ์ ๋ฌํ์ฌ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํจ
- Error term ์ ๊ฐ์ ๋ฐ๋ผ ๊ฐ layer ์ weight ๋ฅผ update
⇒ ๊ธฐ์ธ๊ธฐ <0 ๋๋ ๊ธฐ์ธ๊ธฐ >0 ์ ๋ฐ๋ผ์ ์ ๋ฐ์ดํธ
- ๊ฐ๊ฐ์ input data ์ ๋ํ์ฌ, ์ฌ๋ฌ๊ฐ์ ํ๋ ๋ ์ด์ด๊ฐ ์์ ๋, ๊ฐ layer ๋ณ๋ก forward pass output ๊ฐ์ ๊ณ์ฐ
Global minimum, Learning rate, optimizer
๋ค์ฐจ์ ๊ณต๊ฐ์์์ ๋ฐ์ดํฐ ๋ถํฌ

- local minimum์ ์์น์์ ์ ์ผ ์์ ๊ฐ์ ๊ฐ์ง๋ ๊ฒ ๊ฐ์ง๋ง, global minimum ๊ฐ์ด ์กด์ฌํ๋ค.
⇒ local minimum์ ๋น ์ง๋ฉด, ์ด์์ ์ธ ๊ฐ์ค์น๋ฅผ ์ฐพ์ ์ ์์
- optimizer : global minimum์ ๊ฐ๋๋ก ํ๋ ์ญํ
[ Learning rate ]
: step size๋ฅผ ์ผ๋ง๋งํผ์ฉ ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ ๊ฒ์ธ์ง
- defalut : 0.01
- ํ์ต๋ฅ ์ด ๋๋ฌด ๋์ ๊ฒฝ์ฐ : ํ์ต์ ๋นจ๋ฆฌ๋จ → ๋ฌธ์ ์ : global minimum์ ๋๋ฌํ ์ ์๊ณ , ์๋ค๊ฐ๋คํจ
ํ์ต๋ฅ ์ด ๋๋ฌด ์ ์ ๊ฒฝ์ฐ : ๋๋ฌด ์ฒ์ฒํ ๋ด๋ ค๊ฐ - ํด๊ฒฐ๋ฒ : Adaptive Learning rate ๊ธฐ๋ฒ → ์ฒ์์ ํฌ๊ฒ, ๊ฐ์๋ก ์กฐ๊ธ์ฉ ์ค์ฌ์ค๋ค
[optimization ๋ฐฉ๋ฒ : SGD (stochastic Gradient Descent, ํ๋ฅ ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ)]
- ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ๋ฅผ ํ ๊ฑด์ฉ ์์ค์ ๊ณ์ฐ
- ๊ธฐ์ธ๊ธฐ๊ฐ +, -๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์ต์์ ์ ํฅํด ์งํ๋จ
- ๋ฌธ์ ์
- ๋ค๋์ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ํ ๊ฑด์ฉ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ฌด ์ค๋๊ฑธ๋ฆผ
- ์งํญ์ด ํฐ ์ ๋ฐ์ดํธ ๊ถค์
- ํด๊ฒฐ๋ฒ 1 : batch gradient descent
- ์ ์ฒด ๋ฐ์ดํฐ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ํ๋ฒ์ ๊ณ์ฐ → ๊ธฐ์ธ๊ธฐ์ ํ๊ท ๊ณ์ฐ
→ ํ๊ท ๋๋ ๋ฐฉํฅ์ผ๋ก ์งํ์, global minimum์ธ ๊ฐ์ผ๋ก ๊ฐ์ค์น ์ ๋ฐ์ดํธ ๊ฐ๋ฅ - ๋ฌธ์ ์ : ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ผํจ (ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ด์)
- ์ฅ์ : ์ค๋ฌด์คํ ์ ๋ฐ์ดํธ ๊ถค์ น
- ์ ์ฒด ๋ฐ์ดํฐ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ํ๋ฒ์ ๊ณ์ฐ → ๊ธฐ์ธ๊ธฐ์ ํ๊ท ๊ณ์ฐ
- ํด๊ฒฐ : mini batch gradient descent
- ํ๋ผ๋ฏธํฐ์ ๋ฐฐ์น ์ฌ์ด์ฆ๋ฅผ ์ ํจ → ์์ ์ํ๋ค์ ๋ชจ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ ์ ์ฉ → global minimum์ธ ๊ฐ์ผ๋ก ์ด๋
- ์ค๊ฐ ์ ๋์ ์ ๋ฐ์ดํธ ๊ถค์
Momentum
: ๋ฐฉํฅ์ฑ์ ์ ์งํ๋ฉฐ ๊ฐ์ → Global minimum ์ ๋นจ๋ฆฌ ๋๋ฌํ๊ธฐ ์ํด์ !

- vertically ๋ ๋ณํ๊ฐ ์ ๊ณ , horizontally ๋ ๋ณํ๊ฐ ํฌ๋๋ก parameter ์กฐ์
- ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ ์ฉํ ๋, ์ ๋ฐ์ดํธ ๋๋ ๋ฐฉํฅ์ ์ด๋์ ๋ ์ ์งํ๋ฉฐ ์งํ ์, ์งํญ์ด ์ปค์ง๋๊ฒ์ ๋ง์ ๋น ๋ฅด๊ฒ ๋๋ฌ
- ๋ค์ฐจ์ ๊ณต๊ฐ์์์ Local minumum ํ์ถ ๊ฐ๋ฅํด์ง
- local minium ๋ฐ์ ์์ธ
: ๊ธฐ์ธ๊ธฐ = 0์ธ ๊ฐ๋ง์ ์ด์ฉํด, ๊ทธ๋์ ์์ง์ด๋ global minimum ๋ฐฉํฅ์ ๋ฌด์ํ์ฌ
local minimum ์ฃผ๋ณ๋ง ์๋ค๊ฐ๋ค ์์ง์ด๊ฒ๋๋ ๊ฒ - momentum์ ํ์ถ ๋ฐฉ๋ฒ
: ์์ง์ด๋ ๋ฐฉํฅ์ฑ์ ์ํ์ ์ผ๋ก ๋จ๊ฒจ๋๊ณ ๊ณต์์ ๊ตฌํ
- local minium ๋ฐ์ ์์ธ
- saddle point์์ ํ์ถ ๊ฐ๋ฅ
- ๊ธฐ์กด : ๊ธฐ์ธ๊ธฐ ์์ค ํ์ ๋ฐ์ → ๊ธฐ์ธ๊ธฐ๊ฐ 0์ด ๋์ด ํด๋น ํฌ์ธํธ์์ ๋ฉ์ถค
- momentum ์ถ๊ฐ : ๊ด์ฑ์ ์ ์งํ๋ฏ๋ก ๋ฐฉํฅ์ ๋ฐ๋ผ์ ๋ด๋ ค๊ฐ ์ ์์
- ์ฌ๋์ด ์ค์ ํ๋ ํ๋ผ๋ฏธํฐ์!! → ์ค์ค๋ก ์ฐพ์์ฃผ์ง ์์
Optimizers : ์ต์, ์ต๋ ๊ฐ ์ฐพ๊ธฐ
→ ํ์ฌ๋ ์ต์๊ฐ ์ฐพ๋ optimizer๋ฅผ ๊ณต๋ถํจ
→ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ global minimum์ ์ฐพ์๊ฐ๋ ๊ถค์ ์ด ๋ค๋ฆ
→ optimizer๋ณ๋ก saddle point์์ ๋ฒ์ด๋๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌํ๋์ด์์
→ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ค์ฐจ์ ๊ณต๊ฐ์ ๊ตฌ์ฑํ๋์ ๋ฐ๋ผ optimizer ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง
- ์ข
๋ฅ
- Stochastic Gradient Descent Optimizer
- RMSProp Optimzer
- Adagrad Optimizer
- Adam Optimizer, etc
ํ์ดํผํ๋ผ๋ฏธํฐ์ ๊ณผ์ ํฉ ๋ฐฉ์ง ๊ธฐ๋ฒ
Epoch
: ์ ์ฒด dataset ์ด neural network ์ ํตํด ํ๋ฒ ์ฒ๋ฆฌ๋ ๊ฒ
- ํน์ง
- Epoch ์ model ์ training ์์ hyper parameter ๋ก ํ์ ์ง์
- ํ๋์ epoch ์ ํ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ด size ์ด๋ฏ๋ก ์ฌ๋ฌ ๊ฐ์ batch ๋ก ๋๋์ด ์ฒ๋ฆฌ (๋ฉ๋ชจ๋ฆฌ ์ด์)
⇒ ์ ์ฒด ๋ฐ์ดํฐ (1 ์ํญ)๋ฅผ ๋ฐฐ์น ์ฌ์ด์ฆ๋ก ๋๋์ด ์ฌ์ฉ (๋ฏธ๋๋ฐฐ์น) - Parameter training ์ ์ํด์๋ ์ฌ๋ฌ ๋ฒ epoch ์ ๋ฐ๋ณตํด์ผ ํ๋ค.
⇒ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ๋ณตํ์ฌ ์ ๋ฐ์ดํธ๋ฅผ ํจ - One epoch ๋ด์์์ iteration ํ์ : total sample size / batch size
⇒ Ex) 1 epoch = 2000 training example / 500 batches = 4 iterations
Hyper-parameter
- parameter : w, b → ์ค์ค๋ก ํ์ตํ๋ ๊ฒ
- ํ์ดํผ ํ๋ผ๋ฏธํฐ : ํ๋ผ๋ฏธํฐ ์ ์ธ ๋๋จธ์ง ์ ๋ถ → ์ฌ๋์ด ์ง์ ํด์ฃผ๋ ๊ฒ
- ํ์ต๋ฅ : \( \alpha \)
- momentum
- number of layers : ํ๋ ๋ ์ด์ด ๊ฐ์
⇒ ์ ์ผ๋ฉด, ๋ฐ์ดํฐ์ ์ถฉ๋ถํ ๋ํ ์ผ์ ๋ชจ๋ธ์ด ํ์ตํ ์ ์์
⇒ ๋ง๋ค๊ณ ์ข์๊ฒ ์๋ / ๊ฐ์ค์น ๊ฐ์๊ฐ ์์ฒญ๋๊ฒ ๋์ด๋๊ณ , ์์ฒญ ํฐ ๋ฐ์ดํฐ์ ์์ด ํ์๋ก ํด์ง - Dropout rate : ๊ณผ์ ํฉ ๋ฐฉ์ง๋ฅผ ์ํด ๋ด๋ฐ์ ์ฃฝ์๋ค๊ฐ ์ด๋ ธ๋ค๊ฐ ํ๋ ๋น์จ
⇒ ํน์ ๋ด๋ฐ์ด ๊ฐํ๊ฒ ์์กด๋๋ ํ์์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ
⇒ ์ผ๋ฐํ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ ๊ฒ / ๊ณผ์ ํฉ ๋๋ ๊ฒ / ํน์ ํผ์ฒ์ ์์กดํ๋ ๊ฒ ์ ๋ฐฉ์ง
⇒ Dropout Regularization : ๋๋คํ ๋ด๋ฐ ์ ํ์ ์งํํ๋ ๋๋กญ์์์ ํตํ ๊ณผ์ ํฉ ๋ฐฉ์ง - number of epochs
- batch size
- ํ์ดํผํ๋ผ๋ฏธํฐ ๊ฐ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ : ์ ํด์ง ๋ฃฐ์ด ์์
- ์ ์ฌํ ๋ชจ๋ธ ์ฐธ์กฐ
- ๊ฒฝํ์ ์ํ ์ถ์ธก
- ๊ทธ๋ฆฌ๋ ์์น : ์ข ๋ฅ๋ณ๋ก ๋ค ํด๋ด๋ผ
tensorflow ์๊ฐ ๋ฐ neural network๋ฅผ ์ด์ฉํ ํ๊ท ์๋ฆฌ
Tensorflow๋ ?
: ๊ตฌ๊ธ์์ ์ฌ์ฉํ๋ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ๋ฅผ ์คํ ์์ค๋ก ๊ณต๊ฐํ๊ฒ
- Tensorflow ์ค์น
# GPU๊ฐ ์ฅ์ฐฉ๋์ด์์ง ์์ ์ปดํจํฐ์ผ ๋
# ANACONDA Prompt์์ ์คํ
pip install --upgrade tensorflow
# python ์ ์
๋ ฅํ์ฌ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ์ ์
import tensorflow as tf
tf._version_ # ํ์ฌ ์ฌ์ฉ ์ค์ธ ๋ฒ์ ์ ํ์ธ ํ ์ ์์
# GPU๊ฐ ์ง์๋๋ ์ปดํจํฐ์ผ๋,
GPU ์ง์์์ CUDA ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ํ์ธ ๊ฐ๋ฅ
2. Keras
# ์ด๋ณด์์ฉ : Sequential API๋ฅผ ์ฌ์ฉํด ๋ชจ๋ธ ๊ตฌ์ฑ
# ๋๋ถ๋ถ์ ๋ชจ๋ธ์ด ๊ฐ๋ฅ
model = tf.keras.models.Sequentioal([
tf.keras.layers.Flatten()
])
# ์ ๋ฌธ๊ฐ์ฉ : Subclassing API -> pandas์ class ๋ฌธ๋ฒ์ ์ฌ์ฉ
# tf.keras.Model์ ์์๋ฐ์ ์ฌ์ฉ
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = Conv2D(32,3,activation='relu')
๋ฑ๋ฑ
# ์์ ํ
def call(self, x):
x = self.conv1(x)
๋ฑ๋ฑ
model = MyModel()
# ์ญ์ ํ
with tf.GradientTape() as tape :
logits = model(images)
loss_value = loss(logits, labels)
grads = tape.gradient(loss_value, model.trainalble_variable)
[ ์ ํต์ ์ธ linear Regression vs ๋ด๋ด๋คํธ์ํฌ๋ก ๊ตฌํํ linear Regression ]
- ์ ํต์ ์ธ linear Regression
- one layer
: ํ๋ ๋ ์ด์ด ์์ด ์ ๋ ฅ, ์ถ๋ ฅ์ธต์ ๋ฐ๋ก ์ฐ๊ฒฐ๋ ํํ์ ๋จ์ผ ๋ ์ด์ด ๋ด๋ด ๋คํธ์ํฌ
⇒ ์ ํต์ ์ธ ์ ํํ๊ท๋ one layer์ผ ๋, ๋์ผํ ๋ชจ์ (์ํ์ ์ผ๋ก ๋์ผ)
⇒ ์ ํ์ ์ธ ํน์ฑ๋ง ํ์
- one layer
- ๋ด๋ด๋คํธ์ํฌ
- multiple-layers์ธ ํ๋ ๋ ์ด์ด
- ํ๋ ๋ ์ด์ด์ ๋
ธ๋ : ๊ฐ ๋ด๋ฐ์ ์ ํ์ ์ธ pre-activation, ๋น์ ํ์ ์ธ activation ๋ถ๋ถ์ผ๋ก ๋๋จ
⇒ ํ๋ ๋ ์ด์ด ๋ด์์ ์ ํ์ฑ, ๋น์ ํ์ ์ธ ํจํด์ ํ์ ํด ๋ ํน์ฑ์ ํจ๊ป ํ์ ํ ์ ์์
- ํ๋ ๋ ์ด์ด์ ๋
ธ๋ : ๊ฐ ๋ด๋ฐ์ ์ ํ์ ์ธ pre-activation, ๋น์ ํ์ ์ธ activation ๋ถ๋ถ์ผ๋ก ๋๋จ
- multiple-layers์ธ ํ๋ ๋ ์ด์ด
์ค์ต : neural network๋ฅผ ์ด์ฉํ linear regression
Boston ์ฃผํ ๊ฐ๊ฒฉ ์์ธก
- ๊ตฌ์ฑ : 13๊ฐ์ ์ข ์๋ณ์ + 1๊ฐ์ ๋ ๋ฆฝ๋ณ์(์ฃผํ๊ฐ๊ฒฉ ์ค์๊ฐ)
๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ + ์ ์
# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
df_boston = pd.read_csv("boston_house.csv", index_col=0)
boston = df_boston.drop('MEDV', axis=1)
target = df_boston.pop('MEDV')
X = boston.values
y = target.values
print(X.shape) (506, 13) print(y.shape) (506,)
# train, test ๋ถ๋ฆฌ
X_train, X_test, y_train, y_test = train_test_split(X, y)
# feature scailing
sc = MinMaxScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
๋ชจ๋ธ ์ค๊ณ, ๋ชจ๋ธ compile, ํ๋ จ → ์ด๊ฒ ์ฐจ์ด์
๋ชจ๋ธ ์ค๊ณ
# sequntial ๋ชจ๋ธ ์ฌ์ฉ : ๊ณ์ addํด๊ฐ๋ฉด์ ๋ชฏ๋ชจ๋ธ์ ๋ง๋ค๋ฉด
model = Sequential()
# ํ๋ ๋ ์ด์ด ๊ฐ์ : 64 / input shape : tuple ํํ๋ก ํด์ผํจ -> (13, ) / ํ์ฑํํจ์ = ReLU
model.add(Dense(64, input_shape=(13,), activation='relu'))
# ์ธํ์ ์ง์ ์ํด๋ ๋จ (์ฒซ๋ฒ์งธ ๋ ์ด์ด์ ์ถ๋ ฅ์ด ์ธํ์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์) / ํ์ฑํํจ์ = ReLU
model.add(Dense(32, activation='relu'))
# 1๊ฐ๋ก ์ฐ๊ฒฐ / ํ์ฑํํจ์ = ์์ (์ด์ : linear regression ๋ชจ๋ธ์ ๋ง๋ค ๊ฒ์ด๊ธฐ ๋๋ฌธ)
model.add(Dense(1))
model.summary()
# Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 896 (13 * 64+1)
dense_1 (Dense) (None, 32) 2080 (64 * 32+1)
dense_2 (Dense) (None, 1) 33 (32 * 1 + 1)
=================================================================
Total params: 3,009
Trainable params: 3,009
Non-trainable params: 0
_________________________________________________________________
# ๋ชจ๋ธ ์ปดํ์ผ
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae', 'mse'])
๋ชจ๋ธ ํ๋ จ ๋ฐ ์์ธก
# ํ๋ จ : loss, metrics ๊ฐ์ด ์ ์ฅ
# batch_size : ํด์๋ก ์ข์ผ๋, ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง๊ฐ ๋์ด๋จ (ํ์ดํผ ํ๋ผ๋ฏธํฐ)
# epoch : ๋ฐ์ดํฐ๋ฅผ ๋ช๋ฒ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ
# validation ๋ฐ์ดํฐ ์ง์ : X_test, y_test๋ก
# verbose : ํ๋ จ ์, ์ถ๋ ฅ ์ ๋ (๋ณดํต 1, 2 ์ฌ)
history = model.fit(X_train, y_train, batch_size=32,
epochs=500, validation_data=(X_test, y_test), verbose=1)
# ๋ชจ๋ธ ํ๊ฐ : ๋ง์ง๋ง์ ์ฐํ ๊ฒ์ ํ๋ฒ ๋ ๋ฐ๋ณต
model.evaluate(X_test, y_test, verbose=0)
# ๋ชจ๋ธ ์์ธก
y_pred = model.predict(X_test)
# ์์ธก ํ๊ฐ
# MSE(mean squared error) ๊ณ์ฐ : Mean squared error: 7.38
print("Mean squared error: {:.2f}".format(mean_squared_error(y_test, y_pred)))
# R2 ๊ณ์ฐ : R2 score: 0.91 (1์ ๊ฐ๊น์ธ ์๋ก ์)
print("R2 score: {:.2f}".format(r2_score(y_test, y_pred)))
# ๊ฒฐ๊ณผ ์๊ฐํ
plt.scatter(y_test, y_test, label='true')
plt.scatter(y_test, y_pred, label='predict')
plt.xlabel('y_test')
plt.ylabel('y')
plt.legend()
plt.title('Boston House Price Prediction ($1,000)')
# ๋ชจ๋ธ ํ๋ จ ๊ณผ์ ์๊ฐํ
plt.plot(history.history['mse'], label='Train error')
plt.plot(history.history['val_mse'], label='Test error')
plt.ylim([0, 50])
plt.legend()


sklearn LinearRegression ๋น๊ต
from sklearn.linear_model import LinearRegression
# ๋ชจ๋ธ ์ค๊ณ
regr = LinearRegression()
# ๋ชจ๋ธ ํ๋ จ
regr.fit(X_train, y_train)
# ์์ธก
y_pred = regr.predict(X_test)
# The coefficients :
print('Coefficients: \\n', regr.coef_)
print('Intercept: \\n', regr.intercept_)
# MSE(mean squared error) ๊ณ์ฐ
print("Mean squared error: {:.2f}".format(mean_squared_error(y_test, y_pred)))
# R2 ๊ณ์ฐ
print("R2 score: {:.2f}".format(r2_score(y_test, y_pred)))
plt.scatter(y_test, y_pred)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], '--', c='r')
plt.xlabel('y_test')
plt.ylabel('y_pred')
plt.title('Boston House Price Prediction ($1,000)')

์๋์ฐจ ์ฐ๋น ๊ณ์ฐ
๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ + ์ ์
# ๋งํฌ๋ก ๋ถ๋ฌ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ธฐ
data_path = tf.keras.utils.get_file("auto-mpg.data",
"<https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data>")
column_names = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin']
rawdata = pd.read_csv(data_path, names=column_names, na_values="?", comment="\\t", sep=" ", skipinitialspace=True)
# null ๋ฐ์ดํฐ ์ญ์
rawdata.dropna(inplace=True)
data = rawdata.copy()
# ์ํซ ์ธ์ฝ๋ฉ
data = pd.get_dummies(data, columns=['cylinders', 'origin'])
# ๋ ์ด๋ธ ์ง์
label = data.pop('mpg')
# train / test split
X_train, X_test, y_train, y_test = train_test_split(data.values, label.values)
# ํผ์ฒ ์ค์ผ์ผ๋ง
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Regression Model Build
# sequntial ๋ชจ๋ธ
model = Sequential()
model.add(Dense(64, input_shape=(13,), activation='relu')
model.add(Dense(32, activation='relu'))
model.add(Dense(1))
model.summary()
# ๋ชจ๋ธ ์ปดํ์ผ
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae', 'mse'])
train / predict
# ํ๋ จ
history = model.fit(X_train, y_train, batch_size=32,
epochs=500, validation_data=(X_test, y_test), verbose=1)
# ๋ชจ๋ธ ํ๊ฐ : ๋ง์ง๋ง์ ์ฐํ ๊ฒ์ ํ๋ฒ ๋ ๋ฐ๋ณต
model.evaluate(X_test, y_test, verbose=0)
# ๋ชจ๋ธ ์์ธก
y_pred = model.predict(X_test)
r2 ๊ณ์ฐ
# R2 ๊ณ์ฐ : R2 score: 0.91 (1์ ๊ฐ๊น์ธ ์๋ก ์)
print("R2 score: {:.2f}".format(r2_score(y_test, y_pred)))
์๊ฐํ
# ๊ฒฐ๊ณผ ์๊ฐํ
plt.scatter(y_test, y_test, label='true')
plt.scatter(y_test, y_pred, label='predict')
plt.xlabel('y_test')
plt.ylabel('y')
plt.legend()
plt.title('Boston House Price Prediction ($1,000)')
# displacement๊ฐ ์ผ๋ง์ผ๋, ์ฐ๋น๊ฐ ์ผ๋ง์ธ์ง ํ์ธ
plt.scatter(X_test[:, 0], y_test, label='true value')
plt.scatter(X_test[:, 0], y_pre, label='predicted value')
plt.xlabel('displacement')
plt.ylabel('mpg')
plt.legend()


Neural network๋ฅผ ์ด์ฉํ ์ด์ง๋ถ๋ฅ
(Logistic Regression, binary classification)
Sigmoid ํจ์
$$ f(z) = \frac{1}{1+e^{-z}} \ \ \ (z = \theta X) $$
- ํจ์ ์๊ฐ
- z : logit (logit ์์ linear regression์ wx+b์ ๊ณต์์ด ๋ค์ด๊ฐ๋ค)
- S curve ํ์ฑ : 0.5 ๋ถ๊ทผ์์ ๊ธ๊ฒฉํ ๋ณํํ๋ ํจ
- [0, 1] ๋ก ๋ฐ์ด๋ ⇒ ํ๋ฅ ๋ก ์๊ฐ๊ฐ๋ฅ
- ๋ฏธ๋ถ์ด ์ฌ์ (์ด์ : e )
- linear regression๊ณผ ๋น๊ต
- ๊ณต๋์ : ๋ก์ง์ ๊ตฌํ๋ ๋ถ๋ถ์ด ๋์ผ
- ์ฐจ์ด์ : ์ด์ง๋ถ๋ฅ์ ๊ฒฝ์ฐ, sigmoid๋ฅผ ์ ์ฉํ๋ค
neural net์ ์ ์ฉํ logistic regression

- output
- ํ์ฑํ ํจ์ $\sigma (z)$ : sigmoid ํจ์
- ๋ด๋ฐ : 1๊ฐ (์๊ทธ๋ชจ์ด๋ ํจ์๋ก ๋์จ ํ๋ฅ ๊ฐ >0.5 ⇒ 1 / < 0.5 ⇒ 0)
์ค์ต : Malware Detection
๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ๋ฐ ์ ์
df = pd.read_csv('datasets/malware.csv', index_col=0)
# X, y๋ก ์ง์
X = df.values
y = df.pop('legitimate').values
X.shape, y.shape #((10000, 54), (10000,))
# train, test ๋ถ๋ฆฌ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# ํผ์ฒ ์ค์ผ์ผ๋ง
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
๋ชจ๋ธ ์ค๊ณ
# ๋ชจ๋ธ ๊ตฌ์ฑ
model = tf.keras.Sequential()
model.add(Dense(32, input_shape=(54,), activation="relu"))
model.add(Dense(16, activation="relu"))
model.add(Dense(1, **activation="sigmoid"**))
model.summary()
# Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 32) 1760 (32 * 54+1)
dense_1 (Dense) (None, 16) 528
dense_2 (Dense) (None, 1) 17
=================================================================
Total params: 2,305
Trainable params: 2,305
Non-trainable params: 0
# ๋ชจ๋ธ ์ปดํ์ผ : ์ด์ง๋ถ๋ฅ ์ด๋ฏ๋ก ์์ค์ binary_crossentropy
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=["accuracy"])
๋ชจ๋ธ ํ๋ จ + ํ๊ฐ
# ๋ชจ๋ธ ํ๋ จ
history = model.fit(X_train, y_train, epochs=20, batch_size=32,
validation_data=(X_test, y_test))
score = model.evaluate(X_test, y_test, verbose=0)
print(model.metrics_names)
print("Test score : {:.2f}".format(score[0]))
print("Test accuracy : {:.2f}".format(score[1]))
๊ฒฐ๊ณผ ์๊ฐํ
# ๋ชจ๋ธ ๊ฒฐ๊ณผ ์ ํ๋ ์ํ
plt.figure(figsize=(12,4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(['train', 'test'])
# ๋ชจ๋ธ ๊ฒฐ๊ณผ ์์ค : ์ด์ง ๊ณผ์ ํฉ๋จ -> ๊ฐ์๋ก ์ ์ ์์ค์ด ์ค๋ฅด๋ ์ค
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'test'])

์์ธก
# y_pred๊ฐ 1์ผ ํ๋ฅ ์ด๋ฏ๋ก 0.5์ ๋น๊ตํ์ฌ T/F๋ก ๋ฐ๊พธ๋ ์์
์ด ํ์
y_pred = model.predict(X_test) > 0.5
accuracy_score(y_test, y_pred) # 0.9905
'๋์๋ฆฌ,ํํ > GDGoC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [AI ์คํฐ๋] Section 8 : ์ ์ดํ์ต (2) | 2024.12.27 |
|---|---|
| [AI ์คํฐ๋] Section 8 : CNN & LeNet5 (0) | 2024.12.27 |
| [AI ์คํฐ๋] Section 6 : ๋น์ง๋ ํ์ต ๋ชจ๋ธ (5) | 2024.12.26 |
| [AI ์คํฐ๋] Section 5 : ์ ํต์ ์ธ ๋จธ์ ๋ฌ๋ - ์ง๋ํ์ต ๋ชจ๋ธ part 2 (3) | 2024.12.26 |
| [AI ์คํฐ๋] Section 4 :๋ฐ์ดํฐ์ ๋ถํ ๋ฐ ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ ์งํ (2) | 2024.12.26 |