๐Ÿ“’ Today I Learn/๐Ÿ Python

๋จธ์‹ ๋Ÿฌ๋‹์˜ ์ดํ•ด์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ (7) ๋”ฅ๋Ÿฌ๋‹

ny:D 2024. 6. 13. 15:42

240612 Today I Learn

๋”ฅ๋Ÿฌ๋‹ ์ด๋ก 

๋จธ์‹ ๋Ÿฌ๋‹ vs. ๋”ฅ๋Ÿฌ๋‹

๐Ÿ’ก ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ๋”ฅ๋Ÿฌ๋‹์€ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ค‘์น˜๋ฅผ ํ•™์Šตํ•˜์—ฌ ํŒจํ„ด์„ ์ธ์‹ํ•˜๊ณ  ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ์ธ๊ณต์ง€๋Šฅ(AI)์˜ ํ•˜์œ„ ๋ถ„์•ผ์ด๋‹ค.

  • ๋จธ์‹ ๋Ÿฌ๋‹: ๋ฐ์ดํ„ฐ ์•ˆ์˜ ํ†ต๊ณ„์  ๊ด€๊ณ„๋ฅผ ์ฐพ์•„๋‚ด๋ฉฐ ์˜ˆ์ธก์ด๋‚˜ ๋ถ„๋ฅ˜๋ฅ˜๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋”ฅ๋Ÿฌ๋‹: ๋จธ์‹ ๋Ÿฌ๋‹์˜ ํ•œ ๋ถ„์•ผ๋กœ ์‹ ๊ฒฝ์„ธํฌ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ•œ ์ธ๊ณต ์‹ ๊ฒฝ๋ง*์„ ์‚ฌ์šฉํ•จ.
    * ์ธ๊ณต์‹ ๊ฒฝ๋ง : ์ธ๊ฐ„์˜ ์‹ ๊ฒฝ์„ธํฌ๋ฅผ ๋ชจ๋ฐฉํ•˜์—ฌ ๋งŒ๋“  ๋ง(Networks). ์ธ๊ณต์‹ ๊ฒฝ๋ง์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋ฅผ ํผ์…‰ํŠธ๋ก ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Gradient Descent

๐Ÿ’ก ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•(Gradient Descent)
์ธ๊ณต์‹ ๊ฒฝ๋ง ์˜ค์ฐจํ•จ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’*์„ ์ฐพ์•„๊ฐ€๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•
ํšŒ๊ท€ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๊ฐ€์ค‘์น˜(weight)๋ฅผ ์ด๋ฆฌ ์ €๋ฆฌ ์›€์ง์ด๋ฉด์„œ ์ตœ์†Œ์˜ MSE๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ.
  • ํ•จ์ˆ˜์˜ ๊ฐ ์ง€์ ์—์„œ ํ•จ์ˆ˜์˜ ๊ฐ’์„ ๋‚ฎ์ถ”๋Š” ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜๋Š” ์ง€ํ‘œ → ๊ธฐ์šธ๊ธฐ
  • ํ˜„ ์œ„์น˜์—์„œ ๊ธฐ์šธ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์ผ์ • ๊ฑฐ๋ฆฌ๋งŒํผ ์ด๋™, ์ด๋™ํ•œ ์œ„์น˜์—์„œ๋„ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด ๊ธฐ์šธ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ํ•จ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๊ฐ.

ํ™œ์„ฑํ™” ํ•จ์ˆ˜

๐Ÿ’ก ํ™œ์„ฑํ™” ํ•จ์ˆ˜
์ธ๊ณต ์‹ ๊ฒฝ๋ง์—์„œ ์ž…๋ ฅ์„ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜. ์ž…๋ ฅ์‹ ํ˜ธ์˜ ์„ ํ˜•ํ•ฉ์„ ์ž…๋ ฅ๋ฐ›์•„ ์ตœ์ข…์ ์œผ๋กœ ์‹ ํ˜ธ์˜ ๊ฐ•๋„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
ํ•„ํ„ฐ ์ปค๋„์„ ์ด์šฉํ•ด ์ปจ๋ณผ๋ฃจ์…˜ ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฐ ํ”ฝ์…€์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์— ์ ์šฉํ•ด ํŒ๋ณ„๋ ฅ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

Hidden Layer

๐Ÿ’ก ํžˆ๋“  ๋ ˆ์ด์–ด
๋ฐ์ดํ„ฐ๋ฅผ ๋น„์„ ํ˜•์ ์œผ๋กœ ๋ณ€ํ™˜ํ•จ๊ณผ ๋™์‹œ์— ๋ฐ์ดํ„ฐ์˜ ๊ณ ์ฐจ์›์  ํŠน์„ฑ(ex ์ด๋ฏธ์ง€, ์ž์—ฐ์–ด)์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์— ์ž…๋ ฅ๊ณผ ๊ฒฐ๊ณผ ์™ธ์˜ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ์ˆจ์€ ์ธต

  • ํžˆ๋“  ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋ก ๋” ์ข‹์€ ๋ชจ๋ธ์ด ๋‚˜์˜ฌ ์ค„ ์•Œ์•˜์œผ๋‚˜, ์ธ๊ณต์‹ ๊ฒฝ๋ง์˜ ํ•™์Šต ๊ณผ์ • ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฌธ์ œ*๊ฐ€ ๋ฐœ์ƒ
