Math

[AI class day 6] 인공지능 수학- 선형대수Linear Algebra TIL

makeitworth 2021. 4. 26. 15:08

* 첫 째 주에 이어 다시 고난의 행군

SSAC x Fast Campus 패스트 캠퍼스 비즈니스 빅데이터 분석가 과정 에도 수학 이론 강의가 있었지만, 단 <데이터 분석을 위한 기초 수학과 통계> 라는 이름으로 이틀 강의를 한 것이 전부였다.

게다가 문과생들을 대상으로 하는 수업 난이도였다.

그런데 이 수업은 CS 학부생 정도 수준을 전제로 하고 있는 것 같다.

 

첫 날 주제는 선형대수linear algebra

다행히 빅데이터 분석가 과정에서도 하룻동안 배웠던 내용이다.

여담이지만, 학부에 있을 때 이과인 친구들이 '리니어 알제브라', '리니어 알제브라' 거리길래 뭔소리인지 몰라서 사전을 찾아본 적이 있었는데, 그걸 내가 이 나이에 공부하고 있다니... 그땐 이렇게 될 줄은 꿈에도 몰랐었지 .... ㅠㅠ

 

참고

첫째 주에 자료 구조와 알고리즘을 공부할 땐  <파이썬 알고리즘 인터뷰> 이라는 책을 함께 보면서 공부했는데,

이번 주에도 근본이 없는 부족함을 보완하기 위해 책을 한 권 구매해서 강의 진도에 해당되는 부분을 같이 보고 있다.

 

<인공지능을 위한 수학>

 

인공지능을 위한 수학:꼭 필요한 것만 골라 배우는 인공지능 맞춤 수학

COUPANG

www.coupang.com

 

지난 <파이썬 알고리즘 인터뷰>이 아주 탄탄하고 두고 두고 보게 될 기본서 같은 느낌이라면, 이 책은 근본없는 문과생인 나에게 딱 맞는 쉽고 가벼운 책이다. 가볍다고는 하지만, 표지에 있는 일본 만화풍의 일러스트 같은 분위기는 아니다.

<개념원리 수학> 같은 형식인데 문제 풀이는 빠지고, 잘게 쪼개서 개념 설명을 쉽게 하는 책이다.

쿠팡 리뷰를 보면 알겠지만, 나 같은 문과생이나 아니면 인공지능 쪽으로의 진로에 관심이 있는 고등학생 정도 (좀 똘똘하면 중학생도) 가 읽을만한 책이다.

 

1. 선형시스템

*오늘 배울 내용 예습*

선형 시스템이란 ?

Ax  = b 형태로 표현할 수 있는 것

연립 1차 방정식의 대수적 표현이라 할 수 있다

 

 

우리가 초중등 때 연립 1차 방정식이라고 배웠던 것들이 바로 선형시스템

 

(1차 방정식)

2x=4

 

(연립 1차 방정식)

x+y=5

3x+y=9

 

--> 중학교 때 연립 1차 방정식을 해를 구하는 방식이 소거법.

 

가우스 소거법은 이를 좀 더 정형화 해서 정리한 것이라고 보면 된다.

미지수 수가 더 커지게 되면 방정식의 경우 소거법으로 풀려고 해도, 없앤던 애들이 다시 튀어나와 까다로울 수 있다. 

가우스 소거법은 이미 소거한 변수가 다시 나오지 않게 하는 방법

모든 선형시스템이 이를 기반으로 한다.

 

이 문제를 어떻게 풀까?

가우스 소거법: 선형시스템을 푸는 방법

LU 분해 : 가우스 소거법 과정을 행렬로 표현한 것

 

선형대수의 목표

어떤 선형시스템 문제라도 정형적인 방법으로 표현하고 해결하는 방법을 배우는 것이다.

 

Ax = b

 

이 형태는 초등학교 때 배웠던 2x = 4과 유사한 형태이다.

그런데 변수가 무수히 많더라도 그 꼴을 이와 같은 형태로 만들고, 문제도 그렇게 풀겠다는 것이다.

A-1Ax = A-1b

x = A-1b

 

 

1) 선형 시스템 설명

 

예제>

 

3x+y+z=4...E1

x−2y−z=1...E2

x+y+z=2...E3

 

이 방정식들은 각각 대수적으로 선형 방정식(Linear Equations)이라고 한다.

미지수가 3개이므로 3차원에서의 평면의 방정식이다.

 

위의 식의 x, y, z는 미지수, unknown, varialbe 라고 부를 수 있다.

 

linear system 은 (식의 개수) x (미지수의 개수)로 표현한다.

예시의 수식 경우, 3 x 3 linear system 이다.

 

3x+y+z=4

x−2y−z=1

 

위의 수식은 2 x 3 linear system 이다.

 

3x + y = 2

x - 2y = 3

2x - 4y = 6

 

이건 3 x 2 linear system이다.

 

sinx + y = 2

3x+ y3 = 2

이런 건 비선형 방정식이다.

 

2) 선형방정식인지 판별하는 법

 

선형방정식은 미지수의 승수가 1승으로만 구성되어 있다.

 

 

xy+z=3

미지수들이 모두 1승으로 이루어져 있어 선형방정식이라고 착각할 수 있지만 xy가 곱해지며 2승이기 때문에 선형 방정식이 아니다.

