2014년 9월 2일 화요일

해시계의 원리와 컴퓨터 비전 응용 #2

해시계의 원리와 컴퓨터 비전 응용 #2

Computer vision applications and the principle of the sundial #2

  1. 해시계(Sundial) - 해시계의 원리와 컴퓨터 비전 응용 #1
  2. 컴퓨터 비전 응용
 해시계는 태양의 위치(혹은 태양의 위치로부터 얻어진 그림자)를 통해 시간을 측정하는 장치 입니다. 그러면 거꾸로 시간으로부터 태양의 위치를 혹은 지구상의 위치를 결정할 수 있지 않을까요?

 해시계의 원리를 분석해 보면 답이 보입니다. 시간을 알기 위해서는 지구상의 위치를 알아야만 합니다. 적도에서 태양의 위치와 극지방에서 태양의 위치는 같은 시간에도 완전히 다르기 때문입니다. 시간을 알기 위해서 알아야 하는 요소는

  • 위도, 경도
  • 진북 방향
입니다.

 '앙부일구'로 시간을 측정할 때 진북 방향으로 향하게 두고, 그림자의 방향과 길이를 보면 절기와 시간을 알 수 있습니다. 우리나라의 서울은 자북과 진북의 차이, 자편각이 서쪽으로 약 7.57도 발생하니 이것을 보정해주고, 동경(도쿄)과 같은 시간대를 사용하는 GMT+9이므로 실제 서울의 동경 127도 보다 빠른 시간대를 사용하기 때문에 이것까지 보정해주면 태양시를 우리가 현재 사용하는 시간으로 구할 수 있습니다.

 그러면 거꾸로 시간이 주어지면 어떨까요?
  • 날짜, 시간
  • 진북 방향
이 주어지면 위도, 경도를 알 수 있지 않을까요? 세상은 참 넓고 사람은 많습니다. 그런 생각을 한 사람이 있었습니다.
Junejo, Imran N., and Hassan Foroosh. "GPS coordinates estimation and camera calibration from solar shadows." Computer Vision and Image Understanding 114.9 (2010): 991-1003.
 인기 있는 연구 분야는 아니어서 인용은 많이 되지 않았지만 생각을 실제로 구현한 것은 충분히 훌륭한 일이라고 생각합니다.

 두 개의 지면에서 수직한 물체기 있는 경우 두 물체가 그리는 포물선의 중심을 연장한 지점이 만나는 곳이 정남향이 됩니다. 현재 그림자의 위치와 물체의 끝점을 연장한 곳에는 태양이 있을 겁니다. 기존의 방대한 데이터로부터 우리는 어떤 시점에 태양이 위치해야 하는 곳을 알고 있기 때문에 그것에서 위치를 결정할 수 있습니다. 년중 단 두 번의 모호함이 있는데 춘분과 추분입니다. 태양의 8자 궤도가 만나는 점입니다.

2014년 9월 1일 월요일

해시계의 원리와 컴퓨터 비전 응용 #1

해시계의 원리와 컴퓨터 비전 응용 #1

Computer vision applications and the principle of the sundial #1

  1. 해시계(Sundial)

 잘 알고 계시는 것처럼 태양의 위치를 통해서 시간을 알기 위한 장치입니다. 과학 시간에 배우던 내용들이 기억이 잘 나지 않지만 자세히 알고 보면 천체의 운동을 오랜 옛날 어떻게 그렇게 정확하게 알고 있었는지 신기하기만 합니다.

Louxor obelisk Paris dsc00780.jpg
"Louxor obelisk Paris dsc00780". Licensed under CC BY-SA 3.0 via Wikimedia Commons.
 해시계의 기원은 고고학의 기록으로 기원전 3500년경 오벨리스크(obelisks)로 알려져 있습니다. 태양신을 숭배하던 기원전을 생각하면 하나의 커다란 돌기둥으로 만들어 놓은 오벨리스크는 권위를 상징하는 것이었을 거라고 추측됩니다. 오랜 시간의 역사처럼 해시계의 종류와 형태는 변화무쌍합니다. 지면에 수직인 형태뿐 만 아니라 반지 형태, 목동의 시계로 불리는 원기둥 형태, 최근엔 디지털 해시계도 등장했습니다. 지금은 세슘 원자 시계처럼 엄청난 정확도를 가진 것이 출현했지만 17세기만 해도 기계식 시계보다 해시계가 정확했다고 합니다.
