[고교생과 일반인을 위한] K-MOOC
인공지능을 위한 기초수학 입문
(Introductory Mathematics for Artificial Intelligence)
http://matrix.skku.ac.kr/math4ai-intro/
* 무크(MOOC)란 Massive, Open, Online, Course의 줄임말로 오픈형 온라인 학습 과정을 뜻합니다. K-MOOC는 교육부에서 선정한 최고 수준의 강의를 통하여 수업의 혁신과 고등교육의 실질적 기회 균형을 실현하며 평생학습 기반 조성을 목표로 합니다.
http://www.unipress.co.kr/news/articleView.html?idxno=1369
https://m.blog.naver.com/moeblog/222002569549
인공지능(AI) 강좌는 고려대, 상명대, 성균관대(3개), 성신여대, 중앙대(2개) 등 총 5개 대학이 개발 및 운영교로 선정되었습니다. 인공지능(AI)강좌는 기초수학, 고급 기계학습, 알고리즘 등과 관련된 강좌로 이루어졌으며, 인공지능 이수체계도를 바탕으로 강좌 구성의 완성도를 높이기 위해 추가 공모가 진행 중입니다.
[성균관대] AI 고등학교 기초수학, <인공지능을 위한 기초 수학 입문>, https://youtu.be/8oTM9n5OUBY AI란 무엇인가? 에 대하여 이해하고, AI를 구동하는 데 사용되는 고교 및 대학 수학 내용을 파이썬 기반 코딩과 실습실을 활용하여 학습한 후, 실제 함수와 데이터를 처리하는 경험을 제공한다.
http://www.kms.or.kr/meetings/AI-Univ-Math/
출판사 : 경문사 또는 교보문고 퍼플 (2020년) 전자책
[일반인을 위한] 2020년 7월 1일 버전
K-MOOC 인공지능을 위한 기초수학 입문
[일반인을 위한] K-MOOC
인공지능을 위한 기초수학 입문
(Introductory Mathematics for Artificial Intelligence)
이상구 with 이재화, 함윤미, 박경은
참고 : http://matrix.skku.ac.kr/KOFAC/book/
‥ 목차 Contents |
서 문 5
I. 인공지능에 필요한 기초수학 (1주차) 14
1. 함수 그래프와 방정식의 해 14
II. 인공지능과 행렬 (2-6주차) 25
2. 데이터와 행렬 25
3. 데이터의 분류 38
4. 선형연립방정식의 해집합 48
5. 정사영과 최소제곱문제 58
6. 행렬분해 (특잇값 분해) 64
- 과제 - 73
III. 인공지능과 최적해 (미분) (7-9주차) 74
7. 극한과 도함수 74
8. 극대, 극소, 최대, 최소 86
9. 경사하강법, 최소제곱문제의 해 93
- 과제 - 105
IV. 인공지능과 통계 (10-11주차) 106
10. 순열, 조합, 확률, 확률변수, 확률분포, 베이지안(Bayesian) 106
11. 통계, 기댓값, 분산, 공분산, 상관계수, 공분산 행렬 116
- 과제 - 128
V. 주성분 분석과 인공신경망 (12-14주차) 129
12. 주성분 분석(Principal Component Analysis) 129
13. 인공신경망 (Artificial Neural Network) 140
14. MNIST (숫자인식) 실습실 140
- 과제 - 160
VI. [읽을거리, 참고문헌, 기타] 수학과 코딩 161
[참고
자료]
[보고서 양식 다운로드/PBL report Form Download]
Korean (HWP) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-Korean.hwp
English (MS Word) : http://matrix.skku.ac.kr/PBL/PBL-Report-Form-English.docx
Sample [예시] (이전 학기 학생들의 질문/답변/활동 기록)
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-Math4AI-Final-pbl2/
도전학기 7주차 기말보고서 http://matrix.skku.ac.kr/2020-math4ai-final-pbl/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-2/
도전학기 4주차 중간보고서 http://matrix.skku.ac.kr/2020-Mid-PBL-1/
(영어) http://matrix.skku.ac.kr/2018-album/LA-PBL.htm (선형대수학)
http://matrix.skku.ac.kr/2015-album/2015-F-LA-Sep-Record.pdf
http://matrix.skku.ac.kr/Cal-Book1/Calculus-1/ (미적분학 1)
http://matrix.skku.ac.kr/Cal-Book1/Calculus-2/ (미적분학 2)
학생들의 질문/답변/활동 기록: http://matrix.skku.ac.kr/2020-Math4AI-PBL/ Basic Math for AI)
2. 그리고 <인공지능 기초수학 입문> 외국인 수강생들을 위해서
한글/영문 강의 Script 를 만들어 보았답니다. Introductory Math4AI 한글/영문 강의 Script
http://matrix.skku.ac.kr/2020-AI-translation/
이 입문 내용은 정말 쉬워서 ... 고등학생이나 일반인을 대상으로 강의 녹화를 했는데 아직 draft 입니다 ~~
[Matrixtopia] 2020년 -도전학기 Math4AI- Final PBL 보고서 발표 0 박0아 https://youtu.be/8YPalf6lXvE
[Matrixtopia] 2020년 -도전학기 Math4AI- Final PBL 보고서 발표 1 https://youtu.be/2HX0t_MGcxc by 나0진-김0준-이0현-안0진
[Matrixtopia] 2020년 -도전학기 Math4AI- Final PBL 보고서 발표 2 by 이0재, 발표 3 by 권0승
[Matrixtopia] 2020-8-8 연세대-영재원 Talk part 2 https://youtu.be/tmrJEe4PAfA
[Matrixtopia] 2020-8-8 연세대-영재원 Talk part 1 https://youtu.be/17cRUvjKXoI
[대한수학회 발표: 인공지능에 필요한 수학은?] https://youtu.be/KP1WSi69Mu0
[EBS 고등학교 과정 <인공지능 기초 수학 입문> 자료실]
http://matrix.skku.ac.kr/kofac/book/ (고등학교 Math4AI 샘플)
http://matrix.skku.ac.kr/kofac/ (Math4AI 실습실)
http://matrix.skku.ac.kr/kofac2/ (파이썬 데이터 처리 도구)
http://matrix.skku.ac.kr/math4ai/
- 수학동아 주니어 폴리매스 [인공지능, 수학으로 타파] -
http://www.polymath.co.kr/contents/list/020207 http://www.polymath.co.kr/contents/list/020201
[폴리매스] (인터뷰 1) http://www.polymath.co.kr/contents/view/740?page=1
[폴리매스] (인터뷰 2) http://www.polymath.co.kr/contents/view/18134
Intro. 인공지능이란? http://www.polymath.co.kr/contents/view/18109?page=1
#1 행렬로 딥러닝 따라잡기 http://www.polymath.co.kr/contents/view/18142
#2 최소제곱법으로 딥러닝 따라하기 http://www.polymath.co.kr/contents/view/19796?page=1
#3 최소제곱법으로 딥러닝 따라하기 (도전) http://www.polymath.co.kr/contents/view/21717?page=1
○ 데이터의 기본 표현인 행렬과 벡터 http://matrix.skku.ac.kr/math4AI-tools/vector_matrix/
○ (거리를 활용한) 데이터의 유사도 http://matrix.skku.ac.kr/math4AI-tools/distance_similarity/
○ (사잇각을 활용한) 데이터의 유사도 http://matrix.skku.ac.kr/math4AI-tools/cosine_similarity
2. (중, 고등학교 수준) http://www.polymath.co.kr/contents/list/020201
코딩으로 '네트워크' 정복하기 http://www.polymath.co.kr/contents/view/5625?page=1
코딩으로 '수열' 정복하기 http://www.polymath.co.kr/contents/view/3154?page=1
코딩으로 '소수' 정복하기 http://www.polymath.co.kr/contents/view/1935?page=1
코딩으로 '함수와 그래프' 정복하기 http://www.polymath.co.kr/contents/view/1383?page=1
코딩으로 '순열과 조합' 정복하기 http://www.polymath.co.kr/contents/view/1330?page=1
코딩으로 '미분방정식' 정복하기 http://www.polymath.co.kr/contents/view/1186?page=1
코딩으로 '확률' 정복하기 http://www.polymath.co.kr/contents/view/1142?page=1
코딩으로 '그래프 이론' 정복하기 http://www.polymath.co.kr/contents/view/1076?page=1
코딩으로 '통계' 정복하기 http://www.polymath.co.kr/contents/view/1001?page=1
코딩으로 '연립방정식' 정복하기 http://www.polymath.co.kr/contents/view/872?page=1
코딩으로 '적분' 정복하기 http://www.polymath.co.kr/contents/view/763?page=1
[Matrixtopia] KMS-AI-Talk-인공지능이란무엇인가-SGLee-F (30분) 2020-06-05 https://youtu.be/8oTM9n5OUBY
[Matrixtopia] KMS-AI-Talk2-인공지능에필요한수학-SGLee-F (33분) 2020-06-08 https://youtu.be/KP1WSi69Mu0
[Matrixtopia] 인공지능 고등학교 수학 교과서 (시안) 모습은 어떻게 되는 것이 바람직 할 것인가? 2020-5-12 Basic Math for AI with Coding https://youtu.be/I119bnzrYaU
[Matrixtopia] 인공지능-수학-과제-WebEx-회의-2020-4-16 https://youtu.be/Ls7zG329HCQ
[Matrixtopia] 인공지능-수학-과제-WebEx-회의-2020-4-23 https://youtu.be/-RQAueLoylY
[Matrixtopia] 인공지능-수학-과제-WebEx-회의-2020-5-4 https://youtu.be/Z6mJ5JOquco
[Matrixtopia] 인공지능-수학-과제-WebEx-회의-2020-5-8 https://youtu.be/aWJuyxkhXIw
[Matrixtopia] 인공지능-수학-과제-WebEx-회의-2020-5-11 ... KOFAC
일반인을 위한 K-MOOC <인공지능을 위한 기초수학 입문> http://matrix.skku.ac.kr/math4ai-intro/
< 인공지능을 위한 기초수학 입문 [실습실] >
01주차 http://matrix.skku.ac.kr/math4ai-intro/W1/
02주차 http://matrix.skku.ac.kr/math4ai-intro/W2/
03주차 http://matrix.skku.ac.kr/math4ai-intro/W3/
04주차 http://matrix.skku.ac.kr/math4ai-intro/W4/
05주차 http://matrix.skku.ac.kr/math4ai-intro/W5/
06주차 http://matrix.skku.ac.kr/math4ai-intro/W6/
07주차 http://matrix.skku.ac.kr/math4ai-intro/W7/
08주차 http://matrix.skku.ac.kr/math4ai-intro/W8/
09주차 http://matrix.skku.ac.kr/math4ai-intro/W9/
10주차 http://matrix.skku.ac.kr/math4ai-intro/W10/
11주차 http://matrix.skku.ac.kr/math4ai-intro/W11/
12주차 http://matrix.skku.ac.kr/math4ai-intro/W12/
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문 10-1, 순열, 조합, 확률, 조건부확률, https://youtu.be/eOVVKFB3eFc
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문 7-1, 극한과 도함수, https://youtu.be/nm7sKIfnWro
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문 4-2, 선형연립방정식의 해집합 구하는 방법, https://youtu.be/xT8tqbjq2Ig
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 인공신경망과 오차역전파법, https://youtu.be/T6OSpzz00HU
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 주성분분석과 차원축소, https://youtu.be/Skyi06WVRgA
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 공분산행렬, https://youtu.be/MSu5_ehP_Ug
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 경사하강법과 최적해, https://youtu.be/IADbbl_iAwI
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 특잇값분해(SVD)의 이해와 계산, https://youtu.be/0aCnKbrVyhQ
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, QR 분해를 이용하여 최소제곱해를 구하는 방법, https://youtu.be/iAnKfEiph7Y
[Matrixtopia] 고교생과 일반인을 위한 [K-MOOC] 인공지능을 위한 기초수학 입문, 최소제곱해를 구하는 방법, https://youtu.be/xGZPBT4Q4t4
[Matrixtopia] SKKU Math4AI, 인공지능을 위한 기초수학, 강의계획서 설명, https://youtu.be/p8eGmEbm6qk
[Matrixtopia] 인공지능이란 무엇인가? (Dummy를 위한 AI) https://youtu.be/F1HNFGAMhro
성균관대 3D 프린팅 with Math (STL file 생성기)
SKKU Sage 3D Printing with Math
http://matrix.skku.ac.kr/3d-print/sage-stl.htm
SKKU Sage Grapher and Its Application (모바일 도구)
http://matrix.skku.ac.kr/Mobile-Sage-G/sage-grapher.html
<3D-Printing with Linear Algebra and Calculus 지식>
[Matrixtopia] Math4AI-인공지능-기초수학-강의계획서 설명 https://youtu.be/BlOMeZZqq7I 16분
[Matrixtopia] 선형대수학 개념정리 (Big Picture) https://youtu.be/3tBXcnxZb8M 39분
[Matrixtopia] Math4AI, Part1-복습-1 행렬과 데이터 https://youtu.be/HTtQCP3r1j4' 34분
[Matrixtopia] Math4AI, WebEx OH, 2020-03-27 https://youtu.be/eICBnMaLodQ
[Matrixtopia] Math4AI, Math-Coding-HW 설명 1 https://youtu.be/RwTb4ltUwA0
○ MNIST(숫자인식) 실습실 http://matrix.skku.ac.kr/math4ai/mnist/
○ 정사영 (Projection) https://www.geogebra.org/m/ewP9ybUP
최소제곱문제(least squares problem) : 최소제곱해, 선형회귀, 최소제곱직선 http://matrix.skku.ac.kr/2020-math4AI/LSS/
경사하강법(Gradient Descent Algorithm) http://matrix.skku.ac.kr/math4ai/gradient_descent/
주성분 분석(Principal Component Analysis) http://matrix.skku.ac.kr/math4ai/PCA/
[Matrixtopia] COVID-19 자연대 3월 https://youtu.be/JisS82zFgoM
[Matrixtopia] Math4AI WebEx OH 2020년 4월 3일 복습과 QnA 대한 설명 https://youtu.be/mUj2PZdNKzk
[Matrixtopia] Math4AI WebEx OH 2020년 4월 10일 - 복습과 TakeHome 중간고사에 대한 설명 https://youtu.be/qxea3Z_mG1g
[Matrixtopia] Math4AI, WebEx OH 중간고사 대비 복습과 추가 설명 https://youtu.be/1tOsyIKGzGs
[Matrixtopia] Math4AI, WebEx OH 2020-4-24 https://youtu.be/uGWZZHWJDD8
[Matrixtopia] Math4AI, WebEx OH 2020-5-8 https://youtu.be/S3xT1_SXH2c
[Matrixtopia] Math4AI, WebEx OH 2020-5-15 https://youtu.be/GnOyEOduEOc
[Matrixtopia] 자연대 2층 로비 5월 동영상 https://youtu.be/dKqoxaKMIHA
[Matrixtopia] Math4AI, WebEx OH 2020-5-22 https://youtu.be/vVEEBUaHgfA
[Matrixtopia] Math4AI, WebEx OH 2020-5-29 https://youtu.be/tMk37SNJVeE
[Matrixtopia] Math4AI, WebEx OH, 2020-06-05 학생면담 https://youtu.be/ba7LXrCS5dw
[참고 자료실]
[Math4AI PBL 보고서, 가을 학기] http://matrix.skku.ac.kr/math4ai/PBL-Record/
[Math4AI PBL 보고서, 봄 학기] http://matrix.skku.ac.kr/2020-Math4AI-PBL/
[학생 Project, 최*호] http://matrix.skku.ac.kr/math4ai/Project-1/
[학생 발표, 화공과 최*호] https://youtu.be/zJ4PTgnWyac
[학생 Project, 2팀] http://matrix.skku.ac.kr/math4ai/Project-2/
[학생 발표, 1학년, 김*훈] https://youtu.be/3e0VybhOS1U
[학생 발표, 1학년, 엄*민] https://youtu.be/kldV0YcuYu8
[학생 발표, 2학년, 김*예] https://youtu.be/kNFxp8SP5Rc
[학생 발표, 최*오] https://youtu.be/kWrqiiJ3oDE
<인공지능 기초수학> 교재 http://matrix.skku.ac.kr/math4ai/Math4AI.pdf
‥ 목차 Contents in Detail |
서 문 5
I. 인공지능에 필요한 기초수학 (1주차) 14
1. 함수 그래프와 방정식의 해 14
1.1 함수와 그래프
1.2 다항함수
1.3 유리함수
1.4 삼각함수
1.5 지수함수와 로그함수
1.6 방정식의 해
II. 인공지능과 행렬 (2-6주차) 25
2. 데이터와 행렬 25
2.1 순서쌍과 벡터
2.2 벡터 연산
2.3 행렬과 텐서
2.4 행렬 연산
2.5 행렬의 연산법칙
3. 데이터의 분류 38
3.1 데이터의 유사도
3.2 거리
3.3 노름(norm, 크기)
3.4 노름(크기, 거리)을 활용한 데이터의 유사도 비교
3.5 사잇각을 활용한 데이터의 비교
3.6 코사인 유사도의 개념
3.7 내적
3.8 사잇각
3.9 코사인 유사도의 계산
4. 선형연립방정식의 해집합 48
4.1 선형연립방정식
4.2 첨가행렬
4.3 가우스 소거법
4.4 연립방정식의 해집합
5. 정사영과 최소제곱문제 58
5.1 최소제곱문제
5.2 최소제곱문제의 의미
5.3 정사영과 최소제곱해
5.4 데이터에 적합한 곡선 찾기
6. 행렬분해 (특잇값 분해) 64
6.1 LU 분해
6.2 QR 분해
6.3 SVD (특잇값 분해)
- 과제 (열린문제)- 73
III. 인공지능과 최적해 (미분) (7-9주차) 74
7. 극한과 도함수 74
7.1 함수의 극한 (limit)
7.2 도함수(derivative)와 미분(differentiation)
8. 극대, 극소, 최대, 최소 86
8.1 도함수의 응용
8.2 2계 도함수의 응용
8.3 극대, 극소, 최대, 최소
9. 경사하강법, 최소제곱문제의 해 93
9.1 경사하강법
*9.2 응용(최소제곱문제)
- 과제 (열린문제)- 105
IV. 인공지능과 통계 (10-11주차) 106
10. 순열, 조합, 확률, 확률변수, 확률분포, 베이지안(Bayesian) 106
10.1 순열과 조합
10.2 확률
10.3 조건부확률
10.4 베이즈 정리
10.5 확률변수
10.6 이산확률분포
10.7 연속확률분포
11. 통계, 기댓값, 분산, 공분산, 상관계수, 공분산 행렬 116
11.1 기댓값, 분산, 표준편차
11.2 결합 확률분포
*11.3 공분산, 상관계수
11.4 공분산 행렬
- 과제 (열린문제)- 128
V. 주성분 분석과 인공신경망 (12-14주차) 129
12. 주성분 분석(Principal Component Analysis) 129
12.1 차원 축소
12.2 주성분 분석(PCA)
12.3 주성분 분석의 계산
12.4 주성분 분석 사례
*12.5 주성분 분석과 공분산 행렬
*12.6 주성분 분석과 선형회귀
13. 인공신경망 (Artificial Neural Network) 140
13.1 신경망
13.2 신경망의 작동원리
13.3 신경망의 학습
13.4 오차 역전파법
14. MNIST (숫자인식) 실습실 150
14.1 인공신경망을 활용한 손 글씨 숫자 인식 사례
- 과제 (열린문제)- 160
- Final PBL 보고서 160
VI. [읽을거리, 참고문헌, 기타] 수학과 코딩 161
Preface 서문
생산 가능 인구의 감소 등 사회 구조 및 고용 환경이 빠르게 변화하고 있다. 이러한 변화의 하나로서, 인공지능(Artificial Intelligence, AI)의 비약적인 발전을 들 수 있다. <K-MOOC 인공지능을 위한 기초수학 입문>은 인공지능이 어떤 수학적 원리로 작동하는지를 이해하는데 필요한 기본적인 수학을 고등학교 1학년 정도의 수학 지식을 갖춘 일반인은 누구라도 쉽게 관련된 행렬, 도함수, 통계 내용을 이해하고 실습할 수 있도록 서술하였다.
인공지능이란 인간처럼 사고하는 시스템을 말한다. 현재 인공지능은 우리가 느끼지 못하는 사이에 우리 삶의 거의 모든 곳에서 사용되고 있다. 예를 들어, 매일 사용하는 스마트폰에는 빅스비(Bixby)나 시리(Siri)와 같은 음성인식 비서가 있고, 사진 속의 얼굴을 인식하는 프로그램이 있으며, 보고 싶은 동영상, 음악을 추천해주는 시스템 등이 있다. 또한 인공지능 로봇이 앞으로 다양하고 힘든 일을 인간 대신 실제로 해줄 것을 잘 알고 있다. 이미 공장, 도로, 심지어 집에서도 로봇이 우리를 위해 일하고 있으며, 미래에 인공지능 로봇이 직장에서 인간의 업무까지 대신하게 되면 우리가 출근할 이유가 없어질지도 모른다. 그러나 우리는 인공지능에 대해 무작정 두려워할 필요는 없다. 그 대신 인공지능이 도대체 무엇인지 그리고 어떻게 작동되는지 기본 원리를 이해하면 된다. 이 책은 바로 그런 취지에서 준비되었다. 즉, 고등학생과 일반인 누구라도 인공지능을 이해하는 것을 목표로, 주 저자가 쓴 수학동아 『주니어매스』 원고와 대학생용 교재 『인공지능을 위한 기초수학』을 활용하여 미국, 일본, 중국의 고등학교 인공지능 수학 교수・학습 내용의 순서에 따라 우리나라 고등학교 2학년 이상이면 누구나 이해할 수 있도록 K-MOOC 교재와 강의록이 완성되었다. 그 결과 관심 있는 모든 고등학생과 일반인들이 인공지능에 필요한 전반적인 용어와 개념을 접하고, 직접 개발한 파이썬 코드를 활용하여 실제 문제해결 경험을 갖추어, 고급 AI 수학에 잘 준비 되도록 저술하였다.
<생각해 보기> AI란 무엇인가? https://youtu.be/8oTM9n5OUBY |
인공지능 로봇, 빅데이터, 사물인터넷, 3D 프린팅, 드론, 무인자동차, 스마트시티 등의 분야는 모두 수학과 정보통신기술의 접목을 통하여 일상의 문제를 해결하는 것이라고 할 수 있다. 인공지능은 매직(Magic)이 아니라 수학 그 자체이다. 1950년대에 시작된 인공지능에 대한 연구의 발전은 1990년대 들어서 선형대수학, 확률과 통계, 최적화 이론, 이산수학 등을 기반으로 하는 수학적 지식에 기인한 통계적 학습이론, 서포트 벡터 머신, 확률 그래프 모델 등의 수학적 모형과 알고리즘의 개발에 힘입어 암흑기를 극복하였다. 특히, 특잇값 분해(SVD), 차원 축소(Rank reduction), 경사하강법, 공분산 행렬, 주성분분석(PCA), 최적화 이론과 같은 수학적 지식은 머신러닝과 딥러닝을 포함한 인공지능의 발전에 결정적인 기여를 하였다. 이 책에서는 이런 용어와 개념 및 코드를 소개한다. 인공 지능의 시대에 필요한 지식의 의미에도 변화가 오게 될 것이고, 인공지능 시대에 살면서, 학생들은 교육환경의 변화에 능동적으로 대응하여 다른 사람과 협동하면서 과제를 해결해 나가는 능력과 다양한 정보를 파악하고, 지식 개념적인 이해를 공유하고, 이해한 정보를 재구성하여 발표하는 등 새로운 가치를 생산하는 소양이 요구된다. 이 책은 그런 경험을 제공 할 것이다. (절의 번호 앞에 * 표시가 있는 경우 학생의 수준과 진도를 고려하여 생략할 수 있다.) |
수학동아 2020년 5월호 [인공지능, 수학으로 타파] 인공지능이란? http://www.polymath.co.kr/contents/view/18109?page=1
다짜고짜 퀴즈! 인공지능을 둘로 쪼개면 무엇일까요? 답은 ‘수학’과 ‘코딩’입니다!
인공지능 스피커, 인공지능 번역기 등은 모두 수학 이론과 논리에 의해 만들어졌고, 코딩으로 컴퓨터에 구현되거든요.
제4차 산업혁명의 핵심인 인공지능은 전공에 관계없이 꼭 익혀야할 기술이 되었습니다.
미국, 중국 등의 선진국이 초등학생용 인공지능 교과서를 만든 사실이 이를 뒷받침하고 있죠.
부담 갖지 말고 가볍게 읽어 보세요~. 시작합니다!
인공지능이란?
글 _이상구 교수(성균관대학교) 이재화 박사(성균관대학교)
인공지능의 역사: 앨런 튜링부터 알파고까지
인공지능이란 무엇일까요? 컴퓨터가 인간의 뇌처럼 작동하는 것? 사진을 인식하거나 자율주행 같은 일을 수행하는 능력을 가진 그 무엇? 이것들은 인공지능의 특징을 서술하는 개념일 뿐 정확한 정의는 아닙니다. 최근 뉴스나 광고에서 인공지능뿐 아니라 머신러닝(기계학습), 딥러닝 등의 용어가 심심치 않게 등장하는데, 이것들이 무엇인지 알려면 인공지능이 무엇인지부터 정확하게 알아야 합니다. 이를 위해 ‘인공지능’이란 개념이 처음 등장한 약 70여 년 전으로 가보죠.
1940~1950년대부터 수학자와 과학자는 기계가 사람의 지능을 흉내 낼 수 있을지를 탐구했습니다. 그 시작은 '컴퓨터 과학의 아버지’ 앨런 튜링_Alan Turing, 1912-1954이 컴퓨터를 발명하면서 시작됐습니다. 튜링은 1937년에 발표한 논문 ‘On Computable Numbers, with an Application to the Entscheidungsproblem’에서 현대 컴퓨터의 원리인 튜링 기계를 고안했고, 1950년 발표한 논문 ‘Computing Machinery and Intelligence’에서 '튜링 테스트'를 고안해 '언제 기계가 사람과 같은 지능을 가졌다고 말할 수 있을까'라는 질문에 대답했죠.
앨런 튜링과 그의 기념비적인 논문.
1951년 '인공지능의 아버지’ 마빈 민스키_Marvin Minsky, 1927-2016는 세계에서 처음으로 40개의 인공 뉴런을 가진 신경망 기계인 SNARC(Stochastic Neural Analog Reinforcement Calculator)를 개발했는데, 이것은 사람의 신경이 신호를 전달하는 과정을 흉내 내 만든 최초의 신경망이었습니다.
1956년 민스키는 존 맥카시_John McCarthy, 클로드 섀넌_Claude Shannon, 나단 로체스터_Nathan Rochester와 함께 미국 뉴햄프셔 주 하노버에서 열린 학술회의 다트머스 회의에서 처음으로 인공지능(Artificial Intelligence)이라는 용어를 제시했습니다. 민스키는 이 회의를 비롯해 인공지능 연구의 초석을 다지며 1969년 컴퓨터 과학의 노벨상으로 불리는 '튜링상'을 받습니다.
다트머스 회의 '인공지능'이라는 분야를 확립한 학술회의로, 미국 다트머스대학교의 존 매카시가 1956년 개최했다. 8주 동안 진행됐으며 당시 컴퓨터 학자들이 모여 브레인 스토밍하는 장이었다. 존 매카시는 회의를 위한 제안서 'AI에 관한 다트머스 여름 연구 프로젝트 제안서'에서 인공지능의 핵심 역할을 다음과 같이 밝혔다.
"기계가 인간의 언어를 사용하고 추상화와 개념을 형성하며, 현재 인간들이 다루는 문제를 해결하고, 스스로를 개선하는 방법을 찾기 위한 시도가 이루어질 것이다. 우리는 신중하게 선정된 과학자 그룹이 여름 동안 모여 함께 연구한다면 이 문제 중 하나 또는 그 이상에서 상당한 진보를 이루어 낼 것으로 생각한다."
다트머스 회의에 참석한 학자들.
1963년 미국 고등연구계획국_DARPA은 미국 매사추세츠공과대학교(MIT)에 200만 달러를 투입해 Project MAC(Mathematics and Computation)를 시작했습니다. 얼마 지나지 않아 민스키와 맥카시가 이 프로젝트에 참여해 비전 및 언어 이해와 관련된 연구를 수행했고, 초기 컴퓨터 과학 및 인공지능 인재를 양성했습니다. 이 프로젝트는 MIT의 유명한 컴퓨터 과학 및 인공지능 실험실(MIT CSAIL)의 전신이 되었습니다.
1964~1966년 사이 세계 최초의 자연어 대화 프로그램인 엘리자(ELIZA)가 조셉 와이젠바움(Joseph Weizenbaum)교수에 의해 개발되기도 했으나, '비전'과 '언어 이해'의 역할이 무엇인지에 대한 개념이 모호했고 당시 컴퓨터의 계산 능력이 부족해서 인공지능의 발전이 지체되기 시작합니다.
1960~1970년대 미국의 컴퓨터과학자 에드워드 파이겐바움_Edward Feigenbaum 교수가 최초로 전문가 시스템에 대한 연구를 시작해 1970년대에는 스탠퍼드대학교의 과학자들이 사람이 수동으로 만든 600개의 규칙에 의해 혈액의 감염을 진단하는 시스템인 MYCIN을 개발했습니다. 1980년대에 들어 전문가 시스템과 인공신경망 등의 새로운 진전이 있었는데, 특히 카네기멜론대학교는 DEC 회사를 위해 전문가 시스템인 XCON을 개발했습니다. 이를 통해 고객의 수요에 근거해 컴퓨터 부품을 조합하면서 DEC 회사는 당시 매년 4000만 달러를 절약할 수 있었죠.
전문가 시스템 인공지능으로 하여금 의사, 과학자 등 전문가들의 사고 과정을 흉내 내 전문가의 업무를 흉내내도록 하는 일을 기계학습으로 가능하게 할 수 있을까?
1970년에는 인공신경망 연구의 발전을 거듭했습니다. 미국의 물리학자 존 홉필드_John Hopfield는 새로운 형태의 네트워크 형식을 제안해 '연상메모리'라는 메커니즘을 도입했고, 1986년 캘리포니아대학교의 심리학자 데이비드 럼멜하트_David Rumelhart는 토론토대학교의 컴퓨터과학자 제프리 힌튼_Geoffrey Hinton, 노스이스턴대학교의 컴퓨터과학자 로널드 윌리엄스_Ronald Williams와 함께 기념비적인 논문을 발표했습니다.
이 논문에서 '오차역전파법'(Backpropagation 백프로퍼게이션)이 신경망의 은닉층을 효과적으로 학습시킬 수 있다는 것을 보여주었고, 이때부터 오차역전파법은 인공신경망의 학습에 광범위하게 이용되고 있습니다.
1970년대에 들어서 인공지능 연구자들은 좀 더 탄탄한 수학적 기초를 세우기 위해 선형대수학, 확률 및 통계, 최적화 이론, 이산수학 등 수학적인 도구를 도입하기 시작했습니다. 이로부터 통계적 학습 이론, 서포트 벡터 머신, 확률 그래프 모델 등의 수학적 모형과 알고리듬이 개발됐죠.
21세기에 들어 인터넷의 발전과 더불어 데이터의 양이 폭발적으로 늘어나고 GPU 같은 계산 자원의 발달로 인공지능은 새로운 전기를 마련했습니다. 2012년 이미지 인식 대회 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 토론토대학교의 알렉스 넷_Alex Net이 CNN 기반의 딥러닝 알고리듬으로 우승을 차지하면서 딥러닝 기반의 모델이 음성인식, 이미지 분석, 영상 이해 등 광범위하게 적용됐습니다.
2016년 구글의 딥마인드사가 개발한 '알파고'가 이세돌 9단과의 바둑 대결에서 5판 중 4판을 이기고, 알파고의 업그레이드 버전인 '알파고 마스터'가 중국의 바둑 기사 커제 9단과의 대결에서 전승을 거두면서 세계적으로 인공지능에 관한 관심을 불러일으킵니다.
알파고와 대결하는 이세돌 9단. [사진, 가디안 제공]
인공지능을 대하는 우리의 자세
인공지능을 이해하고 활용하기에 앞서 가장 먼저 할 일은 인공지능이 우리가 이해할 수 있는 이론과 절차에 따라 만들어진 것이라는 것을 이해하는 겁니다. 인공지능은 마술이 아니라 데이터, 규모 및 처리 능력에 의해 구동되는 수학적 알고리듬 모음을 적용하는 것일 뿐입니다.
아마존이 우리에게 책을 추천하기 위해 아마존은 우리의 구매 패턴에 대한 정보를 모으고, 우리가 누구인지 그리고 우리가 다른 사람과 얼마나 비슷한지를 찾아냅니다. 그리고 당신과 비슷한 사람들이 좋아하는 것을 바탕으로 당신에게 새로운 상품을 추천하죠. 즉 우리를 포함한 모든 지능형 시스템의 경우, 현재 진행 중인 상황을 이해하고 이로부터 추론해 다음에 어떤 일이 일어날지 예측합니다.
이런 예측 분석 작업은 기초적인 수학과 행렬이론 그리고 회귀분석이나 시계열분석 같은 수학적 기법을 통해 주어진 과거의 행동을 토대로 미래에 어떤 구매 활동을 할 지 추측하는 겁니다. 이미 우리는 음성 인식과 자동 검색을 포함해 인공지능과 함께 살고 있으며 앞으로 인공지능은 우리의 생활과 직업에 더욱 큰 영향을 미칠 겁니다. 따라서 이런 인공지능이 어떤 알고리듬으로 구동하는지에 대한 이해는 꼭 필요하죠.
딥러닝은 음성을 인식하고, 이미지나 패턴을 확인하고, 다음 상황을 예측하는 일과 같이 인간이 하는 작업을 수행하도록 컴퓨터를 교육하는 일종의 기계 학습(머신 러닝)입니다. 사전에 정의된 수식을 통해 실행되도록 데이터를 구성하는 대신, 주어진 데이터에 초기 변수를 설정해주고, 여러 겹의 처리 계층을 사용하여 패턴을 인식하면서, 컴퓨터가 스스로 학습하도록 훈련하는 겁니다. 이러한 노력은 오늘날 우리가 일상에서 접하고 있는 자동화와 형식 추론 기술의 기틀을 다지는 역할을 하였으며, 이러한 기술에는 사람의 능력을 보완하고 확장할 수 있는 의사 결정 지원 시스템과 스마트 검색 시스템을 포함합니다.
아마존과 넷플릭스가 머신러닝을 이용한 추천 시스템의 개념을 대중화한 것처럼 앞으로 산업 전반적인 분야에서 인공지능이 활용될 것입니다. 이 과정에서 선형대수학과, 미적분학, 그리고 통계학 등 많은 수학적 이론이 사용되는 것은 당연하겠죠?
수학동아 2020년 5월호 [인공지능, 수학으로 타파] 인공지능이란?
|
|
I. 인공지능에 필요한 기초수학
...
[열린문제] 인터넷이나 다른 교재에서 5차 (이상) 행렬을 찾아서, 전치행렬과 역행렬이 존재하는지를 확인하고, 존재하면 찾아보시오.
1주차 과제 : 이번 주에 본인이 요약/실습/질문/답변한 내용에 깨우친 점을 코멘트로 달아보시오.
http://matrix.skku.ac.kr/math4ai/PBL-Record/ http://matrix.skku.ac.kr/2020-Math4AI-PBL/
[참고자료] 역행렬 http://matrix.skku.ac.kr/K-MOOC-LA/cla-week-3.html
3. 데이터의 분류 – 3주차 -
○ (거리를 활용한) 데이터의 유사도
○ (사잇각을 활용한) 데이터의 유사도
3.1 데이터의 유사도
인공지능이 데이터를 바탕으로 수행하는 주요 업무는 크게 판단(decision)과 예측(prediction)으로 나눌 수 있다.
- 이미지인식으로 읽은 사진으로부터 사진 속의 사람이 누구인지 판단 - 음성인식으로 저장된 음성신호로부터 말하는 내용을 판단 - 의료영상을 인식한 후 스스로 비교 분석하여 질병의 원인과 성질을 판단 - 전자상거래의 인터넷 기록을 활용한 사용자의 과거 구매 이력으로부터 그 사용자가 어떤 상품에 관심이 있는지 예측하여 다음 구매할 상품을 추천 - 금융에서 주식의 과거의 가격과 거래 정보로부터 미래 가격의 흐름을 예측 - 바둑 대국의 현재 상황에서 어떤 위치에 다음 바둑돌을 놓을 때의 승률을 예측 |
그리고 주어진 데이터의 특징에 따라 데이터가 어느 범주(class 또는 category)에 속하는지 판단하는 것을 분류(classification)라고 한다. 주어진 데이터를 분류하기 위해서는 각 데이터가 우리가 다룰 수 있는 (계산할 수 있는) 형태로 표현할 수 있고, 각 범주와 얼마나 가까운지 (혹은 유사한지) 계산하여 최종 판단해야 한다. 이러한 척도를 데이터의 유사도(similarity)라고 한다.
3.2 거리
그렇다면 서로 다른 두 데이터가 얼마나 유사한지 어떻게 평가할 수 있을까? 물론 데이터의 종류와 분석가의 관심사에 따라 유사도를 재는 척도는 다양하다. 가장 쉽게 생각해볼 수 있는 것은 두 데이터 사이의 거리를 계산하는 것이다. 데이터는 순서쌍(pair), 순서조(n-tuple) 또는 벡터(vector)로 표현할 수 있다. 예를 들어, 두 점 ,
사이의 거리는 다음과 같이 계산한다.
거리가 가까우면 두 데이터는 유사하다고 볼 수 있고, 거리가 멀면 두 데이터는 관계없다고 판단할 수 있다. 그리고 어떤 데이터와 어떤 범주와의 거리가 가까우면, 이 데이터는 이 범주에 속해있다고 볼 수 있다. 예를 들어, 아래 그림에서는 임을 쉽게 알 수 있으므로, “
와
는 가깝고,
와
는 멀다”, “
는
보다
에 더 가깝다”는 의미이다.
3.3 노름(norm, 크기)
벡터 에 대하여
의 크기를 다음과 같이 나타내고,
의 노름(norm)이라 한다.
(벡터의 크기 계산: 노름(norm), 2-norm)
즉 는 원점에서 점
에 이르는 거리와 같다. 따라서 두 벡터
,
에 대하여
는 두 점
와
사이의 거리(distance)가 되며, 다음이 성립한다.
위 정의는 3차원은 물론 고차원 데이터에 대해서도 쉽게 확장된다. 예를 들어, 3차원 데이터 ,
에 대하여,
,
라 할 때, 다음이 성립한다.
(원점에서 점
에 이르는 거리)
*노름(norm, 크기)
참고: http://matrix.skku.ac.kr/K-MOOC-LA/cla-week-1.html
의 벡터
,
와 스칼라
에 대하여 다음이 성립한다.
(1) ,
(2)
(3)
예제 1. 두 벡터 ,
에 대하여
,
,
를 계산하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
v = vector([1, 2, -4]) # 벡터 생성
w = vector([-1, 3, 1])
print("||v|| =", v.norm()) # 벡터의 크기. 형식은 v.norm()
print("||2*w|| =", (2*w).norm())
print("||v - w|| =", (v - w).norm()) # 거리 구하기
---------------------------------------------------------------------
||v|| = sqrt(21)
||2*w|| = 2*sqrt(11)
||v - w|| = sqrt(30) ■
3.4 노름(크기, 거리)을 활용한 데이터의 유사도 비교
예제 2. 세 개의 데이터 ,
,
에 대하여
는
와
중 어느 데이터에 더 가까운지 판단하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
a = vector([0, 1, -7, 1]) # 벡터 생성
b = vector([5, 2, -1, 3])
c = vector([-2, 0, -4, 6])
distAB = (a - b).norm() # dist(A, B)
distBC = (b - c).norm() # dist(B, C)
print("dist(A, B) =", distAB)
print("dist(B, C) =", distBC)
bool(distAB < distBC) # True 이면 dist(A, B) < dist(B, C) 성립
---------------------------------------------------------------------
dist(A, B) = sqrt(66)
dist(B, C) = sqrt(71)
True ■
[열린문제] 거리 척도를 사용하여 유사도를 계산할 수 있는 데이터의 종류에는 어떤 것이 있는지 생각해보시오.
[열린문제] 위의 거리 척도로 유사도를 판단하기가 용이하지 않은 데이터의 경우에 유사도를 판단하는데 사용이 가능한 다른 척도는 무엇이 있을지 생각해보시오. (Hint: 방향이 같은 데이터/벡터들의 경우)
[열린문제] 두 개의 7차원 벡터(데이터) 사이의 거리(distance)를 직접 구하시오.
(Hint: (거리를 활용한) 데이터의 유사도 <실습실> 활용)
http://matrix.skku.ac.kr/math4AI-tools/distance_similarity/
3.5 사잇각을 활용한 데이터의 비교
데이터의 유형과 분석가의 관심사에 따라 데이터 사이의 유사도를 재는 척도는 다양할 수 있다. 앞에서는 두 데이터 사이의 거리를 계산하여 유사도를 측정하는 척도에 대하여 설명하였다.
그러나 데이터 분석가가 단지 데이터의 패턴(방향)에만 관심이 있는 경우, (거리)척도는 적합하지 않다. 예를 들어, 아래와 같이 좌표평면 상에 벡터로 표현된 두 데이터 와
는 패턴(방향)은 유사하지만 거리는 매우 큰 값을 갖게 되어, (거리)척도로는 “두 데이터가 관계가 없다”고 판단하게 되기 때문이다.
3.6 코사인 유사도의 개념
단지 데이터의 패턴(방향)에만 관심이 있는 경우에는 유사도를 어떻게 측정해야 할까? 이번에 우리는 데이터의 패턴(방향)에만 관심이 있으므로, 두 데이터(벡터)가 이루는 사잇각 로 유사도를 측정할 수 있을 것이다. 예를 들어,
가 작으면 데이터의 유사도가 높고,
가 크면 데이터의 유사도가 낮다고 판단할 수 있다. 그러나 사잇각은 벡터의 내적(inner product)으로부터 정의되므로,
를 직접 계산하기 보다는 벡터의 내적을 이용하여
의 코사인 값으로 유사도를 측정한다. 이를 코사인 유사도(cosine similarity)라고 한다.
3.7 내적
먼저 두 벡터 와
의 내적(inner product)은 다음과 같이 정의된다.
그리고 내적은 다음의 성질을 만족하는데, 대부분은 실수의 곱셈이 만족하는 성질과 유사하다.
① ,
② (교환법칙)
③ (분배법칙)
④
*자세한 내용은 “K-MOOC 선형대수학 1.2절, 내적과 직교”를 참고할 수 있다.
http://matrix.skku.ac.kr/K-MOOC-LA/cla-week-1.html
3.8 사잇각
벡터의 내적은 두 벡터가 이루는 사잇각과 관련이 있는데, 먼저 아래 그림에서 피타고라스 정리를 적용하면 다음을 쉽게 알 수 있다.
이 식을 벡터를 이용하여 다시 표현하면 다음과 같다.
또한 내적의 정의와 성질에 의해
이므로, 위의 두 식을 비교하면 다음을 얻는다.
, 즉
(
)
3.9 코사인 유사도의 계산
두 데이터 와
의 코사인 유사도는 다음과 같이 계산할 수 있다.
차원 공간
의 두 벡터
와
에 대해서도 동일한 공식이 성립한다.
여기서 와
는 원 데이터
,
의 크기에 관계없이, 크기가 항상
인 단위벡터(unit vector)이므로, 코사인 유사도는 데이터의 크기와 데이터 사이의 거리는 무시하고 단지 데이터의 패턴(방향)만 고려하게 된다.
이렇게 두 데이터의 코사인 유사도를 계산하여, 만일 코사인 값이 크면, 코사인 함수의 성질에 의해 사잇각은 작아지게 되고, 그에 따라 유사도는 높아지게 된다. 이런 방식으로 데이터 사이의 패턴을 분석할 수 있다.
예제 1. 두 벡터 ,
에 대하여 내적
과 코사인 유사도, 사잇각
(
)를 계산하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
v = vector([1, 2, -4]) # 벡터 생성
w = vector([-1, 3, 1])
vw = v.inner_product(w) # 두 벡터의 내적. 형식은 a.inner_product(b)
vn = v.norm()
wn = w.norm()
cos_sim = vw/(vn*wn) # 코사인 유사도
ang = arccos(cos_sim) # 사잇각(라디안)
print("v.w =", vw)
print("||v|| =", vn)
print("||w|| =", wn)
print("cos_similarity =", cos_sim.n(digits = 3))
print("angle(rad) =", ang.n(digits = 3))
# .n(digits = d)는 유효숫자 d자리의 근삿값
---------------------------------------------------------------------
v.w = 1
||v|| = sqrt(21)
||w|| = sqrt(11)
cos_similarity = 0.0658
angle(rad) = 1.51 ■
예제 2. 코사인 유사도를 활용하여 세 개의 데이터 ,
,
에 대하여
는
와
중 어느 데이터에 더 가까운지 판단하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
a = vector([0, 1, -7, 1]) # 벡터 생성
b = vector([5, 2, 1, 3])
c = vector([-2, 0, -4, 6])
cos_simAB = a.inner_product(b)/(a.norm()*b.norm()) # 코사인 유사도
cos_simBC = b.inner_product(c)/(b.norm()*c.norm())
print("cos_sim(A, B) =", cos_simAB.n(digits = 3))
print("cos_sim(B, C) =", cos_simBC.n(digits = 3))
bool(cos_simAB < cos_simBC)
---------------------------------------------------------------------
cos_sim(A, B) = -0.0448
cos_sim(B, C) = 0.0856
True ■
[열린문제] 어떤 데이터들이 코사인 유사도를 사용하여 분석이 가능할지 생각해보시오.
[열린문제] 두 개의 5차원 데이터(벡터) 사이의 내적과 사잇각 를 구하시오. (Hint: (사잇각을 활용한) 데이터의 유사도 <실습실> 활용)
http://matrix.skku.ac.kr/math4AI-tools/cosine_similarity
[참고] 국가에서 보유하고 있는 다양한 공공데이터포털 https://www.data.go.kr/
[참고] 공공데이터를 활용한 예 https://www.data.go.kr/tcs/puc/selectPublicUseCaseListView.do
[참고] 국가 중점데이터 https://www.data.go.kr/tcs/eds/selectCoreDataListView.do ■
스트롱 코리아 포럼 2020 http://www.strongkorea.or.kr/kor/ (2020. 5. 27.)
4. 선형연립방정식의 해집합 – 4주차 -
...
[열린문제] 주어진 선형연립방정식이 유일해를 갖는지, 무수히 많은 해를 갖는지, 해가 존재하지 않는지를 판단하는 것은 첨가행렬 의 RREE를 구하여 이것만 자세히 보면 바로 판단이 가능한 이유를 설명하시오.
5. 정사영과 최소제곱문제(least square problem) - 5주차 -
최소제곱법은 어떤 점들의 분포를 직선이나 곡선으로 근사하는 것으로만 생각하기 쉽다. 하지만, 최소제곱법은 일반적인 수학적 도구(tool)로서 수치해석, 회귀분석뿐만 아니라 영상처리 분야에서도 다양하게 활용된다. 이 절에서는 최소제곱법이 어떻게 실제 문제에 활용되는지, 그리고 계산은 어떻게 하면 되는지 구체적 예를 통해 소개한다.
5.1 최소제곱문제
다음과 같이 와
에 관한 2차원 데이터가 주어져 있다고 하자.
이를 좌표평면에 나타내면 아래의 왼쪽 그림과 같다. 우리는 직관적으로 와
의 관계를 아래 오른쪽 그림과 같이 직선(파란색 점선)으로 나타낼 수 있음을 알 수 있다. 이를 최소제곱직선이라 한다.
[그림 1]
이제 최소제곱직선을 찾아보자. 즉 와
의 관계를 가장 잘 보여주는 일차함수
를 찾는다. 가장 이상적인 상황은 모든 데이터
에 대해서
가 만족되는
절편
와 기울기
를 찾는 것이다. 따라서 다음과 같이 미지수가
,
인 선형연립방정식과 행렬표현을 얻게 된다.
데이터 |
|
일차함수 |
선형연립방정식 |
행렬표현 |
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
우리가 이미 알고 있는 바와 같이, 직선을 구하기 위해서는 (즉 와
를 찾기 위해서는) 두 개의 데이터(두 점)에 대한 정보만 있으면 충분하다. 그러나 측정에서 생기는 오차의 영향을 줄이기 위하여, 대개는 미지수의 개수보다 많은 개수의 데이터를 사용하므로, 방정식의 수가 미지수의 개수보다 많은 선형연립방정식이 생긴다. 이런 경우, 일반적으로 선형연립방정식을 만족하는 해(즉
인
)를 기대할 수 없다. 대신
와
사이의 거리(
)가 최소가 되는 근사해, 즉 다음을 만족하는
를 찾는 문제를 최소제곱문제(least square problem)라 한다.
여기서 min은 ‘최소화 한다’는 의미이다. 그리고 는
의 최소제곱해(least square solution)라고 한다.
5.2 최소제곱문제의 의미
최소제곱문제는 다음과 같이 해석가능하다. 즉 각 데이터 에 대하여
를 일차함수
에 대입하여 얻은 값을
라 하자(즉
). [표 1]의 선형연립방정식의 해가 존재하지 않는 경우는 각 데이터에 따라서
와
가 같지 않아서 발생하므로, 이를 해결하기 위한 차선책으로 각 데이터의 (제곱)오차
가 최소가 되는
,
를 구한다. 주어진 모든 데이터에 대하여 오차(error)를 더하면 다음을 얻는다.
따라서 최소제곱문제는 아래와 같이 오차를 최소화하는 (최적화, optimization) 문제로 이해할 수 있다.
5.3 정사영과 최소제곱해 (least square solution)
최소제곱문제를 풀기 위해서는 정사영(projection)에 관하여 알아야 한다. 먼저 다음 식을 만족하는 해 를 찾는 문제를 보자.
(여기서
는 실수)
이 문제는 시작점이 같은 두 벡터 와
에 대하여,
를 포함하는 직선과
사이의 거리가 최소가 되게 하는
를 찾으려고 하는 것이다.
[그림 2]
는
와 평행이므로
를 포함하는 직선위에 놓이게 되고 [그림 2]에서 보듯이 실수
의 값에 대하여
는 실선으로 표시된 선분의 길이를 나타낸다. 직관적으로
중
와의 거리가 가장 짧은 벡터는
의 끝점에서
를 포함하는 직선 위에 수선을 내려 생기는 벡터
임을 쉽게 알 수 있다. 그리고 이때의
값이
의 해가 된다. 벡터
를
위로의
의 정사영(projection)이라고 한다. 실수
를 구하기 위해
임을 이용하면 다음을 얻는다.
예제 1. ,
에 대하여
위로의
의 정사영을 구하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
x = vector([2, -1, 3])
y = vector([4, -1, 2])
yx = y.inner_product(x) # 벡터 x와 y의 내적 구하기
xx = x.inner_product(x) # 벡터 x와 x의 내적 구하기
p = yx/xx*x # 벡터의 정사영 구하기
print("p =", p)
---------------------------------------------------------------------
p = (15/7, -15/14, 45/14) ■
같은 방법으로 의 해 (
의 최소제곱해) 는 다음과 같이 구한다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix([[1, 0], [1, 1], [1, 2], [1, 3]])
y = vector([1, 3, 4, 4])
print("u* =", (A.transpose()*A).inverse()*A.transpose()*y)
---------------------------------------------------------------------
u* = (3/2, 1) (즉, a=3/2, b=1) ■
따라서 최소제곱직선(least square line)은 이다. 통계학에서는 이 과정을 선형회귀(linear regression)라고도 한다.
[그림 3]
■
5.4 데이터에 적합한 곡선 찾기(Curve Fitting)
앞서 학습한 방법을 활용하여 와
의 관계를 가장 잘 보여주는(best fit 하는) 이차식 (근사식)
도 찾을 수 있다. 즉 다음과 같이 미지수가
,
,
인 선형연립방정식과 행렬표현을 얻게 된다.
데이터 |
|
일차함수 |
선형연립방정식 |
행렬표현 |
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
이차함수를 구하기 위해서는(즉, ,
,
를 찾기 위해서는) 세 개의 데이터(즉, 세 점)에 대한 정보만 있으면 충분하다. 그러나 측정에서 생기는 오차의 영향을 줄이기 위하여, 대개는 미지수의 개수보다 많은 개수의 데이터를 사용하므로, 방정식의 수가 미지수의 개수보다 많은 선형연립방정식이 생긴다. 따라서 다음과 같은 최소제곱문제가 생긴다.
이를 오차로 표현하면 다음과 같다.
같은 방법으로 행렬을 이용하여 다음과 같이 구할 수 있다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix([[1, 0, 0], [1, 1, 1], [1, 2, 4], [1, 3, 9]])
y = vector([1, 3, 4, 4])
print("u* =", (A.transpose()*A).inverse()*A.transpose()*y)
---------------------------------------------------------------------
u* = (1, 5/2, -1/2) (즉, a=1, b=5/2, c=-1/2) ■
따라서 최소제곱 곡선(least square curve)은 이다.
[그림 4] ■
[열린문제] 앞서 구한 방법으로 평면의 6개의 점에 (best fit 하는) 3차의 최소제곱곡선
을 구할 수 있음에 대하여 토론하시오.
○ 최소제곱문제(least squares problem) <실습실> http://matrix.skku.ac.kr/2020-math4AI/LSS/
○ 정사영 (Projection) <실습실> https://www.geogebra.org/m/ewP9ybUP
6. 행렬 분해(Matrix decomposition, 특잇값분해) - 6주차 -
인공지능은 데이터를 기반으로 자료를 분류하거나 미래를 예측하는 등 가장 합리적인 의사결정을 하는데, 인간 또한 문제를 이해하고, 자신의 수학적 지식을 이용하여 적절한 알고리즘을 설계하며, 그것을 실제로 프로그래밍 언어를 거쳐 코딩을 하는 과정에 따라 의사결정을 한다. 따라서 우리는 컴퓨터가 이해하고 계산하는 방식을 이해해야 한다.
지금까지는 선형대수학과 관련하여 행렬과 벡터의 연산, 선형연립방정식의 가우스 소거법, 최소제곱문제 등의 원리를 학습하였다. 그러나 컴퓨터는 이를 실제로 구현하기 위해 행렬 분해 기법을 이용하여 해결한다. 이 절에서는 몇 가지 중요한 행렬 분해를 간단히 소개한다.
6.1 LU 분해
정사각행렬 를 다음과 같이
하삼각행렬 과 상삼각행렬
의 곱
로 표현하는 것을 LU 분해 (LU decomposition)라고 한다. LU 분해는 보통 선형연립방정식을 풀 때 많이 사용된다. 이 경우 계수행렬이 삼각행렬일 때, 이 경우 대입만 필요하므로 계산량이 훨씬 적기 때문이다. 즉,
이면,
를 먼저 쉽게 풀어
를 구한 후,
를 풀어서
를 만족하는
를 구하면 된다. 참고로 계수행렬이
의 삼각행렬인 선형연립방정식을 해결하는데 필요한 계산량은 대략
임이 알려져 있다. 그리고
차의 정사각행렬의 LU 분해를 계산하는 데는 약
의 계산량이 필요하다.
요악하면 로 분해하여, 선형연립방정식
를 다음과 같이 해결할 수 있다.
[단계 1] 를
로 쓰고 우선
를 만족하는
를 구한다. (전진대입법)
[단계 2] [단계 1]에서 구한 를 이용하여
를 만족하는
를 구한다. (후진대입법)
예제 1. 행렬 의 LU 분해를 계산하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix([[2, 6, 2], [-3, -8, 0], [4, 9, 2]])
P, L, U = A.LU() # LU-분해. A == P*L*U, **LU-분해는 유일하지 않다.
print(P) # P는 치환행렬. 기본행 연산 과정에서 행을 바꿀 경우가 있음.
print()
print(L) # L은 하삼각행렬
print()
print(U) # U는 상삼각행렬
---------------------------------------------------------------------
[0 1 0]
[0 0 1]
[1 0 0]
[ 1 0 0]
[ 1/2 1 0]
[-3/4 -5/6 1]
[ 4 9 2]
[ 0 3/2 1]
[ 0 0 7/3] ■
예제 2. 를 LU-분해를 이용하여 해결하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix([[2, 1, 1], [4, 1, 0], [-2, 2, 1]])
b = vector([1, -2, 7])
P, L, U = A.LU() # LU-분해. A == P*L*U
y = L.solve_right(P.transpose()*b) # L*y = P.transpose()*b
x = U.solve_right(y) # U*x = y
print(x)
print(A.solve_right(b)) # 직접 연립방정식을 푼 해와 일치
---------------------------------------------------------------------
(-1, 2, 1)
(-1, 2, 1) ■
6.2 QR 분해
이제 최소제곱문제를 해결할 때 많이 사용되는 QR 분해에 대하여 살펴보자. (
)의 행렬
에 대하여 정규직교벡터들을 열로 하는
행렬
와
의 상삼각행렬
의 곱
로 표현하는 것을 QR 분해(QR decomposition)라고 한다. 여기서 정규직교벡터들이란 자신의 크기가 모두 1이면서 서로 다른 벡터들끼리는 내적이 0인 벡터들을 말한다. 따라서
는
을 만족한다.
가 주어졌을 때, 최소제곱문제
는 다음과 같이 해결할 수 있다.
앞서 이 최소제곱문제의 해이므로 관계식
으로부터 임을 쉽게 알 수 있다.
예제 3. 행렬 의 QR 분해를 구하시오.
[참고] 아래는 Sage가 제공하는 gram_schmidt() 함수를 일부 수정하여 좀 더 직관적으로 그 과정을 확인하도록, gs_orth() 함수 코드를 만들어 QR 분해를 확인하였다. (자주 사용하는 함수는 함수 코드를 만들어 활용한다.) |
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
# Sage의 gram_schmidt() 함수를 보완하여 gs_orth()을 만들었음
def gs_orth(A): # 함수 정의
m, n = A.nrows(), A.ncols() # 행렬의 크기
r = A.rank() # 행렬의 rank
if m < n: # 행렬의 크기 확인
raise ValueError("The number of rows must be larger than the number of columns.")
elif r < n: # full column rank인지 확인
raise ValueError("The matrix is not full column rank.")
[G, mu] = A.transpose().gram_schmidt() # gram_schmidt 함수 활용
# Q의 transpose
Q1 = matrix([G.row(i) / G.row(i).norm() for i in range(0, n)])
R1 = Q1*A
Q = simplify(Q1.transpose()) # 정규직교기저로 만들어진 행렬
R = simplify(R1) # 상삼각행렬
return Q, R
A = matrix([[1, 0, 0], [1, 1, 0], [1, 1, 1]]) # 행렬 입력
Q, R = gs_orth(A) # QR 분해
print("Q =")
print(Q)
print()
print("R =")
print(R)
print()
print("Q*R =")
print(Q*R)
---------------------------------------------------------------------
Q =
[ 1/3*sqrt(3) -1/3*sqrt(3)*sqrt(2) 0]
[ 1/3*sqrt(3) 1/6*sqrt(3)*sqrt(2) -1/2*sqrt(2)]
[ 1/3*sqrt(3) 1/6*sqrt(3)*sqrt(2) 1/2*sqrt(2)]
R =
[ sqrt(3) 2/3*sqrt(3) 1/3*sqrt(3)]
[ 0 1/3*sqrt(3)*sqrt(2) 1/6*sqrt(3)*sqrt(2)]
[ 0 0 1/2*sqrt(2)]
Q*R =
[1 0 0]
[1 1 0]
[1 1 1] ■
예제 4. 다음 문제의 최소제곱해를 구하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
# Sage의 gram_schmidt() 함수를 보완하여 gs_orth()을 만들었음
def gs_orth(A): # 함수 정의
m, n = A.nrows(), A.ncols() # 행렬의 크기
r = A.rank() # 행렬의 rank
if m < n: # 행렬의 크기 확인
raise ValueError("The number of rows must be larger than the number of columns.")
elif r < n: # full column rank인지 확인
raise ValueError("The matrix is not full column rank.")
[G, mu] = A.transpose().gram_schmidt() # gram_schmidt 함수 활용
# Q의 transpose
Q1 = matrix([G.row(i) / G.row(i).norm() for i in range(0, n)])
R1 = Q1*A
Q = simplify(Q1.transpose()) # 정규직교기저로 만들어진 행렬
R = simplify(R1) # 상삼각행렬
return Q, R
A = matrix([[1, 3, 5], [1, 1, 0], [1, 1, 2], [1, 3, 3]]) # 계수 행렬 입력
b = vector([2, 3, -1, 2]) # 상수항 벡터 입력
Q, R = gs_orth(A) # QR 분해
print(R.solve_right(Q.transpose()*b)) # 최소제곱해
---------------------------------------------------------------------
(0, 2, -1) # 최소제곱해 ■
[열린문제] 예제4와 같은 방법으로 다른 교재에서 찾은 선형연립방정식의 최소제곱해를 구하시오. (Hint: http://matrix.skku.ac.kr/2018-album/LS-QR-decom.html 활용)
6.3 SVD (특잇값 분해, Singular Value Decomposition)
마지막으로 선형대수학에서 가장 많이 응용되는 특잇값 분해(singular value decomposition, SVD)에 대하여 살펴보자. SVD는 임의의 크기의 행렬에 대하여 모두 존재하므로 특히 중요하다.
크기가 인 행렬
에 대하여
의 직교행렬(orthogonal matrix)
와
의 직교행렬
및
의 대각선 행렬
가 존재하여 다음을 만족한다.
여기서 직교행렬은 ,
을 의미하고,
은 주대각선성분이 모두 단조감소의 순서로 배열된 양수 (
)이고, 가역인 대각선행렬,
은 영행렬이다. 위의 행렬
의 대각선성분들을 행렬
의 특잇값(singular value)들이라 하고,
의 열들을
의 좌 특이벡터(left singular vector),
의 열들을
의 우 특이벡터(right singular vector)라고 한다.
예제 5. 행렬 의 특잇값 분해(SVD)를 구하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix([[sqrt(3), 2], [0, sqrt(3)]]) # 행렬 입력
B = A.transpose()*A
eig = B.eigenvalues()
sv = [sqrt(i) for i in eig]
print(B.eigenvectors_right())
---------------------------------------------------------------------
[(9, [(1, sqrt(3))], 1), (1, [(1, -1/3*sqrt(3))], 1)] ■
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
G = matrix([[1, sqrt(3)], [1, -1/3*sqrt(3)]])
Vh = matrix([1/G.row(j).norm()*G.row(j) for j in range(0,2)]) # V의 전치행렬
Vh = Vh.simplify() # V의 전치행렬 표현
print(Vh)
print()
U = matrix([A*Vh.row(j)/sv[j] for j in range(0,2)]).transpose() # U
print(U) # U의 열들을 A의 left singular vector들
print()
S = diagonal_matrix(sv)
print(S)
print()
print(U*S*Vh)
----------------------------------------------------------------------------
[ 1/2 1/2*sqrt(3)]
[1/2*sqrt(3) -1/2]
[ 1/2*sqrt(3) 1/2]
[ 1/2 -1/2*sqrt(3)]
[3 0]
[0 1]
[sqrt(3) 2]
[ 0 sqrt(3)] ■
* 위의 예에서 보여준 수학적 알고리즘을 하나의 명령어로 간단하게 만든 아래의 코드로 더 쉽게 특잇값 분해를 할 수 있다. (SVD 명령어를 사용 시에는 실수에서 연산을 한다는 의미로 행렬을 RDF에서 정의해 주어야 한다.)
예제 6. 행렬 의 특잇값 분해(SVD)를 구하시오.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
A = matrix(RDF, [[sqrt(3), 2], [0, sqrt(3)]]) # 행렬 입력
U,S,V = A.SVD() # A의 SVD. A = U*S*V'
print ("U = ")
print (U)
print ()
print ("S = ")
print (S)
print ()
print ("V = ")
print (V)
---------------------------------------------------------------------
U =
[ 0.8660254037844387 -0.5000000000000001]
[ 0.5000000000000001 0.8660254037844387]
S =
[ 3.0 0.0]
[ 0.0 1.0000000000000002]
V =
[ 0.5 -0.8660254037844387]
[ 0.8660254037844387 0.5] ■
[열린문제] 예제 6과 같은 방법으로 다른 교재에서 찾은 행렬의 특잇값 분해(SVD)를 구하시오.
[Review] 특잇값 분해(SVD)는 행렬을 대각화1)하는 한 방법이다. 특잇값 분해가 특히 유용한 이유는 행렬이 정사각행렬이든 아니든 관계없이 모든 크기의 행렬에 대해 적용 가능하기 때문이다. 특잇값 분해는 활용도 측면에서 인공지능에 필요한 선형대수학의 내용 중 가장 중요하다. 더구나 특잇값 분해에 대하여 위에서 학습한 모든 내용은 실수 행렬 뿐 아니라, 복소수 성분의 행렬에 대하여도 모두 성립한다. 특잇값 분해를 이용하여 주어진 큰 크기의 행렬을 인공지능이 쉽게 다룰 수 있는 작은 크기의 행렬로 바꾸는 것이 가능하다는 것이 key 아이디어이다.
● 행렬 분해에 대한 개념, 구체적인 유도 과정 및 응용 사례는 고등학교 수준을 넘는다. 고윳값과 행렬의 대각화에 대한 내용과 함께 궁금한 사항은 아래를 참고하시오.
[선형대수학 교재] http://matrix.skku.ac.kr/LA-K/
[고윳값] http://matrix.skku.ac.kr/LA-K/Ch-4/
[행렬의 대각화] http://matrix.skku.ac.kr/LA-K/Ch-8/
[행렬의 대각화] http://matrix.skku.ac.kr/2018-album/LA-Sec-8-2-lab.html
[인공지능 수학 교재] http://matrix.skku.ac.kr/math4ai/Math4AI.pdf
[인공지능과 행렬] http://matrix.skku.ac.kr/math4ai/part1/
[LU 분해 도구] http://matrix.skku.ac.kr/LA-K/LU-decom.html
[QR 분해 도구] http://matrix.skku.ac.kr/LA-K/LS-QR-decom.html
[SVD 분해 도구] http://matrix.skku.ac.kr/LA-K/SVD.html
STRONG KOREA Forum 2020 https://youtu.be/R0KGx_npa8o (동영상)
[Week 6] 과제
[열린문제] 다음 학생들의 문제풀이를 참고하여 다양한 방정식의 (근사)해를 구하시오.
http://matrix.skku.ac.kr/math4ai/PBL-Record/ http://matrix.skku.ac.kr/2020-Math4AI-PBL/
http://matrix.skku.ac.kr/KOFAC/ 에서 실습하세요
[열린문제] 다른 교재의 벡터 또는 행렬에 대한 두 가지 연산을 시행해 보시오.
http://matrix.skku.ac.kr/KOFAC/ 에서 실습하세요
[열린문제] 인터넷이나 다른 교재에서 5차 (이상) 행렬을 찾아서, 전치행렬과 역행렬이 존재하는지를 확인하고, 존재하면 찾아보시오.
[열린문제] 거리 척도를 사용하여 유사도를 계산할 수 있는 데이터의 종류에는 어떤 것이 있는지 생각해보시오.
[열린문제] 위의 거리 척도로 유사도를 판단하기가 용이하지 않은 데이터의 경우에 유사도를 판단하는데 사용이 가능한 다른 척도는 무엇이 있을지 생각해보시오. (Hint: 방향이 같은 데이터/벡터들의 경우)
[열린문제] 두 개의 7차원 벡터(데이터) 사이의 거리(distance)를 직접 구하시오.
(Hint: (거리를 활용한) 데이터의 유사도 <실습실> 활용)
http://matrix.skku.ac.kr/math4AI-tools/distance_similarity/
[열린문제] 어떤 데이터들이 코사인 유사도를 사용하여 분석이 가능할지 생각해보시오.
[열린문제] 두 개의 5차원 데이터(벡터) 사이의 내적과 사잇각 를 구하시오. (Hint: (사잇각을 활용한) 데이터의 유사도 <실습실> 활용)
http://matrix.skku.ac.kr/math4AI-tools/cosine_similarity
[열린문제] 다른 교재의 선형 연립방적식의 해를 위의 명령어로 구하시오.
(Hint: http://matrix.skku.ac.kr/2018-album/LA-Sec-3-5-lab.html 실습 활용)
[열린문제] 주어진 선형연립방정식이 유일해를 갖는지, 무수히 많은 해를 갖는지, 해가 존재하지 않는지를 판단하는 것은 첨가행렬 의 RREE를 구하여 이것만 자세히 보면 바로 판단이 가능한 이유를 설명하시오.
[열린문제] 앞서 구한 방법으로 평면의 6개의 점에 (best fit 하는) 3차의 최소제곱곡선
을 구할 수 있음에 대하여 토론하시오.
[열린문제] 예제4와 같은 방법으로 다른 교재에서 찾은 선형연립방정식의 최소제곱해를 구하시오. (Hint: http://matrix.skku.ac.kr/2018-album/LS-QR-decom.html 활용)
[열린문제] 예제 6과 같은 방법으로 다른 교재에서 찾은 행렬의 특잇값 분해(SVD)를 구하시오.
III. 인공지능과 최적해 (미분)
* 미적분학의 개념 http://matrix.skku.ac.kr/Calculus-Story/index.htm
해(Root, solution) 구하기와 최적화(Optimization)는 둘 다 함수 위의 한 점을 추측하거나 찾는다는 점에서 관련성이 있다. 해 구하기는 함수 혹은 함수들의 근들을 구하는 반면 최적화는 최솟값 혹은 최댓값을 찾는 것이다. 최적해를 구하는 문제는 도함수의 일반화된 개념과 연산들을 포함한다.
7. 극한과 도함수 - 7주차 -
7.1. 함수의 극한 (limit) -
...
*[Fermat의 임계점 정리]에 의해 최적해(optimal solution) 는 다음을 만족한다.
따라서 방정식 을 풀어서 나온 해들이 최적해가 되는지 판단하면 된다. 그러나 함수
가 복잡한 경우는 방정식을 풀어서 임계점을 구하는 것조차도 쉽지 않다. 이런 경우에는 수치적인 방법으로 임계점을 구한다. 대표적인 수치 최적화 방법인 경사하강법(gradient descent method)에 대하여는 다음 절에서 소개한다.
< 참고사이트 >
[함수의 극값 동영상 강의] http://youtu.be/mXVU8OqIHJY
[미적분학 실습실] http://matrix.skku.ac.kr/Cal-Book1/Ch4/
http://matrix.skku.ac.kr/Cal-Book/part1/CS-Sec-4-1-Sol.html
[미분의 응용 동영상 강의] https://youtu.be/O4lN5zEZnMA
9. 경사하강법과 최소제곱문제의 해 - 9주차 -
9.1. 경사하강법 (Gradient Descent Algorithm)
http://matrix.skku.ac.kr/math4ai/gradient_descent/
최소제곱문제의 근사해를 수치적(numerical)으로 얻는 경사하강법을 소개한다.
다음과 같이 미분 가능한 일변수 함수 의 최솟값을 구하는 문제가 있다.
여기서 의 그래프는 아래 그림과 같다고 하자.
그러면 앞서 학습한 [Fermat의 임계점(critical point) 정리]에 의해 함수의 최솟값을 주는 (이를 최적해, optimal solution 이라고 한다)는 다음을 만족한다.
따라서 방정식 를 만족하는 해들을 구하여 그 중 어느 것이 최적해가 되는지 판단하면 된다. 그러나 함수
가 복잡한 경우는 방정식을 풀어서 임계점을 구하는 것조차도 쉽지 않다. 이런 경우에는 수치적인 방법으로 임계점을 구한다. 이 절에서는 주어진 함수의 최솟값을 구하는 대표적인 수치 최적화 방법인 경사하강법(gradient descent method)에 대하여 살펴본다. 경사하강법의 기본 아이디어는 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복시키는 것이다.
경사하강법의 알고리즘은 다음과 같다.
[경사하강법] 알고리즘 [단계 1] 초기 근사해 rate) [단계 2] [단계 3] |
먼저 알고리즘의 작동방식을 살펴보자. 우선 임의로 을 정하여
을 계산한다. 만일
(여기서
은 예를 들어,
과 같이 매우 작은 양수를 의미한다.)이 성립하면
이 되어 (우리가 허용하는 오차범위에서) 임계점 정리를 만족하므로 알고리즘을 멈추고
을 최적인 근사해로 반환한다. 그러나
이면 계산공식
을 이용하여
를 결정한다. 같은 방법으로
를 계산하여 임계점 정리를 만족하는지 판단해보고, 만일 성립되지 않으면
를 결정한다. 이런 방식으로
,
,
(
)를 만들어 낸다. 우리는 적절한
또는 극한값
에서
을 만족하기를 기대한다.
이제 경사하강법의 원리를 자세히 살펴보자. 예를 들어, 아래 그림과 같이 번째 단계의 근사해
에서의 접선의 기울기가
을 만족한다고 하자. 그러면
에서 오른쪽으로 이동할 때(양의 방향) 함수가 감소하므로 최솟값을 갖는 최적해
는
의 오른쪽에 있다고 판단할 수 있다. 따라서
에서
방향(오른쪽)으로 이동하여
을 생성한다.
마찬가지로 아래 그림과 같이 번째 단계의 근사해
에서의 접선의 기울기가
을 만족한다고 하자. 그러면
에서 왼쪽으로 이동할 때(음의 방향) 함수가 감소하므로 최솟값을 갖는 최적해
는
의 왼쪽에 있다고 판단할 수 있다. 따라서
에서
방향(왼쪽)으로 이동하여
을 생성한다.
이를 통해 경사하강법은 가 만족되도록
,
,
,
을 찾으려고 하는 것임을 알 수 있다. 이때 얼마만큼을 이동해야 하는지는
가 결정하는데, 이를 학습률(learning rate)이라고 한다. 학습률이 너무 크면
를 넘어서 지나칠 수 있고, 심지어 함수값이 증가하여 수렴하지 않을 수도 있다(아래 왼쪽 그림). 반대로 너무 작으면 수렴하는 속도가 느릴 수 있다(아래 오른쪽 그림). 적절한
를 이용하여 계산공식
에 따라
을 결정한다.
수렴하지 않는 경우 수렴속도가 느린 경우
[참고] 적절한 학습률을 결정하는 것은 경사하강법에서 중요한 문제이나 여기서는 자세히 다루지 않는다. 학습률은 대개 |
예제 5. 함수 의 최솟값을 구하시오. 단
,
,
으로 한다.
풀이. 에서 임계점은
이고
는 아래로 볼록인 이차함수이므로
에서 최솟값
임을 쉽게 알 수 있다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
f(x) = 2*x^2 - 3*x + 2 # 함수
df(x) = diff(f(x), x) # 도함수
x0 = 0.0 # 초기 근사해
tol = 1e-6 # 허용오차
eta = 0.1 # 학습률
for k in range(300):
g0 = df(x0)
if abs(g0) <= tol:
print("알고리즘 성공!")
break
x0 = x0 - eta*g0
print("x* =", x0)
print("|g*| =", abs(g0))
print("f(x*) =", f(x0))
print("반복 횟수 =", k + 1)
---------------------------------------------------------------------
알고리즘 성공!
x* = 0.749999834194560
|g*| = 6.63221759289456e-7
f(x*) = 0.875000000000055
반복 횟수 = 31 ■
위의 예제에서 경사하강법에 의해 생성된 점들 ,
,
,
을 함수
의 그래프와 함께 좌표평면에 나타내면 다음과 같다. 그림을 통해 직관적으로 최솟값을 가지는 곡선위의 점
에 수렴함을 쉽게 알 수 있다. 즉 수열
,
,
, 이 최적해
으로 수렴함을 확인할 수 있다.
[열린문제] 함수 의 최솟값을 구하시오. 단
,
,
으로 한다.
지금까지 경사하강법에 관하여 작동 원리와 알고리즘, 간단한 예제를 들어 설명하였다. 경사하강법은 딥러닝에서 가중치를 업데이트하는데 사용되는 핵심 알고리즘이기도 하다. 앞서 경사하강법을 소개할 때 정의역 전체에서 아래로 볼록(convex)인 함수를 가정하였다. 그러나 구간마다 아래로 볼록, 위로 볼록이 모두 포함된 함수(non-convex, 예. 아래 그림)에 경사하강법을 적용하면, 시작점 이 어디이냐에 따라 서로 다른 극솟값 또는 (극대도 극소도 아닌) 임계점으로 수렴할 수도 있다.
[열린문제] 위의 그림과 같이 다양한 미분가능 함수인 경우, 일단 그래프의 개형을 그리고, 눈으로 확인되는 극솟값을 포함하는 작은 구간들을 정한다. 그 후, 각각의 구간에서 시작점을 잡아 경사하강법을 적용한다. 마지막으로 나온 결과에 대하여 토론하시오.
● 경사하강법 이외에도 최적해를 구하는 Newton의 방법이 있다. 이는 고등학교 수준을 넘는다. Newton의 방법과 테일러전개 등에 대한 내용과 함께 궁금한 사항은 아래를 참고하시오.
[인공지능 수학 교재] http://matrix.skku.ac.kr/math4ai/Math4AI.pdf
[인공지능과 최적해] http://matrix.skku.ac.kr/math4ai/part2/
[Newton의 방법] http://matrix.skku.ac.kr/Cal-Book1/Ch4/
[테일러전개] http://matrix.skku.ac.kr/Cal-Book1/Ch9/
*9.2. 응용(최소제곱문제)
최소제곱문제도 역시 경사하강법으로 해결할 수 있다.
다만 앞서 소개한 경사하강법은 독립변수가 하나인 일변수 함수 에 대하여 구성하였는데, 우리가 학습한 최소제곱문제는 독립변수가 최소 2개 이상인 다변수 함수
이므로 다음과 같이 변형된다.
[경사하강법] 알고리즘 [단계 1] 초기 근사해 rate) [단계 2] [단계 3] |
다변수 함수에 대한 경사하강법도 기본적인 구성은 일변수 함수의 경우와 완전히 같으나 스칼라 가 벡터
로, 절대값
이 벡터의 노름
으로, 도함수
가 (도함수 역할을 하는) 그래디언트(gradient)
로 바뀌는 것만 차이가 있다. [다변수 함수와 그래디언트에 대한 개념은 대학수학에서 학습하므로 여기서는 기본적인 정의만 다음 페이지에서 소개한다.]
를 독립적으로 변화하는 두 변수라 하고
를 제 3의 변수라 하자.
의 값이 각각 정해지면 여기에 대응하여
의 값이 정해질 때
를 두 변수
와
의 함수라 하고 이것을
로 표시한다. 같은 방법으로 더 많은 변수의 함수도 정의할 수 있다. 이와 같이 이변수 이상의 함수를 일반적으로 다변수함수라 한다.
좌표 공간에서 및
를 좌표로 하는 점
를 생각하고
와
를 움직이면 그들 점은 일반적으로 하나의 곡면을 이루게 되는데 이 곡면을 함수
의 그래프라 부른다. 예를 들어, 적당한 범위에서 이변수 함수
의 그래프를 그리면 다음과 같다.
---------------------------------------------------------------------
var('x, y') # 변수 정의
f(x, y) = -x*y*exp(-x^2 - y^2)
plot3d(f(x, y), (x, -2, 2), (y, -2, 2), opacity = 0.6, aspect_ratio = [1, 1, 10])
---------------------------------------------------------------------
위의 그래프에서 산의 정상에 해당하는 부분에서 이변수 함수는 극댓값을 갖게 되고, 계곡의 바닥에 해당하는 부분에서 극솟값을 갖게 됨을 직관적으로 확인할 수 있다. 이 점을 찾기 위해서는 일변수 함수의 도함수에 해당하는 개념이 필요하다. 이를 다변수 함수의 그래디언트(gradient)라고 한다.
이변수 함수 의 그래디언트는 다음과 같이 정의된다.
grad
여기서 는
를 변수
에 관하여 편미분한다는 뜻으로
를 제외한 다른 변수는 모두 상수로 취급하여 미분하는 것과 같다.
도 마찬가지로 이해할 수 있다. 예를 들어,
의 그래디언트를 구하면 다음과 같다.
---------------------------------------------------------------------
var('x, y') # 변수 정의
f(x, y) = -x*y*exp(-x^2 - y^2)
f(x, y).gradient() # 그래디언트
---------------------------------------------------------------------
(2*x^2*y*e^(-x^2 - y^2) - y*e^(-x^2 - y^2), 2*x*y^2*e^(-x^2 - y^2) - x*e^(-x^2 - y^2))
같은 방법으로 독립변수가 3개 이상인 다변수함수 에 대하여도
의 그래디언트를 정의할 수 있다. 예를 들어,
변수 함수
에 대하여 그래디언트는 다음과 같다.
grad
● 최소제곱문제에서 첫 번째 예로 들었던 [59쪽]의 문제는 다음과 같다. 각 데이터 에 대하여
를 일차함수
에 대입하여 얻은 값을
라 하자(즉
). 이 선형연립방정식의 해가 존재하지 않는 경우. 각 데이터와 근사식 사이의 (제곱)오차
가 최소가 되는
,
를 구하기 위하여, 각 데이터에 대하여 오차(error)를 더한 오차함수는 다음과 같다. (앞에
은 단지 계산의 편리성을 주기 위해서 곱해주었다.)
이에 대하여 경사하강법을 사용하면 다음을 얻는다.
(, 허용오차
, 학습률
일 때)
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
var('a, b') # 변수 선언
# 오차함수
E(a, b) = 1/2*((a - 1)^2 + (a + b - 3)^2 + (a + 2*b - 4)^2 + (a + 3*b - 4)^2)
# 도함수(그래디언트)
gradE = E.gradient()
u = vector([1.0, 1.0]) # 초기 근사해
tol = 1e-6 # 허용오차 10^(-6)
eta = 0.1 # 학습률(learning rate)
for k in range(300):
g = gradE(u[0], u[1])
gn = g.norm()
if gn <= tol:
print("알고리즘 성공 !")
break
u = u - eta*g
print("u* =", u)
print("E(x*) =", E(u[0], u[1]))
print("반복 횟수 =", k + 1)
---------------------------------------------------------------------
알고리즘 성공 !
u* = (1.49999931357138, 1.00000032150597)
E(x*) = 0.500000000000342
반복 횟수 = 106
따라서 최소제곱직선은 이다. ■
마찬가지로 [63쪽]에 있는 와
의 관계를 가장 잘 보여주는 (best fit) 이차함수
도 찾을 수 있다. 이때, 오차는 다음과 같다.
역시 경사하강법을 사용하면 아래의 (best fit) 이차함수 을 얻는다.
(, 허용오차
, 학습률
일 때)
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
var('a, b, c') # 변수 선언
# 오차함수
E(a, b, c) = 1/2*((a - 1)^2 + (a + b + c - 3)^2 + (a + 2*b + 4*c - 4)^2 + (a + 3*b + 9*c - 4)^2)
# 도함수(그래디언트)
gradE = E.gradient()
u = vector([1.0, 1.0, 1.0]) # 초기 근사해
tol = 1e-6 # 허용오차 10^(-6)
eta = 0.01 # 학습률(learning rate)
for k in range(5000):
g = gradE(u[0], u[1], u[2])
gn = g.norm()
if gn <= tol:
print("알고리즘 성공!")
break
u = u - eta*g
print("u* =", u)
print("E(x*) =", E(u[0], u[1], u[2]))
print("반복 횟수 =", k + 1)
---------------------------------------------------------------------
알고리즘 성공!
u* = (1.00000138155249, 2.49999723768073, -0.499999180018564)
E(x*) = 1.59664737265671e-12
반복 횟수 = 4207
즉, (best fit) 이차함수 의 계수가
이므로, 최소제곱 곡선은
이다. ■
[참고]
Part Ⅱ 다변수 미적분학과 최적화 http://matrix.skku.ac.kr/math4ai/part2/
경사하강법 http://matrix.skku.ac.kr/math4ai/gradient_descent/
[Week 9] 과제
[열린문제] 다른 교재에서 찾은 (연속) 미분가능한 함수의 3계 도함수(3rd derivative)를 구하시오.
[열린문제] 다른 교재에서 찾은 주어진 구간에서 두 번 미분가능한 함수의 극댓값, 극솟값 및 그 구간에서의 최댓값, 최솟값을 찾아보시오.
[열린문제] 함수 의 최솟값을 구하시오. 단
,
,
으로 한다.
[열린문제] 위의 그림과 같이 다양한 미분가능 함수인 경우, 일단 그래프의 개형을 그리고, 눈으로 확인되는 극솟값을 포함하는 작은 구간들을 정한다. 그 후, 각각의 구간에서 시작점을 잡아 경사하강법을 적용한다. 마지막으로 나온 결과에 대하여 토론하시오.
IV. 인공지능과 통계
10. 순열과 조합 확률, 확률변수, 확률분포, 베이지안 – 10주차 -
10.1 순열과 조합
...
10.4 베이즈 정리
베이즈 정리(Bayes’ theorem)는 주어진 조건에서 어떠한 현상이 실제로 나타날 확률을 구하는 방법으로, 불확실성 하에서 의사결정 문제를 수학적으로 다룰 때 중요하게 이용된다. 특히, 정보와 같이 눈에 보이지 않는 무형자산이 지닌 가치를 계산할 때 유용하게 사용된다. 베이즈 정리를 설명하기 위해 먼저 용어를 정리해보자.
먼저 사전확률(prior probability)은 관측자가 이미 알고 있는 사건으로부터 나온 확률을 말한다. 는
에 대한 사전확률을 나타낸다. 그리고 사후확률(posteriori probability)은 사전확률과 대비되는 개념으로 실제의 데이터나 조건이 부과되었을 때 기대되는 조건부 확률을 말한다. 즉 어떤 특정사건이 이미 발생하였는데, 이 특정사건이 나온 이유가 무엇인지 불확실한 상황을 식으로 나타낸 것이며
로 표현될 수 있다. 여기서
는 이미 일어난 사건이고, 사건
를 관측한 후에 그 원인이 되는 사건
의 확률을 따졌다는 의미로 사후확률이라고 정의한다. 베이즈 정리는 사전확률과 사건으로부터 얻은 자료를 사용하여 사후확률을 추출해내는 것이다. 즉 사전확률과 사후확률의 관계를 조건부 확률을 이용하여 계산하는 이론이다.
이 표본공간
의 분할(partition)을 이룬다고 하자. 그러면 임의의 사건
에 대하여 다음이 성립한다.
이때 는 서로 배반(exclusive) 이다. 따라서
이다. 한편, 확률의 곱셈정리로부터 아래 전확률 공식(Law of Total Probability)을 얻을 수 있다.
또한, 임의의 에 대한 조건부확률
에
와 위의 전확률 공식을 대입하면 다음 식을 얻을 수 있는 데 이를 베이즈 정리(Bayes’ theorem)라고 한다.
베이즈 정리에서 를 사건
의 사전확률,
를 사건
의 사후확률이라 한다.
예제 9. 3대의 기계 가 각각 이 공장의 생산품 전체의
를 생산한다. 그리고 이들 기계가 불량품을 생산할 비율은 각각
이다. 한 제품을 임의로 선택할 때 그 제품이 불량품일 확률을 구하여라. 또한 불량품이 기계
에 의하여 생산될 확률을 구하시오.
풀이. 구입한 개의 제품이
사의 제품인 사건을
로 나타내고, 그것이 불량품이라는 사건을
로 나타내면,
(제품을 생산하는 사건) 이고,
.
(불량품을 생산하는 사건)
(불량품을 생산하는 확률)
이므로 전확률 공식에 의해 다음을 얻는다.
따라서 베이즈 정리에 의하여 불량품 중 사 제품이 불량품일 확률은 다음과 같다.
■
[열린문제] 베이즈 정리(Bayes’ theorem)가 적용되는 예의 하나인 조건부 확률에 관한 몬티홀(Monty Hall) 문제에 대하여 토론하시오.
https://destrudo.tistory.com/5
인공지능을 위한 기초수학의 (순열, 조합, 확률) 설명: https://youtu.be/KQXO-XbJauU
https://ko.wikipedia.org/wiki/몬티_홀_문제
10.5. 확률변수
동전 2개를 동시에 던져보자. 그러면 발생할 수 있는 사건들은 다음과 같다.
(앞면, 앞면), (앞면, 뒷면), (뒷면, 앞면), (뒷면, 뒷면)
그리고 이들 각각의 사건이 일어나는 확률은 이다. 이때 뒷면이 나오는 동전의 개수를
라 하면, 다음 그림과 같이 각 사건은 숫자 0, 1, 2에 대응시킬 수 있다. 예를 들어,
은 (앞면, 앞면)에 대응된다.
확률변수(random variable)란 컴퓨터 프로그래밍에서의 변수와 같은 것인데, 어떤 값을 취하느냐가 확률적으로 결정되는 변수이다. 그래서 앞으로는 간략하게 '변수'라고 기술하기로 한다. 즉 표본 공간의 모든 표본에 대해 어떤 실수 값을 대응시킨(할당한) 것이다. 따라서 확률변수를 사용하게 되면 구체적인 각 사건 대신에 이를 수치(數値)로 표현할 수 있어 여러 가지 계산과 분석이 가능해진다. 확률변수는 영문자 대문자로 쓰고 그 변수가 취할 수 있는 값 하나하나에 대해서는 소문자로 쓴다.
10.6 이산확률분포
확률변수 가 연속적이지 않은 값(
)을 취할 때,
를 이산확률변수라 하고, 각각의
에 대하여
일 확률
을 할당한 것을 이산확률분포라 한다.
다음과 같이 표로 나타낼 수 있다.
|
|
|
|
|
합(sum) |
확률 |
|
|
|
|
1 |
예를 들어, 앞서 언급한 동전 2개를 동시에 던지는 시행에서, 뒷면이 나오는 동전의 개수 의 확률분포를 그림으로 나타내면 다음과 같다.
이때, 이산확률변수 가
,
, ...,
의 값을 취할 때 확률
을 대응시키는 함수
를 확률변수
의 확률질량함수(probability mass function)라 한다. 즉
이다. 확률질량함수는 다음과 같은 성질이 있다.
⓵
⓶
⓷ 가 이산확률변수일 때
일 확률은
이다.
10.7 연속확률분포 (여기서 적분의 지식이 필요하다.)
확률변수 가 어떤 범위에 속하는 모든 실수를 취할 때,
를 연속확률변수라 한다. 연속확률변수의 경우, 특정한
값을 취할 확률
가 항상 0이므로, 확률질량함수를 이용하여 확률분포를 나타내는 것은 아무 의미가 없다. 그래서 확률밀도함수(probability density function)를 새로 정의하여 연속확률분포를 나타낸다.
연속확률변수 에 대하여 함수
가 다음 성질을 만족하면
를
의 확률밀도함수라 한다. (확률질량함수의 성질에 대응되는 개념이라고 이해할 수 있다.)
⓵ 모든 실수 에 대하여
이다.
⓶
⓷
따라서 확률 는 아래 그림에서 색깔로 표시한 부분의 넓이와 같다. 이때 구간의 끝점(
와
)이 범위에 포함되는지의 여부는 관계가 없다.
[참고] 여기서 ‘밀도(density)’라는 단어가 어떻게 쓰이게 되었을까? 확률을 일종의 양(질량)으로 보고, 구간의 길이를 일종의 부피로 본다면, [확률/구간의 길이] |
11. 통계, 기댓값, 분산, 공분산, 상관계수, 공분산 행렬 – 11주차 -
11.1 기댓값, 분산, 표준편차
확률변수의 기댓값(expectation)은 확률적 사건에 대한 평균값으로, 사건이 벌어졌을 때의 얻은 값과 그 사건이 일어날 확률을 곱한 것을 전체 사건에 대해 합한 값이다. 이것은 어떤 확률적 사건에 대한 평균의 의미를 갖는다. 확률변수의 분산(variance)은 그 확률변수가 기댓값으로부터 얼마나 떨어진 곳에 분포하는지를 가늠하는 숫자이고, 표준편차(standard deviation)는 분산의 양의 제곱근으로 정의된다.
이산확률변수 의 기댓값과 분산, 표준편차는 다음과 같이 계산한다.
(1) 기댓값 :
(2) 분산 :
(3) 표준편차 :
예제 1. 확률변수 의 확률분포가 다음과 같을 때, 기댓값과 분산, 표준편차를 구하시오.
|
0 |
1 |
2 |
3 |
합(sum) |
확률 |
0.010 |
0.840 |
0.145 |
0.005 |
1 |
[출처] http://matrix.skku.ac.kr/2018-album/R-Sage-Stat-Lab-2.html
풀이. 기댓값과 분산, 표준편차의 정의를 이용하여 아래와 같이 R코드로 구하면 된다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
x <- c(0, 1, 2, 3) # 확률변수
pr.x <- c (0.010, 0.840, 0.145, 0.005) # 확률분포
e.x <- sum(x*pr.x) # 기대값
var.x <- sum((x^2)*pr.x) - e.x^2 # 분산
sd.x <- sqrt(var.x) # 표준편차
cat(e.x, var.x, sd.x) # 한 번에 여러 개 출력
---------------------------------------------------------------------
1.145 # 기댓값
0.153975 # 분산
0.3923965 # 표준편차 ■
● 연속확률변수 의 기댓값과 분산, 표준편차는 다음과 같이 계산한다.
(1) 기댓값 :
(2) 분산 :
(3) 표준편차 :
기댓값, 분산에 대하여 다음 성질이 만족한다.
⓵ ,
,
⓶ ,
,
⓷ 확률변수 에 대하여 새로운 확률변수
를
로 정의하면, 위의 성질 ⓵, ⓶에 의해 평균과 분산이 항상
과
이다. 따라서 이 확률변수
를 확률변수
의 표준화 확률변수(standardized random variable)라 한다.
예제 2. 확률변수 의 확률밀도함수가
일 때,
와
의 분산을 구하시오.
풀이.
[답]
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
var('t')
f(t) = 3*t^2
Ex = integral(t*f(t), t, 0, 1)
Ex2 = integral(t^2*f(t), t, 0, 1)
print(Ex) # X의 평균
print(Ex2 - Ex^2) # X의 분산
Ey = integral((4*t + 2)*f(t), t, 0, 1)
Ey2 = integral((4*t + 2)^2*f(t), t, 0, 1)
print(Ey) # Y = 4X + 2의 평균
print(Ey2 - Ey^2) # Y의 분산
---------------------------------------------------------------------
3/4
3/80 # 의 분산,
5
3/5 # 의 분산,
■
[열린문제] 다른 교재에서 찾은 연속확률변수 의 기댓값과 분산, 표준편차를 구하시오.
11.2 결합 확률분포
확률변수가 두 개 이상 있는 경우에는 각각의 확률변수에 대한 확률분포 이외에도 확률분포 쌍이 가지는 복합적인 확률분포를 살펴보아야 한다. 두 확률변수 값의 쌍이 어떤 확률분포를 가지는지 안다면 둘 중 하나의 확률분포의 값을 알고 있을 때 다른 확률분포가 어떻게 되는지도 알 수 있다. 이를 위하여 결합 확률분포(또는 결합분포)에 대한 개념이 필요하다.
먼저 이산확률변수인 경우를 살펴보자.
(1) 와
가 이산확률변수이면,
와
의 결합 확률함수(joint probability function)는 다음과 같다.
(2) 와
의 가능한 모든 값에 대하여
의 값을 나타낸 것을 결합 확률분포(joint probability distribution)라 한다. 이를 표로 나타내면 다음과 같다.
|
|
|
|
|
|
합 |
|
|
|
|
|
|
|
|
관한
주변 확률 분포 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
합 |
|
|
|
|
|
|
|
|
|
|
|
|
(3) ,
의 결합분포가 주어져 있을 때 주변확률분포(marginal probability distribution)는 다음과 같이 정의된다.
즉, 주변분포란 결합 확률분포에서 하나의 확률변수에 대해서만 고려한 확률분포를 뜻한다.
결합 확률분포에 관하여 다음이 성립한다.
⓵ 모든 에 대하여
⓶ 모든 에 대하여
의 합은
이다. 즉,
⓷ 모든 에 대하여
예제 3. 크기가 같은 파란 색 공 개와 붉은 색 공
개와 녹색 공
개가 한 주머니 안에 들어 있다. 이 주머니에서 임의로
개의 공을 꺼낸다. 꺼낸 공(ball) 중 파란색 공의 수를
, 붉은 색 공의 수를
라 할 때 다음 물음에 답하시오.
① 와
의 결합 확률함수를 구하여라.
② 결합 확률분포를 작성하여라.
③ 을 구하여라.
④ 의 주변분포를 구하여라.
⑤ 의 주변분포를 구하여라.
풀이. 결합분포, 주변분포의 정의에 의해 계산하면 다음과 같다.
①
②
|
|
|
|
합 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
합 |
|
|
|
|
③
④
|
|
|
|
합 |
|
|
|
|
|
⑤
|
|
|
|
합 |
|
|
|
|
|
● 여러 개의 연속확률변수에 대하여는 다음과 같은 결합밀도함수를 이용하여 결합 확률분포를 나타낸다. (여기서 중적분의 지식이 필요하다.)
● 연속확률변수 와
의 결합밀도함수(joint density function)
는 다음과 같이 정의된다.
⓵ 모든 에 대하여
이다.
⓶ 모든 에 대하여
이다.
⓷ 모든 에 대하여
이다.
⓸ 가
평면상의 임의의 영역
에 들어갈 확률은
로 주어진다.
⓹ 와
의 주변확률밀도함수(marginal probability density function)는 각각 다음과 같이 정의된다.
,
* 예제 4. 두 확률변수 ,
의 결합밀도함수가 다음과 같이 주어져 있다고 하자.
,
,
와
의 주변밀도함수를 각각 구하시오.
풀이. 정의에 의해 구하면 다음과 같다.
,
,
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
var( 'x, y' )
f( x, y ) = x + y
print( "f_X(x) =" , integral( f(x, y), y, 0, 1)) # X의 주변밀도함수
print( "f_Y(y) =" , integral( f(x, y), x, 0, 1)) # Y의 주변밀도함수
---------------------------------------------------------------------
f_X(x) = x + 1/2 # X의 주변밀도함수
f_Y(y) = y + 1/2 # Y의 주변밀도함수 ■
*11.3 공분산, 상관계수
하나의 확률변수 가 갖는 분포를 이해하기 위해서 첫 번째로 사용하는 것은 평균이다. 평균을 이용하면 분포에 관한 정보를 하나의 숫자(분포의 중간부분)로 나타낼 수 있다. 두 번째로 사용하는 개념은 분산이다. 분산을 이용하면 분포가 평균으로부터 얼마나 퍼져있는지를 나타낸다.
그렇다면 확률변수가 2개일 때, 이 확률분포들이 어떤 모양으로 되어있는지를 어떻게 알 수 있는가? 가장 먼저 의 평균, 다음이
의 평균을 생각하면 된다. 그 다음으로 분산을 이용하여 각 확률변수가 얼마나 퍼져 있는지를 알 수 있다. 그러나 확률변수 간의 상관관계를 알기위해서는 공분산(covariance)의 개념이 필요하다.
확률변수 와
의 공분산은 다음과 같이 정의된다.
즉 공분산은 의 편차와
의 편차를 곱한 것의 평균이다. 그런데 공분산에도
와
의 단위의 크기에 영향을 받는다는 문제점이 있다. 이것을 보완하기 위해 상관계수(correlation)를 사용한다. 상관계수라는 개념은 확률변수의 절대 크기에 영향을 받지 않도록 각 확률변수의 표준편차로 나누어 표준화 시킨 것이라고 생각하면 된다.
확률변수 와
사이의 상관계수는 다음과 같이 정의된다.
11.4 공분산 행렬(covariance matrix)
행렬을 이용하면 여러 개의 확률변수가 서로 어떤 관계를 가지는지를 쉽게 표현할 수 있다. 특히, 각 데이터의 분산과 공분산을 이용해 만드는 공분산 행렬이 이에 해당한다.
개의 확률변수 {
,
,
}에 대한 공분산 행렬(covariance matrix)은
성분이
일 때는
번째 확률변수
와
번째 확률변수
사이의 공분산
으로,
일 때는
번째 확률변수의 분산
으로 하는
행렬로 정의하고
로 표기한다.
쉽게 말하면, 정사각행렬의 성분을 각 변수의 분산(주대각선)과 공분산으로 채운 것이 바로 공분산 행렬이다.
공분산 행렬은 아래 그림과 같이 데이터의 분포를 나타낸다고 볼 수 있다.
[그림 출처] https://www.ritchieng.com/machine-learning-anomaly-detection/
*공분산 행렬을 생성하는 R 코드 실습 : https://stats.seandolinar.com/making-a-covariance-matrix-in-r/ 또는 http://matrix.skku.ac.kr/KOFAC/ 에서 실습하세요.
#create vectors -- these will be our columns
a <- c(1,2,3,4,5,6)
b <- c(2,3,5,6,1,9)
c <- c(3,5,5,5,10,8)
d <- c(10,20,30,40,50,55)
e <- c(7,8,9,4,6,10)
#create matrix from vectors
M <- cbind(a,b,c,d,e)
cov(M)
a b c d e a 3.5 3.000000 4.0 32.500000 0.400000 b 3.0 8.666667 0.4 25.333333 2.466667 c 4.0 0.400000 6.4 38.000000 0.400000 d 32.5 25.333333 38.0 304.166667 1.333333 e 0.4 2.466667 0.4 1.333333 4.666667 |
[열린문제] 다른 교재에서 찾은 데이터의 공분산행렬을 구하시오.
[참고] 공분산 행렬은 고차원 데이터의 분포를 최대한 유지하면서 차원을 효과적으로 줄이는 차원축소(dimension reduction)에서 중요한 역할을 한다. 대표적인 기법으로는 주성분 분석(principal component analysis, PCA)이 있다. 주성분을 계산할 때는 특잇값 분해(SVD)가 주로 사용된다. (자세한 내용은 대학수학에서 다룬다.) |
[Week 11] 과제
[열린문제] 베이즈 정리(Bayes’ theorem)가 적용되는 예의 하나인 조건부 확률에 관한 몬티홀(Monty Hall) 문제에 대하여 토론하시오. https://destrudo.tistory.com/5
[열린문제] 다른 교재에서 찾은 연속확률변수 의 기댓값과 분산, 표준편차를 구하시오.
[열린문제] 다른 교재에서 찾은 데이터의 공분산행렬을 구하시오.
V. 주성분 분석과 인공신경망
12. 주성분분석 – 12주차 -
12.1 차원축소
다음은 1974년 Motor Trend magazine에 실린 1973년~74년도 자동차 32대의 특성을 기술하고 정량화하는 11가지 변수에 관한 데이터의 일부이다.
|
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 |
... |
|
|
|
|
|
|
|
|
|
|
|
[출처] 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/
따라서 자동차 한 대에 관한 데이터는 11차원의 벡터로 표현된다. 이처럼 고차원의 데이터는 계산과 시각화가 어려워 분석하기가 쉽지 않다. 따라서 원 데이터의 분포를 가능한 유지하면서 데이터의 차원을 줄이는 것이 필요하다. 이를 차원 축소(dimensionality reduction)라 한다. 물론 필요한 일부 변수의 데이터만 뽑아서 사용할 수도 있지만(feature selection), 변수들 사이에 어떤 밀접한 관계가 있는지는 미리 알 수가 없어서 이 경우 원 데이터의 분포를 잘 반영한다고 볼 수는 없다.
12.2 주성분 분석(PCA)
주성분 분석(Principal Component Analysis, PCA)은 가장 널리 사용되는 차원 축소 기법 중 하나로, 원 데이터의 분포를 최대한 보존하면서 고차원 공간의 데이터들을 저차원 공간으로 변환한다.
PCA는 기존의 변수를 조합하여 서로 연관성이 없는 새로운 변수, 즉 주성분(principal component, PC)들을 만들어 낸다. 첫 번째 주성분 PC1이 원 데이터의 분포를 가장 많이 보존하고, 두 번째 주성분 PC2가 그 다음으로 원 데이터의 분포를 많이 보존하는 식이다. 앞서 언급한 11차원의 데이터의 경우 기존의 변수들을 조합하여 같은 개수(11개)의 주성분을 만들 수 있는데, 만일 PC1, PC2, PC3가 원 데이터의 분포(성질)의 약 90%를 보존한다면, 10% 정도의 정보는 잃어버리더라도, 합리적인 분석에 큰 무리가 없으므로, PC1, PC2, PC3만 택하여 3차원 데이터로 차원을 줄일 수 있다. 이 경우 계산과 시각화가 용이하여 데이터를 쉽게 분석할 수 있다.
주성분을 구하기 위해서는 새로운 축을 찾아야 하는데, 이를 주축(principal axes) 또는 주방향(principal directions)이라고 한다. 첫 번째 축은 원 데이터를 이 축 상에 정사영할 때, 얻어진 (새로운) 데이터들의 분포가 가장 최대가 되도록 정한다. 아래는 주어진 2차원 데이터(왼쪽 그림)를 첫 번째 축을 찾아 정사영한 그림(오른쪽 그림)이다. 이때 정사영 된 데이터들이 PC1을 이루게 된다.
[출처]
(센터링된) 컴퓨터과학 전공생 105명의 고등학교 성적(GPA)과 대학교 성적(GPA) 데이터
http://onlinestatbook.com/2/regression/intro.html
http://onlinestatbook.com/2/case_studies/sat.html
두 번째 축도 마찬가지로 원 데이터를 이 축 상에 정사영할 때, 얻어진 (새로운) 데이터들의 분포가 PC1 다음으로 가장 최대가 되어야 한다. 그리고 PC1과 PC2가 서로 관계가 없도록 두 번째 축은 첫 번째 축과 관계가 없도록 수직이 되어야 한다. 그 이유는 다음과 같다. 앞서 차원 축소를 소개할 때 필요한 일부 변수의 데이터만 뽑을 수도 있다고 하였으나 이런 경우 변수들 사이에 어떤 밀접한 관계가 있는지는 미리 알 수 없어 변수 간에 어떤 영향을 미치는 지 파악할 수가 없다. 주성분 분석은 이를 방지하기 위해서 관계가 있는 변수끼리는 각 주성분에 모이도록 하고, 주성분들 사이에는 서로 관계가 없도록 한다. 이는 서로 다른 주축이 수직을 이루는 것으로 나타난다. (자세한 사항은 대학수학에서 다룬다.)
아래 왼쪽 그림은 주어진 2차원 데이터를 두 번째 축을 찾아 정사영한 그림이다. 이때 정사영 된 데이터들이 PC2을 이루게 된다. 그리고 첫 번째 주축을 축, 두 번째 주축을
축으로 놓고 데이터를 정사영 시키면 오른쪽 그림과 같다. 이로부터 첫 번째 주축을 따라 정사영 된 데이터의 분포가 훨씬 큼을 직관적으로 확인할 수 있다.
12.3 주성분 분석의 계산
이제 주성분을 실제로 계산하는 방법에 대하여 살펴보자.
를
의 데이터 행렬(data matrix)이라 하자. 여기서
은 표본(sample)의 개수이고,
는 데이터의 특성(feature)을 나타내는 확률변수 {
,
,
}의 개수이다. 데이터 행렬
의
성분
는
번째 표본의
번째 확률변수
에 대한 하나의 데이터를 의미하고,
열
는 확률변수
가 갖는 모든 데이터를 의미한다.
위의 를 센터링(centering, 확률변수의 평균을 0으로 조정)하여,
를 정의하자. 이를 위해
⓵ 의 각 열(하나의 확률변수가 갖는 데이터)의 평균을 구한다. 확률변수
의 평균은
로 표기한다.
,
,
.
⓶ 각 열별로 데이터에서 (열의) 평균을 뺀다. 이 행렬을 센터링된 행렬 라 한다.
여기서 센터링된 행렬 의 각 열의 평균은 0이 된다. 이런 이유로 센터링된 행렬을 mean-centered 행렬이라 부른다. 앞으로 주어진 데이터 행렬
는 이미 센터링 되어 있는 행렬이라고 가정하자.
⓷ 의 특잇값 분해(SVD)를 구한다.
여기서 ,
는 직교행렬이고,
는 크기 순서대로 배열된 특잇값(singular value)
을 주대각선 성분으로 하는
대각선행렬
이다.
⓸ 의 열벡터가 주축(principal axes)이 된다.
⓹ 의 열벡터들이 원 데이터를 주축에 정사영하여 얻어진 주성분 점수(principal component score, PC score)가 된다.
⓺ 특잇값 를 이용하여 계산한
은
번째 PC의 분산이 되고
은
번째 PC가 원 데이터의 분포를 보존하는 비율이다. 각 PC별로 원 데이터의 분포를 보존하는 비율을 계산해보아 몇 차원으로 데이터의 차원을 축소할지를 결정한다.
⓻ 데이터를 차원에서
(
) 차원으로 줄이기 위하여,
의 처음
개의 열벡터(
)와
의
번째 선행 주 부분행렬(leading principal submatrix) (
)을 택하면,
는 처음
개의 PC를 포함하는
행렬이 된다.
.
[열린문제] 주성분분석에서 특잇값분해(SVD)가 어떻게 사용되는지 설명해 보시오.
12.4 주성분 분석 사례
이제 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 유명 브랜드의 제품이다.
설문조사를 통해 얻은 데이터를 가지고 아래 Sage 코드를 이용하여 PCA를 진행하였다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
# 데이터 행렬을 입력한다.
# 각 열은 변수 Price, Software, Aesthetics, Brand에 해당하는 데이터를 의미한다.
# data matrix
X = matrix(RDF, [[6, 5, 3, 4], [7, 3, 2, 2], [6, 4, 4, 5], [5, 7, 1, 3],
[7, 7, 5, 5], [6, 4, 2, 3], [5, 7, 2, 1], [6, 5, 4, 4],
[3, 5, 6, 7], [1, 3, 7, 5], [2, 6, 6, 7], [5, 7, 7, 6],
[2, 4, 5, 6], [3, 5, 6, 5], [1, 6, 5, 5], [2, 3, 7, 7]])
print("X =")
print(X)
print() # 한 줄 비움
# 데이터 행렬을 센터링(centering, 각 열의 평균을 0으로)한다.
# 본 예제에서는 센터링 한 후에 다시 각 열을 해당 확률변수의 표준편차로 나누었다.
# 이를 scaling이라 하는데, 필요에 따라 scaling도 진행할 수 있다.
n = X.nrows() # 행의 개수
p = X.ncols() # 열의 개수
X_ctr = zero_matrix(RDF, n, p) # 센터링된 행렬을 위해 메모리 준비
import numpy as np
# 센터링
for col in range(p):
v = np.array(X.column(col))
m = mean(v)
st = std(v)
for row in range(n):
X_ctr[row,col] = (X[row,col] - m)/st
# X_ctr는 센터링된 행렬
print("X_ctr =")
print(X_ctr.n(digits = 4))
print() # 한 줄 비움
# 특잇값 분해(SVD). X_ctr = U*S*V.transpose()
U, S, V = X_ctr.SVD()
Var_PC = [(S[i, i]^2/n).n(digits = 4) for i in range(p)] # PC의 분산
Prop_Var = [100*Var_PC[i]/sum(Var_PC) for i in range(p)] # 분산의 비율
print("PC의 분산 ", Var_PC)
print("분산의 비율 ", Prop_Var)
print() # 한 줄 비움
# Scree Plot. 분산을 시각적으로 보여줌. 몇 차원으로 줄일지 결정.
show(list_plot(Var_PC, plotjoined = True, color = 'red', axes_labels = ['', 'Variances']))
print() # 한 줄 비움
# PC score를 계산한다. Z = U*S
PC_score = U*S
PC12 = PC_score[:, 0:2] # 시각화를 위해 첫 번째, 두 번째 성분까지만 사용
# 데이터를 평면에 시각화 한다.
point([PC12.row(i) for i in range(n)], color = 'red')
---------------------------------------------------------------------
X =
[6.0 5.0 3.0 4.0]
[7.0 3.0 2.0 2.0]
[6.0 4.0 4.0 5.0]
[5.0 7.0 1.0 3.0]
[7.0 7.0 5.0 5.0]
[6.0 4.0 2.0 3.0]
[5.0 7.0 2.0 1.0]
[6.0 5.0 4.0 4.0]
[3.0 5.0 6.0 7.0]
[1.0 3.0 7.0 5.0]
[2.0 6.0 6.0 7.0]
[5.0 7.0 7.0 6.0]
[2.0 4.0 5.0 6.0]
[3.0 5.0 6.0 5.0]
[1.0 6.0 5.0 5.0]
[2.0 3.0 7.0 7.0]
X_ctr =
[ 0.8485 -0.04218 -0.7500 -0.3866]
[ 1.317 -1.392 -1.250 -1.511]
[ 0.8485 -0.7170 -0.2500 0.1757]
[ 0.3804 1.307 -1.750 -0.9489]
[ 1.317 1.307 0.2500 0.1757]
[ 0.8485 -0.7170 -1.250 -0.9489]
[ 0.3804 1.307 -1.250 -2.074]
[ 0.8485 -0.04218 -0.2500 -0.3866]
[ -0.5559 -0.04218 0.7500 1.300]
[ -1.492 -1.392 1.250 0.1757]
[ -1.024 0.6327 0.7500 1.300]
[ 0.3804 1.307 1.250 0.7380]
[ -1.024 -0.7170 0.2500 0.7380]
[ -0.5559 -0.04218 0.7500 0.1757]
[ -1.492 0.6327 0.2500 0.1757]
[ -1.024 -1.392 1.250 1.300]
PC의 분산 [2.278, 0.9011, 0.4356, 0.1348]
분산의 비율 [60.76, 24.03, 11.62, 3.596]
# 따라서 PC1, PC2가 원 데이터의 85% 정도를 보존한다고 이해할 수 있다. ■
# 아래 주성분의 고윳값에 대한 선 그림(line plot)을 활용하여 데이터의 차원을 줄일 때, 주성분을 몇 개로 선택할지 결정할 수 있다. 고윳값을 가장 큰 값에서부터 크기 순서대로 정렬하므로, 대개 기울기가 꺾이는 부분의 “elbow point” 왼쪽에 있는 성분까지 선택한다. 따라서 15% 정도의 정보는 잃어버리더라도, PC1, PC2만 택하여 2차원 데이터로 차원을 줄 일 수 있다.
# 이를 활용하여 데이터를 시각화하거나 다른 데이터 분석기법을 적용할 수 있다.
[열린문제] 본인 전공에서 찾은 데이터행렬을 가지고, 위의 주성분분석(PCA)의 알고리즘을 그 행렬에 적용해보고 토론하시오,
*12.5 주성분 분석과 공분산 행렬
주성분 분석은 원 데이터의 분포를 최대한 보존하면서 고차원 공간의 데이터들을 저차원 공간으로 변환하는 기법이다. 그런데 원 데이터의 분포에 대한 정보는 공분산 행렬에 담겨 있다. 왜냐하면 공분산 행렬은 주대각선 상의 성분에 각 확률변수가 얼마나 퍼져 있는지는 나타내는 분산과 주대각선 이외의 성분에 확률변수 간의 상관관계를 나타내는 공분산으로 되어 있기 때문이다. 따라서 주성분 분석은 공분산 행렬과 관계가 있다.
데이터 행렬 가 센터링(mean-centered) 되어 있는 행렬이면,
공분산 행렬
는 다음과 같이 계산된다.
주성분 분석의 목표는 ‘공분산 행렬로 부터 얻은 정보’를 최대한 보존하는 ‘더 적은 개수()의 새로운 변수들’을 찾으려는 것이다.
의 특잇값 분해
로부터 다음 관계를 얻는다.
따라서 , 즉
(
)인 관계가 성립한다. 이때
를
의 고윳값(eigenvalue),
를 고유벡터(eigenvector)라고 한다.
는
번째 PC의 분산을 나타내며,
는
번째 축을 나타낸다. (고윳값, 고유벡터에 관한 자세한 사항은 대학수학에서 다룬다. http://matrix.skku.ac.kr/math4ai/part1/ )
[열린문제] 공분산 행렬에 대한 주성분분석(PCA)을 하여, 차원을 축소하는 과정에 대하여 이해한 바를 토론하시오.
*12.6 주성분 분석과 선형회귀
선형회귀에서는 각 데이터 와 일차함수
에 의하여 계산된 점
사이의 거리(즉
축 상에서의 거리)가 최소가 되도록
와
를 결정하였다(왼쪽 그림). 그러나 주성분 분석에서는 각 데이터
에서 일차함수
에 이르는 거리가 최소가 되도록
와
를 결정하였다(오른쪽 그림). 즉 주성분 분석을 사용하여 얻어진 직선이 데이터와 더 가까이 있다. 아래 그림은 선형회귀와 주성분 분석에 의하여 얻어진 직선을 함께 보여준다. (주성분 분석은 데이터의 scale에 민감하므로 센터링 및 정규화를 가정해야 한다. 자세한 사항은 관련 문헌을 참조하라.)
■
[열린문제] 최소제곱직선과 회귀분석에서 사용하는 선형회귀 사이의 같은 점과 다른 점에 대하여 이해한 바를 토론하시오.
13. 인공신경망 – 13주차 -
13.1 신경망
사람의 뇌에 있는 뉴런(신경세포, neuron)은 혈액 중의 아미노산으로부터 신경전달물질을 만든다. 신경의 자극은 한 방향으로 일어나며, 만들어진 신경전달물질을 이용하여 주위의 다른 신경세포들에 신호를 전달한다. 하나의 신경세포는 여러 개의 다른 신경세포들로부터 전달받은 신호(입력신호)에 반응하여 세포막이 역치(threshold value, 임계값) 전위에 도달하면 다음 신경세포에도 일정한 크기의 신호(출력신호)를 전달하게 된다. 인간의 뇌는 약 1000억 개의 뉴런을 가지고 있으며, 컴퓨터에게는 어려운 이미지 인식과 같은 업무를 잘 수행한다.
[그림 출처] http://scienceon.hani.co.kr/397536
신경망(neural network)은 신경계의 기본 단위인 뉴런을 모델화 한 것이다. 하나의 인공 뉴런(노드, node)에서는 다수의 입력 신호 를 받아서 하나의 신호를 출력한다. 이는 실제 뉴런에서 전기신호를 내보내 정보를 전달하는 것과 비슷하다. 이때 뉴런의 돌기가 신호를 전달하는 역할을 인공 뉴런에서는 가중치(weight)
가 그 역할을 한다. 각 입력신호에는 고유한 가중치가 부여되며 가중치가 클수록 해당 신호가 중요하다고 볼 수 있다.
13.2 신경망의 작동 원리
아래와 같이 하나의 노드는 입력 신호를 받아 결과를 전달해주는 하나의 함수로 볼 수 있다. 따라서 입력신호 를 받아
를 출력하는 경우
와 같이 나타낼 수 있다. 여기서
는 편향(bias)을 의미한다. 예를 들어, 입력신호
를 받으면, 미리 부여된 가중치
와 계산 후 그 결괏값이 임계값
를 넘으면 1을 출력, 즉
1을 출력
할 때 를 왼쪽으로 이항하면
를 얻는다.
같은 방법으로 입력신호가 두 개인 경우는 , 입력신호가 세 개인 경우는
와 같이 표현할 수 있다.
만일 출력이 두 개인 경우는 다음과 같이 행렬의 곱을 이용하여 나타낼 수 있다. 이때, 편의상 편향은 0이라고 하고, 는 입력층의
번째 노드에서 출력층의
번째 노드로 연결된 가중치를 의미한다.
또는
뉴런에서 임계값 이상의 자극이 주어져야 감각이 반응하는 것처럼, 인공 뉴런에서도 다수의 입력신호가 주어지면, 미리 부여된 가중치와 계산을 한 후 그 총합이 정해진 임계값을 넘으면, 1을 출력하고 넘지 못하면 0 (또는 -1)을 출력한다. 이때 출력을 결정하는 함수를 활성화 함수(activation function)라 한다. 활성화 함수의 대표적인 예로는 sigmoid 함수가 있다.
이는 임계값을 기준으로 활성화 되거나 혹은 비활성화 되는 계단함수(step function) 또는 Heaviside function을 근사화 한 것이다.
sigmoid 함수 에 대하여 다음이 성립한다.
⓵ 모든 에 대하여
이다.
⓶ 일 때
,
일 때
이다.
⓷ sigmoid 함수의 미분 공식은 다음과 같다. 즉 를 그대로 활용할 수 있다.
Sigmoid 함수는 계단함수와 비교할 때, 출력신호를 극단적인 값(0 또는 1)이 아니라 연속적인 0과 1사이의 값으로 정규화 하여 전달해준다. 또한 계단함수는 일 때 미분가능하지 않으나 Sigmoid 함수는 모든 실수
에서 미분이 가능하며, 계산도 어렵지 않다. 이외에도 활성화 함수로 ReLU 함수, 하이퍼볼릭 탄젠트(
) 등이 있다. [자세한 사항은 대학수학 http://matrix.skku.ac.kr/2020-Math4AI-PBL/ 에서 배운다.]
이제 이 과정을 정리해보자.
⓵ 인공 뉴런은 입력 데이터 ()를 다른 인공 뉴런으로부터 혹은 외부로부터 입력받는다.
⓶ 인공 뉴런은 입력받은 데이터와 가중치를 결합하여
으로 표현되는 하나의 값으로 만든다.
⓷ ⓶에서 구한 값을 활성화 함수
에 대입하여
을 출력값으로 내보낸다.
예를 들어, 3개의 입력데이터()와 가중치
가 주어진 인공신경세포를 도식화하면 그림과 같으며, 출력값
을 얻을 수 있다.
13.3 신경망의 학습
신경망은 순환하지 않는 그래프로 연결된 뉴런의 모음을 모델화 한 것으로 다음은 신경망을 그림으로 표현한 것이다. 왼쪽부터 입력층(Input layer), 은닉층(Hidden layer), 출력층(Output layer)으로 구성되어 있다. 입력층에서 신호를 받으면, 미리 부여된 가중치와 계산 후 주어진 활성화 함수를 거쳐 은닉층으로 전파되고, 같은 방식으로 그 다음 층으로 전해질 신호가 계산된다. 이런 식으로 전파되어 출력층에서 해당하는 결과를 내보낸다.
[그림 출처] https://blog.lgcns.com/1359
이제 입력값과 정답을 알고 있는 데이터가 있다고 하자. 우리의 목적은 주어진 데이터를 잘 판단하도록 신경망의 가중치를 찾는 것이다. 이때 어떤 공식에 의해서 가중치를 계산하는 것이 아니라, 초기에 임의로 가중치를 부여해놓고, 주어진 데이터로부터 신경망을 이용하여 얻은 예측값과 미리 알고 있는 정답간의 오차를 줄이는 방향으로 가중치를 점차 갱신해 나간다. 이때 계층 간의 각각의 연결이 오차에 영향을 주는 정도에 비례해서 오차를 전달해준다. 대표적인 방법으로 오차 역전파법(back propagation)이 있다.
13.4 오차 역전파법
오차 역전파법에 의해 각 계층에 전달된 오차를 바탕으로 가중치를 갱신하는 방법은 이미 학습한 경사하강법(gradient descent method)을 오차함수를 최소화하는 문제에 적용한 것과 같다. 예를 들어, 각 계층에서 입력신호 (
)를 받아 미리 부여된 가중치와 계산 후 주어진 활성화 함수로부터 출력된 값을
라 하고, 실제 정답은
라 하자. 그러면 제곱 오차(squared error)는 다음과 같이 주어진다.
그러면 각 가중치를 갱신하는 공식은 경사하강법으로부터 다음과 같이 주어진다.
.
여기서 는
를 변수
에 관하여 편미분한다는 뜻으로
를 제외한 다른 변수는 모두 상수로 취급하여 미분하는 것과 같다. (자세한 사항은 대학수학에서 배운다.)
이제 아래와 같이 간단한 신경망의 각 계층에 전달된 오차로부터 가중치를 갱신하는 방법에 관하여 살펴보자.
① 각 계층에 전달된 오차를 계산한다. 먼저 출력층에서의 오차를 계산하기 위하여, 은닉층에서 입력 신호 과
를 받아 가중치
,
,
,
와 계산한 후, sigmoid 함수
를 거쳐 출력
과
를 얻었다고 가정하자.
그러면 출력층에서의 제곱오차는 다음과 같다.
이제 은닉층에서의 오차를 계산해보자. 은닉층에는 출력층과 달리 목표하고자 하는 정답이 따로 없으므로 출력층에서의 오차 에 해당하는 것이 없다. 이때 앞서 언급한 오차 역전파법을 활용한다.
신경망에서 오차가 일어났다는 것은 결국, 입력신호가 입력층으로부터 은닉층을 거쳐 최종 출력층으로 전파될 때, 은닉층에서의 오차가 반영된 결과라고 볼 수 있으므로 계층 간의 각각의 연결이 오차에 영향을 주는 정도, 즉 가중치에 비례해서 오차를 역으로 전달해주면 된다.
출력층의 첫 번째 노드에서 오차 을 얻었다고 가정하자. 이 노드는 은닉층의 첫 번째 노드와 가중치
, 두 번째 노드와 가중치
으로 연결되어 있다. 가중치가 크면 오차에 미치는 영향도 클 것이므로, 가중치에 비례하여 오차를 은닉층에 전달해준다. 따라서 예를 들어,
를 은닉층의 첫 번째 노드에 전파된 오차라 하면 다음과 같이 계산할 수 있다.
마찬가지로 를 구할 수 있다.
위의 두 식에서 분모를 제외하면 다음과 같이 행렬을 이용하여 나타낼 수 있다.
이때, 분모를 없애게 되면 원 식과 비교했을 때, 일정 부분의 비율이 사라지게 되는데, 다음 웹사이트에 따르면, 분모가 있는 경우와 실제로는 거의 차이가 없이 잘 작동하는 것이 알려져 있다.
[참고]
http://makeyourownneuralnetwork.blogspot.com/2016/07/error-backpropagation-revisted.html
② 출력층에서 얻은 오차로부터 은닉층과 출력층 사이의 가중치를 갱신한다. sigmoid 함수의 성질과 연쇄법칙으로부터 을 구하면 다음과 같다.
(여기서는 에 관한 결과가 쉽게 계산된다는 것만 이해하면 된다.)
마찬가지 방법으로 다른 가중치에 대해서도 다음과 같이 계산한다.
즉, 가중치 는 은닉층의
번째 노드와 출력층의
번째 노드만 연결되어 있으므로,
를
에 대하여 편미분하면 다음과 같이 간단하게 표현됨을 알 수 있다.
여기서 는 은닉층의
번째 노드에서의 입력,
는 출력층의
번째 노드에서의 출력,
는 출력층의
번째 노드에서의 오차이다.
이제 경사하강법을 적용하여 다음과 같이 은닉층과 출력층 사이의 모든 가중치를 갱신한다.
③ 은닉층에 전달된 오차로부터 입력층과 은닉층 사이의 가중치를 갱신한다. 기본적으로는 은닉층과 출력층 사이의 가중치를 갱신하는 방식으로 계산하면 된다. 논의의 편의상 기호를 그대로 사용하였다.
여기서 는 입력층의
번째 노드에서의 입력,
는 은닉층의
번째 노드에서의 출력,
는 은닉층의
번째 노드에 전파된 오차이다. 따라서 다음을 얻을 수 있다.
이제 경사하강법을 적용하여 다음과 같이 입력층과 은닉층 사이의 모든 가중치를 갱신할 수 있다.
신경망은 제대로 예측할 때까지 많은 데이터를 필요로 하며, 또한 입력층과 출력층 사이에 많은 은닉층을 둘 수도 있다. 이와 같이 은닉층이 여러 개 있는 인공신경망을 심층신경망(deep neural network)이라고 부르며, 심층 신경망을 학습하기 위한 기계학습 기법을 딥러닝(deep learning)이라고 부른다. 은닉층이 여러 개 있는 경우에도 마찬가지로 오차 역전파법을 이용하여 그 이전 층에서 전파된 오차로부터 경사하강법을 적용하여 가중치를 갱신할 수 있다. 기타 자세한 사항은 신경망, 딥러닝과 관련된 도서를 참조하라.
[열린문제] 인공신경망과 오차 역전파법(back propagation)에 대하여 아는 대로 서술하시오.
14. MNIST (숫자인식) 실습실 – 14주차 -
14.1 인공신경망을 활용한 손 글씨 숫자 인식 사례
과거 우체국에서는 사람들이 손으로 적은 우편번호를 인식하고 분류하여 배달하는 것에 많은 인력을 투입했었다. 이 절에서는 지난 시간에 학습한 인공신경망을 활용하여 컴퓨터가 손으로 적은 숫자 이미지를 인식하는 원리에 대하여 학습한다.
먼저 위의 그림과 같이 손으로 적은 숫자 이미지가 필요하다. MNIST (Modified National Institute of Standards and Technology) 데이터베이스에는 가로, 세로가 각각 28 픽셀(pixel)인 흑백의 숫자 이미지 70,000개가 들어있다. 그 중 60,000개는 학습용 데이터이고, 10,000개는 테스트용 데이터이다. 각 데이터에는 손으로 쓴 0부터 9까지의 숫자의 이미지와 그 레이블(label, 실제 숫자)이 담겨 있다. 기계 학습의 성과를 벤치마크 하는데 가장 널리 사용되는 MNIST 데이터베이스는 아래 웹사이트에서 확인할 수 있다.
[출처] THE MNIST DATABASE of handwritten digits
http://yann.lecun.com/exdb/mnist/
예를 들어, MNIST 데이터의 숫자 이미지를 실제로 확인해보자. 아래는 https://github.com/freebz/Make-Your-Own-Neural-Network 에 공개된 Python 코드를 일부 수정하여 Sage에서 구현한 것이다.
---------- http://matrix.skku.ac.kr/KOFAC/ --------------------------
# 필요한 라이브러리 불러오기
import numpy
import matplotlib.pyplot
import csv
import urllib.request
import codecs
# mnist 학습 데이터인 웹에 있는 csv 파일을 리스트로 불러오기
url = 'https://media.githubusercontent.com/media/freebz/Make-Your-Own-Neural-Network/master/mnist_dataset/mnist_test_10.csv'
# 웹 데이터 열기
response = urllib.request.urlopen(url)
# csv 파일 읽기
training_data_file = csv.reader(codecs.iterdecode(response, 'utf-8'))
training_data_list = list(training_data_file) # 리스트로 만들기
all_values = training_data_list[0] # 데이터 한 개
# 저장된 숫자가 무엇인지 파악하기
print(all_values[0])
# 28 x 28 행렬로 바꾸기
image_array = numpy.asfarray(all_values[1:]).reshape((28,28))
# 행렬을 이미지로 시각화하기
matplotlib.pyplot.imshow(image_array, cmap = 'Greys', interpolation = 'None')
# 이미지를 foo.png로 저장
matplotlib.pyplot.savefig('foo.png')
# 웹 데이터 닫기
response.close()
---------------------------------------------------------------------
7
foo.png ■
이때 training_data_list[0]에 저장된 숫자가 7이므로, 위의 foo.png를 클릭하면 다음과 같이 숫자 7을 이미지로 보여준다.