머신러닝이란 ?
"Machine Learning" 책을 지은 CMU의 교수 Tom M. Mitchell이 제시한 것이다.
"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E"
즉, 어떠한 테스크(T)에 대해 꾸준한 경험(E)을 통하여 그 T에 대한 성능(P)를 높이는 것, 이것이 기계학습이라고 할 수 있다.
정의에서 알 수 있듯이, 기계학습에서 가장 중요한 것은 E에 해당하는 데이터이다. 좋은 품질의 데이터를 많이 가지고 있다면 보다 높은 성능을 끌어낼 수 있다.
Artificial Neural Network(ANN; 인공신경망)
딥러닝의 대표적이면서 가장 처음 시작하는 MNIST 예제는 ANN 을 기초로 두고 있다.
ANN 이란?
입력과 출력 사이에 있는 인공 뉴런들을 여러개 층층히 쌓고 연결한 인공신경망 기법을 주로 다루는 연구
인간의 시각/청각 피질을 본따 만든 알고리즘이다.
다만 인간의 뇌에서 모티브를 얻었다는 정도. (뇌과학자들이 화낸다)
다만 인간의 뇌에서 모티브를 얻었다는 정도. (뇌과학자들이 화낸다)
그밖의 머신러닝 알고리즘들
k-NN: 두 점의 중점을 토대로 정확도 계산
SVM: Vector 를 사용한 정확도 계산
SVM: Vector 를 사용한 정확도 계산
좀 더 쉽게
신경망 = 미세먼지 필터?
(너무 복잡해...)
뉴런과 시냅스
신경망
인간의 신경망은 수천만개에서 억단위까지.
현재 구현되어 있는 신경망은 수천개가 고작.
현재 구현되어 있는 신경망은 수천개가 고작.
연산이 너무 많다.
연산이 너무 많기 때문에 하드웨어까지 영끌해야 한다. (영혼까지 끌어모으기)
행렬 연산이 크기 때문에 GPGPU 를 사용. (행렬연산에 강력한 GPU의 특성)
예) 알파고: 1920개의 CPU와 280개의 GPU를 사용
행렬 연산이 크기 때문에 GPGPU 를 사용. (행렬연산에 강력한 GPU의 특성)
예) 알파고: 1920개의 CPU와 280개의 GPU를 사용
어떻게 가능할까?
신경망을 통한 방식.
# x = [x1, x2]
# w1 = [[0.12, 0.32, 0.14], [0.1, 0.54, 0.23]]
# b1 = [0.1, 0.2, 0.3]
A1 = 행렬_내적(x, w1) + b1
# A1 = [a11, a12, a13]
# w2 = [[0.12, 0.32], [0.1, 0.54]]
# b2 = [0.1, 0.2]
A2 = 행렬_내적(A1, w2) + b2
# A2 = [a21, a22]
# w3 = [[0.14, 0.02], [0.02, 0.14]]
# b3 = [0.11, 0.12]
A3 = 행렬_내적(A2, w3) + b3
행렬의 곱 (내적) 이 한 level 혹은 한 시냅스 역할
근데 ... 어떻게 행렬 연산(내적)만으로 먼지를 여과(?)할 수 있는가?
-> 이거 저거 다 갖다 붙이다 보면 근접한 수치가 나온다?
-> 이거 저거 다 갖다 붙이다 보면 근접한 수치가 나온다?
나무위키 왈
그냥 주먹구구식으로 이것저것 함수를 대입해 보면서 가장 결과가 좋은 함수를 사용하는 중이다.
예제 코드
Tensorflow 의 MNIST 예제를 사용.
network 파라미터가 먼지 필터 역할을 한다.************
-> 좋은 먼지 필터를 사용하면 정확도가 올라가고,
나쁜 필터를 사용하면 정확도가 떨어진다.
나쁜 필터를 사용하면 정확도가 떨어진다.
def predict(network, x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2 ,b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1) # 가지치기. -> sigmoid 는 데이터의 짤림 현상이 많아서 ReLU 방식을 많이 사용한다고 함..
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2) # 가지치기.
a3 = np.dot(z2, W3) + b3
y = softmax(a3) # [2, 4, 4] - softmax -> [0.2, 0.4, 0,4] ; 총합을 1로 계산..
return y
y = predict(network, img)
p = np.argmax(y)
print("Image will be " + str(p))
장점이 가장 큰 단점
경사하강법의 빈약함
대부분의 딥 러닝 알고리즘은 경사 하강법에 기초를 두고 있다.
그런데 경사 하강법 자체는 이론적으로 이해가 잘 되었지만, 이와 함께 사용하는 다른 알고리즘은 이론적인 검증이 빈약하다.
...
이와 같이, 딥 러닝에 사용되는 방법들은 이론적이기 보다는 경험적으로 검증된 방법들을 사용하기 때문에 종종 블랙박스로 이해되기도 한다.
그런데 경사 하강법 자체는 이론적으로 이해가 잘 되었지만, 이와 함께 사용하는 다른 알고리즘은 이론적인 검증이 빈약하다.
...
이와 같이, 딥 러닝에 사용되는 방법들은 이론적이기 보다는 경험적으로 검증된 방법들을 사용하기 때문에 종종 블랙박스로 이해되기도 한다.
참고
https://ko.wikipedia.org/wiki/딥_러닝
https://namu.wiki/w/기계학습
https://alykhantejani.github.io/a-brief-introduction-to-gradient-descent/
http://creativeprm.tistory.com/82
https://namu.wiki/w/기계학습
https://alykhantejani.github.io/a-brief-introduction-to-gradient-descent/
http://creativeprm.tistory.com/82
Comments
Post a Comment