http://www.qwerty.co.za/sundials/types/poledial.html
 고대의 사람들은 아마도 그림자의 길이로 시간을 측정했을 것으로 생각됩니다. 그러나 조금만 생각해보면 지면에 수직으로 세워진 해시계는 정확한 시간을 측정할 수가 없습니다. 계절에 따라서 그림자의 길이와 방향이 달라지기 때문입니다. 거기에 우리의 지구는 정확한 구도 아니고 타원체도 아닌 형태를 띄고 있고, 지구의 공전 궤도 또한 타원 운동이기 때문에 년 중 태양을 기준으로 한 하루의 길이는 모두 다릅니다. 아래 그래프에서 보는 것처럼 하루가 24시간에서 몇 분 정도 긴 날도 있고 짧은 날도 있습니다.


Equation of time.svg
"Equation of time" by Equation_of_time.pngUser:Drini derivative work: Zazou (talk) - Equation_of_time.png. Licensed under CC BY-SA 3.0 via Wikimedia Commons.
 이러한 차이는 'Analemma'라고 하는 아름다운 8자형 고리를 만듭니다. 일 년 동안 같은 자리에서 같은 시간에 찍은 태양의 위치를 연결하면 아래 그림처럼 형성됩니다.

"Analemma fishburn" by Jfishburn - photo taken in 1998-1999 of analemma from office window of Bell Labs, Murray Hill, NJ.. Via Wikipedia.
"Qzss-45-0.09" by Tubas - {Systems Tool Kit (STK) - Analytical Graphics Inc www.agi.com}. Licensed under CC BY-SA 3.0 via Wikimedia Commons.

 이 8자형 고리를 이용한 지면에 수직으로 세워진 형태의 해시계를 'Analemmatic sundial'이라고 부릅니다. 따로 정확한 시침(Gnomon)이 필요 없이 사람이 서서 재는 형태의 것들도 있습니다.
"Zonnewijzerherkenrode" by Willy Leenders - Own work. Licensed under Public domain via Wikimedia Commons.
 우리나라의 솥모양의 해시계 '앙부일구'는 이러한 천체 운동의 원리가 정확히 반영되어 있습니다. '앙부일구'에서 시침은 우리나라의 위도만큼 지면과 각을 이루고 있습니다. 그렇기 때문에 그림자의 길이가 계절과 관계없이 같은 방향을 가리킵니다. 반원구에 단면이 포물선 모양이라는 것은 태양의 그림자가 바닥에 그리는 궤적을 관찰하여 얻은 것이라고 생각해보면 선조들의 지혜를 엿볼 수 있습니다.
"Qzss-45-0.09" by Tubas - {Systems Tool Kit (STK) - Analytical Graphics Inc www.agi.com}. Licensed under CC BY-SA 3.0 via Wikimedia Commons.
 앙부일구에는 24절기가 표기 되어 있어 계절에 따른 태양 위치 변화에 관계 없이 시간을 읽을 수 있도록 되어 있습니다.

해시계의 원리와 컴퓨터 비전 응용 #2

2014년 8월 29일 금요일

협업 필터링과 추천 시스템으로 내일 뭐 먹을지 결정해보기

협업 필터링과 추천 시스템으로 내일 뭐 먹을지 결정해보기

