집합, 함수, 관계: 수학의 기본 문법

집합과 집합 연산, 함수의 정의역과 공역, 합성 함수와 역함수, 그리고 관계와 동치 관계까지 수학의 기본 문법을 익히고, 이것이 데이터베이스, 프로그래밍, AI 모델과 어떻게 이어지는지 살펴봐요.

초급강의 2 / 6약 7분

수학 책을 펼치면 {x∣x>0}\{x \mid x > 0\}, f:A→Bf: A \to B 같은 기호가 쏟아져요. 처음엔 외계어 같지만, 사실 몇 가지 문법만 알면 대부분 읽을 수 있어요. 이번 강의에서 배우는 집합, 함수, 관계가 그 문법이에요. 그리고 이 세 개념은 데이터베이스, 프로그래밍, AI의 뼈대이기도 해요.

집합: 무엇을 모은 것

집합은 분명하게 구별되는 대상들의 모임이에요. 모임에 속한 하나하나를 원소라고 해요.

A={1,2,3},2∈A,5∉AA = \{1, 2, 3\}, \qquad 2 \in A, \qquad 5 \notin A

∈\in은 "속한다", ∉\notin은 "속하지 않는다"예요. 집합에는 두 가지 성질이 있어요.

  • 순서가 없어요. {1,2,3}\{1, 2, 3\}과 {3,1,2}\{3, 1, 2\}는 같은 집합이에요.
  • 중복이 없어요. {1,1,2}\{1, 1, 2\}는 그냥 {1,2}\{1, 2\}예요.

프로그래밍 기초에서 배운 파이썬의 set이 정확히 이 성질을 가져요.

집합을 쓰는 두 방법

  • 원소 나열법: {2,4,6,8}\{2, 4, 6, 8\}
  • 조건 제시법: {x∣x는 10 이하의 양의 짝수}\{x \mid x \text{는 10 이하의 양의 짝수}\}

세로 막대(또는 콜론)는 "~인 것들"로 읽어요. 조건 제시법은 원소가 무한히 많을 때 특히 유용해요.

E={x∈Z∣x mod 2=0}(모든 짝수)E = \{x \in \mathbb{Z} \mid x \bmod 2 = 0\} \quad \text{(모든 짝수)}

이 표기는 파이썬의 컴프리헨션과 모양이 거의 같아요.

E = {x for x in range(-10, 11) if x % 2 == 0}

특별한 집합

  • 공집합 ∅\varnothing: 원소가 하나도 없는 집합.
  • 전체집합 UU: 지금 이야기하는 모든 대상의 집합.
  • 부분집합 A⊆BA \subseteq B: A의 모든 원소가 B에 속할 때.

원소가 nn개인 집합의 부분집합은 몇 개일까요? 원소마다 "넣는다, 안 넣는다" 두 가지 선택이 있으니 2n2^n개예요. 지난 강의의 "비트 nn자리로 표현할 수 있는 경우의 수"와 같은 계산이에요. 실제로 부분집합 하나를 비트 하나하나가 "이 원소를 넣었나"를 뜻하는 2진수로 나타낼 수 있어요.

집합 연산

연산기호뜻파이썬
합집합A∪BA \cup BA 또는 B에 속하는 것A | B
교집합A∩BA \cap BA와 B 모두에 속하는 것A & B
차집합A−BA - BA에는 있고 B에는 없는 것A - B
여집합AcA^c전체에서 A가 아닌 것U - A
대칭차A△BA \triangle B둘 중 한쪽에만 있는 것A ^ B

지난 강의의 논리 연산과 짝이 맞는다는 걸 눈치챘나요? 합집합은 or, 교집합은 and, 여집합은 not이에요. 그래서 드모르간 법칙도 그대로 성립해요.

(A∪B)c=Ac∩Bc,(A∩B)c=Ac∪Bc(A \cup B)^c = A^c \cap B^c, \qquad (A \cap B)^c = A^c \cup B^c

포함과 배제의 원리

두 집합의 합집합 크기를 셀 때, 그냥 더하면 겹치는 부분을 두 번 세요. 그래서 한 번 빼요.

∣A∪B∣=∣A∣+∣B∣−∣A∩B∣|A \cup B| = |A| + |B| - |A \cap B|