사실 생각해보면 xy = 1 그래프는 곡선 그래프, 선형이 아니다.

 

3) 선형시스템의을 대수적으로 표현하기

위에서 배운 m x n 선형시스템을 Ax=b 형식의 행렬로 표현해보자.

  • m 은 선형방정식의 개수
  • n 은 미지수의 개수
  • A  m x n 행렬
  • x n-벡터
  • b m-벡터

3x+y+z=4

x−2y−z=1

x+y+z=2

 

위의 수식을 아래의 행렬 형식으로 나타낼 수 있다.

 

1. 선형시스템의 미지수를 모아서 열 벡터column vector x로 표현

2. 선형시스템의 방정식 마다

  • coefficient계수를 모아 A의 행벡터 row vecter로 표현
  • constant 상수를 모아 b에 표현

예제> 다음을 Ax = b 형태로 표현하라

 

-x1 + 2x2 - x3 = 3

-x2 + 2x3 - x4 = 2

-x3 + 2x4 -x5 = 5

 

--> 3x3 시스템이라고 착각하기 쉬운데, 미지수가 x5까지 5개이다.

--> 3x5 시스템이다.

 

 

*인공지능 관련한 코딩도 같은 구조로 작성한다.

 

4) 선형대수를 Numpy 활용해 표현하고 해를 구하기

A-1Ax = A-1b

x = A-1b

A와 b를 알면  역행렬을 구해서 해를 구할 수 있다.

 

import numpy as np

#행렬 코딩
A = np.array([[3,1,1],[1,-2,-1],[1,1,1]])

#벡터 코딩
b = np.array ([4,1,2])

# 역행렬 구하기
A_inv = np.linalg.inv(A)

#해 구하기
x=A_inv @ b

 

내가 구한 해가 맞는지 검증하는 법

-> 벡터끼리 뺀 값이 0에 가까우면 거의 같다고 본다.

 

bb = A @ x

if np.linang.norm(b-bb) <le -3:
	print("ok")
else:
	print("wrong")
    

 

2. 가우스 소거법(Gauss elimination)

1) 가장 간단한 형태의 리니어 시스템의 solution 구하기

일반적으로는 

ax = b (a, b 는 스칼라)

-->  x = b/a

 

그러나...

프로그래밍에서 나눈다는 것은 위험하다 (만일 a = 0 이라면? b= 0이라면?)

--> solution의 경우의 수는 3가지 

  1. unique solution : 2,3이 아닐때
  2. no solution : a=0 and b!=0
  3. infinitely many solution : a=0 and b=0

--> a = 0 일 때는 특수한 경우라고 할 수 있다. 

 

a의 역수(inverse)가 존재하지 않는 경우 a가 특이하다(singular)라고 표현

해가 있으면 : consistent linear system

해가 없으면 : inconsistent linear system

 

2) linear system Ax = b의 solution 구하기

마찬가지로 3가지 경우의 수가 있다.

  1. unique solution 
  2. no solution
  3. infinitely many solution

A의 역행렬(inverse matrix)가 존재하지 않을 때, A 를 특이하다고 (singular) 표현

해가 있으면 : consistent linear system

해가 없으면 : inconsistent linear system

 

3) 가우스 소거법 실제 연습

  1. 전방 소거법(Forward Elimination) - 중요
    • Ax=b 꼴에서 A의 형태를 위에서 아래로, 왼쪽에서 오른쪽으로 소거해나가며
      아래와 같은 역삼각형 형태로 만들기 
    •  이렇게 만들면 맨 마지막 식부터 미지수를 구할 수 있게 된다.

2. 후방 대입법(Back-substitution)

  • 아래 식부터 대입을 통해 해찾기
  • 위에서 만든 역삼각형의 matrix를 이용해 해 구하기
  • --> x3 = 1
  • x2+ 3*1 = 5 --> x2= 2
  • x1+ 2*2+ 1*2 = 1 --> x1 = -4

4) 전방 소거법의 수행 절차

  1. 1행 1열을 기준으로 pivot 잡기
  2. r2 <-- r2 - r1
  3. r3 <--r3  - 2r1
  4. 2행 2열을 기준으로 pivot 잡기
  5. r2 <-> r3
  6. r2<-- -r2 
  7. 3행 3열을 기준으로 pivot 잡기
  8. r3 <-- 1/2 r3

5) 전방 소거법에 쓰인 3가지 기본행연산elementary row operations (=EROs)

  1. 치환 Replacement
    • rj <-- rj - mri
    • j번째 행을 업데이트 (기준행인 i번째 행을 m배한 것을 빼서)
  2. 교환 Interchange
    • rj <-> ri
    • j번째 행과 i번째 행의 위치를 서로 바꿈
  3. 스케일링 Scaling
    • rj <-- srj
    • j번째 행을 s배 스케일링

6) 전방 소거법의 가치

  • 가장 풀기 쉬운 꼴로 변형
  • rank를 알려줌 (rank: 그 행렬의 벡터 공간의 의미있는 차원)
  • consistent/inconsistent 여부 알려줌

* 전방소거법을 통해 만들어진 역삼각형 모양의 행렬 A:  upper triangular form 상삼각형태 

 

*다음 시간 공부 내용*

 LU 분해 LU decomposition

  • 가우스 소거법을 행렬로 표현
  • NumPy에서 제공해주는 가우스 소거법 구현 방식