Collaborative Filtering and Recommendation System

 한글로 적어 놓고 나니 왠지 어색합니다. 협업 필터링(Collaborative Filtering)과 추천 시스템(Recommendation System)은 밀접한 관련이 있고, 우리가 모르는 사이에 매일 이것을 이용하고 있습니다. 실제로 Amazon에서 구매하는 물건의 약 35%가 추천으로부터 발생하고, Netflix의 영화 대여도 2/3 정도가 추천에 의해서 발생한다고 알려져 있습니다. 한국에서도 ‘와챠’라는 모바일 앱이 개인화된 추천 서비스를 제공함으로써 기존의 영화 리뷰 시장을 뒤흔들었습니다. 이 글에서는 추천 시스템 중에서 협업 필터링의 개념을 이용해서 ‘내일 뭐 먹을까?’를 결정해보는 간단한 예시를 통해 접근하고자 합니다.

 여기에서도 SVD를 적용합니다. SVD는 singular value가 큰 순서로 정렬되는 형태이므로, 중요한 정보를 압축할 수 있는 특성을 가진다는 것을 알고 있다면, Low-rank approximation으로 분류를 하는데 활용할 수 있다는 것도 생각해 볼 수 있습니다. 다시 말하면 eigenvalue가 큰 것들은 어떤 자료에서 중요한 의미를 지니는데, 그에 해당되는 eigenvector들은 모두 orthogonal합니다. orthogonal하다는 말은 직교한다는 말하고 비슷한데, 그릴 수 없는 3차원을 넘어가는 다차원에 대해서도 일반화된 개념입니다. 내적이 ‘0’이므로 서로 겹치는 부분이 없습니다. 어떤 자료를 SVD한다는 말은 결국 중요한 의미를 지니는 eigenvector공간으로 재 투영한 값들로 재구성한다는 의미로 해석하면 될 것 같습니다.

 예를 들자면, 어느 학교의 학생에 대한 정보가 몸무게, 손가락 길이, 키로 각각 주어진다고 가정해보겠습니다. 그러면 3차원 공간에 데이터를 그려볼 수 있습니다. (1,0,0)(0,1,0)(0,0,1)-x, y, z-몸무게, 손가락 길이, 키를 기저 벡터로 하는 공간에 그리는 겁니다. 그런데, 만약에 키가 모두 비슷한 학생들만 다니는 학교라고 하면 z축은 별로 의미가 없어 집니다. x-y평면에 투영해서 봐도 3차원 공간의 데이터와 별로 손실이 없을 수 있다는 의미입니다.

 추천 시스템에 활용하는 간단한 예시를 들어보겠습니다.

 어떤 모임에 4명의 사람이 있었는데, 새로운 사람이 들어온 경우에 그 사람이 어떤 성향을 가지는 사람인지 판단하고 메뉴를 추천해주는 것을 생각해 볼 수 있습니다. 아래 표와 같은 정보가 주어진다고 가정해보겠습니다.


Korean Cuisine
Pizza
Hamburger
Chinese Cuisine
A
9
2
1
8
B
8
5
6
10
C
7
9
8
9
D
2
3
4
8

 데이터를 직관적으로 관찰해보면 중국 요리는 대부분의 사람이 좋아하고 피자를 좋아하는 사람은 대체로 햄버거도 좋아한다는 특성을 관찰할 수 있습니다.

 새로운 멤버 E와 식사를 하러 가야 하는데, 그날 마침 한국음식과 햄버거 중에 결정해야 하는 상황이라면 E는 어떤 음식을 더 좋아할까요?


Korean Cuisine
Pizza
Hamburger
Chinese Cuisine
A
9
2
1
8
B
8
5
6
10
C
7
9
8
9
D
2
3
4
8
E
?
9
?
7








 SVD를 이용한 Low-rank approximation으로 추정해볼 수 있습니다. Rank 3으로 줄이면 아마도 한국음식, 피자, 햄버거와 비슷한 방향을 가지는 기저 벡터 공간에 재 투영될 것을 예측할 수 있습니다. 다음 예시를 참고하여 주시기 바랍니다. 

 협업 필터링 예제

