neuralNetwork
Neural Network
: μ κ²½λ§μ κ° μΈ΅μ λ΄λ°λ€μ΄ λ€μ μΈ΅μ λ΄λ°μΌλ‘ μ νΈλ₯Ό μ λ¬νλ€λ μ μμ νΌμ νΈλ‘ μ΄λ κ°λ€ νμ§λ§ λ΄λ°μΌλ‘ κ° λ μ νΈλ₯Ό λ³νμν€λ νμ±ν ν¨μμ ν° μ°¨μ΄μ μ΄ μλ€. μ 견λ§μμλ λ§€λλ½κ² λ³ννλ μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό, νΌμ νΈλ‘ μμλ κ°μκΈ° λ³ννλ κ³λ¨ ν¨μλ₯Ό νμ±ν ν¨μλ‘ μ¬μ©νλ€.
μ κ²½λ§κ³Ό νΌμ νΈλ‘ μ λ€λ₯Έμ μ νΌμ νΈλ‘ μ μ¬λμ΄ μλμΌλ‘ κ°μ€μΉλ₯Ό μ€μ νλ μμ (μνλ κ²°κ³Όλ₯Ό μΆλ ₯νλλ‘ κ°μ€μΉ κ°μ μ μ ν μ νλ μμ )μ νλ€. νμ§λ§ μ κ²½λ§μ κ°μ€μΉ λ§€κ° λ³μμ μ μ ν κ°μ λ°μ΄ν°λ‘λΆν° μλμΌλ‘ νμ΅νλ λ₯λ ₯μ΄ μλ€

μ κ²½λ§μ κ·Έλ¦Όμ κ°λ¨ν λνλ΄λ©΄ λ€μκ³Ό κ°μ΄ λλ€.
μλμΈ΅μ λ΄λ°μ (μ λ ₯μΈ΅μ΄λ μΆλ ₯μΈ΅κ³Ό λ¬λ¦¬) μ¬λ λμλ 보μ΄μ§ μλλ€.
νμ±ν ν¨μμ λ±μ₯
: μ λ ₯ μ νΈμ μ΄ν©μ μΆλ ₯ μ νΈλ‘ λ³ννλ ν¨μλ₯Ό μΌλ°μ μΌλ‘ νμ±ν ν¨μ(activation function)μ΄λΌ νλ€
νμ±νλΌλ μ΄λ¦μ΄ λ§ν΄μ£Όλ― νμ±ν ν¨μλ μ λ ₯ μ νΈμ μ’ ν©μ΄ νμ±νΈλ₯Ό μΌμΌν€λμ§λ₯Ό μ νλ μν μ μν μ νλ€
κ°μ€μΉκ° κ³±ν΄μ§ μ λ ₯ μ νΈμ μ΄ν©μ κ³μ°νκ³ , κ·Έ ν©μ νμ±ν ν¨μμ μ λ ₯ν΄ κ²°κ³Όλ₯Ό λ΄λ λ¨κ³λ‘ μ²λ¦¬
κ·Έλμ a = b + w1x1 + w2x2, y = h(a)λΌλ κ°μ€μΉκ° λ¬λ¦° μ λ ₯ μ νΈμ νΈν₯μ μ΄ν©μ κ³μ°νκ³ μ΄λ₯Ό aλΌ νλ€
κ·Έλ¦¬κ³ aλ₯Ό ν¨μ h()μ λ£μ΄ yλ₯Ό μΆλ ₯νλ νλ¦μ΄λ€
νμ±ν ν¨μμ μ²λ¦¬λ₯Ό 보면, κ°μ€μΉ μ νΈλ₯Ό μ‘°ν©ν κ²°κ³Όκ° aλΌλ λ Έλκ° λκ³ , νμ±ν ν¨μ h()λ₯Ό ν΅ννμ¬ yλΌλ λ Έλλ‘ λ³νλλ€
tip) μΌλ°μ μΌλ‘ λ¨μ νΌμ νΈλ‘ μ λ¨μΈ΅ λ€νΈμν¬μμ κ³λ¨ ν¨μ(μ κ³κ°μ κ²½κ³λ‘ μΆλ ₯μ΄ λ°λλ ν¨μ)λ₯Ό νμ±ν ν¨μλ‘ μ¬μ©ν λͺ¨λΈμ κ°λ¦¬ν€κ³ , λ€μΈ΅ νΌμ νΈλ‘ μ μ κ²½λ§(μ¬λ¬ μΈ΅μΌλ‘ ꡬμ±λκ³ μκ·Έλͺ¨μ΄λ ν¨μ λ±μ λ§€λν νμ±ν ν¨μλ₯Ό μ¬μ©νλ λ€νΈμν¬)μ κ°λ¦¬ν¨λ€
νμ±ν ν¨μ
νΌμ νΈλ‘ μμλ νμ±ν ν¨μλ‘ κ³λ¨ ν¨μλ₯Ό μ΄μ©νλ©°, μ κ²½λ§μμλ νμ±ν ν¨μλ₯Ό κ³λ¨ν¨μμμ λ€λ₯Έ ν¨μλ‘ λ³κ²½νλ κ²μ΄λ€
κ³λ¨ ν¨μ
μ λ ₯μ΄ 0μ λμΌλ©΄ 1μ μΆλ ₯νκ³ , κ·ΈμΈμ 0μ μΆλ ₯νλ ν¨μ
import numpy as np
def step_function(x):
y = x > 0
return y.astype(np.int)
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype = np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

