산포된 데이터를 정합하는 직선을 찾는 것으로 이해해도 무방합니다. 주어진 데이터를 이용해 기울기와 절편을 구하는 방법입니다.
먼저 행렬연산을 통해 구하는 방법을 설명합니다. 그리고 퍼셉트론에 사용된 것과 같은 방법을 다시 설명하므로 선택적으로 듣기 바랍니다.
설명된 예제에 대한 C 언어 코드를 제공합니다. Tensorlow 코드는 정합 과정을 시각화하여 보여줍니다.
퍼셉트론의 한계를 극복하는 방법입니다. 퍼셉트론은 나오자 마자 한계에 봉착했는데, 이를 해결하기 위해 구조적인 확장을 하게 됩니다. 그러나 정작 중요한 것은 이 확장된 구조에서의 학습 방법을 오랫 동안 찾지 못한 것입니다. 여기서 소개하는 신경망 학습방법은 신경망 학습방법의 거의 전부라고 할 수 있습니다.
퍼셉트론의 한계를 극복하는 방법입니다. 퍼셉트론은 나오자 마자 한계에 봉착했는데, 이를 해결하기 위해 구조적인 확장을 하게 됩니다. 그러나 정작 중요한 것은 이 확장된 구조에서의 학습 방법을 오랫 동안 찾지 못한 것입니다. 여기서 소개하는 신경망 학습방법은 신경망 학습방법의 거의 전부라고 할 수 있습니다.
Coursera Machine Learning by Andrew NG 강의를 들으면서, 궁금했던 내용을 중심으로 정리.
내가 궁금했던건, 데이터를 분류하는 Decision boundary를 만들때...
- 왜 가중치(W)와 decision boundary가 직교해야 하는지?
- margin은 어떻게 계산하는지?
- margin은 어떻게 최대화 할 수 있는지?
- 실제로 margin을 최대화 하는 과정의 수식은 어떤지?
- 비선형 decision boundary를 찾기 위해서 어떻게 kernel을 이용하는지?...
http://blog.naver.com/freepsw/221032379891
Automatic Grid Pattern Recognition for Camera CalibrationLee Young Min
about MS thesis: Automatic Grid Pattern Recognition for Camera Calibration (공학 석사 논문 "카메라 캘리브레이션을 위한 그리드 패턴 자동 인식" 발표 자료)
adviser: Professor Yongduek Seo (지도: 서용덕 교수님)
Variational이라는 단어로는 아무것도 안떠오릅니다.
그래서, '꿩 대신 닭'이라고 표현해 봤습니다.
초반 독자적인 그림을 통해 개념잡기가 쉬워요.
설명부분은 초록색으로 표시했습니다.
확률변수(random variable)부터 막히면, 아래 블로그 글을 읽어 보세요.
https://blog.naver.com/nonezerok/221428251262
This document describes an implementation of backpropagation algorithm in C code to understand the backpropagation algorithm through programming. It also explains how it can be applied to a real-world case of handwritten digit recognition using TensorFlow code. The neural network code can be used to gain experience by adjusting values and observing their effects on the network.
To install Python and TensorFlow, download Python version 3.5.2 from the Python website and TensorFlow from the TensorFlow website. Python 3.5.2 must be installed before installing TensorFlow. Once Python is installed, add it to the system PATH and install pip. Then use pip to install various Python packages like iPython, PyQt5, Matplotlib, OpenCV, and Spyder for data science and machine learning.
1. 선형회귀분석
딥러닝을 위한 신경망 기초
nonezerok@gmail.com
산포된 데이터를 정합하는 직선을 찾는 것으로 이해해도 무방합니다.
주어진 데이터를 이용해 기울기와 절편을 구하는 방법입니다.
먼저 행렬연산을 통해 구하는 방법을 설명합니다.
그리고 퍼셉트론에 사용된 것과 같은 방법을 다시 설명하므로 선택적으로 듣기 바랍니다.
설명된 예제에 대한 C 언어 코드를 제공합니다.
Tensorlow 코드는 정합 과정을 시각화하여 보여줍니다.
11. 11
• 를 임의의 값으로 설정
• 를 계속 바꾸어 본다
← + ∆
해결방법
12. 12
• 무작위로 바꾸면 정답을 언제 찾을지 장담 할 수 없음
• 그래서, 다음과 같이 계산
← + ∆
∆ = 0. 1 × − ×
← + ∆
∆ = 0. 1 × − × 1
다음과 같이 갱신한다
13. 13
[code in C]#include <stdio.h>
#include <conio.h>
void main()
{
double a, b;
double X[] = { 0, 1, 2 };
double Y[] = { 1, 3, 2 };
double lr = 0.1;
a = 0.1;
b = 0.0;
double delta_a;
double delta_b;
int n = 0;
double previous_error = 999.0; // DBL_MAX;
while (1)
{
delta_a = 0;
delta_b = 0;
for (int i = 0; i < 3; i++)
{
double y;
y = a * X[i] + b;
delta_a += (Y[i] - y)*X[i];
delta_b += (Y[i] - y);
}
a = a + lr * delta_a;
b = b + lr * delta_b;
처음 임의의
값으로 설정
마법의
작은 수
14. 14
double error;
error = 0.0;
for (int i = 0; i < 3; i++)
{
double d;
d = (Y[i] - a*X[i] - b)*(Y[i] - a*X[i] - b);
error += d;
}
error = error / 3.0;
n++;
printf("%d t %1.6f t %1.2f t %1.2f n", n, error, a, b);
if ((previous_error - error) < 0.000001) break;
previous_error = error;
} // while
}
a=.5 b=1.5
종료 조건
15. • 아래 식에서 출발
15
(, ) =
1
2
−
동작하는 이유
25. 25
import numpy as np
num_points = 1000
vectors_set = []
for i in range(num_points):
x1= np.random.normal(0.0, 0.55)
y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
vectors_set.append([x1, y1])
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
import matplotlib.pyplot as plt
#Graphic display
plt.plot(x_data, y_data, 'ro')
plt.legend()
plt.show()
[code in Python]
http://www.jorditorres.org/TensorFlow/
26. 26
import tensorflow as tf
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)