E가 평가를 하지 않은 빈 곳에 대해서 평균으로 채우고 Low-rank approximation을 수행해보면 이 사람은 아마도 햄버거를 더 좋아하는 사람인 것 같습니다.

 실제 시스템에서는 고려해야 할 사항이 훨씬 더 많을 것입니다. 왜냐하면 SVD의 연산 복잡도는 선형으로 증가하지 않기 때문에 100만명의 회원이 있을 경우에 간단한 방법으로 해결할 수 없을 것입니다. 의도적으로 데이터에 손상을 가하려는 사람들(평점을 일부로 높게 주거나 낮게 주는 사람들)이 있을 수도 있고 개인적인 성향에 따라 평점이 후한 사람도 있고 그렇지 않은 사람도 있을 것입니다.

협업 필터링(Collaborative Filtering) 예제

Matfact_newcomer
% Collaborative Filtering
% 2014. 8. 29
% refopen.blogspot.com

A = [9 2 1 8;
    8 5 6 10;
    7 9 8 9;
    2 3 4 8;
    5 9 5 7];

rank = 2;

m = mean(A, 2);
s = std(A, 1, 2);
matm = repmat(m, 1, 4);
mats = repmat(s, 1, 4);

% normalization
normA = (A - matm) ./ mats;

[u d v] = svd(normA)

vt = v';
temp = u(:, 1:rank)*d(1:rank, 1:rank)*vt(1:rank, :)

% denormalization
Ahat = matm + (temp .* mats)
u =

   -0.5699   -0.1579   -0.5892   -0.5351   -0.1297
   -0.5471   -0.3829   -0.0037    0.7322   -0.1339
    0.3887   -0.5537    0.0504   -0.1310   -0.7230
   -0.1319   -0.6232    0.4847   -0.3305    0.5001
    0.4554   -0.3654   -0.6445    0.2261    0.4388


d =

    3.0336         0         0         0
         0    2.9144         0         0
         0         0    1.5179         0
         0         0         0    0.0000
         0         0         0         0


v =

   -0.5690    0.4985   -0.4216    0.5000
    0.7368   -0.0436   -0.4530    0.5000
    0.1603    0.3410    0.7798    0.5000
   -0.3281   -0.7958    0.0948    0.5000


temp =

    0.7543   -1.2537   -0.4339    0.9334
    0.3882   -1.1743   -0.6465    1.4326
   -1.4753    0.9392   -0.3612    0.8973
   -0.6777   -0.2156   -0.6834    1.5767
   -1.3170    1.0644   -0.1417    0.3943


Ahat =

    7.6667    0.5676    3.4658    8.2999
    7.9954    4.9950    6.0085   10.0010
    7.0268    9.0288    7.9505    8.9940
    2.7065    3.7590    2.6934    7.8411
    4.3160    8.2652    6.2650    7.1538

최소자승법


최소자승법

Least square minimization

 최소자승법에 대한 글을 쓰는 것도 사실은 조심스러운 일입니다. 공학 전공자들에게 수학은 원하는 목표물을 얻기 위한 도구로 사용되지만, 수학을 전공하는 사람들에게는 존경 받는 수학자들의 이름이 거론되는 것 자체가 마음에 들지 않을 수도 있다고 생각합니다. 본 블로그에서는 공학적 응용을 위한 접근에 관점을 두고 기술합니다.

