Posts

Showing posts with the label DeepLearning

신경망 학습(Neural network learning)

1. 신경망 학습 학습이란 데이터로보터 가중치의 최적값을 자동으로 획득하는 것을 뜻한다. 이 학습의 지표로 손실함수를 이용한다. 이 손실함수를 최대한 작게 만드는 가중치를 찾아야 한다. 2. 학습에 필요한 데이터 학습에 필요한 데이터로는 훈련용 데이터(traning data)와 시험 데이터(test data)로 나눠서 학습과 시험을 수행한다. 처음 보는 데이터로 문제를 풀어내는 것을 범용 능력이라 하는데 이를 위해 다양한 데이터로 학습이 진행되어야 한다. 한 데이터셋에 지나치게 최적화된 상태를 오버피팅(Overfitting)이라 한다. 3. 손실함수(Loss function) 3.1 오차제곱합(sum of squares for error) 오차제곱합은 다음과 같이 정의된다. $$E = \frac{1} {2} \sum_{k}{(y_k - t_k)}^2$$ 위에서 $y_k$는 신경망의 출력, $t_k$는 정답 레이블, $k$는 데이터의 차원 수를 나타낸다. 이를 python으로 구현해보았다. import  numpy  as  np def   SSE ( y ,  t ):      return   0.5  * np.sum((y - t)** 2 ) t = np.array([ 0 ,  0 ,  1 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ]) y = np.array([ 0.1 ,  0.05 ,  0.6 ,  0.0 ,  0.05 ,  0.1 ,  0.0 ,  0.1 ,  0.0 ,  0.0 ]) print (SSE(y, t)) t = np.array([ 0 ,  0 ,  1 ,  0...

신경망(neural network)

Image
1. 신경망이란? 이전까지 퍼셉트론을 이용하여 여러가지 함수를 표현할 수 있었지만 가중치를 수동으로 구해서 설정해야한다는 단점이 있었고, 이를 해결하기 위해 신경망이라는 개념이 도입되었다. 신경망의 구조를 나타내면 위와 같다. 왼쪽부터 차례로 입력층(input layer), 은닉층(hidden layer), 출력층(output layer) 이라 한다. 2. 활성화 함수(activation function) 활성화 함수에 대해 설명하기 위해 퍼셉트론 구현에 사용했던 식을 변형하였다. $$y = h\left(b + w_1x_1 + w_2x_2\right) \\ h\left(x\right) = \begin{cases} 0\ \left(x \le 0 \right) \\ 1\ \left(x > 0\right) \end{cases}$$ 이때 $h(x)$를 활성화 함수라고 한다. 위의 $h(x)$는 계단 함수(step function)라고 한다.  신경망에서는 퍼셉트론에서와 달리 시그모이드 함수(sigmoid function), ReLU 함수(rectified linear unit function)를 주로 이용한다. 3. 시그모이드 함수(sigmoid function) 시그모이드 함수의 식은 다음과 같다. $$h(x) = \frac{1}{1 + e^{-x}}$$ 이 함수의 개형은 다음과 같다. sigmoid 함수는 step 함수와 다르게 매끄러운 형상이다. 입력이 커짐에 따라 1에 수렴하므로 입력의 중요도에 따라 값이 1에 수렴하게 된다. 3. ReLU 함수(Rectified Linear Unit function) ReLU 함수는 입력이 0보다 작으면 0을 출력하고 0보다 크면 입력 그대로 출력하는 함수이다. $$h(x) = \begin{cases} x\ (x > 0) \\ 0\ (x \le 0) \end{cases}$$ 4. 소프트맥스 함수(Softmax function) 출력층에서 사용하는 함수는 항등함수와 소프트맥스 함수가 있다. 항등함수는 입력을 ...

다층 퍼셉트론(multi-layer perceptron)

Image
  1. 다층 퍼셉트론이란? 선형으로 출력 범위를 구분하지 못할 경우 다층 퍼셉트론을 이용하여 비선형 영역을 정의할 수 있다. 위 그림과 같이 퍼셉트론을 이중 이상으로 중첩하게 되면 단일 퍼셉트론으로 구현하지 못하는 비선형 영역도 정의할 수 있게 된다. 2. XOR 게이트 구현 우선 대표적인 예시인 XOR게이트를 카르노 맵을 이용하여 게이트를 단순화하자. $$\begin{matrix} Y &=& A \cdot \bar{B} + \bar{A} \cdot B \\ &=& \left(\bar{A} + \bar{B}\right) \cdot \left(A + B \right) \\ &=& \overline{A \cdot B} \cdot \left(A + B \right) \end{matrix}$$ 따라서 NAND 게이트, AND 게이트, OR 게이트 각각 하나씩 총 3개의 게이트로 구현할 수 있다. 이를 python으로 구현하면 다음과 같다. import  numpy  as  np def   AND ( x1 ,  x2 ):             #ANDgate     x = np.array([x1, x2])     w = np.array([ 0.5 ,  0.5 ])     bi = - 0.7     tmp = np.sum(w*x) + bi      if  tmp <=  0 :       ...

퍼셉트론(perceptron)의 개념과 논리게이트 구현

Image
1. 퍼셉트론이란? 퍼셉트론(Perceptron) : 다수의 신호를 받아 하나의 신호(0 또는 1)로 출력하는것을 말한다. 위의 원은 뉴런(neuron) 혹은 노드(node)라 하고 $w_1, w_2$를 가중치라 한다. 입력 신호가 뉴런에 보내지면 가중치를 곱하여 이 총합이 특정한 임계값(threshold value)보다 클때만 1을 출력하게 된다. 이를 수식으로 나타내면 다음과 같다. $$y = \begin{cases} 0 & \left(x_1w_1 + x_2w_2 \le \theta\right) \\ 1 & \left(x_1w_1 + x_2w_2 > \theta\right) \end{cases}$$ 위 식을 보면 가중치가 클수록 그 임력 신호의 영향력이 커지므로 결과값에 중요한 영향일수록 가중치가 커짐을 알 수 있다. 2. 퍼셉트론 구현(AND 게이트) 위는 AND 게이트의 진리표이다. 이를 퍼셉트론으로 표현하기 위해 $w_1, w_2, \theta$ 의 값을 정해보자. 임의로 (0.5, 0.5, 0.8)일때 만족함을 알 수 있다. 이를 python을 통해 구현하면 다음과 같다. def   AND ( x1 ,  x2 ):     w1, w2, theta =  0.5 ,  0.5 ,  0.7     tmp = x1*w1 + x2*w2      if  tmp <= theta:          return   0      elif  tmp > theta:          ret...

카르노맵(Karnaugh map)

Image
  1. 카르노맵이란? 복잡한 형태의 복합 논리 게이트를 단순화 하기 위하여 카르노맵을 이용한다. 2. 2변수 카르노 맵 $$\bar{A} \cdot \bar{B} + \bar{A} \cdot B$$ 위 식이 주어졌을 때 진리표를 카르노 맵의 형태로 바꾸어보면 다음과 같다. 위의 경우는 B에 관계없이 A가 0이면 출력이 1이므로 위 게이트는 A'으로 단순화 될 수 있다. 아래와 같이 불 대수 법칙으로 정리해도 성립한다. $$\bar{A} * \bar{B} + \bar{A} \cdot B = \bar{A} \cdot (\bar{B} + B) = \bar{A}$$ 2. 3변수 카르노 맵 2변수를 묶은 부분의 순서는 00, 01, 11, 10 순으로 진행되어야 한다. (앞뒤가 서로 중첩되는 부분이 존재해야 하기 때문이다.) 위의 예시와 같이 출력이 1인 부분을 직사각형의 형태로 2^n 개씩 묶는다. (n >= 0, 자연수) 위아래, 양옆으로 잘린 부분은 서로 묶을 수 있다. 노란색 부분은 A가 1이고 C가 0일때 B와 관계없이 1이 출력된다. $$A \cdot \bar{C}$$ 초록색 부분은 A가 0이고 B가 1일때 C와 관계없이 1이 출력된다. $$\bar{A} \cdot B$$ 따라서 전체 식은 이 둘을 모두 만족해야 하므로 다음과 같다. $$Y = A \cdot \bar{C} + \bar{A} \cdot B$$ 3. 4변수 카르노 맵 바로 예시를 들어보자 위와 같이 구간을 나누면 아래의 식을 세울 수 있다. $$Y = B \cdot \bar{C} + \bar{A} \cdot \bar{B} \cdot D + A \cdot \bar{B} \cdot C \cdot \bar{D}$$

불 대수 정리(Boolean algebra)

Image
1. 불 대수란?  불 대수는 전자회로 논리게이트 구성뿐 아니라 딥러닝에서 다층 퍼셉트론을 구현하는데에도 사용된다. 각 게이트에대한 불 대수 표기이다. 2. 불 대수의 성질 불 대수는 기본적으로 교환법칙, 결합법칙, 분배법칙, 드모르간 법칙 등이 성립한다. (1) $$A \cdot 0 = 0 \\ A \cdot 1 = A \\ B + 0 = B \\ B + 1 = 1$$ $\cdot$ 와 $+$ 는 각각 AND 게이트와 OR 게이트를 말하는데 각 게이트에 대입해보면 알 수 있다. (2) 교환법칙 $$A \cdot B = B \cdot A \\ A + B = B + A$$ 각 게이트의 입력 순서에 상관없이 결과값은 일정하다. (3) $$A \cdot A = A \\ A + A = A$$ A에 0을 대입하면 AND 게이트, OR 게이트 모두 0이 출력되고 1을 대입하면 모두 1이 출력된다. 따라서 두 식 모두 (좌변) = A 이다. (4) (분배법칙, Distributive law) $$A \cdot (B + C) = (A \cdot B) + (A \cdot C) \cdots (a) \\ A + (B \cdot C) = (A + B) \cdot (A + C) \cdots (b)$$ (a)  진리표를 만들어 좌변과 우변이 같다는것을 증명하였다. (b) 마찬가지로 진리표를 만들어보았다. (5) $$A \cdot \bar{A} = 0 \\ A + \bar{A} = 1$$ A에 0 또는 1을 대입해보면 알 수 있다. (6) 드모르간의 법칙( De Morgan's law) $$\overline{(A \cdot B)} = \bar{A} + \bar{B} \\ \overline{(A + B)} = \bar{A} \cdot \bar{B}$$ 이도 위와 마찬가지로 진리표를 만들어 확인해 보면 된다. (7) $$A + A \cdot B = A$$ 분배법칙을 역으로 이용하여 식을 정리하면 다음과 같다. $$A \cdot (1 + B) = A$$