인공신경망을 활용한 데이터 기반 결정구조 탐색 by 바죠

인공신경망을 활용한 데이터 기반 결정구조 탐색

문제: 알려진 결정구조들과 유사한 새로운 결정구조들을 찾아라!
하나의 풀이방법: 인공신경망을 활용하는 방법을 소개한다. 물론, 또 다른 풀이 방법들이 가능할 것이다. http://incredible.egloos.com/7512997

먼저 알려진 결정구조들을 확보한다. 
이론, 실험 결과들, 관심이 있는 조성비를 가지는 물질들의 결정구조들을 확보한다. 무료로 결정구조를 얻어낼 수 있는 하나의 방법   https://materialsproject.org/

각각의 결정구조들로 부터 radial distribution function (RDF)를 계산한다. https://en.wikipedia.org/wiki/Radial_distribution_function

\[ \{ crystal ~structure \rightarrow  RDF \} \]

\[ n(r) = g(r) /(\rho 4\pi r^2 dr) \]

밀도
\[ \rho \] 
pair-correlation function
\[ g(r)\]
다수의 RDF 를 모두 모아 둔다. 이를 아래와 같이 표시한다.
\[ \{database~ RDF\} \]

데이터에 대한 기계학습 훈련을 진행한다. 인공신경망의 학습을 진행한다.
자기 학습을 진행한다. [ self-learning 을 수행한다. ]
\[ \{ RDF \} \rightarrow  \{ RDF'\} \]
이 때, 의도적으로 정보손실을 수반하는 자기 학습을 진행한다.

정보가 좌측 신경망에서 우측 신경망으로 흐른다고 가정한다.
좌측의 인공신경망은 RDF를 암호화한다. 정보 손실을 감수하고 최대한 간략한 정보로 암호화한다.
우측의 인공신경망은 RDF를 최대한 원본에 가깝도록 복원하려고 한다. 
용량이 축소되어, 많은 정보를 버린 상태로 얻어진 암호로 부터 출발하여 원본을 확보하려고 노력한다.
이 때, 학습을 위해서 원본 정보를 활용한다. 그래야만 인공신경망을 학습시킬 수 있다.

의도적으로 학습 중간단계에서 정보의 손실을 유도하는 것이 핵심이다.
같은 뜻으로 아주 효율적인 RDF 함수들의 표현식, "representation"을 찾는 작업을 수행하는 과정이다. 
정확하게는 VAE (variational autoencoder) 방법을 활용한다. http://incredible.egloos.com/7473328

하나의 RDF가 2차원 공간(latent space)에서 하나의 점이 되도록 한다. 이것이 암호이다.
예를 들어, 10개의 RDF가 있다면 (10개의 결정구조가 있다면), 2차원 공간(latent space)에 10개의 점들이 존재할 것이다.
이들 10개의 점들은 각각이 10개의 알려진 결정구조들을 대표하는 것이다. 훈련을 통해서 10개의 암호를 만드는데 성공한 것이다.
이것은 정확히 하나의 결정구조를 2차원 평면의 한 점으로 암호화한것이다. 아울러, 원본 자료를 복구할 수 있는 인공신경망도 훈련을 완성한 경우이다.

이러한 작업을 수행하는 인공신경망의 구조는 아래와 같다.
우측의 인공신경망을 활용하면 기존의 데이터 RDF와 유사한 RDF를 만들어 낼 수 있다.
replica RDF를 만들어 낼 수 있다. 이들을 아래와 같이 표시한다.
\[ \{replica ~RDF\} \]


임의의 결정구조를 만드는 루틴을 만든다.
230개 공간군에 대해서 임의의 Wyckoff position들을 만들어 낸다.

이렇게 무작위로 생성된 구조로 부터 RDF를 계산한다.

아래의 Pearson's correlation 공식을 적용하면, 서로 다른 두 가지 RDF 함수들 사이의 유사성을 계산할 수 있다.
마찬가지로 1-r_P를 거리라고 정의한다. https://en.wikipedia.org/wiki/Pearson_correlation_coefficient
A key mathematical property of the Pearson correlation coefficient is that it is invariant under separate changes in location and scale in the two variables. That is, we may transform X to a + bX and transform Y to c + dY, where abc, and d are constants with bd > 0, without changing the correlation coefficient. 


첫번째 결정구조 RDF: 
\[\{ x_i \}  \]
두번째 결정구조 RDF:
\[\{ y_i \}  \]


이들 결정구조들 사이의 유사성 계산 공식: 두 구조가 유사할 수록 아래 계산 계산 결과는 1로 수렴한다. 
Pearson distance 정의:
\[ 1-r_P \]

기존의 { database RDF }와 새롭게 만들어낸 { replica RDF }, 이들 두가지 데이터를 새로운 결정구조 찾는 과정에 이용할 것이다.
 
임의로 생성된 결정구조 하나가 있을 때, 즉시, RDF를 계산한다. 
이렇게 만들어진 RDF와 유사한 RDF를 찾고자 한다. 
위에서 확보한 {database RDF} 또는 {replica RDF}들 중에서 유사한 것이 있는지 체크한다. 

상당히 유사한 RDF를 찾았으면, 해당 임의의 결정구조를 저장한다. 
동일한 결정구조 생성-- RDF 계산 -- 비교 과정을 반복한다.

저장된 구조들에 대해서 제일원리계산을 적용한다. 먼저, 구조 최적화 작업을 수행한다. 오렌지 색으로 연결된 선은 병렬적으로 처리 될 수 있는 부분이다.
이렇게 얻어진 결정구조들에 대해서 제일원리 계산을 수행한다. 
즉, 얻어진 결정구조로 부터 시작하여 제일원리 계산상으로 완전히 이완시켜서 안정한 결정구조들을 최종적으로 얻어낸다. 
기존에 알려진 결정구조들 이외에 완전히 새로운 결정구조가 있는지 추가 확인 작업을 수행한다.
새로운 결정구조가 나왔다면, 제일원리 계산을 통해서 동적, 구조적, 열적 안정성 검정을 추가로 수행한다.
전자구조 계산을 수행한다. 

이러한 계산은 새로운 결정구조를 찾는데 얼마나 효율적일까?

Ab initio random structure search (AIRSS)란 방법은 완전히 무작위로 결정구조를 찾는 방법이다.
어떠한 기존의 데이터를 활용하지 않는다. 

무작위 구조 생성 --> 제일원리 계산으로 이완

기존의 알려져있는 데이터를 활용할 경우, 보다 효율적으로 에너지가 낮은 보다 안정된 결정구조들을 쉽게 찾을 수 있다.
{database RDF}, {replica RDF} 모두 새로운 결정구조를 찾는데 큰 도움이 된다.

기계학습을 이용하여, 정확히는 인공신경망을 활용하여, 보다 쉽게 기존의 결정구조들과 아주 유사하지만 서로 다른 결정들을 쉽게 탐색할 수 있다. 

기존의 방법: 광역최적화 방법과 제일원리 계산을 결합한 방법으로 원하는 물성(전자구조)을 가지는 새로운 결정구조를 탐색하는 방법이다.
붉은색으로 표시된 선은 병렬적으로 계산이 될 수 있는 부분이다.


---------------------------------------------------------------------------------------------------------------------



---------------------------------------------------------------------------------------------------------------------

 cat ~/rdfsearch/prunSERIAL.py
import numpy as np
import os
if False:
    nfiles=100
    for i in range(nfiles):
        astring=str(i).zfill(4)
        bstring='POSCAR_'+astring
        os.system('cp POSCAR_0001 '+bstring)
if True:
    arr = os.listdir()
    inputs=[]
    i=0
    for i0 in range(len(arr)):
        astring=arr[i]
#       if astring[-4:] =='.txt' :
#           print(arr[i])
#       if astring[-3:] =='.py' :
#           print(arr[i])
        if astring[:7] =='POSCAR_' :
#           print(arr[i])
            inputs.append(astring)
        i=i+1
    inputs=sorted(inputs)
    nfiles=len(inputs)
#   print(inputs)
if True:
    ndir=20
    for i in range(ndir):
        astring=str(i).zfill(4)
        print(astring)
        bstring='mkdir '+astring
        os.system(bstring)
if True:
    for i in range(ndir):
        astring=str(i).zfill(4)
        bstring='cp SERIAL.pbs ./'+astring
        os.system(bstring)
        bstring='cp INCAR_rlx  ./'+astring
        os.system(bstring)
        bstring='cp INCAR_rlxall  ./'+astring
        os.system(bstring)
        bstring='cp INCAR_bs  ./'+astring
        os.system(bstring)
        bstring='cp POTCAR  ./'+astring
        os.system(bstring)
if True:
    dirlist=[ False for i in range(ndir)]
    i=0
    for k in range(nfiles):
        i0=int(np.mod(i,ndir))
        os.system('cp '+inputs[k]+' ./'+str(i0).zfill(4))
        dirlist[i0]=True
        i=i+1
if True:
    for i in range(ndir):
        astring=str(i).zfill(4)
        if dirlist[i] :
            bstring='cd ./'+astring+' ; ls * ; cd ../'
#           bstring='cd ./'+astring+' ; qsub SERIAL.pbs ; cd ../'
            os.system(bstring)

---------------------------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------------------



핑백

덧글

  • 바죠 2021/04/21 11:58 # 답글

    https://arxiv.org/pdf/2104.09764.pdf

    https://www.nature.com/articles/s41524-020-0286-9

    https://arxiv.org/pdf/2005.07609.pdf
  • 바죠 2021/04/27 11:25 # 답글

    https://horizon.kias.re.kr/wp-content/uploads/2021/04/2104_%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0_%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5%EC%9D%98-%EC%8B%9C%EC%9E%91_fin.pdf

  • 2021/04/27 17:39 # 답글 비공개

    비공개 덧글입니다.
댓글 입력 영역

최근 포토로그



MathJax