Posts

Showing posts from August, 2018

텐서플로우를 이용한 간단한 다항식 피팅(regression): 텐서플로우 기초 요소 이해

사실상 전통적인 분자동역학 분야에서는 딥러닝을 필요로 하지 않는다. 머신러닝이라 부르든, 그냥 regression이라고 부르든, 아무튼 '주어진 목적함수에 대해 목표치와 예측치 사이의 오차를 최소로 줄여나가는 fitting process에 대해서만 알고 있다면, 누구나 퍼텐셜을 피팅 할 수 있다. 텐서플로우가 주목을 받은 이유는 다양한 deep layer 구조를 쉽게 구현할 수 있도록 코드가 잘 짜여져 있기 때문인데, 그러한 연유로 만약 당신이 potential fitting을 한다면 굳이 텐서플로우를 이용할 필요는 없다. 허나, 나는 이번에 EAM potential을 피팅하는 프로젝트를 진행하면서 텐서플로우를 작업 툴로 선정했다. 그 이유는 여러가지가 있는데, 어쨌든 학문에 몸담으로 사람으로서 세간의 방법론적인 유행에 발은 맞춰놔야 하지 않나, 하는 생각도 들고, 또 앞으로 퍼텐셜의 형태가 종래의 형태와 같이 수식의 형태를 띄지 않고 인공신경망 구조로 학습되어 일종의 예측 프로그램 형태로 발전되지 않을까, 하는 생각도 들었기 때문이다. 이번 포스트는 텐서플로우 공식 홈에 있는 regression 예제 코드를 면밀히 살펴보면서, 텐서플로우의 특징, 사용방법들을 한꺼번에 알아볼 생각이다. 그러면서 나도 텐서플로우와 조금은 친해져 봐야지. 예제 코드는 다음에서 확인할 수 있다[ 예제코드 ]. 먼저 코드의 맨 윗 단을 보면 다음과 같이 세 개의 모듈이 import 되어 있다. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt 'numpy'는 굳이 쓰지 않아도 되는 모듈이지만, 행렬을 많이 사용하는 코드에서 이 모듈을 쓰지 않으면 코딩이 굉장히 귀찮아진다. 여러가지 연산이라든지 행렬 선언, precision 설정 등등에서 numpy를 통한 선언이 훨씬 편하고 유용하므로 numpy를 사용하는 습관을 기르는 것이 좋다. 'matplotlib.

Ergodicity란 무엇인가?

Ergodicity를 이해하기 위해서는 우선 앙상블(ensemble)을 이해해야 한다. 관련글은 블로그의 이전 글을 참고하기 바란다[ 'Statistical Ensemble이란 무엇인가?' ]. Ergodicity의 개념은 간단한 것일지라도, 이 문제는 통계적 분석을 할 때 우선적으로 고려돼야하는 아주 중요한 개념이다. 복잡한 설명 없이, 간단한 예를 통해 ergodictiy를 이해해보자. 우리가 최근 10년간 한국에서 제일 잘팔린 치킨 브랜드를 알고 싶어한다고 치자. 우리가 활용할 수 있는 데이터는 다음의 두 가지가 있다. 첫번째, 영희네 가족이 지난 10년간 쌓아온 5000회의 주문내역. 두번째, 10년 간 한국 국민들이 주문한 내역 중 임의로 샘플링된  5000개. 둘 중 어떤 것을 골라 분석해야 모집단 전체의 통계치에 근접한 추측이 가능할까? 통계를 전혀 모르는 초등학생에게 물어보더라도, 그 사람이 정상적인 지능을 가진 인간이라면 두번째 데이터셋을 고를 것이다. 이유에 대해서는 굳이 설명 않겠다. 대신에 우리는 두 가지 데이터셋이 어떻게 다른지를 살펴볼 것이다. 우선, 두가지 경우 모두 시행 횟수는 오천번으로 동일하다. 하지만 첫번째의 경우는 한사람이 주문한 내역인 반면, 두번째의 경우는 임의로 선택된 오천명이 주문한 정보이다. 위의 상황을 통계학적인 용어로 바뀌 말하자면, 첫번째 경우는 단일 시스템에 대한 시간평균(time-averaged) 거동을 살펴볼 수 있는 자료며(= '영희내 집 치킨 주문 행태, 그 10년간의 기록'), 두번째 경우는 치킨 구매자 앙상블의 다양한 정보를 활용해 앙상블평균(ensemble-averaged) 거동을 살펴볼 수 있는 자료라고 할 수 있다. 내가 예로 든 위의 경우는 앞서 언급 했다시피 두가지 분석 결과가 서로 다를 가능성이 짙다. 분석하려는 대상이 앙상블평균거동에 훨씬 가깝고, 시간평균거동으로 분석하면 특정 앙상블 멤버의 예외성이 두드러지게 발현되기 때문이다. 하지만, 개