step_function()μ μΈμλ‘ λ°μ λνμ΄ λ°°μ΄μ μμ κ°κ°μ μΈμλ‘ κ³λ¨ ν¨μ μ€νν΄, κ·Έ κ²°κ³Όλ₯Ό λ€μ λ°°μ΄λ‘ λ§λ€μ΄ μ€λ€
κ³λ¨ ν¨μλ 0μ κ²½κ³λ‘ μΆλ ₯μ΄ 0μμ 1(λλ 1μμ 0)λ‘ λ°λλ€.
μκ·Έλͺ¨μ΄λ ν¨μ

μ κ²½λ§μμλ νμ±ν ν¨μλ‘ μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό μ΄μ©νμ¬ μ νΈλ₯Ό λ³ννκ³ , κ·Έ λ³νλ μ νΈλ₯Ό λ€μ λ΄λ°μ μ λ¬νλ€
μκ·Έλͺ¨μ΄λ(sigmoid) = sμ λͺ¨μ
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

μκ·Έλͺ¨μ΄λ ν¨μμ κ³λ¨ ν¨μ λΉκ΅
λ§€λλ¬μμ μ°¨μ΄, μκ·Έλͺ¨μ΄λ ν¨μλ λΆλλ¬μ΄ 곑μμ΄λ©°,μ λ ₯μ λ°λΌ μΆλ ₯μ΄ μ°μμ μΌλ‘ λ³ννλ€. ννΈ κ³λ¨ ν¨μλ 0μ κ²½κ³λ‘ μΆλ ₯μ΄ κ°μκΈ° λ°λλ€.
μκ·Έλͺ¨μ΄λ ν¨μμ μ΄ λ§€λν¨μ΄ μ κ²¬λ§ νμ΅μμ μμ£Ό μ€μν μν μ νλ€
λλ€ μ λ ₯μ΄ μμ λμ μΆλ ₯μ 0μ κ°κΉκ³ , μ λ ₯μ΄ μ»€μ§λ©΄ μΆλ ₯μ΄ 1μ κ°κΉμμ§λ ꡬ쑰μΈκ²μ΄ 곡ν΅μ μ΄λ€.
λν μ€μν 곡ν΅μ μ λλ€ λΉμ ν ν¨μμ΄λ€. μκ·Έλͺ¨μ΄λ ν¨μλ 곑μ , κ³λ¨ ν¨μλ κ³λ¨μ²λΌ ꡬλΆλ¬μ§ μ§μ μΌλ‘ λνλλ€
λΉμ ν ν¨μ : λ¬Έμ κ·Έλλ‘ μ νμ΄ μλ ν¨μλ‘, μ§μ 1κ°λ‘λ 그릴 μ μλ ν¨μ
μ 견λ§μμ λΉμ ν ν¨μλ‘ μ¬μ©ν΄μΌ νλ μ΄μ ?
μ ν ν¨μμ λ¬Έμ λ μΈ΅μ μ무리 κΉκ² ν΄λ μλμΈ΅μ΄ μλ λ€νΈμν¬λ‘λ λκ°μ κΈ°λ₯μ ν μ μλ€λλ° μλ€. μ¦, μ ν ν¨μλ μ΄μ©ν΄μλ μ¬λ¬ μΈ΅μΌλ‘ ꡬμ±νλ μ΄μ μ μ΄λ¦΄ μ μλ€.
ReLU ν¨μ
: μ λ ₯μ΄ 0μ λμΌλ©΄ κ·Έ μ λ ₯μ κ·Έλλ μΆλ ₯νκ³ , 0μ΄νλ©΄ 0μ μΆλ ₯νλ ν¨μ
μ΅κ·Όμλ μκ·Έλͺ¨μ΄λ ν¨μμμ ReLU(REctified Linear Unit, λ 루)λ₯Ό μ£Όλ‘ μ΄μ©νλ€
import numpy as np
import matplotlib.pylab as plt
def relu(x):
return np.maximum(0, x)
x = np.arange(-6.0, 6.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1, 6)
plt.show()