โ“ ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค ๋ฌธ์ œ
๊ฒฝ์‚ฌ ๊ฐ์†Œ๋ฒ•์„ ์ด์šฉํ•ด ์—๋Ÿฌ๋ฅผ ์—ญ์ „ํŒŒ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฒฝ์‚ฌ๋„๊ฐ€ ๊ธ‰๊ฐํ•˜๋Š” ๋ฌธ์ œ. ์ถœ๋ ฅ์ธต์œผ๋กœ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์•ž์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋ฉฐ ๊ฐ ์ธต์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ˆ˜์ •(์˜ค์ฐจ ์—ญ์ „ํŒŒ)ํ•  ๋•Œ ๋ฏธ๋ถ„๊ฐ’(์ฆ‰, ๊ธฐ์šธ๊ธฐ)์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ธต์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ ๊ธฐ์šธ๊ธฐ๊ฐ€ ์ค‘๊ฐ„์— 0์ด ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๋œ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ธ๋ฐ, 1๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ๊ณ„์† ๊ณฑํ•˜๋ฉด 0์— ๊ฐ€๊นŒ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ธต์„ ๊ฑฐ์ณ ๊ฐˆ์ˆ˜๋ก ๊ธฐ์šธ๊ธฐ๊ฐ€ ์‚ฌ๋ผ์ ธ ๊ฐ€์ค‘์น˜๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ค์›Œ ์ง„๋‹ค.
ํŠน์ • ํ™œ์„ฑํ™” ํ•จ์ˆ˜(ex Relu)๋ฅผ ํ†ตํ•ด ์™„ํ™” ํ•˜๊ฒŒ ๋œ๋‹ค.
๐Ÿ’ก Epoch
์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ ๊ฒฝ๋ง์„ ํ†ต๊ณผํ•˜๋Š” ํ•œ ๋ฒˆ์˜ ์‚ฌ์ดํด
Epoch = batch size * iteration

  • batch: ์ „์ฒด ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์…‹์„ ์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ์†Œ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ
  • iteration: ์ „์ฒด ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์…‹์„ ์—ฌ๋Ÿฌ ๊ฐœ(=batch)๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋ฐฐ์น˜๊ฐ€ ํ•™์Šต๋˜๋Š” ํšŸ์ˆ˜

๋”ฅ๋Ÿฌ๋‹ ์‹ค์Šต - Tensorflow

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
from sklearn.preprocessing import StandardScaler


weights = np.array([87,81,82,92,90,61,86,66,69,69])
heights = np.array([187,174,179,192,188,160,179,168,168,174])

๋‹จ์ผ ๋ ˆ์ด์–ด ํšŒ๊ท€ ๋”ฅ๋Ÿฌ๋‹

# Sequential ๋ชจ๋ธ ์ดˆ๊ธฐํ™”
model = Sequential()

#๋‹จ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ

dense_layer = Dense(units= 1, input_shape=[1])
model.add(dense_layer)
model.compile(optimizer='adam', loss = 'mean_squared_error')

model.summary()
model.fit(weights, heights, epochs = 100)
๐Ÿ’ก input_shape ์„ค์ • ํŒ
input shape์€ ๊ฒฐ๊ตญ ๋ชจ๋ธ์— ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ feature์˜ ๊ฐœ์ˆ˜๋ฅผ ์ผ์ปซ๋Š”๋‹ค. ๋•Œ๋ฌธ์— input_shape = data.shape[-1]๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฐ์ดํ„ฐ์˜ feature์ˆ˜์— ๋งž๊ฒŒ ์ง€์ •์ด ๋œ๋‹ค.

ํžˆ๋“  ๋ ˆ์ด์–ด ์ถ”๊ฐ€ ํšŒ๊ท€ ๋”ฅ๋Ÿฌ๋‹

  • ์ด 3๊ฐœ์˜ dense ๋ ˆ์ด์–ด ์‚ฌ์šฉ → feature์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ด 3๊ฐœ 
  • output ๋ ˆ์ด์–ด๊ฐ€ 1๋กœ ํšŒ๊ท€ํ•˜๊ณ , loss ๊ฐ€ mean_squared_erro์ด๋ฏ€๋กœ ํšŒ๊ท€ ๋”ฅ๋Ÿฌ๋‹์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
## Hidden Layer๋ฅผ ํฌํ•จํ•œ ์•„ํ‚คํ…์ฒ˜

model2 = Sequential()

model2.add(Dense(units=64, activation = 'relu', input_shape = [1]))
model2.add(Dense(units=64, activation = 'relu'))
model2.add(Dense(units= 1))

model2.compile(optimizer='adam', loss = 'mean_squared_error')

model2.summary()
model2.fit(weights, heights, epochs = 100, batch_size= 10 )

๋”ฅ๋Ÿฌ๋‹ ํ™œ์šฉ ์‚ฌ๋ก€

์ž์—ฐ์–ด์ฒ˜๋ฆฌ

๐Ÿ’ก ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ
์ธ๊ฐ„์˜ ์–ธ์–ด๋ฅผ ๋ฐ์ดํ„ฐํ™” ํ•˜๋Š” ๊ฒƒ

๋‹จ์–ด์˜ ๋นˆ๋„ ์ˆ˜ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํ™”(Bag of Words)

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€๋Š” RGB 256๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค. 

์ˆซ์ž 2๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋”ฅ๋Ÿฌ๋‹์˜ ๊ตฌ์กฐ

 

ํ•ฉ์„ฑ๊ณฑ ์—ฐ์‚ฐ(CNN)์˜ˆ์‹œ

๐Ÿ’ก Stable Diffusion(2022)
2022๋…„์— ๋ฐœํ‘œ๋œ text-to-image Mutimodal ์ด๋ฏธ์ง€๋ชจ๋ธ