Statistical Ensemble이란 무엇인가?

Statistical Ensemble = 통계학적 앙상블 통계역학에서 우리가 살펴보고자 하는 어떤 시스템이 있을 때, 이 시스템을 동일한 조건으로 여러개 복사하여 거대한 집합으로 만들면 '앙상블(ensemble)'이라고 한다. 여기서 핵심은 '동일한 조건'이라는 표현인데, 이것에 대해 아주 섬세한 이해가 필요하다. 현실적으로 모든 실험/계산에는 정밀도의 상한선이 정해져 있다. 예를 들어, 우리가 동전 던지기 실험을 한다고 쳤을 때, 아무리 정밀하게 동일한 방식으로 동전을 던질수 있다 하더라도 모든 조건을 이전 시행과 동일하게 구성할 수는 없다. 즉, 거시적인 관점(macroscopic view)에서 조건을 동일하게 맞추어 준다고 해도 결국 미시적인 관점(microscopic view)에서는 차이가 생기기 마련이며, 앙상블이란 개념은 이러한 상황을 반영해주는 통계적 장치라고 볼 수 있다. (하지만, 앙상블이라는 개념이 단순히 실험에서 발생하는 정밀도나 분해능의 문제로 발현된 개념이라고 보면 곤란하다!) 예를 들어, 내가 연구하고 있는 분자동역학(molecular dynamics, MD) 분야에서는 앙상블을 정의할 때 시스템의 원자 개수, 시스템의 부피, 온도 등등 (거시적인 조건들)을 고정 하더라도 실제로 각각의 원자들이 점유하는 위치나 운동에너지 등은 끝도없이 다양해 질 수 있어, 이러한 잠재적 다양성이 통계역학적 앙상블을 이루게 되는 것이다. 그런데, 만약 이러한 조합들이 앞서 기술한대로 무한정 많다면, 결과적으로 우리가 어떤 물리적 특성값을 도출하기 위해 시스템이 놓여있는 phase space 상의 모든 가능성을 훑어야 하므로, 계산이 불가능할 것이다. 따라서, 이를 해결하기 위해 우리들은 목적에 맞게 앙상블에 제약조건을 부여하여 상황을 단순화 한다. 통계역학 분야에서 앙상블의 핵심은 해당 앙상블이 가진 조건이 되는데, 예를 들어 내가 연구하고 있는 MD에서 주로 사용하는 NVE, NVT, NPT 앙상블에서는 각각

평균값과 기댓값은 같은가?

다르다. 어떻게 다른가? 평균값은 시행결과값을 모두 더한 다음 시행횟수로 나눈 값이다. 반면 기댓값은 실험에서 관찰될 수 있는 모든 결과 값에 대해 그 값이 관측될 수 있는 확률을 모두 구하고, 다시 모든 경우에 대해 관측값과 관측될 확률을 곱하여 모두 더한 값이다. 다시 말해, 평균값이라는 것은 실제로 관측된 데이터를 정리하여 그 평균치를 도출한 것이며, 기댓값은 각각의 결과값이 관측될 수 있는 확률을 특정한 상태식 모델이나 간단한 분포 모델 등을 통해 예측하여, 그 확률을 기반으로 '기대대는 값'을 의미하는 것이다. 사람들이 종종 평균값과 기댓값을 혼동하는 이유는 항상 다음의 개념들을 공부할 때 값을 도출해내는 과정이 어떠했는가 보다는 결과값이 무엇인가를 중요하기 생각 했기 때문이다.