"Bendixen - Carl Friedrich Gauß, 1828" by Siegfried Detlev Bendixen - published in "Astronomische Nachrichten" 1828. Licensed under Public domain via Wikimedia Commons.
 논란의 여지가 남아 있지만, 일반적으로 최소자승법은 Carl Friedrich Gauss(이하 가우스)에 의해 1794년 발견되고, 1805년 Adrien-Marie Legendre에 의해 발간되었다고 알려져 있다. 가우스가 24살이던 1801년 소행성 ceres(2006년 국제천문연맹 회의에서 세레스의 지위가 왜행성(dwaft planet)으로 격상)의 궤도를 추정하기 위해 사용하였다고 하니 가우스의 위대함을 엿볼 수 있다.

 확률 분포에서 정규분포처럼 모수(parameter)를 추정하기 위한 방법으로 최소자승법은 폭넓은 활용을 가지고 있다. 그러면 모수를 추정하는 일은 왜 필요한가? 수 많은 데이터들을 모두 다루지 않고도 적절함 함수로 대체(fitting)할 수 있다면 그 함수의 모수를 알아내는 것만으로도 모든 데이터를 다루는 것과 별로 다르지 않은 결과를 얻을 수 있기 때문이다.

 간단한 예부터 살펴보면 다음과 같다.

 사전 정보: 데이터가 하나의 직선 위에 놓여 있을 것이다. → 직선의 방정식으로 근사화 할 수 있다.

 직선의 방정식은

 \( y = ax + b \)

로 표현할 수 있으므로, 추정해야 하는 모수는 \(a, b\), 즉 직선의 기울기와 절편이다. 우리가 잘 알고 있는 연립 방정식으로 문제를 풀기 위해서는 두 개의 미지수가 있으므로, 적어도 2개의 식이 필요하다는 것을 알 수 있다. \(m\)이 미지수의 개수, \(n\)을 주어진 식의 수라고 하면,
  1. \(m=n\)(자명하지 않은 유일해 - nontrivial solution)
  2. \(m<n\)인 경우 (부정 - overdetermined)
  3. \(m>n\)인 경우 (불능 - underdetermined)
 최소자승법을 사용하는 경우는 위의 세 가지 예시 중 두 번째 경우에 유리하다. 다시 말하면 2개의 데이터만 있어도 직선의 방정식을 구할 수는 있으나, 그보다 더 많은 수의 식이 주어지는 경우에는 어떤 것이 최적의 식인가? 라는 질문의 답이 될 수 있다. 추정한 모수로 그린 직선과 데이터와의 차이(residual)이 가장 적은 것이 답일 것이다.

 사실 해석적 방법(Analytical method) 을 사용하면 간단한 식의 경우에는 식에서 모수와의 관계를 편미분을 통해서 바로 구해낼 수 있다. 아래 그림을 보면 residual에 대한 각 모수에 대한 편미분이 최대 또는 최소가 되는 점, 미분치가 0인 점을 찾아내면 된다는 것을 알 수 있다.



 요즘 우리의 컴퓨터는 너무나 성능이 좋고, 빅 데이터의 시대에 살아가고 있기 때문에 수치적 방법(Numerial method)를 사용하는 것이 보편화 되었다.

 수치적 방법으로 최소자승법을 푸는 방법은 다음 문제와 관련이 있다.

  • 선형 동차식(homogeneous equation)인 경우
  • 선형 비동차식(inhomogeneous equation)인 경우 
 여기서는 \(\mathbf{Ax=b}\)의 형태로 정리할 수 있는 경우 이므로 비동차식 해법을 적용한다.

 \( x_1, y_1, x_2, y_2, x_3, y_3, ... , x_n, y_n \)의 데이터가 주어진 경우

\( ax_1 + b = y_1 \)
\( ax_2 + b = y_2 \)
\( ax_3 + b = y_3 \)
\( \vdots \)
\( ax_n + b = y_n \)

식을

\(\left[\begin{array}{cc} x_1 & 1 \\ x_2 & 1 \\ x_3 & 1 \\ \vdots \\ x_n & 1\end{array} \right] \left[\begin{array}{c} a \\ b \end{array} \right] = \left[\begin{array}{c} y_1 \\ y_2 \\ y_3 \\ \vdots \\ y_n \end{array} \right] \)
 \( \mathbf{~~~~~A~~~~~~~~~~x~~~ = ~~~ b} \)
 \( \mathbf{~~(n\times2)~(2\times1) =  (n\times1)} \)