∣A∣|A|는 A의 원소 개수예요. 예를 들어 회원 100명 중 앱 사용자가 60명, 웹 사용자가 55명, 둘 다 쓰는 사람이 30명이면, 하나라도 쓰는 사람은 60+55−30=8560 + 55 - 30 = 85명이에요.

데이터베이스와 집합

SQL의 검색은 거의 다 집합 연산이에요.

SQL집합 연산
WHERE a AND b교집합
WHERE a OR b합집합
UNION합집합 (중복 제거)
INTERSECT교집합
EXCEPT차집합

데이터베이스 트랙에서 SQL을 배울 때 이 표를 떠올리면 훨씬 쉽게 읽혀요.

곱집합: 짝을 짓는 집합

두 집합에서 하나씩 뽑아 순서쌍을 만든 모든 경우를 곱집합(데카르트 곱)이라고 해요.

A×B={(a,b)∣a∈A, b∈B}A \times B = \{(a, b) \mid a \in A,\ b \in B\}

A={빨강,파랑}A = \{\text{빨강}, \text{파랑}\}, B={S,M,L}B = \{S, M, L\}이면 A×BA \times B는 색과 사이즈의 모든 조합 6가지예요. 일반적으로 ∣A×B∣=∣A∣×∣B∣|A \times B| = |A| \times |B|예요.

좌표평면도 곱집합이에요. 실수 두 개의 순서쌍을 모은 R×R=R2\mathbb{R} \times \mathbb{R} = \mathbb{R}^2이 평면이고, 이것이 선형대수에서 다룰 벡터 공간으로 이어져요.

함수: 입력마다 출력이 딱 하나

함수는 집합 A의 각 원소에 집합 B의 원소를 정확히 하나씩 짝지어 주는 규칙이에요.

f:A→B,x↦f(x)f: A \to B, \qquad x \mapsto f(x)
  • A를 정의역(넣을 수 있는 입력의 집합)
  • B를 공역(출력이 속할 수 있는 집합)
  • 실제로 나오는 출력들의 집합을 치역이라고 해요. 치역은 공역의 부분집합이에요.

함수인 것과 아닌 것

핵심 조건은 "입력 하나에 출력은 딱 하나"예요.

  • 사람 → 생년월일: 함수예요. 사람마다 생일은 하나예요.
  • 생년월일 → 사람: 함수가 아니에요. 같은 날 태어난 사람이 여럿이니까요.
  • 학번 → 학생: 함수예요. 학번이 학생을 하나로 정해요(그래서 학번이 키가 돼요).

입력이 같으면 출력도 반드시 같아야 한다는 이 조건은, 프로그래밍의 순수 함수와 정확히 같은 개념이에요. 같은 인자를 넣었는데 호출할 때마다 결과가 다르다면 그건 수학적 의미의 함수가 아니에요.

함수의 세 가지 성질

성질뜻예
단사(일대일)다른 입력은 다른 출력으로주민등록번호 → 사람
전사(위로의)공역의 모든 원소가 출력으로 쓰임시험 점수 → 등급(모든 등급이 나온다면)
전단사단사이면서 전사좌석 배정이 꼭 맞을 때

전단사 함수만 역함수를 가져요. 출력에서 입력을 거꾸로 하나로 찾아갈 수 있어야 하니까요.

f(x)=2x+3⟹f−1(y)=y−32f(x) = 2x + 3 \quad \Longrightarrow \quad f^{-1}(y) = \frac{y - 3}{2}

합성 함수

함수의 출력을 다른 함수의 입력으로 넣는 것을 합성이라고 해요.

(g∘f)(x)=g(f(x))(g \circ f)(x) = g(f(x))

읽는 순서에 주의하세요. g∘fg \circ f는 f를 먼저 적용하고 그다음 g를 적용해요.

def f(x):
    return 2 * x + 3

def g(x):
    return x ** 2

print(g(f(1)))   # f(1) = 5, g(5) = 25
print(f(g(1)))   # g(1) = 1, f(1) = 5  (순서가 바뀌면 결과도 달라요)

합성은 순서를 바꾸면 보통 결과가 달라요. 이 사실은 선형대수에서 "행렬 곱은 순서를 바꿀 수 없다"로 다시 나와요.

AI 모델도 거대한 함수다

이 강의에서 가장 중요한 이야기예요. 머신러닝 모델은 결국 이런 함수예요.

