2. 예고
프로그래밍을 위한 별도의 수학을 다루기 전에, 이미 배웠던(물론
안배웠거나 오래됐을 수도 있습니다) 수학인 집합, 명제, 함수 등이
프로그래밍에 어떻게 쓰이는지 살펴봅니다. 머신러닝/딥러닝
학습에 나오는 행렬, 미적분과 확률 통계 등은 배운 것과 배울 것이
섞여 있을 수도 있습니다. 앞으로 어떤 수학 공부를 하면 좋을지도
말씀드리고 싶고요. 더불어, 최근 번역 작업과 미국 생활에 대한
얘기도 하려 합니다.
4. 집합의 표현
원소 나열법(extentional definition)
A = {1, 2, 3} (1)
int [ ] a = {1 , 2 , 3}
조건 제시법(intentional definition)
A = {x|1 ≤ x ≤ 3} (2)
?
5. 집합의 관계
원소가 집합에 속한다
1 ∈ A (3)
Set<Integer > a = Set . of (1 , 2 , 3)
a . c o n t ai n s (1)
부분 집합
B ⊂ A where B = {1, 2} (4)
Set<Integer > b = Set . of (1 , 2)
a . c o n t a i n s A l l (b)
6. 논리 연산(부울 대수)
∼ (p ∨ q) =∼ p∧ ∼ q (5)
int a = 4
int b = 3
! ( a != 3 && b != 4)
a == 3 | | b == 4
7. 함수의 정의
정의역(domain), 공역(codomain), 치역(range)
f : X → Y (6)
int f u n c t i o n ( S t r i n g x ) { return x . length ( ) ; }
f u n c t i o n ( ” t e s t ” )
8. 함수의 유형
단사(injective)
x1 = x2 => f (x1) = f (x2) where ∀x1, x2 ∈ X (7)
전사(surjective)
f (X) = Y (8)
전단사(bijective)와 역함수(inverse)
y = f (x) ⇐⇒ f −1
(y) = x (9)
예)
y = f (x) = ax + b
⇒ y − b = ax
⇒
y
a
−
b
a
= x
⇒ f −1
(x) =
x
a
−
b
a
(10)
9. 역함수 구현
코드 수준에서
double f u n c t i o n ( double x ){ return 2.0 ∗ x + 3 . 0 ; }
double i n v e r s e ( double x ){ return x /2.0 − 3 . 0 / 2 . 0 ; }
저장된 값을 바탕으로
Map<Integer , Double> f = Map. of (1 , 2.0 , 2 , 4.0)
// . . .
Map<Double , Integer > i = Map. of ( 2 .0 , 1 , 4.0 , 2)
11. 연쇄 미분(합성 함수 미분)
https://docs.google.com/presentation/d/
1CF-vEPzMSkVKnePO__AewGfzmui2aGMr8HhI9diD2t8/edit#
slide=id.g27be483e1c_0_42 (10쪽)
h = g · f ⇒
h(x) = (g · f )(x) = g(f (x))
⇒
∂h
∂x
=
∂g
∂f
∂f
∂x
(12)
예) f (x, y, w) = (xw − y)2 일 때 xw − y = t 라 하면 f (t) = t2
∂f
∂w
=
∂f
∂t
∂t
∂w
=
∂t2
∂t
∂(xw − y)
∂w
= 2tx = 2(xw − y)x (13)
12. 벡터
벡터: 수를 1차원(직선)으로 나열한 것
v = (1, 2) (14)
벡터 공간: 벡터의 기본 연산(합과 정수배)이 정의된 공간, 선형
공간
x + y = (x1, x2) + (y1, y2) = (x1 + x2, y1 + y2) (15)
cx = c(x1, x2) = (cx1, cx2) (16)
벡터 공간의 차원: 기저 벡터의 개수(좌표 성분의 개수)