와 같이 정리할 수 있다.

 \(\mathbf{Ax=b}\)의 식에서 행렬 \(\mathbf{A}\)의 의사역행렬(left pseudo inverse) \(\mathbf{A^+=(A ^{T} A) ^{-1} A ^{T}}\)를 양변에 곱함으로써 \(\mathbf{x}\)를 구할 수 있다.

 여기서 SVD(Singular Value Decomposition)를 이용할 수 있는데, 행렬 \(\mathbf{A}\)의 역행렬은 \(\mathbf{A ^{-1} =V ^{T} D ^{*} U ^{T}}\)를 이므로 SVD를 통해 바로 구할 수 있기 때문이다.

 만약 MATLAB을 이용한다면 강력한 solver가 제공된다. mldivide 함수 또는 '\' 연산자를 사용하면 행렬의 크기에 따라 적절한 방법의 최소자승법에 의한 해를 구해 준다.

 MATLAB으로 구현한 최소자승법의 예제를 제시합니다.

2014년 8월 28일 목요일

동차 선형 방정식을 SVD로 풀 수 있는 이유


동차 선형 방정식을 SVD로 풀 수 있는 이유

Solving homogeneous linear equation using SVD

 최소 자승법을 이야기 하면서 의사 역행렬을 이용해 over-constrained eq.을 푸는 방법을 소개 했는데 정작 왜 그것이 정답이 되는지는 얼버무리고 넘어간 것 같아서 이 글을 게시합니다.

 SVD(Singular Value Decomposition)은 선형 대수학에서 매우 중요한 의미를 가집니다. eigenvalue, eigenvector가 중요한 것처럼 singular value들은 eigenvalue와 관계가 있기 때문입니다. 컴퓨터 비전이나 기계 학습에서 선형 대수학이 빠질 수 없는 이유는 바로 선형 변환에 불변하는 특성을 가지는 eigenspace 해석을 통해서 중요한 성질을 구할 수 있기 때문입니다. PCA(Principal Component Analysis)도 결국 SVD를 이용해서 주요 성분을 얻어내는 것이고, 기계 학습에서 sparse coding으로 중요한 정보 만을 이용해서 영상을 분류하는 방법에도 적용될 수 있습니다.

 행렬 \(\mathbf{A}\)의 singular value를 \(\sigma\)라고 하면, \(\mathbf{A^*A}\)와 \(\mathbf{AA^*}\)의 0이 아닌 eigenvalue, \(\lambda\)와 \(\sigma\) = \(\sqrt{\lambda}\)의 관계를 가집니다. 여기서 \(\mathbf{A^*}\)는 \(\mathbf{A}\)의 켤레전치행렬(conjugate transpose) 입니다. 간단하게 상수라고 생각하면 제곱 한 것을 분해한 것과 그냥 분해한 것의 차이 정도로 대략 감을 잡으시면 될 것 같습니다.

 그럼 SVD로 어떻게 동차 방정식의 해를 구할 수 있는지 보겠습니다.

 \(\mathbf{Ax} = 0\)

와 같은 동차 방정식이 주어지는 경우, 자명하지 않은 해(non trivial solution)을 구한는 것이 목적입니다. (\(\mathbf{x}=0\)이면 항상 참이 되니 자명한 해이므로 관심이 없습니다.)

 그래서 자명한 해가 아닌 해를 구하기 위해서 제약 조건을 줍니다. 보통은 \(||\mathbf{x}||=1\) 과 같이 벡터의 크기를 정해줍니다. 우변이 0이기 때문에 벡터의 크기는 아무래도 관계 없기 때문입니다.

 이제 행렬 \(\mathbf{A=UDV^T}\)로 분해하면,

\(\mathbf{||UDV^Tx||=||DV^Tx||}\) - ①
\(\mathbf{||x||=||V^Tx||}\) - ②

로 둘 수 있습니다. 왜냐하면, SVD로 구한 \(\mathbf{U, V^T}\)행렬은 각 열이 모두 orthogonal 하기 때문입니다. 이 특성은 회전 행렬과 같습니다. 벡터 공간에서 임의의 벡터를 아무리 회전 시켜도 그 크기가 변하지 않는다는 것을 생각해보면 식 ①, ②가 성립하는 것을 알 수 있습니다.

