Basic Mathematics for Artificial Intelligence


Part Ⅳ 빅데이터와 인공지능

http://matrix.skku.ac.kr/math4ai/part4/ 


인공지능 알고리즘에 응용하는 수학, 선형회귀, 자연어 처리, 이미지 인식


24강 동영상, 빅데이터와 인공지능 개론 https://youtu.be/MpWv-U_4fl0 (11:22)


▪ Part Ⅳ에서는 먼저 인공지능(Artificial Intelligence, AI), 기계학습(Machine Learning, 머신러닝), 딥러닝(Deep Learning) 등의 개념과 인공지능의 역사에 대하여 간단히 알아보고, 앞서 배운 수학적 지식이 인공지능에서 어떻게 사용되는지 살펴본다. 구체적으로는 데이터 분석에서 자주 사용되는 주성분 분석(Principal Component Analysis, PCA), 신경망(Neural Network), 그리고 데이터 마이닝 학생프로젝트 사례를 소개한다.


▪ 인공지능, 기계학습, 딥러닝 등의 용어는 최근 뉴스와 광고 등에서 많이 사용되고 있음에도 그 명확한 구분은 쉽지 않다. Carnegie Mellon대 전산학부 Andrew Moore는 인공지능은 최근까지 우리가 필요하다고 생각한 방식으로 컴퓨터가 행동하도록 만드는 과학 및 공학”이라고 정의한 바 있다.


기계 학습은 컴퓨터 과학자이자 기계 학습의 선구자인 Tom M. Mitchell이 ​​정의한 바와 같이 “컴퓨터 프로그램이 경험을 통해 자동으로 개선 될 수 있도록 하는 컴퓨터 알고리즘에 대한 연구” 이다. 즉 기계학습은 인공지능과 동의어라기보다는 인공지능을 달성하기 위하여 주어진 데이터를 조사하고 비교하여 공통 패턴을 찾고, 뉘앙스를 탐색하여 특정한 과제를 수행하도록 돕는 한 방법론이라고 할 수 있다.


기계학습은 크게 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)의 세 가지 유형으로 분류할 수 있다. 지도학습은 데이터에 대한 레이블(Label)이 주어진 상태에서 컴퓨터를 학습시키는 방법으로 앞으로 2절에서 살펴볼 “MNIST 데이터셋을 활용한 손 글씨 숫자 인식”이 대표적인 예라고 할 수 있다. 그리고 비지도 학습은 데이터에 대한 레이블이 주어지지 않은 상태에서 컴퓨터를 학습시키는 방법으로 데이터의 숨겨진 특징이나 구조를 발견하는데 사용된다. 1절에서 살펴볼 주성분 분석(PCA)데이터의 차원을 줄이는 비지도학습의 대표적인 예이다. 마지막으로 강화학습은 환경과의 상호 작용에서 수집한 관측치를 사용하여 보상을 극대화하거나 위험을 최소화하는 조치를 취하는 것을 목표로 하는 것으로, 어떤 환경 안에서 정의된 에이전트(Agent)가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상(Reward)을 최대화하는 행동 혹은 행동 순서를 선택하는 방법이다.


신경망(Neural Network)은 기계학습의 모델 중의 하나로, 신경계의 기본 단위인 뉴런(신경세포, Neuron)을 모델화 한 것이다. 인공 뉴런(Artificial Neural Network)은 1943년에 Warren McCulloch와 Walter Pitts가 처음 소개하였고, 1950년대 초반에는 문제 해결과 기호법 등의 주제를 주로 탐구했다. 1950년대 후반에 이르러 Frank Rosenblatt과 여러 연구자들이 퍼셉트론(Perceptron)이라 불리는 신경망을 고안하였다. 퍼셉트론의 경우, 문제를 해결하는 가중치(weight)가 있는 경우에 학습 규칙이 정확한 네트워크의 가중치로 수렴한다는 것을 입증했지만, 많은 한계를 가지고 있어서, 오랫동안 신경망 연구가 중단되었다. 1960년대로 접어들면서 이러한 연구에 관심을 보인 미 국방부는 인간의 기본적인 추론 방식을 흉내 낼 수 있도록 컴퓨터를 훈련하기 시작하였고, 1970년 국방 고등연구기획국(DARPA)이 수행한 도로 지도화 프로젝트가 그 사례라고 할 수 있다. 1980년대에 이르러 다중 신경망(Multi-layer Networks)을 학습하는 오차 역전파법(Back Propagation Algorithm)이 개발되면서 신경망 연구가 다시 활력을 얻게 되었다. 또한 국방 고등 연구 기획국은 Siri, Alexa나 Cortana와 같은 인공지능이 개발되기 한참 전인 2003년에 지능형 개인 비서를 개발하기도 하였다.


딥러닝(Deep Learning)은 음성을 인식하고, 이미지나 패턴을 확인하고, 다음 상황을 예측하는 일과 같이 인간이 하는 작업을 수행하도록 컴퓨터를 교육하는 일종의 기계 학습(머신 러닝)이다. 사전에 정의 된 수식을 통해 실행되도록 데이터를 구성하는 대신, 1. 주어진 데이터에 초기 파라미터(parameter)를 설정해주고, 2. 여러 겹의 처리 계층을 사용하여 패턴을 인식하면서, 컴퓨터가 스스로 학습하도록 훈련(train)하는 것이다. 이러한 노력들은 오늘날 우리가 일상에서 접하고 있는 자동화와 형식 추론 기술의 기틀을 다지는 역할을 하였으며, 이러한 기술에는 사람의 능력을 보완하고 확장할 수 있는 의사 결정 지원 시스템과 스마트 검색 시스템이 포함된다. Amazon과 Netflix가 머신러닝을 이용한 추천 시스템의 개념을 대중화한 것과 같이, 앞으로 산업 전반적인 분야에서 인공지능(AI)이 활용될 것으로 사료된다.


[참고] 김성필, 딥러닝 첫걸음, 한빛미디어, 2016.

https://www.sas.com/en_gb/insights/analytics/deep-learning.html

https://www.sas.com/ko_kr/insights/analytics/what-is-artificial-intelligence.html

https://www.forbes.com/sites/bernardmarr/2016/12/06/what-is-the-difference-between-artificial-intelligence-and-machine-learning/#77a428c52742


[우리는 4장에서 주성분분석, 인공신경망, 그리고 실제 프로젝트의 예를 중심으로 소개한다.]