μ¬κΈ°μμλ λνμ΄μ maximum ν¨μλ₯Ό μ¬μ©, maximumμ λ μ λ ₯ μ€ ν° κ°μ μ νν΄ λ°ννλ ν¨μ
μ κ²½λ§μμμ νλ ¬ κ³±
: λ€μΉμ λ°°μ΄μ μ€μΉΌλΌκ³±μ ꡬν΄μ£Όλ np.dot ν¨μλ₯Ό μ¬μ©νλ©΄ κ²°κ³Όλ₯Ό ꡬν μ μλ€.
import numpy as np
x = np.array([1, 2])
w = np.array([[1, 3, 5], [2, 4, 6]])
y = np.dot(x, w)
print(y) # [ 5 11 17]
μΆλ ₯μΈ΅ μ€κ³
: μ κ²½λ§μμλ λΆλ₯μ νκ· λͺ¨λμ μ΄μ©μ ν μ μλ€. λ€λ§ λ μ€ μ΄λ€ λ¬Έμ λμ λ°λΌ μΆλ ₯μΈ΅μμ μ¬μ©νλ νμ±ν ν¨μκ° λ¬λ€μ§λ€. μΌλ°μ μΌλ‘ νκ·μλ νλ± ν¨μλ₯Ό, λΆλ₯μλ μννΈλ§₯μ€ ν¨μλ₯Ό μ¬μ©νλ€.
tip) κΈ°κ³νμ΅ λ¬Έμ λ λΆλ₯(classification)μ νκ·(regression)λ‘ λλ©λλ€. λΆλ₯λ λ°μ΄ν°κ° μ΄λ ν΄λμ€μ μνλλλ λ¬Έμ μ λλ€. μ¬μ§ μ μΈλ¬Όμ μ±λ³μ λΆλ₯νλ λ¬Έμ κ° μ¬κΈ°μ μνλ€. ννΈ νκ·λ μ λ ₯ λ°μ΄ν°μμ (μ°μμ μΈ) μμΉλ₯Ό μμΈ‘νλ λ¬Έμ μ΄λ€. μ¬μ§ μ μΈλ¬Όμ λͺΈλ¬΄κ²λ₯Ό μμΈ κ°λ λ¬Έμ κ° νκ·μ΄λ€.
νλ± ν¨μ(identity function)
: μ
λ ₯κ³Ό μΆλ ₯μ΄ νμ κ°λ€λ λ»μ΄λ©° μ
λ ₯μ κ·Έλλ‘ μΆλ ₯νλ€. κ·Έλμ μΆλ ₯μΈ΅μμ νλ± ν¨μλ₯Ό μ¬μ©νλ©΄ μ
λ ₯ μ νΈκ° λλκ³ μΆλ ₯ μ νΈκ° λλ€
μννΈλ§₯μ€ ν¨μ (softmax function)
:
expλ μ§μ ν¨μμ΄λ©°, nμ μΆλ ₯μΈ΅μ λ΄λ°μ ykλ κ·Έμ€ kλ²μ§Έ μΆλ ₯μμ λ»
def softmax(a):
exp_a = np.exp(a) # μ§μ ν¨μ
sum_exp_a = np.sum(exp_a) # μ§μ ν¨μμ ν©
y = exp_a / sum_exp_a
return y
μννΈλ§₯μ€ ν¨μ ꡬνμ μ£Όμμ
: μννΈλ§₯μ€λ₯Ό μ»΄ν¨ν°λ‘ κ³μ°ν λμ κ²°ν¨μ μ€λ²νλ‘ λ¬Έμ μ΄λ€
μννΈλ§₯μ€ ν¨μλ μ§μ ν¨μλ₯Ό μ¬μ©νμλ°, μ§μν¨μλ κ²μ΄ μ½κ² μμ£Ό ν°κ°μ λ΄λ±λλ€.
μ΄λ° ν° κ°λΌλ¦¬ λλμ μ νλ©΄ κ²°κ³Ό μμΉκ° λΆμμ ν΄μ§λ€
μ€λ²νλ‘(overflow) : μ»΄ν¨ν°λ μλ₯Ό 4λ°μ΄νΈλ 8λ°μ΄νΈμ κ°μ΄ ν¬κΈ°κ° μ νν λ°μ΄ν°λ‘ λ€λ£¬λ€, λ€μ λ§ν΄ ννν μ μλ μμ λ²μκ° νμ λμ΄ λ무 ν° κ°μ ννν μ μλ€λ λ¬Έμ κ° λ°μνλ€
μννΈλ§₯μ€μ μ§μ ν¨μλ₯Ό κ³μ°ν λ μ΄λ€ μ μλ₯Ό λν΄λ (νΉμ λΉΌλ) κ²°κ³Όλ λ°λμ§ μλλ€λ κ²μ΄λ€
μ€λ²νλ‘λ₯Ό λ§μ λͺ©μ μΌλ‘λ μ λ ₯ μ νΈ μ€ μ΅λκ°μ μ΄μ©νλ κ²μ΄ μΌλ°μ μ΄λ€
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) # μ€λ²νλ‘ λμ±
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
μννΈ λ§₯μ€μ νΉμ§
μννΈλ§₯μ€ ν¨μμ νλ ₯μ 0μμ 1.0μ¬μ΄μ μ€μμ΄λ€.
μννΈλ§₯μ€ ν¨μ μΆλ ₯μ μ΄ν©μ 1μ΄λ€. μ΄ μ±μ§ λλΆμ μννΈ λ§₯μ€ ν¨μμ νλ₯ λ‘ ν΄μν μ μλ€
μ¦, μννΈλ§₯μ€ ν¨μλ₯Ό μ΄μ©ν¨μΌλ‘μ¨ λ¬Έμ λ₯Ό νλ₯ μ (ν΅κ³μ )μΌλ‘ λμν μ μλλ‘ λ§λ λ€
μ κ²½λ§μ μ΄μ©ν λΆλ₯μμλ μΌλ°μ μΌλ‘ κ°μ₯ ν° μΆλ ₯μ λ΄λ λ΄λ°μ ν΄λΉνλ ν΄λμ€λ‘λ§ μΈμνλ€.
κ·Έλ¦¬κ³ μννΈλ§₯μ€ ν¨μλ₯Ό μ μ©ν΄λ μΆλ ₯μ΄ κ°μ₯ ν° λ΄λ°μ μμΉλ λ¬λΌμ§μ§ μλλ€. κ²°κ³Όμ μΌλ‘ μ κ²½λ§μΌλ‘ λΆλ₯ν λλ μΆλ ₯μΈ΅μ μννΈλ§₯μ€ ν¨μλ₯Ό μλ΅ν΄λ λλ€
Tip) κΈ°κ³νμ΅μ λ¬Έμ νμ΄λ νμ΅κ³Ό μΆλ‘ (inference)μ λ λ¨κ³λ₯Ό κ±°μ³ μ΄λ£¨μ΄μ§λ€. νμ΅ λ¨κ³μμ λͺ¨λΈμ νμ΅νκ³ (μ§μ νλ ¨μ λ°κ³ ), μΆλ‘ λ¨κ³μμ μμ νμ΅ν λͺ¨λΈλ‘ λ―Έμ§μ λ°μ΄ν°μ λν΄μ μΆλ‘ (λΆλ₯)λ₯Ό μννλ€. μΆλ‘ λ¨κ³μμλ μΆλ ₯μΈ΅μ μννΈλ§₯μ€ ν¨μλ₯Ό μλ΅νλ κ²μ΄ μΌλ°μ μ΄λ€. ννΈ μ κ²½λ§μ νμ΅μν¬λλ μΆλ ₯μΈ΅μμ μννΈλ§₯μ€ ν¨μλ₯Ό μ¬μ©νλ€
μΆλ ₯μΈ΅μ λ΄λ° μ μ νκΈ°
μΆλ ₯μΈ΅μ λ΄λ° μλ νλ €λ λ¬Έμ μ λ§κ² μ μ ν μ ν΄μΌ νλ€. λΆλ₯μμλ λΆλ₯νκ³ μΆμ ν΄λμ€ μλ‘ μ€μ νλ κ²μ΄ μΌλ°μ μ΄λ€
Last updated
Was this helpful?