본문 바로가기

머신러닝

[AI] 20190910, XOR GATE와 NORM

 

1. 논리게이트 

 

AND : 둘 다 참

OR : 둘 중 하나 참

NANO : 둘 다 참이 아닌 것 만

XOR : 둘모두 참이거나 거짓이 아니거나.

 

이러한 논리게이트는 둘 이상의 연산이 필요 하다.

 

 

 

1. 논리 진술식을 통해서 XOR 연산을 구할 수 있는데, 좀 연습을 해봐야 겠다.

 

2. 단 하나의 신경망을 가진 페셉트론은 XOR을 연산하지 못했기 때문에,  XOR을 연산하기 위한 두 개 이상의 신경망이 필요하다. 이 시점에서 머신러닝에서 딥러닝으로 나아간다.

 

1. 뇌가 어떻게 인지하지? 컴퓨터가 여러개의 노드의 정보를 축약하여 받아들이고 값을 선택하는 모델이 퍼셉트론. 컴퓨터는 어떻게 선택할 것인가에 대한 모델이 퍼셉트론이다.  여러 노드의 자극을 시그모이드 퐁션을 이용하여 하나의 값을 선택한다. 

 

2. 출력하기 위해서 시그모이드 함수를 쓴다. 시그모이드 함수는 선택이다. 계산 값을 비교할 떄 쓰는 것이 시그모이드 함수다. 시그모이드는 정규 분포 처럼, 일정 규모로 줄여 주는 것. 선택하기 쉽도록. 그렇기 때문에 시그모이드 함수는 분류에 해당된다.

 

3. 이러한 퍼셉트론이 몇 가지가 있는 것이 딥러닝이 되는 것이다.

 

 

 

1. 머신러닝은 데이터와 정답 세트가 있다. 정답을 가지고 찾는 것.

2. 딥러닝은 데이터를 마구 준다음에, 컴퓨터가 무엇인지 패턴을 추측하는 것.

3. 딥러닝은 거의 비지도학습이지만 ???

4. 기계도 폴리시(정책)을 세울 수 있다. 강화학습 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np
 
# 시그모이드는 비용함수를 보기 좋게 만든 것이고
#  그 시그모이드 경사에 관한 그래프의 기울기가 0인 값을 찾아가는 것.
 
# sigmoid 함수
def sigmoid(x):
    return 1 / (1+np.exp(-x))
 
# 수치미분 함수, 미분.. 경사.. 미분해서 기울기를 구하는구나.. 이 값이 0이 되어야 된다.
def numerical_derivative(f, x):
 
  # 학습률  
    delta_x = 1e-4 # 0.0001
    # 거의 0에 가까운 x의 기울기?
    grad = np.zeros_like(x)
    
    it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
    
    # 반복문을 사용.
    
    # 0이 될 떄 까지
    while not it.finished:
        idx = it.multi_index        
        tmp_val = x[idx]
        x[idx] = float(tmp_val) + delta_x
        # fx1에 delta_x를 빼서 값을 조정
        fx1 = f(x) # f(x+delta_x)
        
        x[idx] = tmp_val - delta_x 
        # fx2에서 delta_x를 빼서 값을 조정
        
        fx2 = f(x) # f(x-delta_x)
        grad[idx] = (fx1 - fx2) / (2*delta_x)
        
        x[idx] = tmp_val 
        it.iternext()   
        
    return grad
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

 

왜 Norm이 나와야 하는데? 오차를 측정해야 하니까, 오차는 절대값이니까. 그 값을 재는 방법이지. 세타1 세타2의 가설에 대한 비용 함수의 값을 표현. 이 비용 함수의 값이 Norm인가? 

What is Norm?

...더보기

In linear algebra, functional analysis, and related areas of mathematics,
a norm is a function that assigns a strictly positive length or size to each vector in a vector space (by wikipedia)

 

1. L1 Norm은 오차의 절대값을 합해준 것이다.

### L1 Norm  in Computer Science

- L1 Regularization
- Computer Vision

 

다순히 절대값을 더하는 것이기 때문에 축1(행)을 기준으로 값을 더한 것이다.

 

 

2. L2 Norm은 제곱을 합해준 뒤 루트를 씌어준 값이다.

### L2 Norm  in Machine Learning

- kNN algorithm
- kmean algorithm

 

제곱의 합에 루트를 씌어줬기 때문에, 원점으로부터의 거리를 측정한 것이나 다름 없다. 그렇기 대문에 sin, cos이야기가 나오는 듯 하다.

 

3. 잘 정리 되어 있는 것을 찾았다. 예상한대로, Norm은 비용함수를 계산하는 방법이었다.

출처 : https://light-tree.tistory.com/125

 

4

4. L2는 제곱을 하기 때문에 이상값에 영향을 더 받는다고 한다.

 

 

 

1. Kmeans

 

...더보기

k-평균 알고리즘(K-means algorithm)은 주어진 데이터를 k개의 클러스터로 묶는 알고리즘으로, 각 클러스터와 거리 차이의 분산을 최소화하는 방식으로 동작한다. 이 알고리즘은 자율 학습의 일종으로, 레이블이 달려 있지 않은 입력 데이터에 레이블을 달아주는 역할을 수행한다. 이 알고리즘은 EM 알고리즘을 이용한 클러스터링과 비슷한 구조를 가지고 있다. 위키백과

1. 중심점 임의로 잡고, 중심점으로부터의 각 데이터와의 분산이 최소화 되어 더 이상 중심이 변화하지 않을 때까지 알고리즘을 반복한다.

 

...더보기

입력값

  1. k: 클러스터 수
  2. D: n 개의 데이터 오브젝트를 포함하는 집합

출력값: k 개의 클러스터

알고리즘

  1. 데이터 오브젝트 집합 D에서 k 개의 데이터 오브젝트를 임의로 추출하고, 이 데이터 오브젝트들을 각 클러스터의 중심 (centroid) 으로 설정한다. (초기값 설정)
  2. 집합 D의 각 데이터 오브젝트들에 대해 k 개의 클러스터 중심 오브젝트와의 거리를 각각 구하고, 각 데이터 오브젝트가 어느 중심점 (centroid) 와 가장 유사도가 높은지 알아낸다. 그리고 그렇게 찾아낸 중심점으로 각 데이터 오브젝트들을 할당한다.
  3. 클러스터의 중심점을 다시 계산한다. 즉, 2에서 재할당된 클러스터들을 기준으로 중심점을 다시 계산한다.
  4. 각 데이터 오브젝트의 소속 클러스터가 바뀌지 않을 때 까지 2, 3 과정을 반복한다.

 

 

 

 

 

4. word2vec