\(\mathbf{y=V^Tx}\) - ③

을 도입해 보면, 최초의 문제는 결국 '\(\mathbf{||Dy||}\)를 최소화하되 \(\mathbf{||y||}=1\)을 만족 시켜라.'는 문제로 바뀌게 됩니다.

 여기서 SVD의 특성을 다시 한 번 생각해보면, 분해된 행렬 \(\mathbf{UDV^T}\)에서 \(\mathbf{D}\)는 대각 행렬이고 원소들은 singular value가 큰 순서대로 정렬되기 때문에 \(\mathbf{||Dy||}\)를 가장 작게 만들면서 \(\mathbf{||y||}=1\)을 만족 시킬 수 있는 방법은 \(\mathbf{y}=(0, 0, ..., 0, 1)^T\)로 두는 것입니다.

 그러므로, \(\mathbf{x=V^Ty}\)는 결국 \(\mathbf{V^T}\)의 마지막 열이 됩니다.

2014년 8월 27일 수요일

기계 학습 - 서론

기계 학습 - 서론

Machine learning - preliminary


 기계 학습을 한 마디로 정의하기는 어려울지도 모르겠습니다. 그러나 학습, 추론, 결정을 요구하는 시스템을 수학적 기반으로 연구하는 분야라는 데에는 이견이 없을 듯 합니다. 최근에 하드웨어 성능의 향상(특히 GPGPU-General-purpose computing on graphics processing units), 빅 데이터의 경향에 따라 산업계, 학계의 지대한 관심을 받고 있는 분야입니다. 그에 따라 연구 그룹도 우후죽순 생겨나고 있습니다. 본 블로그에서는 이 서론을 시작으로 몇 가지 활용에 대해서 기술하고자 합니다.

 기계 학습을 연구하는 사람들의 공통적 철학은 '오컴의 면도날(Occam’s Razor)'이라는 철학자의 말을 빌어보는 것이 좋을 것 같습니다. 사실 오컴은 사람 이름이 아닌 지명입니다. 레오나르도 다 빈치 라는 이름이 빈치에서 태어난 레오나르도라는 의미인 것과 마찬가지로 '윌리엄'은 영국 오컴 지방의 프란체스코회 수사였습니다.

 오컴의 면도날의 의미는 문제를 풀 수 있는 방법이 여러 가지가 있을 경우에 가장 간단한 방법이 최선의 답이라는 철학적 원리를 바탕으로 합니다. 경제성의 원리라고도 불립니다. 기계 학습을 전공하는 사람들 중에서 최근 각광 받는 Deep learning 분야를 연구 하는 사람들은 아마도 복잡한 수식이나 모델링을 통한 해법보다는 자극(Stimulation)에 의해서 활성화(Activation)되는 인간의 뉴런과 시냅스를 모사하고 학습하는 것이 오컴의 면도날을 충족하는 가장 바람직한 정답이라고 생각했을 수 있습니다.

원본 이미지: http://vashonsd.org/teacherweb/floyd/index.php/floydtemp/pages/C1191/P90
뉴런과 시냅스를 모사한 Nueral Network
 신경망 회로(Nueral network)의 개념이 최초로 도입되던 시절에는 지금에 비해서 컴퓨터의 성능이 보잘 것 없어서 실용화 하기에는 불가능할 것처럼 보였습니다. 그러나 최근에 제시되는 결과는 간단한 분류에서 문자 인식, 음성 인식, 얼굴 인식처럼 점점 고도화 되고 상용화 가능성을 보이고 있습니다.

  신경망 회로(Neural network)에 관해 생소하다면 역전파(Back-propagation)을 통해 작은 수의 레이어가 있는 경우에 한해 접근해 보는 것이 좋을 것 같습니다.