본문바로가기
[인공지능, 수학으로 타파] 행렬로 딥러닝 따라하기
수학동아 2020.04.24

 

 

Mathematics for AI #1

행렬딥러닝 따라잡기

 

 

 

 

*출제자의 한 마디*

 

아래 글을 읽으며 '행렬'의 개념과 행렬의 사칙연산을 이해한 뒤, 코딩 명령어로 문제1, 2를 풀어 사칙연산을 연습해보세요. 주어진 행렬을 바꿔가며 결과를 살펴보는 것도 좋습니다.

 

문제3에서 행렬의 성분을 조금씩 수정하면서 나온 값이 실제 값에 가까워지는 과정을 체험해보세요. 이 과정은 인공지능의 딥러닝 과정과 비슷합니다. 딥러닝은 문제가 복잡할수록 행렬 곱으로 표현되는 연산망이 더욱 복잡해지면서 심층학습해 붙은 이름이거든요.

 

 

 

 

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

 

Step1. 행렬과 인공지능

 

행렬은 괄호 안에 수 또는 문자를 행과 열에 맞게 나열한 것으로, 이때 수 또는 문자를 ‘행렬의 성분이라 합니다. 행렬은 인공지능 연구를 위한 언어이자, 빅데이터를 손쉽게 다루기 위한 필수 도구입니다. 인공지능의 기반인 컴퓨터가 어떤 문제를 풀도록 하려면 문제를 행렬이 포함된 식으로 바꾸는 과정이 반드시 필요하기 때문인데요, 예를 들어 복잡한 3차 미분방정식_보통 방정식은 종류에 상관없이 차수가 올라갈수록 풀기 어렵다을 풀 때, 이를 간단한 1차 미분방정식 3개로 표현해서(선형화) 행렬로 나타내면 컴퓨터를 통해 쉽게 답을 구할 수 있습니다.

 

그런데 행렬의 크기_행의 수와 열의 수를 곱한 값가 100만×100만 처럼 큰 경우에는 슈퍼 컴퓨터조차 문제를 푸는데 굉장히 오랜 시간이 걸립니다. 이것을 해결하려면 크기가 큰 행렬을 컴퓨터가 효과적으로 다룰 수 있도록 해주는 '선형대수학'의 이론을 이용해야 합니다.

행렬의 성질을 연구하는 선형대수학은 크기가 큰 행렬을 컴퓨터가 효과적으로 다루도록 해주는 마법의 도구입니다. 푸는 데 10년 이상 걸릴 문제도 선형대수학를 이용하면 순식간에 답을 내놓기도 하죠.

 

'빅데이터'를 분석하는 것을 수학적으로 살펴보면 무수히 많은 데이터 중 유의미한 데이터를 추출해 최적의 행렬을 구성한 뒤, 행렬을 적절하게 다뤄 필요한 결과 값을 도출해 내는 것입니다. 알파고에서 쓰인 인공지능 기술, 딥러닝은 인간의 뇌를 모사한 인공 신경망에서 발전된 예측・분류 기법으로 이미지 인식, 음성 인식 등에 활용되며 최근에는 사람을 뛰어넘는 성능을 보였습니다.

 

이러한 대부분의 딥러닝 계산은 행렬 곱 연산을 포함한 기본적인 행렬 연산을 통해 수행됩니다. '인공지능, 수학으로 타파' 첫 시간에는 코딩 명령어를 이용해 행렬을 만들고, 이를 통해 다양한 문제들을 해결해 보도록 해요!

 

 

*인공지능의 아버지, 앨런 튜링

인공지능의 아버지로 불리는 영국 수학자 앨런 튜링은 제2차 세계대전의 영웅으로서 수리논리학과 컴퓨터 과학에 기여했다.  대학 졸업 후 튜링은 1936년부터 1938년까지 미국 프린스턴대학교 수학과 대학원에서 ‘순서를 나타내는 수에 근거한 논리 시스템’을 연구해 수학 박사 학위를 받았는데, 이때 튜링은 0과 1로 이뤄진 이진법을 이용해 체스처럼 복잡하고 많은 계산을 수행할 수 있는 기계, 즉 컴퓨터가 작동하는 기본 원리인 ‘튜링 머신’을 고안했다

 이 개념은 인공지능의 기틀을 마련했으며, 1950년에는 기계가 사람과 얼마나 비슷하게 대화할 수 있는지를 연구해 ‘기계의 사고 능력’을 판별하는 ‘튜링 테스트’를 만들었다. 아울러 제2차 세계대전 당시 독일군의 암호 기계 ‘에니그마’를 해독했다.

 

 

 

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

 

행렬은 대괄호 안에 수 또는 문자를 행과 열에 맞게 나열한 것으로, 이때 수 또는 문자를 ‘행렬의 성분’이라 한다. 수와 마찬가지로 행렬도 사칙연산을 할 수 있고, 그 결과 역시 행렬이다.

 

 

