[데이터마이닝] 딥러닝 기초 - Neural Network

이혜윤·2023년 4월 14일

데이터마이닝

목록 보기
3/3

1. 개념

1.1 배경

(사진)

  • y는 종속 변수, x1/x2/x3 는 독립 변수
  • 신경망에서는 x1/x2/x3 를 Feature, y를 hypothesis, t는 target

1.2 초기 신경망 모형

1) 초기 특징

  • Linear한 형태
  • or, and는 풀 수 있으나, xor는 풀 수 없다.
    (강노76p)

2) Hidden Layer 사용의 등장

Wi = Wi + η*Xi(t-f(net))

t = true 값
f(net) = 네트워크를 통해 계산된 y값
t-f(net) = 오차
η = 학습율(Learning Rate)

학습률은 w값이 목적값으로 가는 속도를 조절하는 상수역할
- 에타가 크면 빨리 해로 갈 수 O, 정확한 해 구하기는 어렵
- 에타가 작으면 해로 느리게 가지만 정교한 해 구할 수 O
  • Multi layer perceptron을 사용해 xor 문제를 풀 수 있음
  • MLP의 가중치를 구할 수 없음
    (강노77,79p)
def f(x):
    if x > 0:
        return 1
    else:
        return 0

import numpy as np
x = np.array([[1,0,0], [1,0,1], [1,1,0], [1,1,1]])
t = np.array([0,0,0,1]) # AND
#t = np.array([0,1,1,1]) # OR
eta = 0.1
w = np.array([0.5,0.5,0.5])
for iter in range(10):
    for i in range(len(x)): # 4가지 경우에 대해 루프
        fnet = f(np.dot(x[i], w))
        e = t[i] - fnet
        w[0] = w[0] + eta * e * x[i][0]
        w[1] = w[1] + eta * e * x[i][1]
        w[2] = w[2] + eta * e * x[i][2]
    print(w)
    
>> [0.2 0.4 0.4]
[-0.1  0.3  0.3]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]
[-0.3  0.2  0.2]

for i in range(4):
    print(w[0]+ w[1]*x[i,1] + w[2]*x[i,2])

>> 
-0.3
-0.09999999999999995
-0.09999999999999995
0.10000000000000009

3) Backpropagation 알고리즘의 등장

  • MLP 가중치를 구 할 수 있다.

4) Neural Network의 단점

  • overfitting
  • layer 수가 커질수록 학습 X

2. XOR

2.1 신경망 모형 설계

  • xor 문제는 입력이 2개, 출력이 1개
  • w1 = 2 X 3, w2 = 3 X 1, b1 = 1 X 3, b2 = 1 X 1
  • H = x*w1 + b1
  • output = H*w2 + b2

(그림)

2.2 적용

# xor.ipynb
import numpy as np

def Sigmoid(x):
    return 1/(1+np.exp(-x))

x=np.array([[0,0],
            [0,1],
            [1,0],
            [1,1]])

w1=np.array([[-2,  5,  4],
            [ 3,  6,  3]])
b1=np.array([ 2, -2, -5])

w2=np.array([[-4],
            [ 8],
            [-8]])

h=Sigmoid(np.dot(x,w1)+b1) # 4*3 matrix
y=Sigmoid(np.dot(h,w2))    # 4*1 matrix
# np.dot() : 행렬 곱셈 수행 함수

print ("h=",h)
print ("y=",y)

>> h= [[0.88079708 0.11920292 0.00669285]
 [0.99330715 0.98201379 0.11920292]
 [0.5        0.95257413 0.26894142]
 [0.95257413 0.99987661 0.88079708]]
>> y= [[0.06766597]
 [0.94927397]
 [0.96979454]
 [0.0542867 ]]
  • hidden layer 가 추가됨으로써 xor 문제 풀 수 있음
  • 주어진 가중치 W,b를 어떻게 정하냐가 다음 문제

3. Backpropagation

3.1 미분

1) Sigmoid 함수의 미분 (수학적)

2) computational graph 를 이용한 미분 (실제 딥러닝 계산 시)


4. Tensorflow - XOR





profile
구르미 누나

0개의 댓글