fθ:입력→출력f_\theta : \text{입력} \to \text{출력}
  • 스팸 필터: 이메일 → {스팸,정상}\{\text{스팸}, \text{정상}\}
  • 집값 예측: (면적, 층, 위치, ...) → 가격
  • 언어 모델: 지금까지의 글 → 다음에 올 단어의 확률

θ\theta(세타)는 함수의 모양을 정하는 수많은 숫자, 즉 파라미터예요. 학습이란 데이터를 보며 θ\theta를 조금씩 고쳐서, 함수가 원하는 출력을 내도록 만드는 과정이에요. 그리고 딥러닝은 작은 함수 수백 개를 합성해서 만든 거대한 함수예요.

f(x)=fL(fL−1(⋯f2(f1(x))))f(x) = f_L(f_{L-1}(\cdots f_2(f_1(x))))

미적분 트랙에서 이 합성 함수를 미분하는 연쇄 법칙을 배우는데, 그게 바로 딥러닝 학습의 핵심인 역전파예요. 지금 배우는 "함수"와 "합성"이 AI의 맨 밑바닥에 있다는 걸 기억해 두세요.

관계: 짝들의 모임

함수보다 넓은 개념이 관계예요. 집합 A에서 B로의 관계는 곱집합 A×BA \times B의 아무 부분집합이에요. "입력 하나에 출력 하나"라는 제약이 없어요.

  • 사람과 사람 사이의 "친구다": 한 사람이 친구 여럿을 가질 수 있어요.
  • 학생과 과목 사이의 "수강한다": 학생이 여러 과목을, 과목이 여러 학생을 가져요.

데이터베이스의 관계형 데이터베이스라는 이름이 바로 여기서 왔어요. 테이블 하나가 하나의 관계(순서쌍들의 집합)예요.

동치 관계

어떤 관계가 다음 세 성질을 모두 만족하면 동치 관계라고 해요.

  1. 반사: 모든 aa에 대해 a∼aa \sim a
  2. 대칭: a∼ba \sim b이면 b∼ab \sim a
  3. 추이: a∼ba \sim b이고 b∼cb \sim c이면 a∼ca \sim c

"나머지가 같다"가 대표적이에요. 7로 나눈 나머지가 같은 날짜끼리 묶으면 요일이 같은 날짜들의 묶음이 생기죠. 동치 관계는 집합을 겹치지 않는 묶음(동치류)으로 깔끔하게 나눠요. 그룹 짓기, 중복 판별, 클러스터링의 수학적 바탕이에요.

연습 문제

  1. A={1,2,3,4}A = \{1, 2, 3, 4\}, B={3,4,5}B = \{3, 4, 5\}일 때 A∪BA \cup B, A∩BA \cap B, A−BA - B를 구하세요.
  2. 원소가 5개인 집합의 부분집합은 몇 개인가요?
  3. 120명 중 파이썬을 아는 사람 70명, SQL을 아는 사람 50명, 둘 다 아는 사람 30명이에요. 둘 다 모르는 사람은?
  4. "이메일 주소 → 회원"이 함수가 되려면 어떤 조건이 필요할까요?
  5. f(x)=x+1f(x) = x + 1, g(x)=3xg(x) = 3x일 때 (g∘f)(2)(g \circ f)(2)와 (f∘g)(2)(f \circ g)(2)를 구하세요.

정답

  1. A∪B={1,2,3,4,5}A \cup B = \{1, 2, 3, 4, 5\}, A∩B={3,4}A \cap B = \{3, 4\}, A−B={1,2}A - B = \{1, 2\}
  2. 25=322^5 = 32개 (공집합과 자기 자신 포함)
  3. 하나라도 아는 사람은 70+50−30=9070 + 50 - 30 = 90명이니, 둘 다 모르는 사람은 120−90=30120 - 90 = 30명이에요.
  4. 같은 이메일로 가입한 회원이 두 명 이상 없어야 해요. 그래서 가입할 때 이메일 중복을 막는 거예요.
  5. (g∘f)(2)=g(3)=9(g \circ f)(2) = g(3) = 9, (f∘g)(2)=f(6)=7(f \circ g)(2) = f(6) = 7

다음 강의

다음 강의에서는 지수와 로그를 배워요. 복리, 바이러스 확산, 알고리즘의 속도, 정보의 양, 그리고 AI의 손실 함수까지 "규모"를 다루는 거의 모든 곳에 로그가 나와요.