1. 주성분분석 (Principal Component Analysis, PCA)

2. 신경망 (Neural Network)

3. 학생 프로젝트 사례



1. 주성분분석

25강 동영상, 빅데이터와 인공지능 PCA https://youtu.be/ukIttphmM_4 (34:59)



1.1 주성분 분석(Principal Component Analysis, PCA)


▪ 아래 1974년 Motor Trend magazine에 실린 1973년~74년도 자동차 32대의 특성을 기술하고 정량화하는 11가지 변수에 관한 데이터를 보자. 자료의 출처는 다음과 같다.


[출처]  Robert Reris and J. Paul Brooks, Principal Component Analysis and Optimization: A Tutorial, 14th INFORMS Computing Society Conference, Richmond, Virginia, January 11–13, 2015, pp. 212–225   http://www.people.vcu.edu/~jpbrooks/pcatutorial/


 

mpg

cyl

disp

hp

drat

wt

qsec

vs

am

gear

carb

Mazda RX4

21.0

6

160

110

3.90

2.620

16.46

0

1

4

4

Mazda RX4 Wag

21.0

6

160

110

3.90

2.875

17.02

0

1

4

4

Datsun 710

22.8

4

108

93

3.85

2.320

18.61

1

1

4

1

Hornet 4 Drive

21.4

6

258

110

3.08

3.215

19.44

1

0

3

1

Hornet Sportabout

18.7

8

360

175

3.15

3.440

17.02

0

0

3

2

Valiant

18.1

6

225

105

2.76

3.460

20.22

1

0

3

1

...

 

 

 

 

 

 

 

 

 

 

 


따라서 자동차 한 대에 관한 데이터는 11차원의 벡터로 표현된다. 이처럼 고차원의 데이터는 계산과 시각화가 어려워 분석하기가 쉽지 않다. 따라서 데이터의 분포를 가능한 유지하면서 데이터의 차원을 줄이는 것이 필요하다. 이를 차원 축소(dimensionality reduction)라 한다. 물론 필요한 일부 변수의 데이터만 뽑아서 사용할 수도 있지만(Feature Selection), 변수들 사이에 어떤 밀접한 관계가 있는지는 미리 알 수가 없어서 이 경우 원 데이터의 분포를 잘 반영한다고 볼 수는 없다.


주성분 분석(Principal Component Analysis, PCA)은 가장 널리 사용되는 차원 축소 기법 중 하나로, 원 데이터의 분포를 최대한 보존하면서 서로 직교하는 새 기저(축)를 찾아, 고차원 공간의 데이터들을 선형 연관성이 없는 저차원 공간으로 변환한다. 이때 계산은 주로 행렬의 고윳값 분해 또는 특이값 분해(SVD)를 사용한다.                                                         [Key Idea 4]


▪ PCA는 기존의 변수를 일차 결합하여 서로 선형 연관성이 없는 새로운 변수, 즉 주성분(principal component, PC)들을 만들어 낸다. 첫 번째 주성분 PC1이 원 데이터의 분포를 가장 많이 보존하고, 두 번째 주성분 PC2가 그 다음으로 원 데이터의 분포를 많이 보존한다. 예를 들어, PC1, PC2, PC3가 원 데이터의 분포(성질)의 약 90%를 보존한다면, 10% 정도의 정보는 잃어버리더라도, 합리적인 분석에 큰 무리가 없으므로, PC1, PC2, PC3만 택하여 3차원 데이터로 차원을 줄일 수 있다. 이 경우 계산과 시각화가 용이하여 데이터를 쉽게 분석할 수 있다.


  묶음 개체입니다.

[그림 출처]  Jolliffe, I.T. Principal Component Analysis, Springer, 2002



1.2 Principal Component의 유도


▪  앞서 두 개의 확률변수 에 대하여 공분산을 


          


로 정의하였다. 그리고 개의 확률변수 {, , }에 대한 공분산 행렬(covariance matrix)성분이 일 때는 번째 확률변수 번째 확률변수 사이의 공분산 으로, 일 때는 번째 확률변수의 분산 으로 하는 행렬로 정의하고 로 표기하였다. 쉽게 말하면, 정사각행렬의 성분을 각 변수의 분산(주대각선)과 공분산으로 채운 것이 바로 공분산 행렬이다.


    


공분산 행렬은 아래 그림과 같이 데이터의 분포를 나타낸다고 볼 수 있다.


그림입니다.
원본 그림의 이름: cov-1.png
원본 그림의 크기: 가로 1694pixel, 세로 894pixel그림입니다.
원본 그림의 이름: cov-2.png
원본 그림의 크기: 가로 1664pixel, 세로 894pixel

[그림 출처] https://www.ritchieng.com/machine-learning-anomaly-detection/


▪ 이제 데이터 행렬(Data matrix)이라 하자. 여기서 은 표본(sample)의 개수이고, 는 데이터의 특성(feature)을 나타내는 확률변수 {, , }의 개수이다. 데이터 행렬 성분 번째 표본의 번째 확률변수 에 대한 하나의 데이터를 의미하고, 는 확률변수 가 갖는 모든 데이터를 의미한다.


                      그림입니다.
원본 그림의 이름: CLP00003d0c0001.bmp
원본 그림의 크기: 가로 564pixel, 세로 310pixel


▪ 위의 센터링(centering)하여, 를 정의하자. 이를 위해

  (1) 각 열(하나의 확률변수가 갖는 데이터)의 평균을 구한다. 확률변수 의 평균은 로 표기한다.


        , ... ,  .


  (2) 열(column)별로 데이터에서 (열의) 평균을 뺀다. 이 행렬을 센터링된 행렬 라 한다.


       


  여기서 센터링된 행렬 각 열의 평균은 0이 된다. 이런 이유로 센터링된 행렬을 mean-centered 행렬이라 부른다. 앞으로 주어진 데이터 행렬 는 이미 센터링 되어 있는 행렬이라고 가정하자.


데이터 행렬 가 센터링(mean-centered) 되어 있는 행렬이면,  공분산 행렬은 다음과 같이 계산된다.


    

      

      


▪ 우리의 목표는 ‘공분산 행렬로 부터 얻은 정보’를 최대한 보존하는 ‘더 적은 개수()의 새로운 변수들’을 찾으려는 것이다.    [dimension reduction]


▶ [단계 1]