\large A=\begin{pmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{pmatrix}, B=\begin{pmatrix} b_{11} & b_{12}\\ b_{21} & b_{22} \end{pmatrix}

 

 

행렬의 덧셈은 행과 열의 수가 같은 행렬끼리만 더할 수 있으며 아래처럼 같은 위치에 있는 성분을 더해 새로 만들어지는 행렬의 같은 위치에 적는다.

 

 

\large A+B=\begin{pmatrix} a_{11}+b_{11} & a_{12}+b_{12}\\ a_{21}+b_{21} & a_{22}+b_{22} \end{pmatrix}

 

 

행렬의 곱셈은 앞 행렬의 열의 수와 뒤 행렬의 행의 수(p)가 같을 때만 가능한데, 새로 만들어지는 행렬의 i번째 행의 j열에 있는 성분 cij는 아래처럼 나타낼 수 있다. 여기서 aij, bij는 각각 행렬 ABi번째 행의 j열에 있는 성분이고, cij는 새로 만들어지는 행렬의 i번째 행의 j열에 있는 성분이다.  

 

\large c_ij=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots+a_{ip}b_{pj}=\sum_{k=1}^{p}a_{ik}b_{kj}

 

\large A   imes B=\begin{pmatrix} a_{11}b_{11}+a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22}\\ a_{21}b_{11}+a_{22}b_{21} & a_{21}b_{12}+a_{22}b_{22} \end{pmatrix}

 

 

행렬의 상수배는 행렬 앞에 적힌 상수를 행렬의 모든 성분에 곱하라는 뜻이다. 행렬의 뺄셈인 A-B는 행렬의 덧셈과 상수배를 활용해 A+(-1)B로 나타낼 수 있다.

 

 

\large kA=\begin{pmatrix} ka_{11} & ka_{12}\\ ka_{21} & ka_{22} \end{pmatrix}

 

 

문제1

행렬 A, B, C가 아래와 같을 때 A+B, 2A, (-1)C를 계산해보고 코딩 명령어를 이용해 구한 답과 비교해보자.

 

 

\large A=\begin{pmatrix} 1 &2 &-4 \\ -2& 1 &3 \end{pmatrix}, B=\begin{pmatrix} 0 &1 &4 \\ -1& 3 &1 \end{pmatrix}, C=\begin{pmatrix} 1 &1 \\ 2&2 \end{pmatrix}

 

 

 

 

문제2

행렬 A, B가 아래와 같을 때 AxB를 계산해보고 코딩 명령어를 이용해 구한 답과 비교해보자.

 

 

\large \large A=\begin{pmatrix} 1 &2 &-1 \\ 3& 1 &0 \end{pmatrix}, B=\begin{pmatrix} -2 &1 \\ 0& -3 \\ 2&1 \end{pmatrix}

 

 

 

 

문제3

수면 시간, 운동 시간, 칼로리 섭취량이 체중과 혈압에 각각 미치는 영향(w)을 행렬로 나타내면 다음과 같다. 

 

 

 

수동의 하루 평균 수면 시간과 운동 시간 그리고 칼로리 섭취량이 체중과 혈압에 미치는 영향을 조사했더니 아래 행렬처럼 나타났다. 

 

 

\large A=\begin{pmatrix} -0.31 & -0.42\\ -0.62& -0.81\\ 0.05 & 0.08 \end{pmatrix}

 

 

하루 평균 수면 시간이 8시간, 운동 시간이 1시간, 칼로리 섭취량이 1500kcal일 때, 행렬 A를 이용해 예측한 값은 체중이 71.9 kg, 혈압이 115.83 mmHg였는데, 실제 값은 각각 72 kg, 116 mmHg였다. 예측 값이 실제 값과 같아지도록 행렬 A의 값을 조정해보자.

 

 

 

 

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

 

 

풀이에 필요한 SageMath 코딩 명령어

 

 

X = vector( [ x1, x2, …, xn ] )

성분이 x1, x2, …, xn인 벡터 X = (x1, x12, …, xn)을 나타낸다. 벡터는 행 또는 열의 수가 1개인 행렬이다.

 

 

② A = matrix( m, n , [ 성분1, 성분2, … ] )

행의 수가 m, 열의 수가 n이고 원소의 수가 m×n개인 행렬 A를 만든다. 예를 들어 A = matrix(2, 2, [1,2,3,4])는 행과 열의 수가 각각 2개고 성분이 4개인 행렬 \large \begin{pmatrix} 1 &2 \\ 3& 4 \end{pmatrix}다.

 

 

③ C = A*B

두 행렬을 곱해 행렬 C를 만든다.

 

 

④ print(변수)

변수에 해당하는 값 또는 행렬을 출력한다.

 

 

 

 

 

-끝-

 

 

  • 폴리매스 문제는 2019년도 정부의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물입니다.

  • ☎문의 02-6749-3911