2016년 2월 23일 화요일

물리학과 학부생이 생각하는 머신러닝 알고리즘-텐서 플로우(1)

최근 화두가 되고있는 빅 데이터와 이를 똑똑하게 처리하는 기계 학습 알고리즘에 대해서 조금 관심이 생겼습니다. 구글의 오픈소스 프로젝트인 텐서 플로우를 서버에 설치하고 이렇게 저렇게 테스트 해보고있는 중입니다. (참고로 텐서 플로우는 파이썬 라이브러리로 제공됩니다!!)

텐서플로우는 리눅스위에서만 돌아가고 있어서 - 설치하시려면 윈도우 사용자분들은 vm virtual box에 리눅스를 설치하는걸 추천 드립니다 - 물론 docker도 있지만, docker는 spyder를 사용하기 불가능하니..

텐서 플로우가 신선하게 다가온 이유는 머신 러닝에 "텐서"라는 녀석을 이용한다는 점이었습니다.

물리학에서의 텐서는 한 좌표성질(i,j,k,l)에서 다른 좌표성질(a,b,c,d)로 변환하면서 특정한 "변환법칙"을 따르는 높은 차원의 행렬 이라고 생각하시면 편할 겁니다.

이 "변환법칙"에 여러가지가 있는데 대표적인 예로 회전변환이나 입실론, 델타로 표시할수 있는 변환들이 있죠.(구글에 치환 텐서라 치시면 구체적인 설명이 나올겁니다.)

재미있는 점은 좌표성질 변환이 높은 차원(i,j,k,l)에서 낮은 차원(a,b)으로 혹은 그 반대인 낮은차원에서(i,j) 높은 차원으로(a,b,c,d)으로도 가능한 점이죠.
그래서 필요에 따라 위 과정을 자유자재로 왔다갔다 가능한데, 그 과정에서 정보의 손실이 발생하지 않습니다.
 구글에서 사용하는 텐서플로우의 텐서는 이 성질을 이용한겁니다.(사실 그러기 위해선 여러가지 조건이 필요한데, 여기선 그렇게만 이해하고 넘어가죠)

텐서 플로우에서 사용하는 텐서는 수많은 텐서의 성질중에서 텐서가 곱을 통해서 특정한 정보를 담고있는 높은 차원(i,j,k,l)으로 낮은 차원(a,b)으로 바꾼다움, 이 값을 가지고 오차 계산혹은 다른 알고리즘에 넣어서 가지고 놀다가, 다시 필요에 따라 높은차원으로도 가지고 노는거죠.

그렇다면 두 텐서의 곱(내적 혹은 회적 혹은 텐서곱)은 텐서 플로우에서 무엇을 의미하는 걸까요? 이 의미는 구글의 텐서 플로우 이미지가 아주 잘 보여주고 있는 것 같습니다.


이 이미지가 담고있는 의미가 참 많은 것 같습니다. 사실 위에서 이야기한 많은 설명들이 이 이미지로 한번에 설명이 가능하죠. 임의로 T 라는 데이터와 F 라는 데이터가 있다고 할 때 T라는 데이터와 F 라는 데이터 의 텐서 곱이 저 중간의 3차원 형태의 블록 이미지 처럼 두가지 정보를 압축해서 담고 있다고 생각하시면 됩니다. 

텐서 플로우에서 사용하는 "텐서"에 대해서 간략하게 설명했는데 다음에 올릴 글은 "딥 러닝" 이라는 알고리즘 자체를 간단하게 설명하는 글을 올리도록 하겠습니다. softmax 함수와 정보 손실 엔트로피 개념이 열물리학에서 쓰이는 Boltzman factor 와 엔트로피의 관계 비슷해서 많이 놀랐습니다. 

혹시 궁금한 점이나 수정할 부분이 보이시면 댓글로 말씀해주시면 답변 해드리록 하겠습니다.

댓글 없음:

댓글 쓰기