확률변수 {, , }의 일차결합으로 만든 첫 번째 주성분


                      


분산이 최대가 되도록 하고자 한다. 여기서 개의 상수 적재계수(loadings)라 부르기도 한다. 의 평균은 0이므로, 의 분산은 다음과 같이 계산된다.  ()


   Var ()Var()

               (  )

           

                ( 이므로)

                    (와의 공분산)


위 식에 Part Ⅰ에서 학습한 이차형식 을 이용하면 의 분산은 다음과 같이 나타낼 수 있다.


                          Var ()


여기서 은 적재계수 을 하나의 (열) 벡터로 나타낸 것이다.

따라서 [단계 1]은 결국 아래 문제를 푸는 것이다. 이때 의 방향에만 관심이 있으므로 의 크기를 1로 제한한다.


              maximize Var ()     ()

              subject to               ()


▪ 위 문제에 라그랑주의 승수법(Method of Lagrange multipliers)을 사용한다. ([참고] https://bit.ly/36MRUlO)


     

라그랑주의 승수법

문제

        maximize(또는 minimize)  

        subject to               

[1단계]

라그랑주 함수 를 만든다.

[2단계]

, 즉 을 만족하는 점 를 모두 구한다.

[3단계]

[2단계]에서 구한 모든 점에서 함수 의 값을 구한다. 이 중 가장 큰 값이 최댓값, 가장 작은 값이 최솟값이 된다.


를 라그랑주 승수라 할 때, , 이고


               


에 관한 그래디언트가 이 되어야 하므로, , 즉 이다. 따라서 의 고윳값이고, 은 그에 대응하는 고유벡터가 된다. 의 가장 큰 고윳값을 이라 하고 그에 대응하는 단위고유벡터를 이라 하면, Var () 이 된다.


▶ [단계 2] 

마찬가지로 두 번째 주성분 의 분산이 최대가 되도록 하되, 과는 상관관계가 없도록 를 찾아야 한다. 이는 다음 문제를 푸는 것과 같다. 여기서 는 적재계수 을 하나의 벡터로 나타낸 것이다.


                  maximize   Var ()   ()

                  subject to             ()

                                          ()


이때 는 상관관계가 없어야 하므로


     Cov[, ]

   , , ,


으로 부터 을 만족해야 한다.


[단계 1]과 마찬가지로 라그랑주의 승수법을 사용하면 다음을 얻는다. 즉 를 라그랑주 승수라 할 때, 


       


에 관한 그래디언트가 이 되어야 하므로 같은 방식으로


                            


 이고, 이 식의 양변에 [단계 1]에서 얻은 을 내적하면


   


이다. 그러면  이고 인데 이므로 이어야 한다. 따라서 이다. 이를 통해 의 두 번째로 큰 고윳값()이고, 는 그에 대응하는 (단위)고유벡터가 됨을 알 수 있다. 역시 Var ()이 성립한다.


▶ [단계 3]

같은 방법으로 번째 주성분 의 분산이 최대가 되도록 하되 , , ..., 과는 상관관계가 없도록 를 찾아야 한다. 이는 다음 문제를 푸는 것과 같다.


                  maximize  Var ()

                  subject to 

                                  , , ...,


마찬가지로 라그랑주의 승수법을 사용하면, 번째로 큰 고윳값()이고, 가 그에 대응하는 (단위)고유벡터가 됨을 알 수 있다. 따라서 Var ()이 성립한다.



1.3 PC score


를 센터링(mean-centered)된 의 데이터 행렬이라 하자. 여기서 은 표본(sample)의 개수이고, 는 확률변수(variable, feature)의 개수이다. 공분산 행렬 대칭행렬이므로, 다음과 같이 직교대각화가 가능하다. 


                                


여기서 의 고윳값 를 크기 순서대로, 주대각선 성분에 배열한 대각선행렬이고, 는 그에 대응하는 정규직교인 고유벡터를 열벡터로 하는 직교행렬이다. 또한 이므로 양의 준정부호(positive semidefinite) 행렬이고, 고윳값은 이다. 그리고 고유벡터는 주축(principal axes) 또는 주방향(principal directions)이라고도 부른다.


주성분(PC) , , ... , 를 벡터로 나타내면 다음과 같다.


        


그리고 각 확률변수 에 원 데이터를 대입하면 행렬 를 얻는다.


          그림입니다.
원본 그림의 이름: CLP00003d0c0002.bmp
원본 그림의 크기: 가로 836pixel, 세로 370pixel


그러면 번째 데이터의 좌표번째 행벡터로 주어지고, 번째 PC score (주성분점수, principal component score)번째 열벡터로 주어진다.



 이제 의 특이값분해(SVD)가 다음과 같이 주어져 있다고 하자.


     

       


여기서 , 는 직교행렬이고, 는 크기 순서대로 배열된 특이값(singular value) 을 주대각선 성분으로 하는 대각선행렬 이다. 그러면 관계식


        


으로부터 다음을 얻는다.


(1) 라 하면 의 열벡터주축(principal axes)이 된다.

(2) 이므로, 의 열벡터들이 PC score (주성분점수, principal component score)가 된다.

(3) 특이값 의 고윳값 와 관계식 을 만족하며, 는 대응하는 PC의 분산이 된다.

(4) 데이터를 차원에서 () 차원으로 줄이기 위하여, 의 처음 개의 열벡터()와 번째 선행 주 부분행렬(leading principal submatrix)()을 택하면, 는 처음 개의 PC를 포함하는 행렬이 된다.


               .


(5) (4)에서 얻은 , , ... , 에 대응되는 주축으로 이루어진 행렬 을 곱하면, 는 처음 개의 PC로부터 원 데이터를 복원하도록 해주는 rank가 행렬이 된다.                         [rank reduction]


        .


이는 의 SVD에서 크기 순서대로 개의 큰 특이값 과 이에 대응되는 의 처음 개의 열벡터를 택하는 것과 같다. 이를 truncated SVD라고 한다. 실제로 는 rank 인 행렬 중에서 에 가장 가까운 행렬이 된다. 즉 다음이 성립한다.


              .



1.4 PCA 예제


이제 PCA 예제를 살펴보자. 자료의 출처는 다음과 같다.


[출처]  http://yatani.jp/teaching/doku.php?id=hcistats:PCA


이를 Sage에서 R 코드로 구현한 자료는 http://math1.skku.ac.kr/home/pub/212/ 에서 확인할 수 있다.


사람들이 새 컴퓨터를 선택할 때 관심을 갖는 아래 사항에 관하여 척도가 7점인 4문항의 리커트(Likert) 설문 조사를 16명에게 실시하였다.

(1: 매우 그렇지 않다 – 7: 매우 그렇다)


     Price        가격이 저렴하다.

     Software     운영체제가 사용하려는 소프트웨어와 호환된다.

     Aesthetics    디자인이 매력적이다.

     Brand        유명 브랜드의 제품이다.


▪ 아래와 같이 설문조사를 통하여 얻은 데이터를 입력하여 데이터 행렬(data)을 생성한다.


[R code]  http://mathlab.knou.ac.kr:8080/ http://mathlab.knou.ac.kr/r/ http://sage.skku.edu/



▪ 앞서 언급한 1974년 Motor Trend magazine에 실린 1973년~74년도 자동차 32대의 자료에 관하여 PCA를 적용한 결과는  http://www.people.vcu.edu/~jpbrooks/pcatutorial/ 를 참조하라.



2. 신경망

26강 동영상, 빅데이터와 인공지능, 신경망 https://youtu.be/D_oCT-tEW_4 (13:06)

26강 part 2, 인공신경망(은닉망의 수학) https://youtu.be/d4WercT_OnU (18:12)



2.1 신경망(Neural Network)


▪알고리즘에서 기계학습으로 변하는 과정은 수학적모델링을 통하여 함수를 구하는 방식에서, 수많은 데이터를 기반으로 기계학습을 통하여 행렬을 구하는 과정으로 변한 것으로 이해하면 쉽다. 이 과정에서 신경망을 이용하는 것이다.


                 그림입니다. 


신경망(neural network)은 신경계의 기본 단위인 뉴런(신경세포, neuron)을 모델화 한 것으로, 인간의 뇌는 약 1000억 개의 뉴런을 가지고, 컴퓨터에게는 어려운 이미지 인식과 같은 업무를 잘 수행한다. 아래 그림은 각각 실제 뉴런과 이를 모델화한 인공 뉴런이다.


         그림입니다.
원본 그림의 이름: CLP000040900001.bmp
원본 그림의 크기: 가로 1195pixel, 세로 377pixel

 

[그림 출처] 블로그 https://m.blog.naver.com/PostList.nhn?blogId=samsjang 

퍼셉트론 – 인공신경망의 기초개념


             그림입니다.
원본 그림의 이름: CLP000040900003.bmp
원본 그림의 크기: 가로 883pixel, 세로 504pixel


▪ 하나의 인공 뉴런에서는 다수의 입력 신호 를 받아서 하나의 신호를 출력한다. 이는 실제 뉴런에서 전기신호를 내보내 정보를 전달하는 것과 비슷하다. 이때 뉴런의 돌기가 신호를 전달하는 역할을 인공 뉴런에서는 가중치(weight) 가 그 역할을 한다. 각 입력신호에는 고유한 가중치가 부여되며 가중치가 클수록 해당 신호가 중요하다고 볼 수 있다.


▪ 뉴런에서 임계값(threshold) 이상의 자극이 주어져야 감각이 반응하는 것처럼, 인공 뉴런에서도 다수의 입력 신호가 주어지면, 미리 부여된 가중치와 계산을 한 후 그 총합이 정해진 임계값을 넘으면, 1을 출력하고 넘지 못하면 0 (또는 –1)을 출력한다. 이때 출력을 결정하는 함수를 활성화 함수(activation function) 라 한다. 주로 사용되는 활성화 함수로는 유계이며 미분 가능한 실함수인 sigmoid 함수가 있다.

 

                         


이는 임계값을 기준으로 활성화 되거나 혹은 비활성화 되는 step function  또는 Heaviside function을 근사화 한 것이다.


                          

 

                그림입니다.
원본 그림의 이름: CLP000021100001.bmp
원본 그림의 크기: 가로 545pixel, 세로 480pixel


sigmoid 함수는 또한 다음과 같은 좋은 성질을 갖는다.


   


▪ 신경망은 순환하지 않는 그래프로 연결된 뉴런의 모음을 모델화 한 것으로 다음은 신경망을 그림으로 표현한 것이다. 왼쪽부터 입력층(Input layer), 은닉층(Hidden layers), 출력층(Output layer)으로 구성되어 있다. 따라서 입력층에서 신호를 받으면, 미리 부여된 가중치와 계산 후 그 총합이 은닉층으로 전파되고, 주어진 활성화 함수에 따라 그 다음 층으로 전해질 신호가 계산된다. 이런 식으로 전파되어 출력층에서 해당하는 결과를 내보낸다.


              그림입니다.
원본 그림의 이름: tikz11.png
원본 그림의 크기: 가로 597pixel, 세로 324pixel

                [그림 출처]  http://neuralnetworksanddeeplearning.com/chap1.html


활성화 함수가 일차함수인 간단한 경우를 통해 신경망의 원리를 살펴보도록 하자. 아래와 같이 하나의 노드는 입력 신호를 받아 결과를 전달해주는 하나의 함수로 볼 수 있다. 따라서 입력 를 받아 를 출력하는 경우 와 같이 나타낼 수 있다. (여기서 는 편향(bias)을 의미한다. 예를 들어, 입력층에서 신호 를 받으면, 미리 부여된 가중치 와 계산 후 그 결과값이 임계값 를 넘으면 1을 출력, 즉


                               1을 출력


할 때 를 왼쪽으로 이항하면 를 얻는다.)


      그림입니다. 그림입니다.


마찬가지로 입력이 두 개라면,  , 입력이 세 개라면 와 같이 표현할 수 있을 것이다.


     그림입니다.      그림입니다.


▪ 만일 출력이 두 개라면, 다음과 같이 Part 1에서 학습한 행렬의 곱을 이용하여 나타낼 수 있다. 이때, 편의상 편향은 0이라고 하고, 는 입력층의 번째 노드에서 출력층의 번째 노드로 연결된 가중치를 의미한다.


                      그림입니다.     


     또는 


▪ 입력값과 정답을 알고 있는 데이터셋(dataset)이 있다고 하자. 우리의 목적은 주어진 데이터셋을 잘 판단하도록 신경망의 가중치를 찾는 것이다. 이때 어떤 공식에 의해서 가중치를 계산하는 것이 아니라, 초기에 임의로 가중치를 부여해놓고, 주어진 데이터로부터 신경망을 이용하여 얻은 예측값과 미리 알고 있는 정답간의 오차를 줄이는 방향으로 가중치를 점차 갱신해 나간다. 이때 계층 간의 각각의 연결이 오차에 영향을 주는 정도에 비례해서 오차를 전달해준다. 대표적인 방법으로 오차 역전파(back propagation)법이 있다.


                그림입니다.
원본 그림의 이름: H1KsG.png
원본 그림의 크기: 가로 649pixel, 세로 453pixel

         [그림 출처]  https://sacko.tistory.com/19?category=632408


▪ 오차 역전파법에 의해 각 계층에 전달된 오차를 바탕으로 가중치를 갱신하는 방법은 Part 2에서 이미 학습한 경사하강법(gradient descent method)을 오차함수를 최소화하는 문제에 적용한 것과 같다. 예를 들어, 각 계층에서 입력신호 ()를 받아 미리 부여된 가중치와 계산 후 주어진 활성화 함수로부터 출력된 값을 라 하고, 실제 정답은 라 하자. 그러면 제곱 오차(squared error)는 다음과 같이 주어진다.


      


그러면 각 가중치를 갱신하는 공식은 경사하강법으로부터 다음과 같이 주어진다.


      .


▪ 이제 아래와 같이 간단한 신경망의 각 계층에 전달된 오차로부터 가중치를 갱신하는 방법에 관하여 살펴보자.


각 계층에 전달된 오차를 계산한다. 먼저 출력층에서의 오차를 계산하기 위하여, 은닉층에서 입력 신호 를 받아 가중치 , , , 와 계산한 후,  sigmoid 함수 를 거쳐 출력 를 얻었다고 가정하자.


그림입니다.
원본 그림의 이름: CLP0000250419dd.bmp
원본 그림의 크기: 가로 868pixel, 세로 299pixel


그러면 출력층에서의 제곱오차는 다음과 같다.


        

          


이제 은닉층에서의 오차를 계산해보자. 은닉층에는 출력층과 달리 목표하고자 하는 정답이 따로 없으므로 출력층에서의 오차 에 해당하는 것이 없다. 이때 앞서 언급한 오차 역전파법을 활용한다.


신경망에서 오차가 일어났다는 것은 결국, 입력신호가 입력층으로부터 은닉층을 거쳐 최종 출력층으로 전파될 때, 은닉층에서의 오차가 반영된 결과라고 볼 수 있으므로 계층 간의 각각의 연결이 오차에 영향을 주는 정도, 즉 가중치에 비례해서 오차를 역으로 전달해주면 된다.


      그림입니다.
원본 그림의 이름: CLP00003fc40c64.bmp
원본 그림의 크기: 가로 663pixel, 세로 276pixel


출력층의 첫 번째 노드에서 오차 을 얻었다고 가정하자. 이 노드는 은닉층의 첫 번째 노드와 가중치 , 두 번째 노드와 가중치 으로 연결되어 있다. 가중치가 크면 오차에 미치는 영향도 클 것이므로, 가중치에 비례하여 오차를 은닉층에 전달해준다. 따라서 예를 들어, 를 은닉층의 첫 번째 노드에 전파된 오차라 하면 다음과 같이 계산할 수 있다.


      


마찬가지로 를 구할 수 있다.


     


위의 두 식에서 분모를 제외하면 다음과 같이 행렬을 이용하여 나타낼 수 있다.


     


이때, 분모를 없애게 되면 원 식과 비교했을 때, 일정 부분의 비율이 사라지게 되는데, 다음 웹사이트에 따르면, 분모가 있는 경우와 실제로는 거의 차이가 없이 잘 작동하는 것이 알려져 있다.


[참고]  http://makeyourownneuralnetwork.blogspot.com/2016/07/error-backpropagation-revisted.html


출력층에서 얻은 오차로부터 은닉층과 출력층 사이의 가중치를 갱신한다. sigmoid 함수의 성질과 연쇄법칙으로부터 을 구하면 다음과 같다.


      

            


다른 가중치에 대해서도 마찬가지로 다음과 같이 계산한다.


      

      

      


즉, 가중치 는 은닉층의 번째 노드와 출력층의 번째 노드만 연결되어 있으므로, 에 대하여 편미분하면 다음과 같이 간단하게 표현됨을 알 수 있다.


      


여기서 는 은닉층의 번째 노드에서의 입력, 는 출력층의 번째 노드에서의 출력, 는 출력층의 번째 노드에서의 오차이다.


이제 경사하강법을 적용하여 다음과 같이 은닉층과 출력층 사이의 모든 가중치를 갱신한다.


      


은닉층에 전달된 오차로부터 입력층과 은닉층 사이의 가중치를 갱신한다. 기본적으로는 은닉층과 출력층 사이의 가중치를 갱신하는 방식으로 계산하면 된다. 논의의 편의상 기호를 그대로 사용하였다.


         그림입니다.
원본 그림의 이름: CLP00004f0c0002.bmp
원본 그림의 크기: 가로 610pixel, 세로 259pixel


여기서 는 입력층의 번째 노드에서의 입력, 는 은닉층의 번째 노드에서의 출력, 는 은닉층의 번째 노드에 전파된 오차이다. 따라서 다음을 얻을 수 있다.


     


이제 경사하강법을 적용하여 다음과 같이 입력층과 은닉층 사이의 모든 가중치를 갱신할 수 있다.


      


▪ 신경망은 제대로 예측할 때 까지 많은 데이터를 필요로 하며, 또한 입력층과 출력층 사이에 많은 은닉층을 둘 수도 있다. 이와 같이 은닉층이 여러 개 있는 인공신경망을 심층신경망(deep neural network)이라고 부르며, 심층 신경망을 학습하기 위한 기계학습 기법을 딥러닝(deep learning)이라고 부른다. 은닉층이 여러 개 있는 경우에도 마찬가지로 오차 역전파법을 이용하여 그 이전 층에서 전파된 오차로부터 경사하강법을 적용하여 가중치를 갱신할 수 있다. 기타 자세한 사항은 신경망, 딥러닝과 관련된 도서를 참조하라.



1. SKKU 선형대수학 Lectures

  http://matrix.skku.ac.kr/LA-K/     http://matrix.skku.ac.kr/LA/ 


2. SKKU 미적분학 Lectures 

  http://matrix.skku.ac.kr/Cal-Book1/

  http://matrix.skku.ac.kr/Cal-Book/

   Part I   Single Variable Calculus    Part II  Multivariate Calculus


3. 기초 통계학

   R을 활용한 기초 통계학 실습실 Lab 1

   http://matrix.skku.ac.kr/2018-album/R-Sage-Stat-Lab-1.html 

   R을 활용한 기초 통계학 실습실 Lab 2

   http://matrix.skku.ac.kr/2018-album/R-Sage-Stat-Lab-2.html 


4. Mathematics for BigData

  http://matrix.skku.ac.kr/e-math/  


5. SKKU Discrete Mathematics(이산수학) Lectures

  http://matrix.skku.ac.kr/2018-DM/DM-Labs.htm 




3. 학생 프로젝트 사례

28강 동영상, 빅데이터와 인공지능, Project 발표 https://youtu.be/EKkr3EkDV3M (21;06)


아래는 2016년도 1학기 개설된 ‘빅데이터를 위한 수학’ (담당: 이상구 교수)에서 수행된 학생 프로젝트 사례이다.


제목 :  Statistical analysis on features of actual energy consumption

       of office buildings in the South Korea


           프로젝트 수행 학생 :  안기언, 추한경 ,  지도 : 이상구 교수

                                                  

*본 내용은 보강 연구를 거쳐 Big-data Analysis on Energy Consumption of Office Buildings in Seoul, Korea 라는 제목으로 저자(Ki Uhn Ahn, Han Sol Shin, Cheol Soo Park, Kwang Woo Kim)에 의해 아래 학회

  

    Proceedings of the 15th IBPSA Conference, San Francisco, CA, USA, Aug. 7-9, 2017    http://www.ibpsa.org/proceedings/BS2017/BS2017_411.pdf


에 발표되었고, 그 후 다음과 같은 논문으로 게재되었다. 본 프로젝트 사례는 대표저자인 안기언 군의 동의를 아래와 같이 얻어 사용한다. 


Ki Uhn Ahn, Han Sol Shin and Cheol Soo Park, Energy Analysis of 4625 Office Buildings in South Korea, Energies 2019, 12(6), 1114; https://doi.org/10.3390/en12061114


[안녕하세요 이상구 교수님,


항상 교수님께 감사한 마음을 갖고 있으며 이를 꼭 전해 드리고 싶었습니다.

 교수님께 수강한 PBL 수업 덕분에,

<다른 강좌에서 배울 수 없었던, 기계학습 및 인공지능에 활용되는 수학의 지식을 얻고 이해하는데 큰 도움이 되었으며, Python-Sage, R 등의 다양한 프로그래밍 언어를 실습하여, 이를 연구에 활용할 수 있는 소중한 계기가 되었고, 수업에서 진행하였던 프로젝트를 통해 제 전공분야의 학술적 의의를 도출하고, 이를 연구 결과로 발표할 수 있었습니다.> 많은 지식과 경험을 얻게 가르쳐 주시고, 교수님 수업에서 소개되는 큰 영광을 주셔서 정말 감사합니다.  

  교수님의 수업을 통하여 성균관대학교 후배들 또한 학문적 지적 호기심이 고취되고, 큰 배움과 발전이 있을 것이라 생각합니다. 건강하시고 항상 좋은 일 가득하시길 바랍니다.

                           안기언 드림.   (2019/09/04 (수) 12:50) ]



3.0 역할 분담


○ 안기언

- 데이터마이닝 분석 수행 위한 데이터 가공, - 자료의 시각화 및 분석, - 통계기반 데이터마이닝, - 보고서 작성


○ 추한경

- 건물정보 데이터베이스 수집,  - 데이터 필터링



3.1 Outline of4 project


○ 목적 : 국내 건축물 에너지 소비 현황 및 특징을 분석하고, 에너지 사용량에 영향을 미치는 요소를 확인하여, 향후 정책 및 에너지 절감 기술 개발 방향 논의


○ 배경 : 전 세계적으로, 건축물에서 소비되는 에너지를 절감하기 위해, 에너지 절감 정책을 제정하고, 신기술 개발에 주력하고 있음. 하지만, engineering based approach(e.g. building energy simulation analysis) 기반의 건물 에너지 성능 분석 및 예측은 건축물의 실제 에너지 소비와 상당한 차이를 보임. 따라서, 전술한 노력들이 실효성을 지니기 위해서는, 기존 건축물의 현황 및 에너지 소비 패턴에 대한 분석이 선행되어야함.


○ 비고 : 본 수업시간을 통해 접하게 된 R을 실제 데이터 마이닝 프로젝트에 활용하면서, R을 학습하고 익히기 위한 개인적인 목표가 있었음. 따라서 본 프로젝트는 데이터의 편집을 제외하고 모든 과정을 R을 통해서 진행함



3.2 Data collection and matching


개념 : 데이터마이닝을 통해 자신이 원하는 정보를 획득하기 위해서는, 원본 데이터를 자신의 목적 및 데이터마이닝 방법에 맞춰 변형시키는 작업이 필요함 (Data generalization or specialization).


○ 개요 : 최근 정부는 건축물 특징에 대한 정보가 담긴 데이터베이스와 건축물에서 소비되고 있는 에너지 사용량 데이터베이스를 각각 공개하였으며, 본 프로젝트는 두 데이터베이스를 수집하고, 각 데이터베이스가 포함하고 있는 건축물 주소를 기준으로 하나의 데이터베이스로 통합하는 작업을 수행함.


○ 데이터베이스 목록: 정부 3.0에 따라 공개된 건축물 데이터베이스 2가지 활용

   - 건물 특징 정보 데이터베이스: http://open.eais.go.kr/

     • 데이터 목록: 주소, 연면적, 용적율, 주용도, 기타용도, 세대 수, 층 수, 준공년도

   - 건물 에너지 사용량 데이터베이스: https://open.eais.go.kr

     • 데이터 목록: 주소, 전기/가스 월별 에너지 사용량



3.3 Description of database(DB)


○ 대상 : 서울시 업무용 건축물, 총 4,603동


○ 데이터 목록

  - 주소 : 구(서울시 소재 25개 구), 동, 지번 [문자 형태]

  - 층수 : 지상 층수, 지하 층수 [숫자 형태]

  - 연면적 [숫자형태]

  - 엘리베이터 대수 [숫자 형태] 

  - 용도 : 주용도, 부용도 [문자형태]

  - 준공년도 [숫자형태]

  - 에너지 사용량: 월별 전기, 가스 에너지 사용량 [숫자 형태]



○ DB의 건축물 위치 가시화

  - 방법: 데이터 목록이 포함하고 있는 주소를 기준으로, 위도 및 경도 정보를 획득하고, 이를 통해 지도에 위치를 표현함


        그림입니다.
원본 그림의 이름: Map_Seoul.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel



3.4 Visualization of energy consumption


 그림입니다.
원본 그림의 이름: Map_elec.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel그림입니다.
원본 그림의 이름: Map_gas.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel그림입니다.
원본 그림의 이름: Map_pri.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel그림입니다.
원본 그림의 이름: Map_year.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel

<단위 면적당 전기 에너지 사용량 기준 건축물 분포 현황>           

<단위 면적당 가스 에너지 사용량 기준 건축물 분포 현황>                 

<단위 면적당 일차 에너지 사용량 기준 건축물 분포 현황>                 

<준공년도 기준 건축물 분포 현황>



3.5 Statistics of database


<지역구별 월별 일차 에너지 사용 현황>



3.6 Estimation of energy consumption


그림입니다.
원본 그림의 이름: map_density_elec.png
원본 그림의 크기: 가로 981pixel, 세로 600pixel그림입니다.
원본 그림의 이름: Map_density_gas.png
원본 그림의 크기: 가로 981pixel, 세로 600pixel그림입니다.
원본 그림의 이름: Map_density_primary.png
원본 그림의 크기: 가로 981pixel, 세로 600pixel그림입니다.
원본 그림의 이름: Map_density_year.png
원본 그림의 크기: 가로 981pixel, 세로 600pixel

               <단위 면적당 전기 에너지 사용량 기준 건축물 분포 추정>

               <단위 면적당 가스 에너지 사용량 기준 건축물 분포 추정>

               <단위 면적당 일차 에너지 사용량 기준 건축물 분포 추정>

               <준공년도 기준 건축물 분포 추정>


○ 결과

  - 전기 에너지 사용량이 높은 건축물은 강남구 및 서초구에 주로 밀집해 있으며, 중구 및 종로구도 다른 지역구에 비해 전기 에너지 사용량이 높음    ...

  - 노후화된 건축물은 종로구에 밀집해 있으며, 그 외의 건축물은 전 지역구에 걸쳐 균등한 수준으로 분포하고 있음



3.7 Correlation between energy consumption and building year


                 그림입니다.
원본 그림의 이름: scatter_year_elec.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel         그림입니다.
원본 그림의 이름: scatter_year_primary.png
원본 그림의 크기: 가로 981pixel, 세로 981pixel

                      <전기 에너지 사용량과 준공년도의 scatter plot>

                      <일차 에너지 사용량과 준공년도의 scatter plot>


3.8 Detailed analysis on correlation between energy consumption and building features


그림입니다.
원본 그림의 이름: Scatter_All.png
원본 그림의 크기: 가로 780pixel, 세로 780pixel그림입니다.
원본 그림의 이름: CorrelationPlot.png
원본 그림의 크기: 가로 780pixel, 세로 780pixel그림입니다.
원본 그림의 이름: DensityPlot.png
원본 그림의 크기: 가로 1200pixel, 세로 600pixel


<건축물 특징 사이의 scatter plot matrix 분석 결과>

<건축물 특징 사이의 correlation plot> <건축물 특징 별 에너지 사용량 확률 밀도>



3.9 Estimation of energy basis and building operation hour



3.10 Conclusion


○ 노후화된 건축물의 에너지 성능 개선을 통해, 에너지 사용량을 절감할 수 있다는 직접적인 근거를 확인하기 어려움(노후 건축물의 에너지 사용량이 적기도 하며, 신식 건축물의 에너지 사용량이 많기도 함)

○ 건물의 에너지 사용량에 결정적 영향을 미치는 요인은 건물의 특징 및 속성보다도 건물의 에너지 사용시간이며, 이로 인해 건축물의 에너지 성능과 사용량 사이의 차이가 발생함(performance gap)

○ 건물의 성능이 에너지 사용량에 영향을 미칠 수 있지만, 건물 설비 시스템의 효율적인 운영이 에너지 사용량을 절감시킬 수 있는 결정적인 요인이 될 것으로 추정됨


[참고 문헌]

건물에너지 정보공개시스템, http://open.eais.go.kr/ (accessed by 2016.06.13.)

건축데이터 민간개방 시스템, https://open.eais.go.kr (accessed by 2016.06.13.)



3.11 Final comments


○ 안기언


  - 3월 기계학습 관련 수학적 배경지식의 학습과정에서는 어려움이 있었고, 처음 경험해보는 PBL 수업이기에, 학기 초에는 본 수업의 프로세스가 다소 낯설고 적응하기 힘들기도 했습니다. 하지만, 다른 학생들이 수업에 임하는 태도와 성의, 교수님의 적극적인 수업 환경조성이 본 수업 방식에 익숙해지는데 많은 도움이 되었습니다.

  - 본 수업을 통해, 한 학기동안 기계학습 관련 수학적 배경지식을 습득하고, 관련 예제를 직접 다뤘으며, 주제를 선정하여 프로젝트를 진행하였습니다. 수업을 수강하기 전과 후의 차이라면, 기계학습 관련 문헌을 읽더라도 수학적 알고리즘 설명에 거부감이 확연히 줄어들었으며, 수업시간에 학습한 개념들이 이론을 이해하는데 많은 도움이 되고 있습니다. 더불어, 프로젝트의 성과는 논문으로 발전시킬 계획입니다. 특히, 프로젝트에서 R 프로그램을 이용하였으며, 본 수업을 통해 R 프로그램을 학습하는 계기를 마련해주셔서 너무나 감사하게 생각하고 있습니다.

  - 마지막으로, 본 기계학습 PBL 수업은 지식의 습득 및 활용에 최적화된 수업이라고 생각합니다. 이와 같은 환경을 조성해주신 교수님과 수업에 적극적으로 참여하여 많은 도움을 준 학생들에게 감사의 인사를 전합니다.


[참고 문헌]  


* 프로젝트의 구체적인 내용 전체를 보려면 아래 주소를 참고하시기 바랍니다.

http://matrix.skku.ac.kr/math4ai/part4/

http://www.ibpsa.org/proceedings/BS2017/BS2017_411.pdf

빅 데이터 분석 기법을 활용한 기존 건축물 데이터베이스 분석, Big-data Analysis on Energy Consumption of Existing Buildings in South Korea, 안기언(Ahn, Ki-Uhn), 박철수 (대한건축학회 학술발표대회 논문집, Vol.36 No.2, [2016])



부록: [심화내용인 Math for AI (2nd Course) 강의 동영상 주소]

                                                     http://matrix.skku.ac.kr/e-math/


Math for Big Data, Lecture 1, Introduction, https://youtu.be/EURJnLppzKc  

Math for Big Data, Lecture 2, LU Decomposition, https://youtu.be/bzhTnoN3atk

Math for Big Data, Lecture 3, Schur Decomposition,  https://youtu.be/F2kZON0oS_w

Math for Big Data, Lecture 4, Power Method,  https://youtu.be/n4KD4aq_jxw

Math for Big Data, Lecture 5, QR Decomposition, https://youtu.be/gQ7gxTx5f9k

Math for Big Data, Lecture 6, Google's PageRank algorithm, https://youtu.be/tp6B7s43jAI

Math for Big Data, Lecture 7, SVD, https://youtu.be/AxL4Q83IdAA

Math for Big Data, Lecture 8, Least Square Solutions, https://youtu.be/GwHh5lh5wEs

Math for Big Data, Lecture 9, Polar Decomposition, NMF, https://youtu.be/FqkMP9lBtaE

Math for Big Data, Lecture 10, Finding JCF using Dot Diagram, https://youtu.be/1E3wXN1oZyc

Math for Big Data, Lecture 11, 일반화된 고유벡터와 행렬함수, https://youtu.be/lK4_Kp6P_N4

Math for Big Data, Lecture 12, Principal Componant Analysis 1, https://youtu.be/0IKbslNH7xk

Math for Big Data, Lecture 13, Principal Componant Analysis 2, https://youtu.be/j8PAt_Al180

 

Math for Big Data, Review 1, Intro. Calculus, Team 4, https://youtu.be/qALN6OAwNUo

Math for Big Data, Review 2, Intro. Linear Algebra, Team 3, https://youtu.be/xrFqBe8Rhs4

Math for Big Data, Review 3, Intro. Statistics, Team 2, https://youtu.be/sOx74EntB0I

Math for Big Data, Review 4, Intro. Engineering Math, https://youtu.be/LRHN5swQW4E

 

Math for Big Data, Midterm PBL, S. Sun, https://youtu.be/CSdciSMPm-8

Math for Big Data, Midterm PBL, Naguib, https://youtu.be/k9_Ie8bMAY0

Math for Big Data, Midterm PBL,  KEAhn, https://youtu.be/xFJmI1_uynk

Math for Big Data, Midterm PBL, Choo, https://youtu.be/TlC78z_LErQ

Math for Big Data, Midterm PBL,  Naeem, https://youtu.be/8xo5UOP1tu8

Math for Big Data, Midterm PBL,  Lkhagva, https://youtu.be/pPtO1rNdLs0

Math for Big Data, Midterm PBL,  Sudip, https://youtu.be/5md49_RG74Q

Math for Big Data, Midterm PBL, Jeongwon Pyo, https://youtu.be/u5zDWtmx9P0

Math for Big Data, Midterm PBL,  ESJang, https://youtu.be/cHYvWBuBrFA   

 

Math for Big Data, Lecture 14,  Graph and Matrix, https://youtu.be/Z89XvKXIYeg

Math for Big Data, Lecture 15,  Laplacian Matrix and Big Data, 

        https://youtu.be/4VuaOFRGm1g

Math for Big Data, Lecture 16,  Intro. Math for Machine Learning 1, 

        https://youtu.be/P24A1fkpX-Y

Math for Big Data, Lecture 17,  Intro. Math for Machine Learning 2, 

        https://youtu.be/bY3nfAHc6Qk

Math for Big Data, Lecture 18,  (Team 4) Intro. Data Mining, Ahn& Choo, 

        https://youtu.be/Dq2G8ReeEcY

Math for Big Data, Lecture 19,  (Team 1) Pattern Classification 1, Naguib &Naeem, 

        https://youtu.be/ieOUI6pc18A

Math for Big Data, Lecture 20,  (Team 1) Pattern Classification 2, Naguib &Naeem,

        https://youtu.be/9kxyu0e-nfQ

Math for Big Data, Lecture 21,  (Team 2) Statistical Learning,

        https://youtu.be/5dQO2Z3PgPU

Math for Big Data, Lecture 22,  (Team 3) Cluster Analysishttps://youtu.be/LPyFO8jFHD8

 

Math for Big Data, Lecture 23,  (Team 3) Project Draft 1, https://youtu.be/TZJrU7S1Q0o  

Math for Big Data, Lecture 24,  (Team 3) Project Presentation, Spectral Cluster Analysis by Shaowei-Lkhagva, https://youtu.be/476HgeBM8AE

Math for Big Data, Lecture 25,  (AV) Project Presentation, Restricted Boltzmann Machine

Training of Perceptron for Clustering by Naguib-Naeem https://youtu.be/QLKIgUCVLIY

Math for Big Data, Lecture 25,  (Team 1) Project Presentation, Restricted Boltzmann

Machine Training of Perceptron for Clustering by Naguib-Naeem https://youtu.be/vZ613MEWin4

 

Math for Big Data, Lecture 26,  (Team 2) Project Presentation, Hand Gesture Recognition

 with Convolutional Neural Network by Pyo-Sudip-Jang https://youtu.be/FK-ANqohVlo  

Math for Big Data, Lecture 27,  Final PBL Presentation by Sudip, https://youtu.be/cOwWZcVb1AU   


그림입니다.
원본 그림의 이름: 표지-2-옆면.jpg
원본 그림의 크기: 가로 3019pixel, 세로 321pixel
사진 찍은 날짜: 2019년 12월 12일 오후 6:43
프로그램 이름 : Microsoft Windows Photo Viewer 6.3.9600.17415


Copyright @ 2020 SKKU Matrix Lab. All rights reserved.
Made by Manager: Prof. Sang-Gu Lee and Dr. Jae Hwa Lee
*This research was supported by Basic Science Research Program through the National Research Foundation of Korea (NRF) funded by the Ministry of Education (2017R1D1A1B03035865).