케라스를 비롯하여 텐서플로우와 같은 머신러닝의 연산은 Wx +b로 겹겹히 생성이 된다. 

W: 2D matrix (가중치 행렬)

b: vector (편향) 

자세한 수학적 코드는 이해하기도 힘들고 복잡하므로 본 포스팅에서는 다루지 않는다. 

다른 포스팅에서 찾아보도록 하자. activation함수가 차원을 왜곡하고 뭐하고, 여러번 거치면 vector가 가지는 공간영역이 어쩌고 저쩌고 아 머리아파 진다. 넘어가도록 하자. 

그런데 신기한 건 우리가 고등학교 때까지, 그리고 일반적으로 알고 있는 수학에서는 각 행렬은 형태가 같아야만 연산이 되는데 여기서는 Wx즉 2D1D인 b가 덧셈이 된다는 것이다.  어떻게 된 것일까? 이것은 브로드캐스팅(Broadcating)에 의해 이루어진다. 이에 관해서 2.3.2절에서 살펴 보도록 한다. 

 

2.3.1 원소별 연산

넘파이 내장 함수 구현 코드

2.3.2 브로드캐스팅

모호하지 않고 실행가능하지 않은 경우하라면, 작은 텐서가 큰 텐서의 크기에 맞추어 이루어지는데, 브로드캐스팅은 다음 두 단계로 이루어짐.  

- 1. 먼저 큰 텐서의 ndim에 맞도록 작은 텐서에 (브로드캐스팅 축이라고 부르는) 축이 추가된다. 

- 2. 작은 텐서가 새 축을 따라서 큰 텐서의 크기에 맞도록 반복 연산된다. 

예) X = (32, 10) // y = (10, )의 shape를 취할 때 X와 y의 shape를 같게 하려면?

1 -> 먼저 y에 비어 있는 첫번째 축을 추가 하여 y= (1,10)으로 만듦 (뒤에 축이 비어 있는데???)

2 -> 이를 32번 반복

 

2.3.3 텐서 점곱

나중에 추가 예정

 

2.3.4 텐서의 크기 변환(Reshape)

신경망에 주어진 데이터를 전처리 할 때 사용. 

텐서의 크기를 변환한다는 것 = 특정 크기에 맞게 행/열을 재배열 한다는 것, [단 변환된 텐서의 원소 개수는 원레의 텐서의 원소 개수와 동일]

- 처음에 3행 2열 배열을 만들었다.

- 그런 다음 이에 해당하는 6개의 원소를 가진 6행 1열의 배열로 Reshape했다. 그리고 이를 출력해 보면 1열애 출력되는 것을 알 수 있다. 

 자주 사용되는 특별한 종류의 크기 변환에는 전치(transpose)가 있다. (i , j) -->(j , i)으로 숙지하면 된다. 

2.3.5 텐서 연산의 기하학적 해석

나중에 추가 예정

2.3.6 딥러닝의 기하학적 해석

3D 공간에서 다음의 비유가 딥러닝을 이해하는데 도움이 될 것임. 하나는 빨간색이고 다른 하나는 파란색인 2개의 색종이가 있다고 가정. 두 장을 겹친 다음 뭉쳐서 다른 공으로 만들면 이 종이 공이 입력 데이터이고 색종이는 분류 문제인 데이터 클래스.

 

신경망이 해야 할 일은 종이 공을 펼쳐서 두 클래스가 다시 깔끔하게 분리되는 변환을 찾는 것. 손가락으로 종이공을 조금씩 펼치는 것처럼 딥러닝을 사용하여 3D 공간에서 간단한 변환들을 연결하여 이를 구현

> 종이 공을 펼치는 것이 머신러닝이 하는 일. 복잡하고 심하게 꼬여있는 데이터의 매니폴드에 대한 깔끔한 표현을 찾는 일. 

- 심층 네트워크의 각 층은 데이터를 조금씩 풀어주는 변환을 적용 > 이런 층을 깊게 쌓으면 아주 복잡한 분해 과정을 처리 할 수 있음. 

 

다음장에서는 경사하강법과 BackPropagation에 대해서 간단하게 살펴본 다음, MNIST에 지금까지 배운 이론과 방법론을 실제로 적용하여 구현해 보도록 하겠습니다. 그럼 안녕히 주무세요. 오늘 제사 다녀와서 매우 피곤하네요. 제대로 포스팅 했는지도 모르겠고.,....공부도 제대로 한건지 모르겠고 ㅎㅎ;;; 빨리 자도 싶습니다....양치해야 하니 이만...

 

 

+ Recent posts