Notice
Recent Posts
Recent Comments
관리 메뉴

πŸŒ²μžλΌλ‚˜λŠ”μ²­λ…„

신경망 λ³Έλ¬Έ

μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

신경망

JihyunLee 2019. 2. 23. 19:00
λ°˜μ‘ν˜•

신경망


κ°€μž₯ μ™Όμͺ½μ„ μž…λ ₯μΈ΅, 였λ₯Έμͺ½μ„ 좜λ ₯μΈ΅ 쀑간을 은닉측이라고 ν•©λ‹ˆλ‹€.


그리고 μ•žμ˜ λ…Έλ“œμ—μ„œ λ‹€μŒ λ…Έλ“œλ‘œ μ „λ‹¬λ˜λŠ” μ •λ³΄λŠ” μ•žμ—μ„œ νΌμ…‰νŠΈλ‘ μ΄ (κ°€μ€‘μΉ˜*λ…Έλ“œ+편ν–₯)을 ν–ˆλ˜κ²ƒκ³Ό 크게 λ‹€λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그런데 μ—¬κΈ°μ„œ ν•˜λ‚˜μ˜ 차이점은 ν™œμ„±ν™” ν•¨μˆ˜μž…λ‹ˆλ‹€.

 

νΌμ…‰νŠΈλ‘ μ€  y = h(κ°€μ€‘μΉ˜*λ…Έλ“œ + 편ν–₯)

이고 μ—¬κΈ°μ„œ hλΌλŠ” ν•¨μˆ˜λŠ” 


x>0 => return 1

x<0 return 0


μ΄λΌλŠ” κ²ƒμœΌλ‘œ μ •ν•΄μ Έ μžˆμ—ˆλ‹€λ©΄ μ‹ κ²½λ§μ—μ„œλŠ” 쒀더 λ‹€μ–‘ν•œ ν™œμ„±ν™” ν•¨μˆ˜(h(x))κ°€ λ“±μž₯ν•˜κ²Œ λ©λ‹ˆλ‹€.


κ·Έλž˜μ„œ 사싀은 그림에 (λ…Έλ“œμ™€ ν™œμ„±ν™” ν•¨μˆ˜μ˜ κ³± + 편ν–₯) => ν™œμ„±ν™” ν•¨μˆ˜ κ²°κ³Ό=> λ‹€μŒλ…Έλ“œ

λΌλŠ” 과정이 μƒλž΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


ν™œμ„±ν™” ν•¨μˆ˜μ˜ μ’…λ₯˜μ—λŠ”

1. κ³„λ‹¨ν•¨μˆ˜    2. μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜    3. reluν•¨μˆ˜ 등등이 μžˆμŠ΅λ‹ˆλ‹€.


1. κ³„λ‹¨ν•¨μˆ˜


κ³„λ‹¨ν•¨μˆ˜λŠ” 0의 κΈ°μ€€μœΌλ‘œ 0보닀 μž‘μœΌλ©΄ 0의 값을, 0보닀 크면 1의 값을 return ν•©λ‹ˆλ‹€.


μ•„λž˜λŠ” κ³„λ‹¨ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” μ½”λ“œμž…λ‹ˆλ‹€.


1
2
3
4
5
6
7
8
9
10
11
#κ³„λ‹¨ν•¨μˆ˜ 
#0보닀 ν¬λ©΄ 1 return, 0보닀 μž‘μœΌλ©΄ 0 return
#μ•„λž˜ ν•¨μˆ˜λŠ” λ„˜νŒŒμ΄ λ°°μ—΄μ„ λ°›μ„ μˆ˜ μžˆλ‹€.
import numpy as np
def step_function(x):
    y = x>0 #yλŠ” bool값이 λ“€μ–΄μžˆλŠ” λ°°μ—΄μ΄ λœλ‹€.
    return y.astype(np.int)#astype을 μ΄μš©ν•˜λ©΄ μžλ£Œν˜•μ„ λ°”κΏ€ μˆ˜μžˆλ‹€(bool->np.int둜)
 
= np.array([1.0,-3.5,2.0,5.0])
print('input : ',a)
print('output: ',step_function(a))
cs

μ•„λž˜λŠ” κ³„λ‹¨ν•¨μˆ˜λ₯Ό κ·Έλž˜ν”„λ‘œ κ·Έλ¦¬λŠ” μ½”λ“œμž…λ‹ˆλ‹€.
1
2
3
4
5
6
7
8
#κ³„λ‹¨ν•¨μˆ˜μ˜ κ·Έλž˜ν”„
import numpy as np
import matplotlib.pylab as plt
= np.arange(-5.0,5.0,0.1)#-5λΆ€ν„° 5κΉŒμ§€ 0.1의 κ°„κ²©μœΌλ‘œ
= step_function(x)
plt.plot(x,y)
plt.show()
 
cs

κ³„λ‹¨μ²˜λŸΌ 생긴 ν•¨μˆ˜κ°€ κ·Έλ €μ§€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜

μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜λŠ” μœ„μ™€ 같은 식을 κ°€μ‘ŒμŠ΅λ‹ˆλ‹€.


μœ„μ˜ ν•¨μˆ˜λ₯Ό μ½”λ“œλ‘œ κ΅¬ν˜„μ— 보면 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.


1
2
3
#μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜
def sigmoid(x):
    return 1/(1+np.exp(-x))
cs


μ•„λž˜λŠ” μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜λ₯Ό κ·Έλ¦¬λŠ” μ½”λ“œ μž…λ‹ˆλ‹€.

#μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜ κ·Έλž˜ν”„

1
2
3
4
5
6
 
#μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜ κ·Έλž˜ν”„
=np.arange(-5.0,5.0,0.1)
=sigmoid(x)
plt.plot(x,y)
plt.show()
cs



μœ„μ˜ κ³„λ‹¨ν•¨μˆ˜μ™€ λ‹€λ₯΄κ²Œ κ³‘μ„ μ˜ ν•¨μˆ˜μΈ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.


3. ReLUν•¨μˆ˜

μž…λ ₯이 0 을 λ„˜μœΌλ©΄ κ·Έ μž…λ ₯을 κ·ΈλŒ€λ‘œ 좜λ ₯ν•˜κ³  0 μ΄ν•˜μ΄λ©΄ 0을 좜λ ₯ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.


μ•„λž˜μ˜ μ½”λ“œλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κ³ 

그렀보면 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.







1
2
3
#relu ν•¨μˆ˜
def relu(x):
    return np.maximum(0,x)
cs





λ°˜μ‘ν˜•